BUG#: 4730
authorkarl <karl>
Tue, 31 Jan 2006 22:52:47 +0000 (22:52 +0000)
committerkarl <karl>
Tue, 31 Jan 2006 22:52:47 +0000 (22:52 +0000)
TITLE: remove slp_client from pegasus CVS module

DESCRIPTION: Remove the files

66 files changed:
src/Unsupported/slp_client/INSTALL [deleted file]
src/Unsupported/slp_client/LICENSE [deleted file]
src/Unsupported/slp_client/Makefile [deleted file]
src/Unsupported/slp_client/Makefile.in [deleted file]
src/Unsupported/slp_client/Makefile.nt [deleted file]
src/Unsupported/slp_client/README [deleted file]
src/Unsupported/slp_client/README.AUTOCONF [deleted file]
src/Unsupported/slp_client/conf/slp.conf [deleted file]
src/Unsupported/slp_client/config.h [deleted file]
src/Unsupported/slp_client/config.h.in [deleted file]
src/Unsupported/slp_client/configure [deleted file]
src/Unsupported/slp_client/configure.ac [deleted file]
src/Unsupported/slp_client/doc/draft-day-srvloc-exclusion-01.txt [deleted file]
src/Unsupported/slp_client/doc/draft-day-srvloc-exclusion-02.nr.txt [deleted file]
src/Unsupported/slp_client/doc/draft-day-srvloc-exclusion-02.txt [deleted file]
src/Unsupported/slp_client/doc/draft-day-svrloc-exclusion-03.nr.txt [deleted file]
src/Unsupported/slp_client/doc/draft-day-svrloc-exclusion-03.txt [deleted file]
src/Unsupported/slp_client/doc/draft-day-svrloc-signature-00-nr.txt [deleted file]
src/Unsupported/slp_client/doc/draft-day-svrloc-signature-00.txt [deleted file]
src/Unsupported/slp_client/doc/draft-day-svrloc-signature-01.nr.txt [deleted file]
src/Unsupported/slp_client/doc/draft-guttman-svrloc-rfc2608bis-03.txt [deleted file]
src/Unsupported/slp_client/scripts/sa_sample [deleted file]
src/Unsupported/slp_client/scripts/test_query [deleted file]
src/Unsupported/slp_client/scripts/test_reg [deleted file]
src/Unsupported/slp_client/src/Makefile [deleted file]
src/Unsupported/slp_client/src/Makefile.nt [deleted file]
src/Unsupported/slp_client/src/cmd-utils/Makefile [deleted file]
src/Unsupported/slp_client/src/cmd-utils/Makefile.nt [deleted file]
src/Unsupported/slp_client/src/cmd-utils/endian.h [deleted file]
src/Unsupported/slp_client/src/cmd-utils/lslp-common-defs.h [deleted file]
src/Unsupported/slp_client/src/cmd-utils/lslp-linux.c [deleted file]
src/Unsupported/slp_client/src/cmd-utils/lslp-linux.h [deleted file]
src/Unsupported/slp_client/src/cmd-utils/lslp-nucleus.c [deleted file]
src/Unsupported/slp_client/src/cmd-utils/lslp-nucleus.h [deleted file]
src/Unsupported/slp_client/src/cmd-utils/lslp-windows.c [deleted file]
src/Unsupported/slp_client/src/cmd-utils/lslp-windows.h [deleted file]
src/Unsupported/slp_client/src/cmd-utils/lslp.h [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/-v.h [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/Makefile [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/Makefile.nt [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/attr.l [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/attr.tab.c [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/attr.tab.h [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/attr.y [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/bison.simple [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/filter.l [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/filter.y [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/libslp_client.la [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/slp_client.c [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/slp_client.h [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/url.l [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/url.y [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/y_attr.h [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/y_attr.output [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/y_filter.h [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/y_filter.output [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/y_url.h [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_client/y_url.output [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_query/.libs/slp_query [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_query/Makefile [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_query/Makefile.nt [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_query/slp_query.c [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_srvreg/.libs/slp_srvreg [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_srvreg/Makefile [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_srvreg/Makefile.nt [deleted file]
src/Unsupported/slp_client/src/cmd-utils/slp_srvreg/slp_srvreg.c [deleted file]

diff --git a/src/Unsupported/slp_client/INSTALL b/src/Unsupported/slp_client/INSTALL
deleted file mode 100644 (file)
index 8bacf90..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-Copyright 1999 - 2003 Michael Day
-
-
-SOURCE CODE ORGANIZATION
-==========================
-
-The source code is organized as follows:
-
-Initial directory = ldap_slp
-+---conf                     <-- contains the DA configuration file 
-+---doc                      <-- contains some internet-drafts
-+---scripts                 <-- shell scripts that demonstrate functions
-+---src                      <-- source code
-|   +---cmd-utils            <-- command-line utilities
-|   |   +---slp_client       <-- slp client library
-|   |   +---slp_query        <-- command-line slp user agent 
-|   |   +---slp_srvreg       <-- command-line and daemon slp service agent
-
-
-BUILD REQUIREMENTS
-===========================
-
-To build the source tree, you must have Bash, Gnu Make, Gnu Autoconf,
-and Gnu Libtool, and a C compiler and linker. 
-
-Information on downloading, installing, and using Autoconf and Libtool
-is in the file README.AUTOCONF. 
-
-
-COPYING GNU SHELL SCRIPTS TO BULD DIRECTORY
-============================================
-
-There are four shell scripts that you may need to copy to the build
-directory in order for the build to be successful. These scripts are
-generated and installed as part of the Autoconf and Libtool
-installation procedures (see README.AUTOCONF). 
-
-
-1) config.guess
-
-This shell script determines the build platform. It will be
-located in one of the libtool directories, but will probably be
-located in multiple directores on your system if you have done a lot
-of building products from source (as opposed to RPM packages). Here is
-how I copied it on my RedHat 7.3 system: 
-
-cp /usr/share/libtool/config.guess $PEGASUS_ROOT/src/Unsupported/slp_client/
-
-2) config.sub
-
-This shell script contains subroutines used by Autoconf. Here is now I
-copied it on my RedHat 7.3 system:
-
-cp /usr/share/automake-1.5/config.sub $PEGASUS_ROOT/src/Unsupported/slp_client/
-
-3) install-sh
-
-This shell script performs library installation for Libtool. Here is
-how I copied it on my RedHat 7.3 system:
-
-cp /usr/share/automake-1.5/install-sh $PEGASUS_ROOT/src/Unsupported/slp_client/
-
-
-4) ltmain.sh
-
-This is a template for generating the libtool script for your specific
-platform. Here is how I copied it on my RedHat 7.3 system:
-
-
-cp /usr/share/libtool/ltmain.sh $PEGASUS_ROOT/src/Unsupported/slp_client/
-
-
-BUILD COMMANDS
-===========================
-
-1) Untar distribution tarball and cd into the slp_client directory. 
-2) type ./configure <Enter>
-3) type make <Enter>
-
-Binaries will be located in the same directories as thier source. The
-mysterious machinations of libtool allow you to link and run binaries
-against the libslp_client.so shared library without actually
-installing anything. 
-
-To clean all the binaries, type make clean <Enter>
-
-
-INSTALLATION
-===========================
-
-To install, su to root and type make install <Enter>
-
-
-
diff --git a/src/Unsupported/slp_client/LICENSE b/src/Unsupported/slp_client/LICENSE
deleted file mode 100644 (file)
index 68e5696..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-   Copyright (c) 2000 - 2003 Michael Day                                    
-                                                                            
-   Permission is hereby granted, free of charge, to any person obtaining a  
-   copy of this software and associated documentation files (the "Software"),
-   to deal in the Software without restriction, including without limitation 
-   the rights to use, copy, modify, merge, publish, distribute, sublicense, 
-   and/or sell copies of the Software, and to permit persons to whom the     
-   Software is furnished to do so, subject to the following conditions:       
-  
-   The above copyright notice and this permission notice shall be included in 
-   all copies or substantial portions of the Software.
-  
-  
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-   DEALINGS IN THE SOFTWARE.
diff --git a/src/Unsupported/slp_client/Makefile b/src/Unsupported/slp_client/Makefile
deleted file mode 100644 (file)
index 8a67c78..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-#//%2005////////////////////////////////////////////////////////////////////////
-#//
-#// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-#// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-#// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation, The Open Group.
-#// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; VERITAS Software Corporation; The Open Group.
-#//
-#// Permission is hereby granted, free of charge, to any person obtaining a copy
-#// of this software and associated documentation files (the "Software"), to
-#// deal in the Software without restriction, including without limitation the
-#// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-#// sell copies of the Software, and to permit persons to whom the Software is
-#// furnished to do so, subject to the following conditions:
-#// 
-#// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-#// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-#// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-#// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-#// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-#// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-#// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#//
-#//==============================================================================
-VPATH = .
-
-COMPONENTS = all
-CLEAN = clean
-INSTALL = install
-
-
-## capture the appropriate environment variables to 
-## control the build process
-##
-export BUILD_ROOT := /home/mdday/my-programs/pegasus/src/Unsupported/slp_client
-export SRC_DIR := $(BUILD_ROOT)/src
-export BUILD_DIR := $(shell pwd)
-export WORDS_BIG_ENDIAN := @WORDS_BIG_ENDIAN@
-export PACKAGE := slp
-export PACKAGE_VERSION := 0.8 
-export DEBUG := true
-export LIBTOOL := /home/mdday/my-programs/pegasus/src/Unsupported/slp_client/libtool
-export OBJ := .lo
-export IGNORE := -
-export LIB_PATH := -rpath
-export LEX := flex
-export YACC := bison
-export STATIC_LINK_CMD := -static
-export DLL_LINK_CMD := -module
-export MV := mv
-export MV_FLAGS := -fv
-export RM := rm
-export RM_FLAGS := -fv
-export CP := cp
-export CP_FLAGS := -fv
-export MAKE := make
-export OS_PORT_INC := lslp-linux.h
-export OS_PORT_SRC := lslp-linux.c
-export OS_PORT_OBJ := lslp-linux.lo
-export HOST_OS := linux
-export LINKER := gcc
-export EXE := 
-export LIBS := 
-export THREAD_LIBS := -lpthread
-export REENTRANT_FLAG := -D_REENTRANT
-export NO_LINK_FLAG := -c
-export LIB_SUFFIX := .o
-export DLL_SUFFIX := @DLL_SUFFIX@
-export EXE_OUT := -o
-export OBJ_OUT := -o
-export LIB_INCLUDE_FLAG := -l
-export CFLAGS := -g -Wall -Dlinux -DDEBUG_ALLOC
-export LDFLAGS := -g
-export DLL_LIB_FLAG := 
-export LFLAGS := -p -v -d 
-export YFLAGS := -v -d
-export bindir := /bin
-export sbindir := /sbin
-export libexecdir := /lib
-export sysconfdir := /etc
-export libdir := /usr/lib
-export PLATFORM := x86
-export CC := gcc
-
-export BINDIR := /bin
-export SBINDIR := /sbin
-export LIBEXECDIR := /lib
-export SYSCONFIGDIR := /etc
-export LIBDIR := /usr/lib
-
-all: $(COMPONENTS)
-.PHONY: all
-
-clean: $(CLEAN)
-.PHONY: clean
-
-install: $(INSTALL)
-.PHONY: install
-
-test: $(TEST)
-.PHONY: test
-
-
-SRC_DIRS := $(SRC_DIR) 
-
-$(INSTALL) :
-       $(foreach dir, $(SRC_DIRS), cd $(dir) && $(MAKE) all;)
-       $(foreach dir, $(SRC_DIRS), cd $(dir) && $(MAKE) $(INSTALL);)
-$(COMPONENTS) $(CLEAN) :
-       $(foreach dir, $(SRC_DIRS),cd $(dir) && $(MAKE) $@;)
-
-
diff --git a/src/Unsupported/slp_client/Makefile.in b/src/Unsupported/slp_client/Makefile.in
deleted file mode 100644 (file)
index b08cc41..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-#//%2005////////////////////////////////////////////////////////////////////////
-#//
-#// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-#// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-#// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation, The Open Group.
-#// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; VERITAS Software Corporation; The Open Group.
-#//
-#// Permission is hereby granted, free of charge, to any person obtaining a copy
-#// of this software and associated documentation files (the "Software"), to
-#// deal in the Software without restriction, including without limitation the
-#// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-#// sell copies of the Software, and to permit persons to whom the Software is
-#// furnished to do so, subject to the following conditions:
-#// 
-#// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-#// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-#// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-#// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-#// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-#// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-#// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#//
-#//==============================================================================
-VPATH = .
-
-COMPONENTS = all
-CLEAN = clean
-INSTALL = install
-
-
-## capture the appropriate environment variables to 
-## control the build process
-##
-export BUILD_ROOT := @abs_builddir@
-export SRC_DIR := $(BUILD_ROOT)/src
-export BUILD_DIR := $(shell pwd)
-export WORDS_BIG_ENDIAN := @WORDS_BIG_ENDIAN@
-export PACKAGE := @PACKAGE_NAME@
-export PACKAGE_VERSION := @PACKAGE_VERSION@
-export DEBUG := @DEBUG@
-export LIBTOOL := @abs_builddir@/@LIBTOOL@
-export OBJ := @OBJ@
-export IGNORE := @IGNORE@
-export LIB_PATH := @LIB_PATH@
-export LEX := @LEX@
-export YACC := @YACC@
-export STATIC_LINK_CMD := @STATIC_LINK_CMD@
-export DLL_LINK_CMD := @DLL_LINK_CMD@
-export MV := @MV@
-export MV_FLAGS := @MV_FLAGS@
-export RM := @RM@
-export RM_FLAGS := @RM_FLAGS@
-export CP := @CP@
-export CP_FLAGS := @CP_FLAGS@
-export MAKE := @MAKE@
-export OS_PORT_INC := @OS_PORT_INC@
-export OS_PORT_SRC := @OS_PORT_SRC@
-export OS_PORT_OBJ := @OS_PORT_OBJ@
-export HOST_OS := @HOST_OS@
-export LINKER := @LINKER@
-export EXE := @EXE@
-export LIBS := @LIBS@
-export THREAD_LIBS := @THREAD_LIBS@
-export REENTRANT_FLAG := @REENTRANT_FLAG@
-export NO_LINK_FLAG := @NO_LINK_FLAG@
-export LIB_SUFFIX := @LIB_SUFFIX@
-export DLL_SUFFIX := @DLL_SUFFIX@
-export EXE_OUT := @EXE_OUT@
-export OBJ_OUT := @OBJ_OUT@
-export LIB_INCLUDE_FLAG := @LIB_INCLUDE_FLAG@
-export CFLAGS := @CFLAGS@
-export LDFLAGS := @LDFLAGS@
-export DLL_LIB_FLAG := @DLL_LIB_FLAG@
-export LFLAGS := @LFLAGS@
-export YFLAGS := @YFLAGS@
-export bindir := @bindir@
-export sbindir := @sbindir@
-export libexecdir := @libexecdir@
-export sysconfdir := @sysconfdir@
-export libdir := @libdir@
-export PLATFORM := @PLATFORM@
-export CC := @CC@
-
-export BINDIR := @bindir@
-export SBINDIR := @sbindir@
-export LIBEXECDIR := @libexecdir@
-export SYSCONFIGDIR := @sysconfdir@
-export LIBDIR := @libdir@
-
-all: $(COMPONENTS)
-.PHONY: all
-
-clean: $(CLEAN)
-.PHONY: clean
-
-install: $(INSTALL)
-.PHONY: install
-
-test: $(TEST)
-.PHONY: test
-
-
-SRC_DIRS := $(SRC_DIR) 
-
-$(INSTALL) :
-       $(foreach dir, $(SRC_DIRS), cd $(dir) && $(MAKE) all;)
-       $(foreach dir, $(SRC_DIRS), cd $(dir) && $(MAKE) $(INSTALL);)
-$(COMPONENTS) $(CLEAN) :
-       $(foreach dir, $(SRC_DIRS),cd $(dir) && $(MAKE) $@;)
-
-
diff --git a/src/Unsupported/slp_client/Makefile.nt b/src/Unsupported/slp_client/Makefile.nt
deleted file mode 100644 (file)
index 322a0ed..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-#//%2005////////////////////////////////////////////////////////////////////////
-#//
-#// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-#// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-#// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation, The Open Group.
-#// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; VERITAS Software Corporation; The Open Group.
-#//
-#// Permission is hereby granted, free of charge, to any person obtaining a copy
-#// of this software and associated documentation files (the "Software"), to
-#// deal in the Software without restriction, including without limitation the
-#// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-#// sell copies of the Software, and to permit persons to whom the Software is
-#// furnished to do so, subject to the following conditions:
-#// 
-#// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-#// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-#// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-#// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-#// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-#// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-#// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#//
-#//==============================================================================
-
-SRC_DIRS := src 
-
-all clean:
-       $(foreach dir, $(SRC_DIRS),cd $(dir) && $(MAKE) -f Makefile.nt $@;)
-
-
diff --git a/src/Unsupported/slp_client/README b/src/Unsupported/slp_client/README
deleted file mode 100644 (file)
index 5ceb5a7..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-Copyright 1999 - 2003 Michael Day
-
-mdday@us.ibm.com
-md@soft-hackle.net
-
-CMD-UTILS
-===========
-The cmd-utils directory contains a general purpose client library,
-plus two command-line programs designed to be used with Bash or
-Perl. The library contains all the features of an SLP client, and the
-two programs use the library to implement an SLP Service Agent and an
-SLP User Agent
-
-
-State of the Source Tree
-=======================
-As of Mon May 12 2003 the Windows build is broken. The Linux build is
-working on at least two linux platforms. 
-
-The source tree has undergone significant reorgination lately. I have
-converted from really ugly kludged makefiles to using the GNU autoconf
-and libtool programs to organize and control the building
-process. (Some of you may think that autoconf is really ugly and
-kludged but considering all of the problems it solves I would have to
-disagree.) 
-
-Here is how the source tree is now organized:
-
-Initial directory = ldap_slp
-+---conf                     <-- contains the DA configuration file 
-+---doc                      <-- contains some internet-drafts
-+---scripts                 <-- shell scripts that demonstrate functions
-+---src                      <-- source code
-|   +---cmd-utils            <-- command-line utilities
-|   |   +---slp_client       <-- slp client library
-|   |   +---slp_query        <-- command-line slp user agent 
-|   |   +---slp_srvreg       <-- command-line and daemon slp service agent
-
-
-Windows Build
-=============
-The Windows build is broken because I haven't debugged the autoconf
-macros for windows. If you are curious, look at the file
-ldap_slp/configure.ac. 
-
-When windows builds once again it will require Bash, gmake, and GNU
-Autoconf and Libtool. The best thing to do if you want to build on
-windows and don't know what I'm talking about is to get Cygwin. You
-can get Cygwin at http://www.cygwin.com
-
-
-Porting
-=========
-Porting this code to any POSIX operating system is straightforward. 
-Each operating system needs to have its own compatibility source
-modules. For linux, those are lslp-linux.h and lslp-linux.c
-
-To add support for a new platform, you must start with the autoconf
-script, configure.ac. In that script there are placeholders for each
-platform. Here is a sample that implements part of the linux support: 
-
-  *-*-linux*)
-       AC_DEFINE([HOST_OS], ["Linux"], [Target Operation System])
-       AC_DEFINE([OS_PORT_INCLUDE], ["lslp-linux.h"], [Portability Header])
-       OS_PORT_INC=lslp-linux.h
-       OS_PORT_SRC=lslp-linux.c
-       OS_PORT_OBJ=lslp-linux.lo
-
-Each of these symbols has a counterpart within the build system. For a
-new platform you need to flesh out the placeholder for that platform
-in configure.ac. Then you need to implement the portability header and
-possibly a portability source file.
-
-
diff --git a/src/Unsupported/slp_client/README.AUTOCONF b/src/Unsupported/slp_client/README.AUTOCONF
deleted file mode 100644 (file)
index 4e214c3..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-Autoconf and Libtool are Gnu utilities that automate the building and
-installation of software libraries and executables. They abstract
-platform differences and provide a toolkit of macros and shell scripts
-that solve platform interoperability issues.
-
-Building slp_client library requires Autoconf and Libtool. However,
-these tools are licensed under the Gnu Public License and therefore
-they are not included in the Pegasus CVS repository. 
-
-You need to obtain Autoconf and Libtool and install them on your
-platform prior to rebuilding the slp_client library. Most Unix
-platforms have versions of Autoconf and Libtool
-pre-installed. However, you should still update your platform to the
-latest versions. 
-
-
-Obtaining Autoconf
-====================
-
-The following web page contains information on downloading and using
-Autoconf:
-
-http://www.gnu.org/software/autoconf/
-
-Obtaining Libtool
-=================
-
-The following web page contains information on downloading and using
-Libtool:
-
- http://www.gnu.org/directory/libtool.html
-
-Autoconf Manual
-===============
-
-There is an up-to-date Autoconf manual at:
-
-http://www.gnu.org/manual/autoconf/html_mono/autoconf.html
-
-
-Online Book on Autoconf and Libtool
-====================================
-
-You may be interested in a book on Autoconf, Automake (another Gnu
-tool), and Libtool that was published commercially and is now
-available on-line:
-
-http://sources.redhat.com/autobook/
-
-This book is out of date but nevertheless contains a lot of very
-useful information about using Autoconf and Libtool. 
diff --git a/src/Unsupported/slp_client/conf/slp.conf b/src/Unsupported/slp_client/conf/slp.conf
deleted file mode 100644 (file)
index f9e6032..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-################################# slp.conf ###############################
-#                                                                        #
-#                    configuration file for l-SLP kernel                  #
-#                                                                         #
-###########################################################################
-
-
-##### DA Advertisement #######
-#
-#  DA advertisement provides regular publication over the network of the
-#  existence and properties of the SLP Directory Agent. You need to ensure
-#  that each network segment receives regular DA advertisements. 
-#  The best way to do this is through multicast advertising to 
-#  address 239.255.255.253. However, if multicast is not enabled to cross 
-#  routers, the next best option is to do directed broadcast. 
-#
-#  DA advertisement should be done regularly but not too frequently because
-#  it is unsolicited network traffic. 
-#
-#   syntax is as follows: 
-# da_advert, <type>, <interval>, <target address>, <sending interface>, <mask>
-#
-# where <type> is one of multicast, broadcast, or unicast ;
-# <interval> is the number of seconds between each advertisement; 
-# <target address> is the IP address to which the advertisement will be sent ;
-# <sending interface> is the IP address from which to send the advertisement;
-# <mask> is the IP mask to apply to broadcast advertisements
-
-# next line is a multicast to the SLP group 
-da_advert, multicast, 1000, 239.255.255.253, 0.0.0.0
-# next line is a directed broadcast to 
-#da_advert, broadcast, 1000, 137.69.141.112, 0.0.0.0, 255.255.255.0
-# next line is a directed broadcast to 127.69.142.255
-#da_advert, broadcast, 1000, 137.69.142.112, 0.0.0.0, 255.255.255.0
-# next line is a directed broadcast to 127.69.143.255
-#da_advert, broadcast, 1000, 137.69.143.112, 0.0.0.0, 255.255.255.0
-# next line is an example of a  unicast advertisement
-#da_advert, unicast, 1000, 137.69.141.39, 0.0.0.0
-
-
-##### Active DA Discovery #####
-#
-# Active DA discovery allows the DA agent to actively query for other 
-# SLP directory agents. 
-#
-# Active DA discovery can be done more frequently than DA Advertisement
-# but also can generate needless traffic if done too frequently. You should
-# experiment with the interval for each DA discovery line. 
-#
-#   syntax is as follows:
-# da_disc,  <type>, <interval>, <target address>, <sending interface>, <mask>
-# the syntax is the same as for DA Advertisement, above. 
-da_disc, multicast, 200, 239.255.255.253, 0.0.0.0
-#da_disc, broadcast, 200, 137.69.141.112, 0.0.0.0, 255.255.255.0
-#da_disc, broadcast, 200, 137.69.142.112, 0.0.0.0, 255.255.255.0
-#da_disc, broadcast, 200, 137.69.143.112, 0.0.0.0, 255.255.255.0
-
-# how many seconds before an inactive TCP connection should be closed 
-# NOTE: for mesh operation, this setting must be the same for all
-# participants in the mesh. Otherwise they will time the slow
-# DA out of the mesh!!
-close_conn, 300
-#listen, 9.37.98.90
-
-
-# which port should the l-slp simplified network API operate upon
-# you should select an unused port - it should be in the unreserved range 
-api_port, 4800
-
-# which port should the SLP DA operate on -- 427 is the default
-operational_port, 427
-
-# max time to wait for a complete multicast query response 
-mc_max, 15
-
-# how long to wait upon startup to perform DA Discovery
-start_wait, 3 
-
-# wait interval before retransmission of multicast or broadcast queries
-retry_interval, 2
-
-# time to wait before giving up on unicast message transmission
-retry_max, 15
-
-# time between regular multicast da advertisements
-da_beat, 10800 
-
-# time between regular multicast active da discovery
-da_find, 900
-
-# wait to register services upon passive da discovery
-reg_passive, 1
-
-# wait to register services upon active da discovery
-reg_active, 1
-
-# not support in this release
-slp_mtu, 1458
-
-# time-to-live for multicast messages
-slp_ttl, 255
-
-# max message size the DA can process. messages larger than this will
-# be discarded. This is a security feature to prevent buffer overruns or
-# uncontrolled memory allocation
-max_msg, 8192
-
-# not used -- redundant 
-# converge_retries, <seconds>
-
-# not used -- redundant
-# converge_wait, <seconds>
-
-# file to hold debugging messages -- not recommended right now 
-# log_file, <file name>
-
-# not tested yet
-# use_syslog <1 or 0>
-
-# not tested yet
-# log_stderr < 1 or 0>
-
-# not tested yet
-# log_level <1 - 5>
-
-# not completely implemented
-# www_file, <file name>
-
-# ip address of the DA - useful to force the DA to live at a 
-# specified address on multi-homed hosts
-da_addr, 192.168.2.45
-
-# language tag
-language, en
-
-#scope list for DA
-# format is scopes, <scope0>, <scope1>, <scopeN>
-scopes, DEFAULT 
-
diff --git a/src/Unsupported/slp_client/config.h b/src/Unsupported/slp_client/config.h
deleted file mode 100644 (file)
index df92e06..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-//%2005////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation, The Open Group.
-// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-// EMC Corporation; VERITAS Software Corporation; The Open Group.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-// 
-// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-//==============================================================================
-/* config.h.  Generated by configure.  */
-/* config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Enable debugging options in build. */
-#define DEBUG 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#ifdef _WIN32
-#define HAVE_UNISTD_H 0
-#else
-#define HAVE_UNISTD_H 1
-#endif
-
-/* OK to #include /linux/if.h */
-#define HAVE_IF_H 1
-
-/* Target Operation System */
-#ifdef _WIN32
-#define HOST_OS "Windows"
-#else
-#define HOST_OS "Linux"
-#endif
-
-/* Portability Header */
-#ifdef _WIN32
-#define OS_PORT_INCLUDE "lslp-windows.h"
-#else
-#define OS_PORT_INCLUDE "lslp-linux.h"
-#endif
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "lslp-bugs@lists.sourceforge.net"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "slp"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "slp 0.8 "
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "lslp.tar.gz"
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "0.8 "
-
-/* Target Processor */
-#define PLATFORM "x86"
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-#ifdef _WIN32
-#define DLL_IMPORT __declspec(dllimport)
-#define DLL_EXPORT __declspec(dllexport)
-#else
-#define DLL_IMPORT 
-#define DLL_EXPORT 
-#endif
-
-/* #undef WORDS_BIG_ENDIAN */
diff --git a/src/Unsupported/slp_client/config.h.in b/src/Unsupported/slp_client/config.h.in
deleted file mode 100644 (file)
index d45c09e..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Enable debugging options in build. */
-#undef DEBUG
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* OK to #include /linux/if.h */
-#undef HAVE_IF_H
-
-/* Target Operation System */
-#undef HOST_OS
-
-/* Portability Header */
-#undef OS_PORT_INCLUDE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Target Processor */
-#undef PLATFORM
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-#undef DLL_IMPORT
-
-#undef DLL_EXPORT
-
-#undef WORDS_BIG_ENDIAN
diff --git a/src/Unsupported/slp_client/configure b/src/Unsupported/slp_client/configure
deleted file mode 100755 (executable)
index 013e0f0..0000000
+++ /dev/null
@@ -1,9353 +0,0 @@
-#! /bin/sh
-# From configure.ac Revision: 1.14 .
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.53 for slp 0.8 .
-#
-# Report bugs to <lslp-bugs@lists.sourceforge.net>.
-#
-# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
-# Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-#
-# Configuration input files:
-# Copyright (c) 2002, Michael Day
-# Copyright (c) 2002, International Business Machines
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# Find the correct PATH separator.  Usually this is `:', but
-# DJGPP uses `;' like DOS.
-if test "X${PATH_SEPARATOR+set}" != Xset; then
-  UNAME=${UNAME-`uname 2>/dev/null`}
-  case X$UNAME in
-    *-DOS) lt_cv_sys_path_separator=';' ;;
-    *)     lt_cv_sys_path_separator=':' ;;
-  esac
-  PATH_SEPARATOR=$lt_cv_sys_path_separator
-fi
-
-
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
-  ;;
-esac
-
-echo=${ECHO-echo}
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
-  # Yippee, $echo works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-
-EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-if test -z "$ECHO"; then
-if test "X${echo_test_string+set}" != Xset; then
-# find a string as large as possible, as long as the shell can cope with it
-  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
-       echo_test_string="`eval $cmd`" &&
-       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
-    then
-      break
-    fi
-  done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
-   test "X$echo_testing_string" = "X$echo_test_string"; then
-  :
-else
-  # The Solaris, AIX, and Digital Unix default echo programs unquote
-  # backslashes.  This makes it impossible to quote backslashes using
-  #   echo "$something" | sed 's/\\/\\\\/g'
-  #
-  # So, first we look for a working echo in the user's PATH.
-
-  IFS="${IFS=  }"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for dir in $PATH /usr/ucb; do
-    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-       test "X$echo_testing_string" = "X$echo_test_string"; then
-      echo="$dir/echo"
-      break
-    fi
-  done
-  IFS="$save_ifs"
-
-  if test "X$echo" = Xecho; then
-    # We didn't find a better echo, so look for alternatives.
-    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
-       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
-       test "X$echo_testing_string" = "X$echo_test_string"; then
-      # This shell has a builtin print -r that does the trick.
-      echo='print -r'
-    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
-        test "X$CONFIG_SHELL" != X/bin/ksh; then
-      # If we have ksh, try running configure again with it.
-      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-      export ORIGINAL_CONFIG_SHELL
-      CONFIG_SHELL=/bin/ksh
-      export CONFIG_SHELL
-      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
-    else
-      # Try using printf.
-      echo='printf %s\n'
-      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-        echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
-        test "X$echo_testing_string" = "X$echo_test_string"; then
-       # Cool, printf works
-       :
-      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-          test "X$echo_testing_string" = 'X\t' &&
-          echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-          test "X$echo_testing_string" = "X$echo_test_string"; then
-       CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-       export CONFIG_SHELL
-       SHELL="$CONFIG_SHELL"
-       export SHELL
-       echo="$CONFIG_SHELL $0 --fallback-echo"
-      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-          test "X$echo_testing_string" = 'X\t' &&
-          echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-          test "X$echo_testing_string" = "X$echo_test_string"; then
-       echo="$CONFIG_SHELL $0 --fallback-echo"
-      else
-       # maybe with a smaller string...
-       prev=:
-
-       for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
-         if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
-         then
-           break
-         fi
-         prev="$cmd"
-       done
-
-       if test "$prev" != 'sed 50q "$0"'; then
-         echo_test_string=`eval $prev`
-         export echo_test_string
-         exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
-       else
-         # Oops.  We lost completely, so just stick with echo.
-         echo=echo
-       fi
-      fi
-    fi
-  fi
-fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-ECHO=$echo
-if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-fi
-
-
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-
-# NLS nuisances.
-# Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
-(set +x; test -n "`(LANG=C; export LANG) 2>&1`") &&
-    { $as_unset LANG || test "${LANG+set}" != set; } ||
-      { LANG=C; export LANG; }
-(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") &&
-    { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } ||
-      { LC_ALL=C; export LC_ALL; }
-(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") &&
-    { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } ||
-      { LC_TIME=C; export LC_TIME; }
-(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") &&
-    { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } ||
-      { LC_CTYPE=C; export LC_CTYPE; }
-(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") &&
-    { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } ||
-      { LANGUAGE=C; export LANGUAGE; }
-(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") &&
-    { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } ||
-      { LC_COLLATE=C; export LC_COLLATE; }
-(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") &&
-    { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } ||
-      { LC_NUMERIC=C; export LC_NUMERIC; }
-(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") &&
-    { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } ||
-      { LC_MESSAGES=C; export LC_MESSAGES; }
-
-
-# Name of the executable.
-as_me=`(basename "$0") 2>/dev/null ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-        X"$0" : 'X\(//\)$' \| \
-        X"$0" : 'X\(/\)$' \| \
-        .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-         /^X\/\(\/\/\)$/{ s//\1/; q; }
-         /^X\/\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conftest.sh
-  echo  "exit 0"   >>conftest.sh
-  chmod +x conftest.sh
-  if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conftest.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-        case $as_dir in
-        /*)
-          if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-            CONFIG_SHELL=$as_dir/$as_base
-            export CONFIG_SHELL
-            exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-          fi;;
-        esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='     ' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
-    as_ln_s='ln -s'
-  fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS="  $as_nl"
-
-# CDPATH.
-$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; }
-
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-exec 6>&1
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete.  It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
-
-# Identity of this package.
-PACKAGE_NAME='slp'
-PACKAGE_TARNAME='lslp.tar.gz'
-PACKAGE_VERSION='0.8 '
-PACKAGE_STRING='slp 0.8 '
-PACKAGE_BUGREPORT='lslp-bugs@lists.sourceforge.net'
-
-ac_unique_file="config.guess"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#if STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# if HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif
-#if HAVE_STRING_H
-# if !STDC_HEADERS && HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif
-#if HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#else
-# if HAVE_STDINT_H
-#  include <stdint.h>
-# endif
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-ac_prev=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval "$ac_prev=\$ac_option"
-    ac_prev=
-    continue
-  fi
-
-  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_option in
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
-  | --da=*)
-    datadir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    eval "enable_$ac_feature=no" ;;
-
-  -enable-* | --enable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "enable_$ac_feature='$ac_optarg'" ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst \
-  | --locals | --local | --loca | --loc | --lo)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
-  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "with_$ac_package='$ac_optarg'" ;;
-
-  -without-* | --without-*)
-    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/-/_/g'`
-    eval "with_$ac_package=no" ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; }
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
-   { (exit 1); exit 1; }; }
-    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
-    eval "$ac_envvar='$ac_optarg'"
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  { echo "$as_me: error: missing argument to $ac_option" >&2
-   { (exit 1); exit 1; }; }
-fi
-
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
-              localstatedir libdir includedir oldincludedir infodir mandir
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then its parent.
-  ac_confdir=`(dirname "$0") 2>/dev/null ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$0" : 'X\(//\)[^/]' \| \
-         X"$0" : 'X\(//\)$' \| \
-         X"$0" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
-echo X"$0" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r $srcdir/$ac_unique_file; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r $srcdir/$ac_unique_file; then
-  if test "$ac_srcdir_defaulted" = yes; then
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
-   { (exit 1); exit 1; }; }
-  else
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
-   { (exit 1); exit 1; }; }
-  fi
-fi
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-ac_env_CPP_set=${CPP+set}
-ac_env_CPP_value=$CPP
-ac_cv_env_CPP_set=${CPP+set}
-ac_cv_env_CPP_value=$CPP
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures slp 0.8  to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-_ACEOF
-
-  cat <<_ACEOF
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR           user executables [EPREFIX/bin]
-  --sbindir=DIR          system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR       program executables [EPREFIX/libexec]
-  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
-  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
-  --libdir=DIR           object code libraries [EPREFIX/lib]
-  --includedir=DIR       C header files [PREFIX/include]
-  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
-  --infodir=DIR          info documentation [PREFIX/info]
-  --mandir=DIR           man documentation [PREFIX/man]
-_ACEOF
-
-  cat <<\_ACEOF
-
-System types:
-  --build=BUILD     configure for building on BUILD [guessed]
-  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-  case $ac_init_help in
-     short | recursive ) echo "Configuration of slp 0.8 :";;
-   esac
-  cat <<\_ACEOF
-
-Optional Features:
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-shared=PKGS  build shared libraries default=yes
-  --enable-static=PKGS  build static libraries default=yes
-  --enable-fast-install=PKGS  optimize for fast installation default=yes
-  --disable-libtool-lock  avoid locking (might break parallel builds)
-
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-gnu-ld           assume the C compiler uses GNU ld default=no
-  --with-pic              try to use only PIC/non-PIC objects default=use both
-
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
-              headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to <lslp-bugs@lists.sourceforge.net>.
-_ACEOF
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  ac_popdir=`pwd`
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d $ac_dir || continue
-    ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
-# absolute.
-ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
-ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
-ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
-ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
-
-    cd $ac_dir
-    # Check for guested configure; otherwise get Cygnus style configure.
-    if test -f $ac_srcdir/configure.gnu; then
-      echo
-      $SHELL $ac_srcdir/configure.gnu  --help=recursive
-    elif test -f $ac_srcdir/configure; then
-      echo
-      $SHELL $ac_srcdir/configure  --help=recursive
-    elif test -f $ac_srcdir/configure.ac ||
-           test -f $ac_srcdir/configure.in; then
-      echo
-      $ac_configure --help
-    else
-      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi
-    cd $ac_popdir
-  done
-fi
-
-test -n "$ac_init_help" && exit 0
-if $ac_init_version; then
-  cat <<\_ACEOF
-slp configure 0.8
-generated by GNU Autoconf 2.53
-
-Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
-Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-
-Configuration input files:
-Copyright (c) 2002, Michael Day
-Copyright (c) 2002, International Business Machines
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-_ACEOF
-  exit 0
-fi
-exec 5>config.log
-cat >&5 <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by slp $as_me 0.8 , which was
-generated by GNU Autoconf 2.53.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  echo "PATH: $as_dir"
-done
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell meta-characters.
-ac_configure_args=
-ac_sep=
-for ac_arg
-do
-  case $ac_arg in
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n ) continue ;;
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    continue ;;
-  *" "*|*"     "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-    ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-  esac
-  case " $ac_configure_args " in
-    *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-    *) ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
-       ac_sep=" " ;;
-  esac
-  # Get rid of the leading space.
-done
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Be sure not to use single quotes in there, as some shells,
-# such as our DU 5.0 friend, will then `close' the trap.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-    cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-{
-  (set) 2>&1 |
-    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
-      sed -n \
-        "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
-         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
-      ;;
-    *)
-      sed -n \
-        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-      ;;
-    esac;
-}
-    echo
-    if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
-      echo
-      sed "/^$/d" confdefs.h
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      echo "$as_me: caught signal $ac_signal"
-    echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core core.* *.core &&
-  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-     ' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo >confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
-  if test "x$prefix" != xNONE; then
-    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-  else
-    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-  fi
-fi
-for ac_site_file in $CONFIG_SITE; do
-  if test -r "$ac_site_file"; then
-    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special
-  # files actually), so we avoid doing that.
-  if test -f "$cache_file"; then
-    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . $cache_file;;
-      *)                      . ./$cache_file;;
-    esac
-  fi
-else
-  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in `(set) 2>&1 |
-               sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
-  eval ac_new_val="\$ac_env_${ac_var}_value"
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-        { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-        { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
-echo "$as_me:   former value:  $ac_old_val" >&2;}
-        { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
-echo "$as_me:   current value: $ac_new_val" >&2;}
-        ac_cache_corrupted=:
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *" "*|*"   "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-  if test -f $ac_dir/install-sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f $ac_dir/install.sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f $ac_dir/shtool; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"
-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
-
-# Make sure we can run config.sub.
-$ac_config_sub sun4 >/dev/null 2>&1 ||
-  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
-echo "$as_me: error: cannot run $ac_config_sub" >&2;}
-   { (exit 1); exit 1; }; }
-
-echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6
-if test "${ac_cv_build+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_build_alias=$build_alias
-test -z "$ac_cv_build_alias" &&
-  ac_cv_build_alias=`$ac_config_guess`
-test -z "$ac_cv_build_alias" &&
-  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
-   { (exit 1); exit 1; }; }
-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
-  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6
-build=$ac_cv_build
-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-
-
-
-# Check whether --enable-shared or --disable-shared was given.
-if test "${enable_shared+set}" = set; then
-  enableval="$enable_shared"
-  p=${PACKAGE-default}
-case $enableval in
-yes) enable_shared=yes ;;
-no) enable_shared=no ;;
-*)
-  enable_shared=no
-  # Look at the argument we got.  We use all the common list separators.
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
-  for pkg in $enableval; do
-    if test "X$pkg" = "X$p"; then
-      enable_shared=yes
-    fi
-  done
-  IFS="$ac_save_ifs"
-  ;;
-esac
-else
-  enable_shared=yes
-fi;
-# Check whether --enable-static or --disable-static was given.
-if test "${enable_static+set}" = set; then
-  enableval="$enable_static"
-  p=${PACKAGE-default}
-case $enableval in
-yes) enable_static=yes ;;
-no) enable_static=no ;;
-*)
-  enable_static=no
-  # Look at the argument we got.  We use all the common list separators.
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
-  for pkg in $enableval; do
-    if test "X$pkg" = "X$p"; then
-      enable_static=yes
-    fi
-  done
-  IFS="$ac_save_ifs"
-  ;;
-esac
-else
-  enable_static=yes
-fi;
-# Check whether --enable-fast-install or --disable-fast-install was given.
-if test "${enable_fast_install+set}" = set; then
-  enableval="$enable_fast_install"
-  p=${PACKAGE-default}
-case $enableval in
-yes) enable_fast_install=yes ;;
-no) enable_fast_install=no ;;
-*)
-  enable_fast_install=no
-  # Look at the argument we got.  We use all the common list separators.
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
-  for pkg in $enableval; do
-    if test "X$pkg" = "X$p"; then
-      enable_fast_install=yes
-    fi
-  done
-  IFS="$ac_save_ifs"
-  ;;
-esac
-else
-  enable_fast_install=yes
-fi;
-echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6
-if test "${ac_cv_host+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_host_alias=$host_alias
-test -z "$ac_cv_host_alias" &&
-  ac_cv_host_alias=$ac_cv_build_alias
-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
-  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6
-host=$ac_cv_host
-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    set dummy "$as_dir/$ac_word" ${1+"$@"}
-    shift
-    ac_cv_prog_CC="$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CC" && break
-done
-
-  CC=$ac_ct_CC
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH" >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH" >&2;}
-   { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-echo "$as_me:$LINENO: checking for C compiler default output" >&5
-echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
-  (eval $ac_link_default) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # Find the output, starting from the most likely.  This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
-
-# Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-for ac_file in `ls a_out.exe a.exe conftest.exe 2>/dev/null;
-                ls a.out conftest 2>/dev/null;
-                ls a.* conftest.* 2>/dev/null`; do
-  case $ac_file in
-    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb | *.xSYM ) ;;
-    a.out ) # We found the default executable, but exeext='' is most
-            # certainly right.
-            break;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-          # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
-          export ac_cv_exeext
-          break;;
-    * ) break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables" >&5
-echo "$as_me: error: C compiler cannot create executables" >&2;}
-   { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
-
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
-  if { ac_try='./$ac_file'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-       cross_compiling=yes
-    else
-       { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'." >&2;}
-   { (exit 1); exit 1; }; }
-    fi
-  fi
-fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-rm -f a.out a.exe conftest$ac_cv_exeext
-ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
-  case $ac_file in
-    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-          export ac_cv_exeext
-          break;;
-    * ) break;;
-  esac
-done
-else
-  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link" >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
-if test "${ac_cv_objext+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile" >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_compiler_gnu=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
-  choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  for ac_declaration in \
-   ''\
-   '#include <stdlib.h>' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-$ac_declaration
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-continue
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-$ac_declaration
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-# Find the correct PATH separator.  Usually this is `:', but
-# DJGPP uses `;' like DOS.
-if test "X${PATH_SEPARATOR+set}" != Xset; then
-  UNAME=${UNAME-`uname 2>/dev/null`}
-  case X$UNAME in
-    *-DOS) lt_cv_sys_path_separator=';' ;;
-    *)     lt_cv_sys_path_separator=':' ;;
-  esac
-  PATH_SEPARATOR=$lt_cv_sys_path_separator
-fi
-
-
-# Check whether --with-gnu-ld or --without-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
-  withval="$with_gnu_ld"
-  test "$withval" = no || with_gnu_ld=yes
-else
-  with_gnu_ld=no
-fi;
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  echo "$as_me:$LINENO: checking for ld used by GCC" >&5
-echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [\\/]* | [A-Za-z]:[\\/]*)
-      re_direlt='/[^/][^/]*/\.\./'
-      # Canonicalize the path of ld
-      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  echo "$as_me:$LINENO: checking for GNU ld" >&5
-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
-else
-  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
-fi
-if test "${lt_cv_path_LD+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -z "$LD"; then
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some GNU ld's only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
-       test "$with_gnu_ld" != no && break
-      else
-       test "$with_gnu_ld" != yes && break
-      fi
-    fi
-  done
-  IFS="$ac_save_ifs"
-else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
-  echo "$as_me:$LINENO: result: $LD" >&5
-echo "${ECHO_T}$LD" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
-   { (exit 1); exit 1; }; }
-echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
-if test "${lt_cv_prog_gnu_ld+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
-  lt_cv_prog_gnu_ld=yes
-else
-  lt_cv_prog_gnu_ld=no
-fi
-fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
-echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
-if test "${lt_cv_ld_reload_flag+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_ld_reload_flag='-r'
-fi
-echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
-echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
-reload_flag=$lt_cv_ld_reload_flag
-test -n "$reload_flag" && reload_flag=" $reload_flag"
-
-echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
-echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
-if test "${lt_cv_path_NM+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
-    test -z "$ac_dir" && ac_dir=.
-    tmp_nm=$ac_dir/${ac_tool_prefix}nm
-    if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
-      # Check to see if the nm accepts a BSD-compat flag.
-      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
-      #   nm: unknown option "B" ignored
-      # Tru64's nm complains that /dev/null is an invalid object file
-      if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
-       lt_cv_path_NM="$tmp_nm -B"
-       break
-      elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
-       lt_cv_path_NM="$tmp_nm -p"
-       break
-      else
-       lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-       continue # so that we can try to find one that supports BSD flags
-      fi
-    fi
-  done
-  IFS="$ac_save_ifs"
-  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
-fi
-fi
-
-NM="$lt_cv_path_NM"
-echo "$as_me:$LINENO: result: $NM" >&5
-echo "${ECHO_T}$NM" >&6
-
-echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
-echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
-if test "${lt_cv_path_SED+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  # Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_executable_p="test -f"
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-        _sed_list="$_sed_list $as_dir/$ac_prog$ac_exec_ext"
-      fi
-    done
-  done
-done
-
-  # Create a temporary directory, and hook for its removal unless debugging.
-$debug ||
-{
-  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-
-# Create a (secure) tmp directory for tmp files.
-: ${TMPDIR=/tmp}
-{
-  tmp=`(umask 077 && mktemp -d -q "$TMPDIR/sedXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
-}  ||
-{
-  tmp=$TMPDIR/sed$$-$RANDOM
-  (umask 077 && mkdir $tmp)
-} ||
-{
-   echo "$me: cannot create a temporary directory in $TMPDIR" >&2
-   { (exit 1); exit 1; }
-}
-  _max=0
-  _count=0
-  # Add /usr/xpg4/bin/sed as it is typically found on Solaris
-  # along with /bin/sed that truncates output.
-  for _sed in $_sed_list /usr/xpg4/bin/sed; do
-    test ! -f ${_sed} && break
-    cat /dev/null > "$tmp/sed.in"
-    _count=0
-    echo ${ECHO_N-$ac_n} "0123456789${ECHO_C-$ac_c}" >"$tmp/sed.in"
-    # Check for GNU sed and select it if it is found.
-    if "${_sed}" --version 2>&1 < /dev/null | egrep '(GNU)' > /dev/null; then
-      lt_cv_path_SED=${_sed}
-      break
-    fi
-    while true; do
-      cat "$tmp/sed.in" "$tmp/sed.in" >"$tmp/sed.tmp"
-      mv "$tmp/sed.tmp" "$tmp/sed.in"
-      cp "$tmp/sed.in" "$tmp/sed.nl"
-      echo >>"$tmp/sed.nl"
-      ${_sed} -e 's/a$//' < "$tmp/sed.nl" >"$tmp/sed.out" || break
-      cmp -s "$tmp/sed.out" "$tmp/sed.nl" || break
-      # 40000 chars as input seems more than enough
-      test $_count -gt 10 && break
-      _count=`expr $_count + 1`
-      if test $_count -gt $_max; then
-        _max=$_count
-        lt_cv_path_SED=$_sed
-      fi
-    done
-  done
-  rm -rf "$tmp"
-
-fi
-
-if test "X$SED" != "X"; then
-  lt_cv_path_SED=$SED
-else
-  SED=$lt_cv_path_SED
-fi
-echo "$as_me:$LINENO: result: $SED" >&5
-echo "${ECHO_T}$SED" >&6
-
-echo "$as_me:$LINENO: checking whether ln -s works" >&5
-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-  echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-echo "${ECHO_T}no, using $LN_S" >&6
-fi
-
-echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5
-echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6
-if test "${lt_cv_deplibs_check_method+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given egrep regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix4* | aix5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-beos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-bsdi4*)
-  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
-  lt_cv_file_magic_cmd='/usr/bin/file -L'
-  lt_cv_file_magic_test_file=/shlib/libc.so
-  ;;
-
-cygwin* | mingw* | pw32*)
-  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
-  ;;
-
-darwin* | rhapsody*)
-  lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
-  lt_cv_file_magic_cmd='/usr/bin/file -L'
-  case "$host_os" in
-  rhapsody* | darwin1.[012])
-    lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
-    ;;
-  *) # Darwin 1.3 on
-    lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
-    ;;
-  esac
-  ;;
-
-freebsd*)
-  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-    case $host_cpu in
-    i*86 )
-      # Not sure whether the presence of OpenBSD here was a mistake.
-      # Let's accept both of them until this is cleared up.
-      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
-      lt_cv_file_magic_cmd=/usr/bin/file
-      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-      ;;
-    esac
-  else
-    lt_cv_deplibs_check_method=pass_all
-  fi
-  ;;
-
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-hpux10.20*|hpux11*)
-  lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=/usr/lib/libc.sl
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-  irix5* | nonstopux*)
-    # this will be overridden with pass_all, but let us keep it just in case
-    lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
-    ;;
-  *)
-    case $LD in
-    *-32|*"-32 ") libmagic=32-bit;;
-    *-n32|*"-n32 ") libmagic=N32;;
-    *-64|*"-64 ") libmagic=64-bit;;
-    *) libmagic=never-match;;
-    esac
-    # this will be overridden with pass_all, but let us keep it just in case
-    lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
-    ;;
-  esac
-  lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-# This must be Linux ELF.
-linux-gnu*)
-  case $host_cpu in
-  alpha* | hppa* | i*86 | mips | mipsel | powerpc* | sparc* | ia64*)
-    lt_cv_deplibs_check_method=pass_all ;;
-  *)
-    # glibc up to 2.1.1 does not perform some relocations on ARM
-    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
-  esac
-  lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
-  ;;
-
-netbsd*)
-  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-    lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'
-  fi
-  ;;
-
-newos6*)
-  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=/usr/lib/libnls.so
-  ;;
-
-openbsd*)
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
-  else
-    lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
-  fi
-  ;;
-
-osf3* | osf4* | osf5*)
-  # this will be overridden with pass_all, but let us keep it just in case
-  lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
-  lt_cv_file_magic_test_file=/shlib/libc.so
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sco3.2v5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-solaris*)
-  lt_cv_deplibs_check_method=pass_all
-  lt_cv_file_magic_test_file=/lib/libc.so
-  ;;
-
-sysv5uw[78]* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-  case $host_vendor in
-  motorola)
-    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
-    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
-    ;;
-  ncr)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  sequent)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
-    ;;
-  sni)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
-    lt_cv_file_magic_test_file=/lib/libc.so
-    ;;
-  siemens)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  esac
-  ;;
-esac
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
-echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-
-
-
-
-
-
-
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-echo "$as_me:$LINENO: checking command to parse $NM output" >&5
-echo $ECHO_N "checking command to parse $NM output... $ECHO_C" >&6
-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[BCDEGRST]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-
-# Transform the above into a raw symbol and a C symbol.
-symxfrm='\1 \2\3 \3'
-
-# Transform an extracted symbol line into a proper C declaration
-lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[BCDT]'
-  ;;
-cygwin* | mingw* | pw32*)
-  symcode='[ABCDGISTW]'
-  ;;
-hpux*) # Its linker distinguishes data from code symbols
-  lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-  lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-  ;;
-irix* | nonstopux*)
-  symcode='[BCDEGRST]'
-  ;;
-osf*)
-  symcode='[BCDEGQRST]'
-  ;;
-solaris* | sysv5*)
-  symcode='[BDT]'
-  ;;
-sysv4)
-  symcode='[DFNSTU]'
-  ;;
-esac
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $host_os in
-mingw*)
-  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
-  symcode='[ABCDGISTW]'
-fi
-
-# Try without a prefix undercore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Write the raw and C identifiers.
-lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[        ]\($symcode$symcode*\)[         ][      ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-  rm -f conftest*
-  cat > conftest.$ac_ext <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
-  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s "$nlist"; then
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-       mv -f "$nlist"T "$nlist"
-      else
-       rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if egrep ' nm_test_var$' "$nlist" >/dev/null; then
-       if egrep ' nm_test_func$' "$nlist" >/dev/null; then
-         cat <<EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
-         # Now generate the symbol file.
-         eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
-
-         cat <<EOF >> conftest.$ac_ext
-#if defined (__STDC__) && __STDC__
-# define lt_ptr void *
-#else
-# define lt_ptr char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
-  const char *name;
-  lt_ptr address;
-}
-lt_preloaded_symbols[] =
-{
-EOF
-         sed "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext
-         cat <<\EOF >> conftest.$ac_ext
-  {0, (lt_ptr) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
-         # Now try linking the two files.
-         mv conftest.$ac_objext conftstm.$ac_objext
-         save_LIBS="$LIBS"
-         save_CFLAGS="$CFLAGS"
-         LIBS="conftstm.$ac_objext"
-         CFLAGS="$CFLAGS$no_builtin_flag"
-         if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest$ac_exeext; then
-           pipe_works=yes
-         fi
-         LIBS="$save_LIBS"
-         CFLAGS="$save_CFLAGS"
-       else
-         echo "cannot find nm_test_func in $nlist" >&5
-       fi
-      else
-       echo "cannot find nm_test_var in $nlist" >&5
-      fi
-    else
-      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
-    fi
-  else
-    echo "$progname: failed program was:" >&5
-    cat conftest.$ac_ext >&5
-  fi
-  rm -f conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    lt_cv_sys_global_symbol_pipe=
-  fi
-done
-
-fi
-
-global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
-  global_symbol_to_cdecl=
-  global_symbol_to_c_name_address=
-else
-  global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
-  global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address"
-fi
-if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address";
-then
-  echo "$as_me:$LINENO: result: failed" >&5
-echo "${ECHO_T}failed" >&6
-else
-  echo "$as_me:$LINENO: result: ok" >&5
-echo "${ECHO_T}ok" >&6
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-#include <assert.h>
-                     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-#include <assert.h>
-                     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
-else
-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check" >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_cv_header_stdc=yes
-else
-  echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  ac_cv_header_stdc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  egrep "memchr" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  egrep "free" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then
-  :
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-#include <ctype.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
-                     || ('j' <= (c) && (c) <= 'r') \
-                     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-        || toupper (i) != TOUPPER (i))
-      exit(2);
-  exit (0);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-                  inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-eval "$as_ac_Header=no"
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-for ac_header in dlfcn.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_header_compiler=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc in
-  yes:no )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
-  no:yes )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-
-# Only perform the check for file, if the check method requires it
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
-echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  case $MAGIC_CMD in
-  /*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-  ?:/*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
-  ;;
-  *)
-  ac_save_MAGIC_CMD="$MAGIC_CMD"
-  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="/usr/bin:$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/${ac_tool_prefix}file; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
-      if test -n "$file_magic_test_file"; then
-       case $deplibs_check_method in
-       "file_magic "*)
-         file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
-         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-           egrep "$file_magic_regex" > /dev/null; then
-           :
-         else
-           cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-EOF
-         fi ;;
-       esac
-      fi
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-  MAGIC_CMD="$ac_save_MAGIC_CMD"
-  ;;
-esac
-fi
-
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-echo "${ECHO_T}$MAGIC_CMD" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-if test -z "$lt_cv_path_MAGIC_CMD"; then
-  if test -n "$ac_tool_prefix"; then
-    echo "$as_me:$LINENO: checking for file" >&5
-echo $ECHO_N "checking for file... $ECHO_C" >&6
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  case $MAGIC_CMD in
-  /*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-  ?:/*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
-  ;;
-  *)
-  ac_save_MAGIC_CMD="$MAGIC_CMD"
-  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="/usr/bin:$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/file; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/file"
-      if test -n "$file_magic_test_file"; then
-       case $deplibs_check_method in
-       "file_magic "*)
-         file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
-         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-           egrep "$file_magic_regex" > /dev/null; then
-           :
-         else
-           cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-EOF
-         fi ;;
-       esac
-      fi
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-  MAGIC_CMD="$ac_save_MAGIC_CMD"
-  ;;
-esac
-fi
-
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-echo "${ECHO_T}$MAGIC_CMD" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  else
-    MAGIC_CMD=:
-  fi
-fi
-
-  fi
-  ;;
-esac
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  echo "$as_me:$LINENO: result: $RANLIB" >&5
-echo "${ECHO_T}$RANLIB" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-echo "${ECHO_T}$ac_ct_RANLIB" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  RANLIB=$ac_ct_RANLIB
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$STRIP"; then
-  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  echo "$as_me:$LINENO: result: $STRIP" >&5
-echo "${ECHO_T}$STRIP" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
-  ac_ct_STRIP=$STRIP
-  # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_STRIP"; then
-  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
-  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-echo "${ECHO_T}$ac_ct_STRIP" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  STRIP=$ac_ct_STRIP
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-
-enable_dlopen=no
-enable_win32_dll=no
-
-# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then
-  enableval="$enable_libtool_lock"
-
-fi;
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-*-*-irix6*)
-  # Find out which ABI we are using.
-  echo '#line 3791 "configure"' > conftest.$ac_ext
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-    case `/usr/bin/file conftest.$ac_objext` in
-    *32-bit*)
-      LD="${LD-ld} -32"
-      ;;
-    *N32*)
-      LD="${LD-ld} -n32"
-      ;;
-    *64-bit*)
-      LD="${LD-ld} -64"
-      ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-
-*-*-sco3.2v5*)
-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -belf"
-  echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
-echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
-if test "${lt_cv_cc_needs_belf+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-     ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-     cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  lt_cv_cc_needs_belf=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-lt_cv_cc_needs_belf=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-     ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
-echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
-
-
-esac
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e s/^X//'
-sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Constants:
-rm="rm -f"
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except M$VC,
-# which needs '.lib').
-libext=a
-ltmain="$ac_aux_dir/ltmain.sh"
-ofile="$default_ofile"
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-need_locks="$enable_libtool_lock"
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-test -z "$AS" && AS=as
-test -z "$CC" && CC=cc
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$LD" && LD=ld
-test -z "$LN_S" && LN_S="ln -s"
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-test -z "$NM" && NM=nm
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$RANLIB" && RANLIB=:
-test -z "$STRIP" && STRIP=:
-test -z "$ac_objext" && ac_objext=o
-
-if test x"$host" != x"$build"; then
-  ac_tool_prefix=${host_alias}-
-else
-  ac_tool_prefix=
-fi
-
-# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
-case $host_os in
-linux-gnu*) ;;
-linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
-esac
-
-case $host_os in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
-  case $host_os in
-  openbsd*)
-    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
-    ;;
-  *)
-    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-# Allow CC to be a program name with arguments.
-set dummy $CC
-compiler="$2"
-
-echo "$as_me:$LINENO: checking for objdir" >&5
-echo $ECHO_N "checking for objdir... $ECHO_C" >&6
-rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-echo "$as_me:$LINENO: result: $objdir" >&5
-echo "${ECHO_T}$objdir" >&6
-
-
-
-# Check whether --with-pic or --without-pic was given.
-if test "${with_pic+set}" = set; then
-  withval="$with_pic"
-  pic_mode="$withval"
-else
-  pic_mode=default
-fi;
-test -z "$pic_mode" && pic_mode=default
-
-# We assume here that the value for lt_cv_prog_cc_pic will not be cached
-# in isolation, and that seeing it set (from the cache) indicates that
-# the associated values are set (in the cache) correctly too.
-echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
-if test "${lt_cv_prog_cc_pic+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-   lt_cv_prog_cc_pic=
-  lt_cv_prog_cc_shlib=
-  lt_cv_prog_cc_wl=
-  lt_cv_prog_cc_static=
-  lt_cv_prog_cc_no_builtin=
-  lt_cv_prog_cc_can_build_shared=$can_build_shared
-
-  if test "$GCC" = yes; then
-    lt_cv_prog_cc_wl='-Wl,'
-    lt_cv_prog_cc_static='-static'
-
-    case $host_os in
-    aix*)
-      # Below there is a dirty hack to force normal static linking with -ldl
-      # The problem is because libdl dynamically linked with both libc and
-      # libC (AIX C++ library), which obviously doesn't included in libraries
-      # list by gcc. This cause undefined symbols with -static flags.
-      # This hack allows C programs to be linked with "-static -ldl", but
-      # not sure about C++ programs.
-      lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
-      ;;
-    amigaos*)
-      # FIXME: we need at least 68020 code to build shared libraries, but
-      # adding the `-m68020' flag to GCC prevents building anything better,
-      # like `-m68040'.
-      lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
-      ;;
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      lt_cv_prog_cc_pic='-fno-common'
-      ;;
-    cygwin* | mingw* | pw32* | os2*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      lt_cv_prog_cc_pic='-DDLL_EXPORT'
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-        lt_cv_prog_cc_pic=-Kconform_pic
-      fi
-      ;;
-    *)
-      lt_cv_prog_cc_pic='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for PIC flags for the system compiler.
-    case $host_os in
-    aix3* | aix4* | aix5*)
-      lt_cv_prog_cc_wl='-Wl,'
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       lt_cv_prog_cc_static='-Bstatic'
-      else
-       lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
-      lt_cv_prog_cc_wl='-Wl,'
-      lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
-      lt_cv_prog_cc_pic='+Z'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      lt_cv_prog_cc_wl='-Wl,'
-      lt_cv_prog_cc_static='-non_shared'
-      # PIC (with -KPIC) is the default.
-      ;;
-
-    cygwin* | mingw* | pw32* | os2*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      lt_cv_prog_cc_pic='-DDLL_EXPORT'
-      ;;
-
-    newsos6)
-      lt_cv_prog_cc_pic='-KPIC'
-      lt_cv_prog_cc_static='-Bstatic'
-      ;;
-
-    osf3* | osf4* | osf5*)
-      # All OSF/1 code is PIC.
-      lt_cv_prog_cc_wl='-Wl,'
-      lt_cv_prog_cc_static='-non_shared'
-      ;;
-
-    sco3.2v5*)
-      lt_cv_prog_cc_pic='-Kpic'
-      lt_cv_prog_cc_static='-dn'
-      lt_cv_prog_cc_shlib='-belf'
-      ;;
-
-    solaris*)
-      lt_cv_prog_cc_pic='-KPIC'
-      lt_cv_prog_cc_static='-Bstatic'
-      lt_cv_prog_cc_wl='-Wl,'
-      ;;
-
-    sunos4*)
-      lt_cv_prog_cc_pic='-PIC'
-      lt_cv_prog_cc_static='-Bstatic'
-      lt_cv_prog_cc_wl='-Qoption ld '
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-      lt_cv_prog_cc_pic='-KPIC'
-      lt_cv_prog_cc_static='-Bstatic'
-      lt_cv_prog_cc_wl='-Wl,'
-      ;;
-
-    uts4*)
-      lt_cv_prog_cc_pic='-pic'
-      lt_cv_prog_cc_static='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-       lt_cv_prog_cc_pic='-Kconform_pic'
-       lt_cv_prog_cc_static='-Bstatic'
-      fi
-      ;;
-
-    *)
-      lt_cv_prog_cc_can_build_shared=no
-      ;;
-    esac
-  fi
-
-fi
-
-if test -z "$lt_cv_prog_cc_pic"; then
-  echo "$as_me:$LINENO: result: none" >&5
-echo "${ECHO_T}none" >&6
-else
-  echo "$as_me:$LINENO: result: $lt_cv_prog_cc_pic" >&5
-echo "${ECHO_T}$lt_cv_prog_cc_pic" >&6
-
-  # Check to make sure the pic_flag actually works.
-  echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5
-echo $ECHO_N "checking if $compiler PIC flag $lt_cv_prog_cc_pic works... $ECHO_C" >&6
-  if test "${lt_cv_prog_cc_pic_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-      save_CFLAGS="$CFLAGS"
-    CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
-    cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-        case $host_os in
-      hpux9* | hpux10* | hpux11*)
-       # On HP-UX, both CC and GCC only warn that PIC is supported... then
-       # they create non-PIC objects.  So, if there were any warnings, we
-       # assume that PIC is not supported.
-       if test -s conftest.err; then
-         lt_cv_prog_cc_pic_works=no
-       else
-         lt_cv_prog_cc_pic_works=yes
-       fi
-       ;;
-      *)
-       lt_cv_prog_cc_pic_works=yes
-       ;;
-      esac
-
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-      lt_cv_prog_cc_pic_works=no
-
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-    CFLAGS="$save_CFLAGS"
-
-fi
-
-
-  if test "X$lt_cv_prog_cc_pic_works" = Xno; then
-    lt_cv_prog_cc_pic=
-    lt_cv_prog_cc_can_build_shared=no
-  else
-    lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
-  fi
-
-  echo "$as_me:$LINENO: result: $lt_cv_prog_cc_pic_works" >&5
-echo "${ECHO_T}$lt_cv_prog_cc_pic_works" >&6
-fi
-
-# Check for any special shared library compilation flags.
-if test -n "$lt_cv_prog_cc_shlib"; then
-  { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&5
-echo "$as_me: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&2;}
-  if echo "$old_CC $old_CFLAGS " | egrep -e "[         ]$lt_cv_prog_cc_shlib[  ]" >/dev/null; then :
-  else
-   { echo "$as_me:$LINENO: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
-echo "$as_me: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
-    lt_cv_prog_cc_can_build_shared=no
-  fi
-fi
-
-echo "$as_me:$LINENO: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5
-echo $ECHO_N "checking if $compiler static flag $lt_cv_prog_cc_static works... $ECHO_C" >&6
-if test "${lt_cv_prog_cc_static_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-    lt_cv_prog_cc_static_works=no
-  save_LDFLAGS="$LDFLAGS"
-  LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  lt_cv_prog_cc_static_works=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS="$save_LDFLAGS"
-
-fi
-
-
-# Belt *and* braces to stop my trousers falling down:
-test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
-echo "$as_me:$LINENO: result: $lt_cv_prog_cc_static_works" >&5
-echo "${ECHO_T}$lt_cv_prog_cc_static_works" >&6
-
-pic_flag="$lt_cv_prog_cc_pic"
-special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
-wl="$lt_cv_prog_cc_wl"
-link_static_flag="$lt_cv_prog_cc_static"
-no_builtin_flag="$lt_cv_prog_cc_no_builtin"
-can_build_shared="$lt_cv_prog_cc_can_build_shared"
-
-
-# Check to see if options -o and -c are simultaneously supported by compiler
-echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
-if test "${lt_cv_compiler_c_o+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-$rm -r conftest 2>/dev/null
-mkdir conftest
-cd conftest
-echo "int some_variable = 0;" > conftest.$ac_ext
-mkdir out
-# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
-# that will create temporary files in the current directory regardless of
-# the output directory.  Thus, making CWD read-only will cause this test
-# to fail, enabling locking or at least warning the user not to do parallel
-# builds.
-chmod -w .
-save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
-compiler_c_o=no
-if { (eval echo configure:4323: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
-  # The compiler can only warn and ignore the option if not recognized
-  # So say no if there are warnings
-  if test -s out/conftest.err; then
-    lt_cv_compiler_c_o=no
-  else
-    lt_cv_compiler_c_o=yes
-  fi
-else
-  # Append any errors to the config.log.
-  cat out/conftest.err 1>&5
-  lt_cv_compiler_c_o=no
-fi
-CFLAGS="$save_CFLAGS"
-chmod u+w .
-$rm conftest* out/*
-rmdir out
-cd ..
-rmdir conftest
-$rm -r conftest 2>/dev/null
-
-fi
-
-compiler_c_o=$lt_cv_compiler_c_o
-echo "$as_me:$LINENO: result: $compiler_c_o" >&5
-echo "${ECHO_T}$compiler_c_o" >&6
-
-if test x"$compiler_c_o" = x"yes"; then
-  # Check to see if we can write to a .lo
-  echo "$as_me:$LINENO: checking if $compiler supports -c -o file.lo" >&5
-echo $ECHO_N "checking if $compiler supports -c -o file.lo... $ECHO_C" >&6
-  if test "${lt_cv_compiler_o_lo+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-  lt_cv_compiler_o_lo=no
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -c -o conftest.lo"
-  save_objext="$ac_objext"
-  ac_objext=lo
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-int some_variable = 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-      # The compiler can only warn and ignore the option if not recognized
-    # So say no if there are warnings
-    if test -s conftest.err; then
-      lt_cv_compiler_o_lo=no
-    else
-      lt_cv_compiler_o_lo=yes
-    fi
-
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-  ac_objext="$save_objext"
-  CFLAGS="$save_CFLAGS"
-
-fi
-
-  compiler_o_lo=$lt_cv_compiler_o_lo
-  echo "$as_me:$LINENO: result: $compiler_o_lo" >&5
-echo "${ECHO_T}$compiler_o_lo" >&6
-else
-  compiler_o_lo=no
-fi
-
-# Check to see if we can do hard links to lock some files if needed
-hard_links="nottested"
-if test "$compiler_c_o" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
-  hard_links=yes
-  $rm conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  echo "$as_me:$LINENO: result: $hard_links" >&5
-echo "${ECHO_T}$hard_links" >&6
-  if test "$hard_links" = no; then
-    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-
-if test "$GCC" = yes; then
-  # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
-  echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
-  echo "int some_variable = 0;" > conftest.$ac_ext
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
-  compiler_rtti_exceptions=no
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-int some_variable = 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-      # The compiler can only warn and ignore the option if not recognized
-    # So say no if there are warnings
-    if test -s conftest.err; then
-      compiler_rtti_exceptions=no
-    else
-      compiler_rtti_exceptions=yes
-    fi
-
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-  CFLAGS="$save_CFLAGS"
-  echo "$as_me:$LINENO: result: $compiler_rtti_exceptions" >&5
-echo "${ECHO_T}$compiler_rtti_exceptions" >&6
-
-  if test "$compiler_rtti_exceptions" = "yes"; then
-    no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
-  else
-    no_builtin_flag=' -fno-builtin'
-  fi
-fi
-
-# See if the linker supports building shared libraries.
-echo "$as_me:$LINENO: checking whether the linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the linker ($LD) supports shared libraries... $ECHO_C" >&6
-
-allow_undefined_flag=
-no_undefined_flag=
-need_lib_prefix=unknown
-need_version=unknown
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-archive_cmds=
-archive_expsym_cmds=
-old_archive_from_new_cmds=
-old_archive_from_expsyms_cmds=
-export_dynamic_flag_spec=
-whole_archive_flag_spec=
-thread_safe_flag_spec=
-hardcode_into_libs=no
-hardcode_libdir_flag_spec=
-hardcode_libdir_separator=
-hardcode_direct=no
-hardcode_minus_L=no
-hardcode_shlibpath_var=unsupported
-runpath_var=
-link_all_deplibs=unknown
-always_export_symbols=no
-export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
-# include_expsyms should be a list of space-separated symbols to be *always*
-# included in the symbol list
-include_expsyms=
-# exclude_expsyms can be an egrep regular expression of symbols to exclude
-# it will be wrapped by ` (' and `)$', so one must not match beginning or
-# end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-# as well as any symbol that contains `d'.
-exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
-# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-# platforms (ab)use it in PIC code, but their linkers get confused if
-# the symbol is explicitly referenced.  Since portable code cannot
-# rely on this symbol name, it's probably fine to never include it in
-# preloaded symbol tables.
-extract_expsyms_cmds=
-
-case $host_os in
-cygwin* | mingw* | pw32*)
-  # FIXME: the MSVC++ port hasn't been tested in a loooong time
-  # When not using gcc, we currently assume that we are using
-  # Microsoft Visual C++.
-  if test "$GCC" != yes; then
-    with_gnu_ld=no
-  fi
-  ;;
-openbsd*)
-  with_gnu_ld=no
-  ;;
-esac
-
-ld_shlibs=yes
-if test "$with_gnu_ld" = yes; then
-  # If archive_cmds runs LD, not CC, wlarc should be empty
-  wlarc='${wl}'
-
-  # See if GNU ld supports shared libraries.
-  case $host_os in
-  aix3* | aix4* | aix5*)
-    # On AIX, the GNU linker is very broken
-    # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
-    ld_shlibs=no
-    cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
-    ;;
-
-  amigaos*)
-    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_minus_L=yes
-
-    # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
-    # that the semantics of dynamic libraries on AmigaOS, at least up
-    # to version 4, is to share data among multiple programs linked
-    # with the same dynamic library.  Since this doesn't match the
-    # behavior of shared libraries on other platforms, we can use
-    # them.
-    ld_shlibs=no
-    ;;
-
-  beos*)
-    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      allow_undefined_flag=unsupported
-      # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-      # support --undefined.  This deserves some investigation.  FIXME
-      archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-    else
-      ld_shlibs=no
-    fi
-    ;;
-
-  cygwin* | mingw* | pw32*)
-    # hardcode_libdir_flag_spec is actually meaningless, as there is
-    # no search path for DLLs.
-    hardcode_libdir_flag_spec='-L$libdir'
-    allow_undefined_flag=unsupported
-    always_export_symbols=yes
-
-    extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
-      sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
-      test -f $output_objdir/impgen.exe || (cd $output_objdir && \
-      if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
-      else $CC -o impgen impgen.c ; fi)~
-      $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
-
-    old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
-
-    # cygwin and mingw dlls have different entry points and sets of symbols
-    # to exclude.
-    # FIXME: what about values for MSVC?
-    dll_entry=__cygwin_dll_entry@12
-    dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~
-    case $host_os in
-    mingw*)
-      # mingw values
-      dll_entry=_DllMainCRTStartup@12
-      dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~
-      ;;
-    esac
-
-    # mingw and cygwin differ, and it's simplest to just exclude the union
-    # of the two symbol sets.
-    dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12
-
-    # recent cygwin and mingw systems supply a stub DllMain which the user
-    # can override, but on older systems we have to supply one (in ltdll.c)
-    if test "x$lt_cv_need_dllmain" = "xyes"; then
-      ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
-      ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~
-       test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
-    else
-      ltdll_obj=
-      ltdll_cmds=
-    fi
-
-    # Extract the symbol export list from an `--export-all' def file,
-    # then regenerate the def file from the symbol export list, so that
-    # the compiled dll only exports the symbol export list.
-    # Be careful not to strip the DATA tag left be newer dlltools.
-    export_symbols_cmds="$ltdll_cmds"'
-      $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
-      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
-
-    # If the export-symbols file already is a .def file (1st line
-    # is EXPORTS), use it as is.
-    # If DATA tags from a recent dlltool are present, honour them!
-    archive_expsym_cmds='if test "x`sed 1q $export_symbols`" = xEXPORTS; then
-       cp $export_symbols $output_objdir/$soname-def;
-      else
-       echo EXPORTS > $output_objdir/$soname-def;
-       _lt_hint=1;
-       cat $export_symbols | while read symbol; do
-        set dummy \$symbol;
-        case \$# in
-          2) echo "   \$2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
-          4) echo "   \$2 \$3 \$4 ; " >> $output_objdir/$soname-def; _lt_hint=`expr \$_lt_hint - 1`;;
-          *) echo "     \$2 @ \$_lt_hint \$3 ; " >> $output_objdir/$soname-def;;
-        esac;
-        _lt_hint=`expr 1 + \$_lt_hint`;
-       done;
-      fi~
-      '"$ltdll_cmds"'
-      $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
-      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
-      $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
-      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
-      $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
-    ;;
-
-  netbsd*)
-    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-      archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-      wlarc=
-    else
-      archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-    fi
-    ;;
-
-  solaris* | sysv5*)
-    if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
-      ld_shlibs=no
-      cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
-    elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-    else
-      ld_shlibs=no
-    fi
-    ;;
-
-  sunos4*)
-    archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-    wlarc=
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  *)
-    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-    else
-      ld_shlibs=no
-    fi
-    ;;
-  esac
-
-  if test "$ld_shlibs" = yes; then
-    runpath_var=LD_RUN_PATH
-    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
-    export_dynamic_flag_spec='${wl}--export-dynamic'
-    case $host_os in
-    cygwin* | mingw* | pw32*)
-      # dlltool doesn't understand --whole-archive et. al.
-      whole_archive_flag_spec=
-      ;;
-    *)
-      # ancient GNU ld didn't support --whole-archive et. al.
-      if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
-       whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-      else
-       whole_archive_flag_spec=
-      fi
-      ;;
-    esac
-  fi
-else
-  # PORTME fill in a description of your system's linker (not GNU ld)
-  case $host_os in
-  aix3*)
-    allow_undefined_flag=unsupported
-    always_export_symbols=yes
-    archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-    # Note: this linker hardcodes the directories in LIBPATH if there
-    # are no directories specified by -L.
-    hardcode_minus_L=yes
-    if test "$GCC" = yes && test -z "$link_static_flag"; then
-      # Neither direct hardcoding nor static linking is supported with a
-      # broken collect2.
-      hardcode_direct=unsupported
-    fi
-    ;;
-
-  aix4* | aix5*)
-    if test "$host_cpu" = ia64; then
-      # On IA64, the linker does run time linking by default, so we don't
-      # have to do anything special.
-      aix_use_runtimelinking=no
-      exp_sym_flag='-Bexport'
-      no_entry_flag=""
-    else
-      aix_use_runtimelinking=no
-
-      # Test if we are trying to use run time linking or normal
-      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-      # need to do runtime linking.
-      case $host_os in aix4.[23]|aix4.[23].*|aix5*)
-       for ld_flag in $LDFLAGS; do
-         case $ld_flag in
-         *-brtl*)
-           aix_use_runtimelinking=yes
-           break
-         ;;
-         esac
-       done
-      esac
-
-      exp_sym_flag='-bexport'
-      no_entry_flag='-bnoentry'
-    fi
-
-    # When large executables or shared objects are built, AIX ld can
-    # have problems creating the table of contents.  If linking a library
-    # or program results in "error TOC overflow" add -mminimal-toc to
-    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-    hardcode_direct=yes
-    archive_cmds=''
-    hardcode_libdir_separator=':'
-    if test "$GCC" = yes; then
-      case $host_os in aix4.[012]|aix4.[012].*)
-       collect2name=`${CC} -print-prog-name=collect2`
-       if test -f "$collect2name" && \
-         strings "$collect2name" | grep resolve_lib_name >/dev/null
-       then
-         # We have reworked collect2
-         hardcode_direct=yes
-       else
-         # We have old collect2
-         hardcode_direct=unsupported
-         # It fails to find uninstalled libraries when the uninstalled
-         # path is not listed in the libpath.  Setting hardcode_minus_L
-         # to unsupported forces relinking
-         hardcode_minus_L=yes
-         hardcode_libdir_flag_spec='-L$libdir'
-         hardcode_libdir_separator=
-       fi
-      esac
-
-      shared_flag='-shared'
-    else
-      # not using gcc
-      if test "$host_cpu" = ia64; then
-       shared_flag='${wl}-G'
-      else
-       if test "$aix_use_runtimelinking" = yes; then
-         shared_flag='${wl}-G'
-       else
-         shared_flag='${wl}-bM:SRE'
-       fi
-      fi
-    fi
-
-    # It seems that -bexpall can do strange things, so it is better to
-    # generate a list of symbols to export.
-    always_export_symbols=yes
-    if test "$aix_use_runtimelinking" = yes; then
-      # Warning - without using the other runtime loading flags (-brtl),
-      # -berok will link without error, but may produce a broken library.
-      allow_undefined_flag='-berok'
-      hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
-      archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-    else
-      if test "$host_cpu" = ia64; then
-       hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
-       allow_undefined_flag="-z nodefs"
-       archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
-      else
-       hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
-       # Warning - without using the other run time loading flags,
-       # -berok will link without error, but may produce a broken library.
-       allow_undefined_flag='${wl}-berok'
-       # This is a bit strange, but is similar to how AIX traditionally builds
-       # it's shared libraries.
-       archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
-      fi
-    fi
-    ;;
-
-  amigaos*)
-    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_minus_L=yes
-    # see comment about different semantics on the GNU ld section
-    ld_shlibs=no
-    ;;
-
-  cygwin* | mingw* | pw32*)
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    # hardcode_libdir_flag_spec is actually meaningless, as there is
-    # no search path for DLLs.
-    hardcode_libdir_flag_spec=' '
-    allow_undefined_flag=unsupported
-    # Tell ltmain to make .lib files, not .a files.
-    libext=lib
-    # FIXME: Setting linknames here is a bad hack.
-    archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-    # The linker will automatically build a .lib file if we build a DLL.
-    old_archive_from_new_cmds='true'
-    # FIXME: Should let the user specify the lib program.
-    old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
-    fix_srcfile_path='`cygpath -w "$srcfile"`'
-    ;;
-
-  darwin* | rhapsody*)
-    case "$host_os" in
-    rhapsody* | darwin1.[012])
-      allow_undefined_flag='-undefined suppress'
-      ;;
-    *) # Darwin 1.3 on
-      allow_undefined_flag='-flat_namespace -undefined suppress'
-      ;;
-    esac
-    # FIXME: Relying on posixy $() will cause problems for
-    #        cross-compilation, but unfortunately the echo tests do not
-    #        yet detect zsh echo's removal of \ escapes.  Also zsh mangles
-    #       `"' quotes if we put them in here... so don't!
-    archive_cmds='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs && $CC $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib ${lib}-master.o $deplibs$linker_flags $(test .$module != .yes && echo -install_name $rpath/$soname $verstring)'
-    # We need to add '_' to the symbols in $export_symbols first
-    #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    whole_archive_flag_spec='-all_load $convenience'
-    ;;
-
-  freebsd1*)
-    ld_shlibs=no
-    ;;
-
-  # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-  # support.  Future versions do this automatically, but an explicit c++rt0.o
-  # does not break anything, and helps significantly (at the cost of a little
-  # extra space).
-  freebsd2.2*)
-    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-  freebsd2*)
-    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-    hardcode_direct=yes
-    hardcode_minus_L=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-  freebsd*)
-    archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  hpux9* | hpux10* | hpux11*)
-    case $host_os in
-    hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
-    *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
-    esac
-    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-    hardcode_libdir_separator=:
-    hardcode_direct=yes
-    hardcode_minus_L=yes # Not in the search PATH, but as the default
-                        # location of the library.
-    export_dynamic_flag_spec='${wl}-E'
-    ;;
-
-  irix5* | irix6* | nonstopux*)
-    if test "$GCC" = yes; then
-      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    else
-      archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-      hardcode_libdir_flag_spec='-rpath $libdir'
-    fi
-    hardcode_libdir_separator=:
-    link_all_deplibs=yes
-    ;;
-
-  netbsd*)
-    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-    else
-      archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-    fi
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  newsos6)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-    hardcode_direct=yes
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    hardcode_libdir_separator=:
-    hardcode_shlibpath_var=no
-    ;;
-
-  openbsd*)
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-      export_dynamic_flag_spec='${wl}-E'
-    else
-      case "$host_os" in
-      openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-       hardcode_libdir_flag_spec='-R$libdir'
-        ;;
-      *)
-        archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-        ;;
-      esac
-    fi
-    ;;
-
-  os2*)
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_minus_L=yes
-    allow_undefined_flag=unsupported
-    archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-    old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-    ;;
-
-  osf3*)
-    if test "$GCC" = yes; then
-      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-    else
-      allow_undefined_flag=' -expect_unresolved \*'
-      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-    fi
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    hardcode_libdir_separator=:
-    ;;
-
-  osf4* | osf5*)       # as osf3* with the addition of -msym flag
-    if test "$GCC" = yes; then
-      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    else
-      allow_undefined_flag=' -expect_unresolved \*'
-      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-      archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
-      $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
-
-      #Both c and cxx compiler support -rpath directly
-      hardcode_libdir_flag_spec='-rpath $libdir'
-    fi
-    hardcode_libdir_separator=:
-    ;;
-
-  sco3.2v5*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-    hardcode_shlibpath_var=no
-    runpath_var=LD_RUN_PATH
-    hardcode_runpath_var=yes
-    export_dynamic_flag_spec='${wl}-Bexport'
-    ;;
-
-  solaris*)
-    # gcc --version < 3.0 without binutils cannot create self contained
-    # shared libraries reliably, requiring libgcc.a to resolve some of
-    # the object symbols generated in some cases.  Libraries that use
-    # assert need libgcc.a to resolve __eprintf, for example.  Linking
-    # a copy of libgcc.a into every shared library to guarantee resolving
-    # such symbols causes other problems:  According to Tim Van Holder
-    # <tim.van.holder@pandora.be>, C++ libraries end up with a separate
-    # (to the application) exception stack for one thing.
-    no_undefined_flag=' -z defs'
-    if test "$GCC" = yes; then
-      case `$CC --version 2>/dev/null` in
-      [12].*)
-       cat <<EOF 1>&2
-
-*** Warning: Releases of GCC earlier than version 3.0 cannot reliably
-*** create self contained shared libraries on Solaris systems, without
-*** introducing a dependency on libgcc.a.  Therefore, libtool is disabling
-*** -no-undefined support, which will at least allow you to build shared
-*** libraries.  However, you may find that when you link such libraries
-*** into an application without using GCC, you have to manually add
-*** \`gcc --print-libgcc-file-name\` to the link command.  We urge you to
-*** upgrade to a newer version of GCC.  Another option is to rebuild your
-*** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer.
-
-EOF
-        no_undefined_flag=
-       ;;
-      esac
-    fi
-    # $CC -shared without GNU ld will not create a library from C++
-    # object files and a static libstdc++, better avoid it by now
-    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-               $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_shlibpath_var=no
-    case $host_os in
-    solaris2.[0-5] | solaris2.[0-5].*) ;;
-    *) # Supported since Solaris 2.6 (maybe 2.5.1?)
-      whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
-    esac
-    link_all_deplibs=yes
-    ;;
-
-  sunos4*)
-    if test "x$host_vendor" = xsequent; then
-      # Use $CC to link under sequent, because it throws in some extra .o
-      # files that make .init and .fini sections work.
-      archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-    else
-      archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-    fi
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_direct=yes
-    hardcode_minus_L=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  sysv4)
-    case $host_vendor in
-      sni)
-        archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-        hardcode_direct=yes # is this really true???
-        ;;
-      siemens)
-        ## LD is ld it makes a PLAMLIB
-        ## CC just makes a GrossModule.
-        archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-        reload_cmds='$CC -r -o $output$reload_objs'
-        hardcode_direct=no
-        ;;
-      motorola)
-        archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-        hardcode_direct=no #Motorola manual says yes, but my tests say they lie
-        ;;
-    esac
-    runpath_var='LD_RUN_PATH'
-    hardcode_shlibpath_var=no
-    ;;
-
-  sysv4.3*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-    hardcode_shlibpath_var=no
-    export_dynamic_flag_spec='-Bexport'
-    ;;
-
-  sysv5*)
-    no_undefined_flag=' -z text'
-    # $CC -shared without GNU ld will not create a library from C++
-    # object files and a static libstdc++, better avoid it by now
-    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-               $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
-    hardcode_libdir_flag_spec=
-    hardcode_shlibpath_var=no
-    runpath_var='LD_RUN_PATH'
-    ;;
-
-  uts4*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_shlibpath_var=no
-    ;;
-
-  dgux*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_shlibpath_var=no
-    ;;
-
-  sysv4*MP*)
-    if test -d /usr/nec; then
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_shlibpath_var=no
-      runpath_var=LD_RUN_PATH
-      hardcode_runpath_var=yes
-      ld_shlibs=yes
-    fi
-    ;;
-
-  sysv4.2uw2*)
-    archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-    hardcode_direct=yes
-    hardcode_minus_L=no
-    hardcode_shlibpath_var=no
-    hardcode_runpath_var=yes
-    runpath_var=LD_RUN_PATH
-    ;;
-
-  sysv5uw7* | unixware7*)
-    no_undefined_flag='${wl}-z ${wl}text'
-    if test "$GCC" = yes; then
-      archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-    else
-      archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-    fi
-    runpath_var='LD_RUN_PATH'
-    hardcode_shlibpath_var=no
-    ;;
-
-  *)
-    ld_shlibs=no
-    ;;
-  esac
-fi
-echo "$as_me:$LINENO: result: $ld_shlibs" >&5
-echo "${ECHO_T}$ld_shlibs" >&6
-test "$ld_shlibs" = no && can_build_shared=no
-
-# Check hardcoding attributes.
-echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" || \
-   test -n "$runpath_var"; then
-
-  # We can hardcode non-existant directories.
-  if test "$hardcode_direct" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$hardcode_shlibpath_var" != no &&
-     test "$hardcode_minus_L" != no; then
-    # Linking always hardcodes the temporary library directory.
-    hardcode_action=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    hardcode_action=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  hardcode_action=unsupported
-fi
-echo "$as_me:$LINENO: result: $hardcode_action" >&5
-echo "${ECHO_T}$hardcode_action" >&6
-
-striplib=
-old_striplib=
-echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
-echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
-if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-# PORTME Fill in your ld.so characteristics
-echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-
-case $host_os in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}.so$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}.so$major'
-  ;;
-
-aix4* | aix5*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
-    # AIX 5 supports IA64
-    library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
-    shlibpath_var=LD_LIBRARY_PATH
-  else
-    # With GCC up to 2.95.x, collect2 would create an import file
-    # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
-    # development snapshots of GCC prior to 3.0.
-    case $host_os in
-      aix4 | aix4.[01] | aix4.[01].*)
-       if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-            echo ' yes '
-            echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
-         :
-       else
-         can_build_shared=no
-       fi
-       ;;
-    esac
-    # AIX (on Power*) has no versioning support, so currently we can
-    # not hardcode correct soname into executable. Probably we can
-    # add versioning support to collect2, so additional links can
-    # be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-      # instead of lib<name>.a to let people know that these are not
-      # typical AIX shared libraries.
-      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-    else
-      # We preserve .a as extension for shared libraries through AIX4.2
-      # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}.so$major'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  hardcode_into_libs=yes
-  ;;
-
-amigaos*)
-  library_names_spec='$libname.ixlibrary $libname.a'
-  # Create ${libname}_ixlibrary.a entries in /sys/libs.
-  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
-  ;;
-
-beos*)
-  library_names_spec='${libname}.so'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi4*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  export_dynamic_flag_spec=-rdynamic
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw* | pw32*)
-  version_type=windows
-  need_version=no
-  need_lib_prefix=no
-  case $GCC,$host_os in
-  yes,cygwin*)
-    library_names_spec='$libname.dll.a'
-    soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
-    postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog .libs/$dlname \$dldir/$dlname'
-    postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $rm \$dlpath'
-    ;;
-  yes,mingw*)
-    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
-    sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g" -e "s,=/,/,g"`
-    ;;
-  yes,pw32*)
-    library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/./-/g'`${versuffix}.dll'
-    ;;
-  *)
-    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  ;;
-
-darwin* | rhapsody*)
-  dynamic_linker="$host_os dyld"
-  version_type=darwin
-  need_lib_prefix=no
-  need_version=no
-  # FIXME: Relying on posixy $() will cause problems for
-  #        cross-compilation, but unfortunately the echo tests do not
-  #        yet detect zsh echo's removal of \ escapes.
-  library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
-  soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
-  shlibpath_overrides_runpath=yes
-  shlibpath_var=DYLD_LIBRARY_PATH
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-freebsd*)
-  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
-  version_type=freebsd-$objformat
-  case $version_type in
-    freebsd-elf*)
-      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_os in
-  freebsd2*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  *)
-    shlibpath_overrides_runpath=no
-    hardcode_into_libs=yes
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  hardcode_into_libs=yes
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  dynamic_linker="$host_os dld.sl"
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  shlibpath_var=SHLIB_PATH
-  shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-  library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
-  soname_spec='${libname}${release}.sl$major'
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-    nonstopux*) version_type=nonstopux ;;
-    *)          version_type=irix ;;
-  esac
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}.so$major'
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
-  case $host_os in
-  irix5* | nonstopux*)
-    libsuff= shlibsuff=
-    ;;
-  *)
-    case $LD in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # This implies no fast_install, which is unacceptable.
-  # Some rework will be needed to allow for fast_install
-  # before this can be enabled.
-  hardcode_into_libs=yes
-
-  # We used to test for /lib/ld.so.1 and disable shared libraries on
-  # powerpc, because MkLinux only supported shared libraries with the
-  # GNU dynamic linker.  Since this was broken with cross compilers,
-  # most powerpc-linux boxes support dynamic linking these days and
-  # people can always --disable-shared, the test was removed, and we
-  # assume the GNU/Linux dynamic linker is in use.
-  dynamic_linker='GNU/Linux ld.so'
-  ;;
-
-netbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
-    soname_spec='${libname}${release}.so$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  ;;
-
-newsos6)
-  version_type=linux
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-openbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case "$host_os" in
-    openbsd2.[89] | openbsd2.[89].*)
-      shlibpath_overrides_runpath=no
-      ;;
-    *)
-      shlibpath_overrides_runpath=yes
-      ;;
-    esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-os2*)
-  libname_spec='$name'
-  need_lib_prefix=no
-  library_names_spec='$libname.dll $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_version=no
-  soname_spec='${libname}${release}.so$major'
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  hardcode_into_libs=yes
-  ;;
-
-sco3.2v5*)
-  version_type=osf
-  soname_spec='${libname}${release}.so$major'
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-  version_type=linux
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_vendor in
-    sni)
-      shlibpath_overrides_runpath=no
-      need_lib_prefix=no
-      export_dynamic_flag_spec='${wl}-Blargedynsym'
-      runpath_var=LD_RUN_PATH
-      ;;
-    siemens)
-      need_lib_prefix=no
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      ;;
-  esac
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
-    soname_spec='$libname.so.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6
-test "$dynamic_linker" = no && can_build_shared=no
-
-# Report the final consequences.
-echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
-echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $can_build_shared" >&5
-echo "${ECHO_T}$can_build_shared" >&6
-
-echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
-echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case "$host_os" in
-aix3*)
-  test "$enable_shared" = yes && enable_static=no
-  if test -n "$RANLIB"; then
-    archive_cmds="$archive_cmds~\$RANLIB \$lib"
-    postinstall_cmds='$RANLIB $lib'
-  fi
-  ;;
-
-aix4*)
-  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-    test "$enable_shared" = yes && enable_static=no
-  fi
-  ;;
-esac
-echo "$as_me:$LINENO: result: $enable_shared" >&5
-echo "${ECHO_T}$enable_shared" >&6
-
-echo "$as_me:$LINENO: checking whether to build static libraries" >&5
-echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-echo "$as_me:$LINENO: result: $enable_static" >&5
-echo "${ECHO_T}$enable_static" >&6
-
-if test "$hardcode_action" = relink; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-  lt_cv_dlopen=no
-  lt_cv_dlopen_libs=
-
-  case $host_os in
-  beos*)
-    lt_cv_dlopen="load_add_on"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ;;
-
-  cygwin* | mingw* | pw32*)
-    lt_cv_dlopen="LoadLibrary"
-    lt_cv_dlopen_libs=
-   ;;
-
-  *)
-    echo "$as_me:$LINENO: checking for shl_load" >&5
-echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
-if test "${ac_cv_func_shl_load+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char shl_load (); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char shl_load ();
-char (*f) ();
-
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_shl_load) || defined (__stub___shl_load)
-choke me
-#else
-f = shl_load;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_shl_load=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_shl_load=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
-echo "${ECHO_T}$ac_cv_func_shl_load" >&6
-if test $ac_cv_func_shl_load = yes; then
-  lt_cv_dlopen="shl_load"
-else
-  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
-echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char shl_load ();
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-shl_load ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dld_shl_load=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_dld_shl_load=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
-if test $ac_cv_lib_dld_shl_load = yes; then
-  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
-else
-  echo "$as_me:$LINENO: checking for dlopen" >&5
-echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
-if test "${ac_cv_func_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char dlopen (); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlopen ();
-char (*f) ();
-
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_dlopen) || defined (__stub___dlopen)
-choke me
-#else
-f = dlopen;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_dlopen=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
-echo "${ECHO_T}$ac_cv_func_dlopen" >&6
-if test $ac_cv_func_dlopen = yes; then
-  lt_cv_dlopen="dlopen"
-else
-  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlopen ();
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dl_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_dl_dlopen=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
-if test $ac_cv_lib_dl_dlopen = yes; then
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
-echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlopen ();
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_svld_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_svld_dlopen=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
-if test $ac_cv_lib_svld_dlopen = yes; then
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-else
-  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
-echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dld_link ();
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-dld_link ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dld_dld_link=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_dld_dld_link=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
-if test $ac_cv_lib_dld_dld_link = yes; then
-  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-    ;;
-  esac
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
-    enable_dlopen=no
-  fi
-
-  case $lt_cv_dlopen in
-  dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-        test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
-    save_LDFLAGS="$LDFLAGS"
-    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
-echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
-if test "${lt_cv_dlopen_self+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-         if test "$cross_compiling" = yes; then :
-  lt_cv_dlopen_self=cross
-else
-    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<EOF
-#line 6145 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL          RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL                DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL                0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW         DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW       RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW     DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW     0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-      /* dlclose (self); */
-    }
-
-    exit (status);
-}
-EOF
-  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
-      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
-      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
-    esac
-  else :
-    # compilation failed
-    lt_cv_dlopen_self=no
-  fi
-fi
-rm -fr conftest*
-
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
-echo "${ECHO_T}$lt_cv_dlopen_self" >&6
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      LDFLAGS="$LDFLAGS $link_static_flag"
-      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
-echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
-if test "${lt_cv_dlopen_self_static+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-         if test "$cross_compiling" = yes; then :
-  lt_cv_dlopen_self_static=cross
-else
-    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<EOF
-#line 6243 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL          RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL                DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL                0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW         DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW       RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW     DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW     0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-      /* dlclose (self); */
-    }
-
-    exit (status);
-}
-EOF
-  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
-      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
-      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
-    esac
-  else :
-    # compilation failed
-    lt_cv_dlopen_self_static=no
-  fi
-fi
-rm -fr conftest*
-
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
-echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
-    fi
-
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
-    ;;
-  esac
-
-  case $lt_cv_dlopen_self in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case $lt_cv_dlopen_self_static in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-
-
-if test "$enable_shared" = yes && test "$GCC" = yes; then
-  case $archive_cmds in
-  *'~'*)
-    # FIXME: we may have to deal with multi-command sequences.
-    ;;
-  '$CC '*)
-    # Test whether the compiler implicitly links with -lc since on some
-    # systems, -lgcc has to come before -lc. If gcc already passes -lc
-    # to ld, don't add -lc before -lgcc.
-    echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
-    if test "${lt_cv_archive_cmds_need_lc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  $rm conftest*
-    echo 'static int dummy;' > conftest.$ac_ext
-
-    if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-      soname=conftest
-      lib=conftest
-      libobjs=conftest.$ac_objext
-      deplibs=
-      wl=$lt_cv_prog_cc_wl
-      compiler_flags=-v
-      linker_flags=-v
-      verstring=
-      output_objdir=.
-      libname=conftest
-      save_allow_undefined_flag=$allow_undefined_flag
-      allow_undefined_flag=
-      if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
-  (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-      then
-       lt_cv_archive_cmds_need_lc=no
-      else
-       lt_cv_archive_cmds_need_lc=yes
-      fi
-      allow_undefined_flag=$save_allow_undefined_flag
-    else
-      cat conftest.err 1>&5
-    fi
-fi
-
-    echo "$as_me:$LINENO: result: $lt_cv_archive_cmds_need_lc" >&5
-echo "${ECHO_T}$lt_cv_archive_cmds_need_lc" >&6
-    ;;
-  esac
-fi
-need_lc=${lt_cv_archive_cmds_need_lc-yes}
-
-# The second clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
-  :
-else
-  # If there is no Makefile yet, we rely on a make rule to execute
-  # `config.status --recheck' to rerun these tests and create the
-  # libtool script then.
-  test -f Makefile && make "$ltmain"
-fi
-
-if test -f "$ltmain"; then
-  trap "$rm \"${ofile}T\"; exit 1" 1 2 15
-  $rm -f "${ofile}T"
-
-  echo creating $ofile
-
-  # Now quote all the things that may contain metacharacters while being
-  # careful not to overquote the AC_SUBSTed values.  We take copies of the
-  # variables and quote the copies for generation of the libtool script.
-  for var in echo old_CC old_CFLAGS SED \
-    AR AR_FLAGS CC LD LN_S NM SHELL \
-    reload_flag reload_cmds wl \
-    pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
-    thread_safe_flag_spec whole_archive_flag_spec libname_spec \
-    library_names_spec soname_spec \
-    RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
-    old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
-    postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
-    old_striplib striplib file_magic_cmd export_symbols_cmds \
-    deplibs_check_method allow_undefined_flag no_undefined_flag \
-    finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
-    global_symbol_to_c_name_address \
-    hardcode_libdir_flag_spec hardcode_libdir_separator  \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
-
-    case $var in
-    reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
-    extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  cat <<__EOF__ > "${ofile}T"
-#! $SHELL
-
-# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-# Copyright (C) 1996-2000 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# 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.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# A sed that does not truncate output.
-SED=$lt_SED
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="${SED} -e s/^X//"
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-# ### BEGIN LIBTOOL CONFIG
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$need_lc
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# The default C compiler.
-CC=$lt_CC
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC
-
-# The linker used to build libraries.
-LD=$lt_LD
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_wl
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_pic_flag
-pic_mode=$pic_mode
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_compiler_c_o
-
-# Can we write directly to a .lo ?
-compiler_o_lo=$lt_compiler_o_lo
-
-# Must we lock files when doing compilation ?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_link_static_flag
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_no_builtin_flag
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names.  First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds
-archive_expsym_cmds=$lt_archive_expsym_cmds
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator
-
-# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms
-
-# ### END LIBTOOL CONFIG
-
-__EOF__
-
-  case $host_os in
-  aix3*)
-    cat <<\EOF >> "${ofile}T"
-
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-EOF
-    ;;
-  esac
-
-  case $host_os in
-  cygwin* | mingw* | pw32* | os2*)
-    cat <<'EOF' >> "${ofile}T"
-      # This is a source program that is used to create dlls on Windows
-      # Don't remove nor modify the starting and closing comments
-# /* ltdll.c starts here */
-# #define WIN32_LEAN_AND_MEAN
-# #include <windows.h>
-# #undef WIN32_LEAN_AND_MEAN
-# #include <stdio.h>
-#
-# #ifndef __CYGWIN__
-# #  ifdef __CYGWIN32__
-# #    define __CYGWIN__ __CYGWIN32__
-# #  endif
-# #endif
-#
-# #ifdef __cplusplus
-# extern "C" {
-# #endif
-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-# #ifdef __cplusplus
-# }
-# #endif
-#
-# #ifdef __CYGWIN__
-# #include <cygwin/cygwin_dll.h>
-# DECLARE_CYGWIN_DLL( DllMain );
-# #endif
-# HINSTANCE __hDllInstance_base;
-#
-# BOOL APIENTRY
-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-# {
-#   __hDllInstance_base = hInst;
-#   return TRUE;
-# }
-# /* ltdll.c ends here */
-       # This is a source program that is used to create import libraries
-       # on Windows for dlls which lack them. Don't remove nor modify the
-       # starting and closing comments
-# /* impgen.c starts here */
-# /*   Copyright (C) 1999-2000 Free Software Foundation, Inc.
-#
-#  This file is part of GNU libtool.
-#
-#  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.
-#  */
-#
-# #include <stdio.h>           /* for printf() */
-# #include <unistd.h>          /* for open(), lseek(), read() */
-# #include <fcntl.h>           /* for O_RDONLY, O_BINARY */
-# #include <string.h>          /* for strdup() */
-#
-# /* O_BINARY isn't required (or even defined sometimes) under Unix */
-# #ifndef O_BINARY
-# #define O_BINARY 0
-# #endif
-#
-# static unsigned int
-# pe_get16 (fd, offset)
-#      int fd;
-#      int offset;
-# {
-#   unsigned char b[2];
-#   lseek (fd, offset, SEEK_SET);
-#   read (fd, b, 2);
-#   return b[0] + (b[1]<<8);
-# }
-#
-# static unsigned int
-# pe_get32 (fd, offset)
-#     int fd;
-#     int offset;
-# {
-#   unsigned char b[4];
-#   lseek (fd, offset, SEEK_SET);
-#   read (fd, b, 4);
-#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-# }
-#
-# static unsigned int
-# pe_as32 (ptr)
-#      void *ptr;
-# {
-#   unsigned char *b = ptr;
-#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-# }
-#
-# int
-# main (argc, argv)
-#     int argc;
-#     char *argv[];
-# {
-#     int dll;
-#     unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
-#     unsigned long export_rva, export_size, nsections, secptr, expptr;
-#     unsigned long name_rvas, nexp;
-#     unsigned char *expdata, *erva;
-#     char *filename, *dll_name;
-#
-#     filename = argv[1];
-#
-#     dll = open(filename, O_RDONLY|O_BINARY);
-#     if (dll < 1)
-#      return 1;
-#
-#     dll_name = filename;
-#
-#     for (i=0; filename[i]; i++)
-#      if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
-#          dll_name = filename + i +1;
-#
-#     pe_header_offset = pe_get32 (dll, 0x3c);
-#     opthdr_ofs = pe_header_offset + 4 + 20;
-#     num_entries = pe_get32 (dll, opthdr_ofs + 92);
-#
-#     if (num_entries < 1) /* no exports */
-#      return 1;
-#
-#     export_rva = pe_get32 (dll, opthdr_ofs + 96);
-#     export_size = pe_get32 (dll, opthdr_ofs + 100);
-#     nsections = pe_get16 (dll, pe_header_offset + 4 +2);
-#     secptr = (pe_header_offset + 4 + 20 +
-#            pe_get16 (dll, pe_header_offset + 4 + 16));
-#
-#     expptr = 0;
-#     for (i = 0; i < nsections; i++)
-#     {
-#      char sname[8];
-#      unsigned long secptr1 = secptr + 40 * i;
-#      unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
-#      unsigned long vsize = pe_get32 (dll, secptr1 + 16);
-#      unsigned long fptr = pe_get32 (dll, secptr1 + 20);
-#      lseek(dll, secptr1, SEEK_SET);
-#      read(dll, sname, 8);
-#      if (vaddr <= export_rva && vaddr+vsize > export_rva)
-#      {
-#          expptr = fptr + (export_rva - vaddr);
-#          if (export_rva + export_size > vaddr + vsize)
-#              export_size = vsize - (export_rva - vaddr);
-#          break;
-#      }
-#     }
-#
-#     expdata = (unsigned char*)malloc(export_size);
-#     lseek (dll, expptr, SEEK_SET);
-#     read (dll, expdata, export_size);
-#     erva = expdata - export_rva;
-#
-#     nexp = pe_as32 (expdata+24);
-#     name_rvas = pe_as32 (expdata+32);
-#
-#     printf ("EXPORTS\n");
-#     for (i = 0; i<nexp; i++)
-#     {
-#      unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
-#      printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
-#     }
-#
-#     return 0;
-# }
-# /* impgen.c ends here */
-
-EOF
-    ;;
-  esac
-
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-  sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
-
-  mv -f "${ofile}T" "$ofile" || \
-    (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
-  chmod +x "$ofile"
-fi
-
-
-
-
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-
-# Prevent multiple expansion
-
-
-## establish the kind of executable to build (debug or production)
-
-if
- [ $DEBUG ]
-then
-       echo Configuring to build $PACKAGE_NAME with debugging symbols
-
-cat >>confdefs.h <<\_ACEOF
-#define DEBUG 1
-_ACEOF
-
-
-else
-       echo Configuring to build a production version of $PACKAGE_NAME
-fi
-
-## libtool & Make variables
-LIBTOOL=libtool
-OBJ=.lo
-IGNORE=-
-LIB_PATH=-rpath
-LEX=flex
-YACC=bison
-STATIC_LINK_CMD=-static
-DLL_LINK_CMD=-module
-
-MV=mv
-MV_FLAGS=-fv
-RM=rm
-RM_FLAGS=-fv
-CP=cp
-CP_FLAGS=-fv
-MAKE=make
-## establish the target OS and PROC
-
-case $build in
-  *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
-
-cat >>confdefs.h <<\_ACEOF
-#define HOST_OS "Windows"
-_ACEOF
-
-
-cat >>confdefs.h <<\_ACEOF
-#define OS_PORT_INCLUDE "lslp-windows.h"
-_ACEOF
-
-       OS_PORT_INC=lslp-windows.h
-       OS_PORT_SRC=lslp-windows.c
-       OS_PORT_OBJ=lslp-windows.lo
-       HOST_OS=Windows
-       CC=cl
-       LINKER=$CC
-       EXE=.exe
-       LIBS=ws2_32.lib
-       THREAD_LIBS=
-       REENTRANT_FLAG=
-       NO_LINK_FLAG=
-       LIB_SUFFIX=.lib
-       DLL_SUFFIX=.dll
-       EXE_OUT=/Fe
-       OBJ_OUT=/Fo
-       LIB_INCLUDE_FLAG
-
-cat >>confdefs.h <<\_ACEOF
-#define DLL_IMPORT __declspec(dllimport)
-_ACEOF
-
-
-cat >>confdefs.h <<\_ACEOF
-#define DLL_EXPORT __declspec(dllexport)
-_ACEOF
-
-       if  [ $DEBUG ]
-       then
-               CFLAGS="-GX -GR -W3 -Od -Zi -MDd -DDEBUG_ALLOC"
-               LDFLAGS=-debug
-               DLL_LIB_FLAG=/LDd
-               LFLAGS="-p -v -d"
-               YFLAGS="-v -d"
-        else
-               CFLAGS="-GX -GR -W3 -O2 -MD"
-               LDFLAGS=""
-               DLL_LIB_FLAG=/LD
-               LFLAGS="-f -w"
-               YFLAGS=-l
-       fi
-
-       bindir=$SYSTEMROOT/system32
-       sbindir=$SYSTEMROOT/system32
-       libexecdir=$SYSTEMROOT/system32
-       sysconfdir=$SYSTEMROOT/system32
-       libdir=$SYSTEMROOT/system32
-
-
-    ;;
-  *-*-linux*)
-
-cat >>confdefs.h <<\_ACEOF
-#define HOST_OS "Linux"
-_ACEOF
-
-
-cat >>confdefs.h <<\_ACEOF
-#define OS_PORT_INCLUDE "lslp-linux.h"
-_ACEOF
-
-       OS_PORT_INC=lslp-linux.h
-       OS_PORT_SRC=lslp-linux.c
-       OS_PORT_OBJ=lslp-linux.lo
-       HOST_OS=linux
-       ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    set dummy "$as_dir/$ac_word" ${1+"$@"}
-    shift
-    ac_cv_prog_CC="$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CC" && break
-done
-
-  CC=$ac_ct_CC
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH" >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH" >&2;}
-   { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_compiler_gnu=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
-  choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  for ac_declaration in \
-   ''\
-   '#include <stdlib.h>' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-$ac_declaration
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-continue
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-$ac_declaration
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-       LINKER=$CC
-       EXE=
-       LIBS=
-       LIB_INCLUDE_FLAG=-l
-       THREAD_LIBS=-lpthread
-       REENTRANT_FLAG=-D_REENTRANT
-       NO_LINK_FLAG=-c
-       LIB_SUFFIX=.o
-       DLL_SUFFIX=.so
-
-cat >>confdefs.h <<\_ACEOF
-#define DLL_IMPORT
-_ACEOF
-
-
-cat >>confdefs.h <<\_ACEOF
-#define DLL_EXPORT
-_ACEOF
-
-       EXE_OUT=-o
-       OBJ_OUT=-o
-       if  [ $DEBUG ]
-       then
-               CFLAGS="-g -Wall -Dlinux -DDEBUG_ALLOC"
-               LDFLAGS=-g
-               LFLAGS="-p -v -d "
-               YFLAGS="-v -d"
-        else
-               CFLAGS="-O -Wall -Dlinux"
-               LDFLAGS=-s
-               LFLAGS="-f -w"
-               YFLAGS=-l
-       fi
-
-       bindir=/bin
-       sbindir=/sbin
-       libexecdir=/lib
-       sysconfdir=/etc
-       libdir=/usr/lib
-
-    ;;
-  *-*-aix*)
-
-cat >>confdefs.h <<\_ACEOF
-#define HOST_OS "AIX"
-_ACEOF
-
-       HOST_OS=AIX
-    ;;
-esac
-
-case $build in
-  i?86-*-*)
-
-cat >>confdefs.h <<\_ACEOF
-#define PLATFORM "x86"
-_ACEOF
-
-       PLATFORM=x86
-    ;;
-  ia64-*-*)
-
-cat >>confdefs.h <<\_ACEOF
-#define PLATFORM "ia64"
-_ACEOF
-
-       PLATFORM=ia64
-    ;;
-  ppc-*-*)
-
-cat >>confdefs.h <<\_ACEOF
-#define PLATFORM "ppc"
-_ACEOF
-
-       PLATFORM=ppc
-    ;;
-  mipsel-*-*)
-
-cat >>confdefs.h <<\_ACEOF
-#define PLATFORM "mipsel"
-_ACEOF
-
-       PLATFORM=mipsel
-  ;;
-  mipseb-*-*)
-
-cat >>confdefs.h <<\_ACEOF
-#define PLATFORM "mipseb"
-_ACEOF
-
-       PLATFORM=mipseb
-esac
-
-
-## check for headers and declarations we need
-
-# will be false on windows systems
-
-for ac_header in unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_header_compiler=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc in
-  yes:no )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
-  no:yes )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_header in linux/if.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_header_compiler=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc in
-  yes:no )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
-  no:yes )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
- HAVE_IF_H=1
-fi
-
-done
-
-
-if
- [ $HAVE_IF_H ]
-then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_IF_H 1
-_ACEOF
-
-fi
-
-## create the appropriate directories to hold binaries
-SRC_DIR=
-
-
-## set up environment variables that control the build for specific variants
-case $HOST_OS in
-  linux)
-       case $PLATFORM in
-            x86)
-
-           ;;
-
-           ia64)
-
-           ;;
-
-            ppc)
-
-
-            ;;
-        esac
-
-  ;;
-  Windows)
-       case $PLATFORM in
-            x86)
-
-           ;;
-
-           ia64)
-
-           ;;
-
-            ppc)
-
-
-            ;;
-        esac
-
-  ;;
-  AIX)
-       case $PLATFORM in
-            x86)
-
-           ;;
-
-           ia64)
-
-           ;;
-
-            ppc)
-
-
-            ;;
-        esac
-  ;;
-
-esac
-
-echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
-echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6
-if test "${ac_cv_c_bigendian+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  # See if sys/param.h defines the BYTE_ORDER macro.
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <sys/param.h>
-
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
- bogus endian macros
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  # It does; now see whether it defined to BIG_ENDIAN or not.
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <sys/param.h>
-
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
-#if BYTE_ORDER != BIG_ENDIAN
- not big endian
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_c_bigendian=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_c_bigendian=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-# It does not; compile a test program.
-if test "$cross_compiling" = yes; then
-  # try to guess the endianess by grep'ing values into an object file
-  ac_cv_c_bigendian=unknown
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
-short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
-void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
-short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
-short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
-void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
-#ifdef F77_DUMMY_MAIN
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int F77_DUMMY_MAIN() { return 1; }
-#endif
-int
-main ()
-{
- _ascii (); _ebcdic ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  if fgrep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
-  ac_cv_c_bigendian=yes
-fi
-if fgrep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
-  if test "$ac_cv_c_bigendian" = unknown; then
-    ac_cv_c_bigendian=no
-  else
-    # finding both strings is unlikely to happen, but who knows?
-    ac_cv_c_bigendian=unknown
-  fi
-fi
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-int
-main ()
-{
-  /* Are we little or big endian?  From Harbison&Steele.  */
-  union
-  {
-    long l;
-    char c[sizeof (long)];
-  } u;
-  u.l = 1;
-  exit (u.c[sizeof (long) - 1] == 1);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_c_bigendian=no
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-( exit $ac_status )
-ac_cv_c_bigendian=yes
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
-echo "${ECHO_T}$ac_cv_c_bigendian" >&6
-case $ac_cv_c_bigendian in
-  yes)
-
-cat >>confdefs.h <<\_ACEOF
-#define WORDS_BIGENDIAN 1
-_ACEOF
- ;;
-  no)
-     ;;
-  *)
-    { { echo "$as_me:$LINENO: error: unknown endianess
-presetting ac_cv_c_bigendian=no (or yes) will help" >&5
-echo "$as_me: error: unknown endianess
-presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
-   { (exit 1); exit 1; }; } ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-echo Build Process set for $HOST_OS running on $PLATFORM
-echo Using Compiler: $CC $CFLAGS
-echo Using Linker: $LINKER $LDFLAGS $LIBS
-ac_config_files="$ac_config_files Makefile"
-
-ac_config_headers="$ac_config_headers config.h"
-
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overriden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-{
-  (set) 2>&1 |
-    case `(ac_space=' '; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
-      # `set' does not quote correctly, so add quotes (double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \).
-      sed -n \
-        "s/'/'\\\\''/g;
-         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;;
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n \
-        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-      ;;
-    esac;
-} |
-  sed '
-     t clear
-     : clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     : end' >>confcache
-if cmp -s $cache_file confcache; then :; else
-  if test -w $cache_file; then
-    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
-    cat confcache >$cache_file
-  else
-    echo "not updating unwritable cache $cache_file"
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[        ]*VPATH[        ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[   ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[     ]*$//;
-}'
-fi
-
-DEFS=-DHAVE_CONFIG_H
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-
-# NLS nuisances.
-# Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
-(set +x; test -n "`(LANG=C; export LANG) 2>&1`") &&
-    { $as_unset LANG || test "${LANG+set}" != set; } ||
-      { LANG=C; export LANG; }
-(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") &&
-    { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } ||
-      { LC_ALL=C; export LC_ALL; }
-(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") &&
-    { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } ||
-      { LC_TIME=C; export LC_TIME; }
-(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") &&
-    { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } ||
-      { LC_CTYPE=C; export LC_CTYPE; }
-(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") &&
-    { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } ||
-      { LANGUAGE=C; export LANGUAGE; }
-(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") &&
-    { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } ||
-      { LC_COLLATE=C; export LC_COLLATE; }
-(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") &&
-    { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } ||
-      { LC_NUMERIC=C; export LC_NUMERIC; }
-(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") &&
-    { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } ||
-      { LC_MESSAGES=C; export LC_MESSAGES; }
-
-
-# Name of the executable.
-as_me=`(basename "$0") 2>/dev/null ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-        X"$0" : 'X\(//\)$' \| \
-        X"$0" : 'X\(/\)$' \| \
-        .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-         /^X\/\(\/\/\)$/{ s//\1/; q; }
-         /^X\/\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conftest.sh
-  echo  "exit 0"   >>conftest.sh
-  chmod +x conftest.sh
-  if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conftest.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-        case $as_dir in
-        /*)
-          if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-            CONFIG_SHELL=$as_dir/$as_base
-            export CONFIG_SHELL
-            exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-          fi;;
-        esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='     ' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
-    as_ln_s='ln -s'
-  fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS="  $as_nl"
-
-# CDPATH.
-$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; }
-
-exec 6>&1
-
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.  Logging --version etc. is OK.
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by slp $as_me 0.8 , which was
-generated by GNU Autoconf 2.53.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
-_ACEOF
-
-# Files that config.status was made for.
-if test -n "$ac_config_files"; then
-  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_headers"; then
-  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_links"; then
-  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_commands"; then
-  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number, then exit
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-  --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-  --header=FILE[:TEMPLATE]
-                   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to <bug-autoconf@gnu.org>."
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-ac_cs_version="\\
-slp config.status 0.8
-configured by $0, generated by GNU Autoconf 2.53,
-  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value.  By we need to know if files were specified by the user.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=*)
-    ac_option=`expr "x$1" : 'x\([^=]*\)='`
-    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
-    shift
-    set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
-    shift
-    ;;
-  -*);;
-  *) # This is not an option, so the user has probably given explicit
-     # arguments.
-     ac_need_defaults=false;;
-  esac
-
-  case $1 in
-  # Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
-    exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-  --version | --vers* | -V )
-    echo "$ac_cs_version"; exit 0 ;;
-  --he | --h)
-    # Conflict between --help and --header
-    { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; };;
-  --help | --hel | -h )
-    echo "$ac_cs_usage"; exit 0 ;;
-  --debug | --d* | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    shift
-    CONFIG_FILES="$CONFIG_FILES $1"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    shift
-    CONFIG_HEADERS="$CONFIG_HEADERS $1"
-    ac_need_defaults=false;;
-
-  # This is an error.
-  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; } ;;
-
-  *) ac_config_targets="$ac_config_targets $1" ;;
-
-  esac
-  shift
-done
-
-_ACEOF
-
-
-
-
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_config_target in $ac_config_targets
-do
-  case "$ac_config_target" in
-  # Handling of arguments.
-  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
-  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Create a temporary directory, and hook for its removal unless debugging.
-$debug ||
-{
-  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-
-# Create a (secure) tmp directory for tmp files.
-: ${TMPDIR=/tmp}
-{
-  tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
-}  ||
-{
-  tmp=$TMPDIR/cs$$-$RANDOM
-  (umask 077 && mkdir $tmp)
-} ||
-{
-   echo "$me: cannot create a temporary directory in $TMPDIR" >&2
-   { (exit 1); exit 1; }
-}
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-
-#
-# CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
-  # Protect against being on the right side of a sed subst in config.status.
-  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
-   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s,@SHELL@,$SHELL,;t t
-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s,@exec_prefix@,$exec_prefix,;t t
-s,@prefix@,$prefix,;t t
-s,@program_transform_name@,$program_transform_name,;t t
-s,@bindir@,$bindir,;t t
-s,@sbindir@,$sbindir,;t t
-s,@libexecdir@,$libexecdir,;t t
-s,@datadir@,$datadir,;t t
-s,@sysconfdir@,$sysconfdir,;t t
-s,@sharedstatedir@,$sharedstatedir,;t t
-s,@localstatedir@,$localstatedir,;t t
-s,@libdir@,$libdir,;t t
-s,@includedir@,$includedir,;t t
-s,@oldincludedir@,$oldincludedir,;t t
-s,@infodir@,$infodir,;t t
-s,@mandir@,$mandir,;t t
-s,@build_alias@,$build_alias,;t t
-s,@host_alias@,$host_alias,;t t
-s,@target_alias@,$target_alias,;t t
-s,@DEFS@,$DEFS,;t t
-s,@ECHO_C@,$ECHO_C,;t t
-s,@ECHO_N@,$ECHO_N,;t t
-s,@ECHO_T@,$ECHO_T,;t t
-s,@LIBS@,$LIBS,;t t
-s,@build@,$build,;t t
-s,@build_cpu@,$build_cpu,;t t
-s,@build_vendor@,$build_vendor,;t t
-s,@build_os@,$build_os,;t t
-s,@host@,$host,;t t
-s,@host_cpu@,$host_cpu,;t t
-s,@host_vendor@,$host_vendor,;t t
-s,@host_os@,$host_os,;t t
-s,@CC@,$CC,;t t
-s,@CFLAGS@,$CFLAGS,;t t
-s,@LDFLAGS@,$LDFLAGS,;t t
-s,@CPPFLAGS@,$CPPFLAGS,;t t
-s,@ac_ct_CC@,$ac_ct_CC,;t t
-s,@EXEEXT@,$EXEEXT,;t t
-s,@OBJEXT@,$OBJEXT,;t t
-s,@LN_S@,$LN_S,;t t
-s,@ECHO@,$ECHO,;t t
-s,@RANLIB@,$RANLIB,;t t
-s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-s,@STRIP@,$STRIP,;t t
-s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
-s,@CPP@,$CPP,;t t
-s,@LIBTOOL@,$LIBTOOL,;t t
-s,@WORDS_BIGENDIAN@,$WORDS_BIGENDIAN,;t t
-s,@DEBUG@,$DEBUG,;t t
-s,@OBJ@,$OBJ,;t t
-s,@IGNORE@,$IGNORE,;t t
-s,@LIB_PATH@,$LIB_PATH,;t t
-s,@LEX@,$LEX,;t t
-s,@YACC@,$YACC,;t t
-s,@STATIC_LINK_CMD@,$STATIC_LINK_CMD,;t t
-s,@DLL_LINK_CMD@,$DLL_LINK_CMD,;t t
-s,@MV@,$MV,;t t
-s,@MV_FLAGS@,$MV_FLAGS,;t t
-s,@RM@,$RM,;t t
-s,@RM_FLAGS@,$RM_FLAGS,;t t
-s,@CP@,$CP,;t t
-s,@CP_FLAGS@,$CP_FLAGS,;t t
-s,@MAKE@,$MAKE,;t t
-s,@OS_PORT_INC@,$OS_PORT_INC,;t t
-s,@OS_PORT_SRC@,$OS_PORT_SRC,;t t
-s,@OS_PORT_OBJ@,$OS_PORT_OBJ,;t t
-s,@HOST_OS@,$HOST_OS,;t t
-s,@LINKER@,$LINKER,;t t
-s,@EXE@,$EXE,;t t
-s,@THREAD_LIBS@,$THREAD_LIBS,;t t
-s,@REENTRANT_FLAG@,$REENTRANT_FLAG,;t t
-s,@NO_LINK_FLAG@,$NO_LINK_FLAG,;t t
-s,@LIB_SUFFIX@,$LIB_SUFFIX,;t t
-s,@DLL_SUFFIX @,$DLL_SUFFIX ,;t t
-s,@EXE_OUT@,$EXE_OUT,;t t
-s,@OBJ_OUT@,$OBJ_OUT,;t t
-s,@LIB_INCLUDE_FLAG@,$LIB_INCLUDE_FLAG,;t t
-s,@DLL_LIB_FLAG@,$DLL_LIB_FLAG,;t t
-s,@LFLAGS@,$LFLAGS,;t t
-s,@YFLAGS@,$YFLAGS,;t t
-s,@PLATFORM@,$PLATFORM,;t t
-CEOF
-
-_ACEOF
-
-  cat >>$CONFIG_STATUS <<\_ACEOF
-  # Split the substitutions into bite-sized pieces for seds with
-  # small command number limits, like on Digital OSF/1 and HP-UX.
-  ac_max_sed_lines=48
-  ac_sed_frag=1 # Number of current file.
-  ac_beg=1 # First line for current file.
-  ac_end=$ac_max_sed_lines # Line after last line for current file.
-  ac_more_lines=:
-  ac_sed_cmds=
-  while $ac_more_lines; do
-    if test $ac_beg -gt 1; then
-      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    else
-      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    fi
-    if test ! -s $tmp/subs.frag; then
-      ac_more_lines=false
-    else
-      # The purpose of the label and of the branching condition is to
-      # speed up the sed processing (if there are no `@' at all, there
-      # is no need to browse any of the substitutions).
-      # These are the two extra sed commands mentioned above.
-      (echo ':t
-  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
-      if test -z "$ac_sed_cmds"; then
-       ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
-      else
-       ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
-      fi
-      ac_sed_frag=`expr $ac_sed_frag + 1`
-      ac_beg=$ac_end
-      ac_end=`expr $ac_end + $ac_max_sed_lines`
-    fi
-  done
-  if test -z "$ac_sed_cmds"; then
-    ac_sed_cmds=cat
-  fi
-fi # test -n "$CONFIG_FILES"
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-        cat >$tmp/stdin
-        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
-  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$ac_file" : 'X\(//\)[^/]' \| \
-         X"$ac_file" : 'X\(//\)$' \| \
-         X"$ac_file" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
-  { case "$ac_dir" in
-  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
-  *)                      as_incr_dir=.;;
-esac
-as_dummy="$ac_dir"
-for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
-  case $as_mkdir_dir in
-    # Skip DOS drivespec
-    ?:) as_incr_dir=$as_mkdir_dir ;;
-    *)
-      as_incr_dir=$as_incr_dir/$as_mkdir_dir
-      test -d "$as_incr_dir" ||
-        mkdir "$as_incr_dir" ||
-       { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }
-    ;;
-  esac
-done; }
-
-  ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
-# absolute.
-ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
-ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
-ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
-ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
-
-
-
-  if test x"$ac_file" != x-; then
-    { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-    rm -f "$ac_file"
-  fi
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    configure_input=
-  else
-    configure_input="$ac_file.  "
-  fi
-  configure_input=$configure_input"Generated from `echo $ac_file_in |
-                                     sed 's,.*/,,'` by configure."
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-         # Absolute (can't be DOS-style, as IFS=:)
-         test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-         echo $f;;
-      *) # Relative
-         if test -f "$f"; then
-           # Build tree
-           echo $f
-         elif test -f "$srcdir/$f"; then
-           # Source tree
-           echo $srcdir/$f
-         else
-           # /dev/null tree
-           { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-         fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-  sed "$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s,@configure_input@,$configure_input,;t t
-s,@srcdir@,$ac_srcdir,;t t
-s,@abs_srcdir@,$ac_abs_srcdir,;t t
-s,@top_srcdir@,$ac_top_srcdir,;t t
-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s,@builddir@,$ac_builddir,;t t
-s,@abs_builddir@,$ac_abs_builddir,;t t
-s,@top_builddir@,$ac_top_builddir,;t t
-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
-  rm -f $tmp/stdin
-  if test x"$ac_file" != x-; then
-    mv $tmp/out $ac_file
-  else
-    cat $tmp/out
-    rm -f $tmp/out
-  fi
-
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_HEADER section.
-#
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([  ]*\)#\([        ]*define[       ][      ]*\)'
-ac_dB='[       ].*$,\1#\2'
-ac_dC=' '
-ac_dD=',;t'
-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
-ac_uB='$,\1#\2define\3'
-ac_uC=' '
-ac_uD=',;t'
-
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-        cat >$tmp/stdin
-        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-         # Absolute (can't be DOS-style, as IFS=:)
-         test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-         echo $f;;
-      *) # Relative
-         if test -f "$f"; then
-           # Build tree
-           echo $f
-         elif test -f "$srcdir/$f"; then
-           # Source tree
-           echo $srcdir/$f
-         else
-           # /dev/null tree
-           { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-         fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-  # Remove the trailing spaces.
-  sed 's/[     ]*$//' $ac_file_inputs >$tmp/in
-
-_ACEOF
-
-# Transform confdefs.h into two sed scripts, `conftest.defines' and
-# `conftest.undefs', that substitutes the proper values into
-# config.h.in to produce config.h.  The first handles `#define'
-# templates, and the second `#undef' templates.
-# And first: Protect against being on the right side of a sed subst in
-# config.status.  Protect against being in an unquoted here document
-# in config.status.
-rm -f conftest.defines conftest.undefs
-# Using a here document instead of a string reduces the quoting nightmare.
-# Putting comments in sed scripts is not portable.
-#
-# `end' is used to avoid that the second main sed command (meant for
-# 0-ary CPP macros) applies to n-ary macro definitions.
-# See the Autoconf documentation for `clear'.
-cat >confdef2sed.sed <<\_ACEOF
-s/[\\&,]/\\&/g
-s,[\\$`],\\&,g
-t clear
-: clear
-s,^[   ]*#[    ]*define[       ][      ]*\([^  (][^    (]*\)\(([^)]*)\)[       ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
-t end
-s,^[   ]*#[    ]*define[       ][      ]*\([^  ][^     ]*\)[   ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-: end
-_ACEOF
-# If some macros were called several times there might be several times
-# the same #defines, which is useless.  Nevertheless, we may not want to
-# sort them, since we want the *last* AC-DEFINE to be honored.
-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-rm -f confdef2sed.sed
-
-# This sed command replaces #undef with comments.  This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >>conftest.undefs <<\_ACEOF
-s,^[   ]*#[    ]*undef[        ][      ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-_ACEOF
-
-# Break up conftest.defines because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo '  if egrep "^[   ]*#[    ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-echo '  :' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.defines >/dev/null
-do
-  # Write a limited-size here document to $tmp/defines.sed.
-  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
-  # Speed up: don't consider the non `#define' lines.
-  echo '/^[    ]*#[    ]*define/!b' >>$CONFIG_STATUS
-  # Work around the forget-to-reset-the-flag bug.
-  echo 't clr' >>$CONFIG_STATUS
-  echo ': clr' >>$CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
-  echo 'CEOF
-  sed -f $tmp/defines.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
-  rm -f conftest.defines
-  mv conftest.tail conftest.defines
-done
-rm -f conftest.defines
-echo '  fi # egrep' >>$CONFIG_STATUS
-echo >>$CONFIG_STATUS
-
-# Break up conftest.undefs because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.undefs >/dev/null
-do
-  # Write a limited-size here document to $tmp/undefs.sed.
-  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
-  # Speed up: don't consider the non `#undef'
-  echo '/^[    ]*#[    ]*undef/!b' >>$CONFIG_STATUS
-  # Work around the forget-to-reset-the-flag bug.
-  echo 't clr' >>$CONFIG_STATUS
-  echo ': clr' >>$CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
-  echo 'CEOF
-  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
-  rm -f conftest.undefs
-  mv conftest.tail conftest.undefs
-done
-rm -f conftest.undefs
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    echo "/* Generated by configure.  */" >$tmp/config.h
-  else
-    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
-  fi
-  cat $tmp/in >>$tmp/config.h
-  rm -f $tmp/in
-  if test x"$ac_file" != x-; then
-    if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
-      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$ac_file" : 'X\(//\)[^/]' \| \
-         X"$ac_file" : 'X\(//\)$' \| \
-         X"$ac_file" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
-      { case "$ac_dir" in
-  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
-  *)                      as_incr_dir=.;;
-esac
-as_dummy="$ac_dir"
-for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
-  case $as_mkdir_dir in
-    # Skip DOS drivespec
-    ?:) as_incr_dir=$as_mkdir_dir ;;
-    *)
-      as_incr_dir=$as_incr_dir/$as_mkdir_dir
-      test -d "$as_incr_dir" ||
-        mkdir "$as_incr_dir" ||
-       { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }
-    ;;
-  esac
-done; }
-
-      rm -f $ac_file
-      mv $tmp/config.h $ac_file
-    fi
-  else
-    cat $tmp/config.h
-    rm -f $tmp/config.h
-  fi
-done
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || { (exit 1); exit 1; }
-fi
-
diff --git a/src/Unsupported/slp_client/configure.ac b/src/Unsupported/slp_client/configure.ac
deleted file mode 100644 (file)
index 74705f9..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
-AC_PREREQ([2.53])
-AC_REVISION([$Revision: 1.1 $])
-AC_INIT([slp],[0.8] ,[lslp-bugs@lists.sourceforge.net], [lslp.tar.gz])
-
-AC_COPYRIGHT([Configuration input files:
-Copyright (c) 2002, Michael Day
-Copyright (c) 2002, International Business Machines
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in 
-all copies or substantial portions of the Software.])
-AC_CONFIG_SRCDIR([config.guess])
-
-AC_CANONICAL_BUILD
-
-
-
-AC_PROG_LIBTOOL
-## establish the kind of executable to build (debug or production)
-
-if
-[ [ $DEBUG ] ]
-then
-       echo Configuring to build $PACKAGE_NAME with debugging symbols
-       AC_DEFINE([DEBUG], 1, [Enable debugging options in build.])
-
-else
-       echo Configuring to build a production version of $PACKAGE_NAME
-fi
-
-## libtool & Make variables
-LIBTOOL=libtool
-OBJ=.lo
-IGNORE=-
-LIB_PATH=-rpath
-LEX=flex
-YACC=bison
-STATIC_LINK_CMD=-static
-DLL_LINK_CMD=-module
-
-MV=mv
-MV_FLAGS=-fv
-RM=rm
-RM_FLAGS=-fv
-CP=cp
-CP_FLAGS=-fv
-MAKE=make
-## establish the target OS and PROC
-
-case $build in
-  *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
-       AC_DEFINE([HOST_OS], ["Windows"], [Target Operation System])
-       AC_DEFINE([OS_PORT_INCLUDE], ["lslp-windows.h"], [Portability Header])
-       OS_PORT_INC=lslp-windows.h
-       OS_PORT_SRC=lslp-windows.c
-       OS_PORT_OBJ=lslp-windows.lo
-       HOST_OS=Windows
-       CC=cl
-       LINKER=$CC
-       EXE=.exe
-       LIBS=ws2_32.lib
-       THREAD_LIBS=
-       REENTRANT_FLAG=
-       NO_LINK_FLAG=
-       LIB_SUFFIX=.lib
-       DLL_SUFFIX=.dll
-       EXE_OUT=/Fe
-       OBJ_OUT=/Fo
-       LIB_INCLUDE_FLAG
-       AC_DEFINE([DLL_IMPORT], [__declspec(dllimport)], [DLL import declaration])
-       AC_DEFINE([DLL_EXPORT], [__declspec(dllexport)], [DLL export declaration])
-       if [ [ $DEBUG ] ] 
-       then 
-               CFLAGS="-GX -GR -W3 -Od -Zi -MDd -DDEBUG_ALLOC"
-               LDFLAGS=-debug
-               DLL_LIB_FLAG=/LDd
-               LFLAGS="-p -v -d"
-               YFLAGS="-v -d"
-        else
-               CFLAGS="-GX -GR -W3 -O2 -MD"
-               LDFLAGS=""
-               DLL_LIB_FLAG=/LD
-               LFLAGS="-f -w"
-               YFLAGS=-l
-       fi 
-
-       bindir=$SYSTEMROOT/system32
-       sbindir=$SYSTEMROOT/system32
-       libexecdir=$SYSTEMROOT/system32
-       sysconfdir=$SYSTEMROOT/system32
-       libdir=$SYSTEMROOT/system32
-
-
-    ;;
-  *-*-linux*)
-       AC_DEFINE([HOST_OS], ["Linux"], [Target Operation System])
-       AC_DEFINE([OS_PORT_INCLUDE], ["lslp-linux.h"], [Portability Header])
-       OS_PORT_INC=lslp-linux.h
-       OS_PORT_SRC=lslp-linux.c
-       OS_PORT_OBJ=lslp-linux.lo
-       HOST_OS=linux
-       AC_PROG_CC()
-       LINKER=$CC
-       EXE=
-       LIBS=
-       LIB_INCLUDE_FLAG=-l
-       THREAD_LIBS=-lpthread
-       REENTRANT_FLAG=-D_REENTRANT
-       NO_LINK_FLAG=-c
-       LIB_SUFFIX=.o
-       DLL_SUFFIX=.so
-       AC_DEFINE([DLL_IMPORT], , [DLL import declaration])
-       AC_DEFINE([DLL_EXPORT], , [DLL export declaration])
-       EXE_OUT=-o
-       OBJ_OUT=-o
-       if [ [ $DEBUG ] ] 
-       then 
-               CFLAGS="-g -Wall -Dlinux -DDEBUG_ALLOC"
-               LDFLAGS=-g 
-               LFLAGS="-p -v -d "
-               YFLAGS="-v -d"
-        else
-               CFLAGS="-O -Wall -Dlinux"
-               LDFLAGS=-s 
-               LFLAGS="-f -w"
-               YFLAGS=-l
-       fi 
-
-       bindir=/bin
-       sbindir=/sbin
-       libexecdir=/lib
-       sysconfdir=/etc
-       libdir=/usr/lib
-
-    ;;  
-  *-*-aix*)
-       AC_DEFINE([HOST_OS], ["AIX"], [Target Operation System])
-       HOST_OS=AIX
-    ;;
-esac
-
-case $build in 
-  i?86-*-*)
-       AC_DEFINE([PLATFORM], ["x86"], [Target Processor])
-       PLATFORM=x86
-    ;;
-  ia64-*-*)
-       AC_DEFINE([PLATFORM], ["ia64"], [Target Processor])
-       PLATFORM=ia64
-    ;;
-  ppc-*-*)
-       AC_DEFINE([PLATFORM], ["ppc"], [Target Processor])
-       PLATFORM=ppc
-    ;;
-  mipsel-*-*)
-       AC_DEFINE([PLATFORM], ["mipsel"], [Target Processor])
-       PLATFORM=mipsel
-  ;;
-  mipseb-*-*)  
-       AC_DEFINE([PLATFORM], ["mipseb"], [Target Processor])
-       PLATFORM=mipseb
-esac
-
-
-## check for headers and declarations we need
-
-# will be false on windows systems
-AC_CHECK_HEADERS([unistd.h])
-AC_CHECK_HEADERS([linux/if.h], HAVE_IF_H=1, ,)
-
-if
-[ [ $HAVE_IF_H ] ]
-then
-       AC_DEFINE([HAVE_IF_H], 1, [Use linux include for IOCTL on network devices.])
-fi
-
-## create the appropriate directories to hold binaries
-SRC_DIR=
-
-
-## set up environment variables that control the build for specific variants 
-case $HOST_OS in 
-  linux)       
-       case $PLATFORM in
-            x86)
-
-           ;;
-
-           ia64)
-
-           ;;
-
-            ppc)       
-
-
-            ;;
-        esac
-
-  ;;
-  Windows)     
-       case $PLATFORM in
-            x86)
-
-           ;;
-
-           ia64)
-
-           ;;
-
-            ppc)       
-
-
-            ;;
-        esac
-
-  ;;
-  AIX)
-       case $PLATFORM in
-            x86)
-
-           ;;
-
-           ia64)
-
-           ;;
-
-            ppc)       
-
-
-            ;;
-        esac
-  ;;
-
-esac
-
-AC_C_BIGENDIAN 
-AC_SUBST([WORDS_BIGENDIAN])
-AC_SUBST([DEBUG])
-AC_SUBST([PACKAGE_NAME])
-AC_SUBST([PACKAGE_VERSION])
-AC_SUBST([LIBTOOL])
-AC_SUBST([OBJ])
-AC_SUBST([IGNORE])
-AC_SUBST([LIB_PATH])
-AC_SUBST([LEX])
-AC_SUBST([YACC])
-AC_SUBST([STATIC_LINK_CMD])
-AC_SUBST([DLL_LINK_CMD])
-AC_SUBST([MV])
-AC_SUBST([MV_FLAGS])
-AC_SUBST([RM])
-AC_SUBST([RM_FLAGS])
-AC_SUBST([CP])
-AC_SUBST([CP_FLAGS])
-AC_SUBST([MAKE])
-AC_SUBST([OS_PORT_INC])
-AC_SUBST([OS_PORT_SRC])
-AC_SUBST([OS_PORT_OBJ])
-AC_SUBST([HOST_OS])
-AC_SUBST([LINKER])
-AC_SUBST([EXE])
-AC_SUBST([LIBS])
-AC_SUBST([THREAD_LIBS])
-AC_SUBST([REENTRANT_FLAG])
-AC_SUBST([NO_LINK_FLAG])
-AC_SUBST([LIB_SUFFIX])
-AC_SUBST([DLL_SUFFIX ])
-AC_SUBST([EXE_OUT])
-AC_SUBST([OBJ_OUT])
-AC_SUBST([LIB_INCLUDE_FLAG])
-AC_SUBST([CFLAGS])
-AC_SUBST([LDFLAGS])
-AC_SUBST([DLL_LIB_FLAG])
-AC_SUBST([LFLAGS])
-AC_SUBST([YFLAGS])
-AC_SUBST([bindir])
-AC_SUBST([sbindir])
-AC_SUBST([libexecdir])
-AC_SUBST([sysconfdir])
-AC_SUBST([libdir])
-AC_SUBST([PLATFORM])
-AC_SUBST([CC])
-
-echo Build Process set for $HOST_OS running on $PLATFORM       
-echo Using Compiler: $CC $CFLAGS
-echo Using Linker: $LINKER $LDFLAGS $LIBS
-AC_CONFIG_FILES([Makefile])
-AC_CONFIG_HEADERS([config.h])
-
-AC_OUTPUT
diff --git a/src/Unsupported/slp_client/doc/draft-day-srvloc-exclusion-01.txt b/src/Unsupported/slp_client/doc/draft-day-srvloc-exclusion-01.txt
deleted file mode 100644 (file)
index ffa9190..0000000
+++ /dev/null
@@ -1,815 +0,0 @@
-.\"-----------------------------------------------------------------
-.\" Registers to store heading levels as variables
-.\"-----------------------------------------------------------------
-.nr head1 0 1
-.nr head2 0 1
-.nr head3 0 1 
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-
-.\"-----------------------------------------------------------------
-.\" Return to header level 1, 2, etc. 
-.\" resets the level registers and indent
-.\"-----------------------------------------------------------------
-.de RETURN_HDR_1
-.nr head2 0 1
-.nr head3 0 1 
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_1 \\$1 
-..
-
-.de RETURN_HDR_2
-.nr head3 0 1 
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_2 \\$1
-..
-.de RETURN_HDR_3
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_3 \\$1
-..
-
-.de RETURN_HDR_4
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_4 \\$1
-..
-
-.de RETURN_HDR_5
-.nr head6 0 1
-.in 0 
-\.HDR_5 \\$1
-..
-
-.\"-----------------------------------------------------------------
-.\" Create a level 1, 2, etc,.  heading 
-.\" resets indent, creates a TOC entry
-.\" Parameter is the title of the heading
-.\"-----------------------------------------------------------------
-.de HDR_1
-.sp 1
-.in 0 
-\\n+[head1]\\  \\$1
-.XS
-\\n[head1]\\  \\$1
-.XE
-.in 3
-.. 
-
-
-.de HDR_2
-.sp 1
-.in 0 
-\\n[head1]\\.\\n+[head2]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_3
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n+[head3]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_4
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n+[head4]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_5
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n+[head5]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n[head5]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_6
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n[head5]\\.\\n+[head6]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n[head5]\\.\\n[head6]\\ \\$1
-.in 3
-.XE
-.. 
-
-.\"-----------------------------------------------------------------
-.\" END MACRO DEFINITIONS
-.\"-----------------------------------------------------------------
-
-.pl 58
-.po 0
-.ll 72
-.lt 72
-.ds LF Day 
-.ds RF FORMFEED[Page %]^
-.ds CF 
-.ds LH INTERNET DRAFT
-.ds CH SLP Exclusion Directive
-.ds RH Exp. May 2003  
-.hy 0
-.ad l
-.in 0
-
-   
-Internet Engineering Task Force                            Michael Day
-INTERNET DRAFT                                                     IBM
-23 December                                     Expires in six months
-
-.ce 1000
-Exclusion Extension for Service Location Protocol v2
-draft-day-svrloc-exclusion-01.txt
-.ce 0
-.sp 5
-
-.in 0
-Status of This Memo
-.in 3
-
-This document is an individual contribution to the Internet
-Engineering Task Force (IETF). Comments should be submitted to the
-srvloc@srvloc.org mailing list.
-
-Distribution of this memo is unlimited.
-
-This document is an Internet-Draft and is in full conformance with
-all provisions of Section 10 of RFC2026. Internet-Drafts are working
-documents of the Internet Engineering Task Force (IETF), its areas,
-and its working groups.  Note that other groups may also distribute
-working documents as Internet-Drafts.
-
-Internet-Drafts are draft documents valid for a maximum of six months
-and may be updated, replaced, or obsoleted by other documents at any
-time.  It is inappropriate to use Internet-Drafts as reference
-material or to cite them other than as "work in progress."
-
-The list of current Internet-Drafts can be accessed at
-http://www.ietf.org/ietf/1id-abstracts.txt
-
-The list of Internet-Draft Shadow Directories can be accessed at
-http://www.ietf.org/shadow.html.
-       
-.bp
-.HDR_1 Introduction 
-
-The Service Location Protocol, Version 2 [1] allows the use of
-multicast and broadcast discovery requests.  The SLP exclusion
-directive is an extension to SLP that optimizes the use of
-multicasting and broadcasting to find services on an intranet. This
-document hereafter refers to multicast discovery but all its contents
-apply to broadcast discovery as well.
-
-.HDR_2 "Present SLPv2 Multicast Behavior"
-
-Multicast discovery requests allow an SLP User Agent to discover
-services with no prior configuration. Multicast discovery requests are
-not sent reliably and must be retransmitted in order to find all
-services of the desired type on the network.
-
-When SLP v2 SrvRqst, SrvTypeRqst, and AttrRqst messages are multicast,
-they contain a <PRList> of previous respondents. Initially the
-<PRList> is empty. When these requests are unicast, the <PRList> is
-always empty.
-
-Any DA or SA which sees its address in the <PRList> does not respond
-to the request (as specified in RFC 2608).
-
-The User Agent then retransmits the discovery request until the
-<PRList> causes no further responses to be elicited or the previous
-responder list and the request will not fit into a single datagram or
-until CONFIG_MC_MAX seconds elapse[1].
-
-The PR list is an effective mechanism for suppressing duplicate
-responses in smaller environments. However, because of the way PR
-lists are encoded with the SLP v2 header, the PR List has a limit of
-as few as 90 IPv4 addressees, and even fewer IPv6 addresses. This
-means in most environments a User Agent may suppress duplicate
-responses from approximately 90 host addresses at best.
-
-.HDR_2 Optimizations\ Made\ by\ Exclusion\ Directive
-
-The Exclusion Directive extension presented in this document allows a
-User Agent (UA) to direct those Directory Agents (DAs) and Service
-Agents (SAs) from which it has already received responses not to
-respond to retransmissions of a particular query. Hence subsequent
-retransmissions only generate responses from agents from which the
-requester has not already received a response.
-
-This extension can be used in conjunction with the SLP v2 PR list.
-SAs and DAs which do not understand the Exclusion Directive extension
-will ignore it. With the use of the Exclusion Directive extension, SLP
-v2 User Agents may perform multicast discovery with a high degree of
-success and efficiency, even when the number of respondents reaches
-into the thousands. .
-
-.HDR_2 Terminology
-
-In this document, the key words "MAY", "MUST, "MUST NOT", "optional",
-"recommended", "SHOULD", and "SHOULD NOT", are to be interpreted as
-described in RFC 2119 [2].
-
-.bp
-.RETURN_HDR_1 Exclusion\ Extension\ Format
-
-The fields in an Exclusion extension form an Exclusion Directive that
-tells receiving agents not to respond to a specific request from a
-specific host for a specific time interval.
-
-Each Exclusion Directive is     fully  contained within one  SLP    v2
-extension block. However, a single SLP v2  request message may contain
-multiple Exclusion Directives.  For example, a single Service  Request
-may  contain three Exclusion  Directives  within three distinct SLP v2
-extension blocks.
-
-.KS
-.HDR_2 Exclusion\ Extension\ Fields
-
-The Exclusion extension has the following format:
-.DS L
-
-
-   0             1                   2                   3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Extension ID = 0x000?        |     Next Extension Offset     |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | Offset, contd.|     size      |        Exclusion XID          |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                             Nonce                             |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Exclusion Interval           |    Number of Entries          |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                     Exclusion Entries                         |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | # auth blocks                 | authentication block (if any) |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-.DE
-.KE 
-.HDR_3 Size\ Field
-
-The size field specifies the size, in bytes, of each address entry. A
-size value of 4 bytes MUST be encoded as an IP v4 address in network
-byte order. A size value of 16 bytes MUST be encoded as an IP v6
-address in network byte order. Other address sizes are assumed to be
-opaque data and will not be interoperable among different
-implementations
-
-.HDR_4 Using\ the\ Size\ Field\ to\ Calculate\ Length\ of\ Entries
-
-The size of the Exclusion Entries field MUST be calculated by
-multiplying the value of the Size field by the value of the Number of
-Entries field. 
-
-.RETURN_HDR_3 Exclusion\ XID
-
-The Exclusion XID identifies the SLP request to which the enclosing
-Exclusion Directive applies. An Exclusion Directive always applies to
-exactly one specific XID from exactly one host IP address.
-
-It is possible that the value of XID field in the Exclusion Directive
-and the XID in the SLP header of the message containing the Exclusion
-Directive will be different. This is a subtle but important point: the
-SLP v2 header XID and the Exclusion XID are not equivalent. See
-section 3.0 for details of how the exclusion XID works.
-
-.HDR_3 Nonce
-
-The Nonce adds a unique value to each Exclusion Directive that makes
-it difficult to mount a denial of service attack by replaying
-Exclusion Directives. The Nonce is a 128-bit field which MUST contain
-a cryptographic-quality random unique value; or alternatively must be
-filled with zero bytes. (If the Nonce is filled with zero bytes, it is
-ignored.)
-
-The usage of the Nonce is explained further in section 4.3.
-
-.HDR_3 Exclusion\ Interval
-
-The Exclusion Interval indicates the lifetime, in seconds, of the
-containing Exclusion Directive. The interval begins when the SA or DA
-receives the Exclusion Directive. Exclusion Directives SHOULD have an
-interval from one to several seconds. However, the Exclusion Interval
-may need to be increased for unusually large networks or media with
-high latency characteristics, such as satellite links. 
-
-.HDR_3  Exclusion\ Entries
-
-The Exclusion Entries field is the list of host IP addresses that are
-subject to the containing Exclusion Directive. The length of the Exclusion
-Entries field is the number of IP addresses in the list multiplied by
-the size of each IP address.
-
-The size of each IP address is determined by the value of the size
-field. Each Exclusion Directive therefore may only contain IPv4
-addresses or IPv6 addresses, but not both.
-
-.HDR_4 Dual-stack\ IP\ Environments
-
-In environments using both IPv4 and IPv6 addresses it may be necessary
-to deliver two Exclusion Directives where otherwise one would be
-sufficient. E.g., one Directive containing IPv4 addresses and another
-Directive containing IPv6 addresses. One way to accomplish this is to
-pack two separate Exclusion Directives into a single SLP
-request. Another way involves using dummy request messages to deliver
-Exclusion Directives. Dummy request messages are covered in section
-3.1 below.
-
-.RETURN_HDR_3 Authentication\ Blocks
-
-The Number of Auth Blocks indicates how many authentication blocks
-are contained in the containing Exclusion Directive. The format of the
-authentication block is covered in section 4 below.
-
-.KS
-.RETURN_HDR_2 Exclusion\ Directive\ Functionality
-
-The purpose of the Exclusion Directive is to cause SAs or DAs to
-silently discard specific SLP requests that originate from specific IP
-addresses. This purpose aids in the use of multicasting to discover
-services in large network environments. The Exclusion Directive makes
-multicast discovery  more reliable and efficient by: 
-
-.nr PI 5
-.nr step 1 1
-.RS
-.IP \n[step]. 3
-Providing a more compact mechanism to silence previous responders.
-.IP \n+[step].
-Magnifying the effect of the silencing mechanism by specifying a quiet interval.
-.RE
-.KE
-
-.HDR_3 Exclusion\ Directive\ State\ Table\ (EDST)
-
-When the Exclusion Directive is present in an SLP request, the
-receiving agent uses the directive to create and maintain state
-information that causes the receiving agent to ignore and discard
-matching requests (possibly including the request containing the
-Exclusion Directive).
-
-The Exclusion Directive State Table (EDST) is the collection of
-information describing all current Exclusion Directives received by
-the agent. EDST entries are a record with five fields: Source Address,
-Source Port, exclusion XID , exclusion nonce value, and expiration
-time. (The nonce value MAY be zero filled.)
-
-The Exclusion Directive only applies to SLP v2 messages that have the
-multicast flag set. The SA or DA MUST respond to SLP v2 messages that
-do not have the multicast flag set as specified in [1].
-
-If the incoming request message matches a current record in the
-receiving agent's EDST, and if the incoming request's Multicast flag
-is set in the SLP header, the DA or SA MUST silently discard the
-message. 
-
-When the Exclusion Interval of an Exclusion Directive has expired, the
-SA or DA MUST delete the corresponding record in its EDST and resume
-processing SLP v2 multicast request as if that Exclusion Directive
-was never received.
-
-If an incoming request does not contain an Exclusion Directive, the
-receiving agent MUST process that request without regard to the local
-EDST. (In other words, process the request normally.)
-
-
-.RETURN_HDR_1  Exclusion\ Directives\ in\ SLP\ v2\ Request\ Messages
-
-An SA or DA may encounter the Exclusion Directive in Service Request,
-Attribute Request, and Service Type Request messages. In each case,
-the request may also contain a PR list as described in [1].
-
-A UA MUST NOT include an Exclusion Directive in a unicast SLP v2
-request message. DAs and SAs MUST ignore Exclusion Directives that
-are erroneously included in unicast request messages.
-
-.KS
-If the SA or DA supports the Exclusion Directive, it MUST perform the
-following steps when processing an SLP v2 Request message.
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-If the request message is unicast or if the receiving agent does not
-recognize the Exclusion Directive, go to step 6 below.
-.IP \n+[step].
-If the incoming request does not have an Exclusion Directive,
-proceed to step 6.
-.IP \n+[step].
-Extract the Exclusion Directive from the request. Search the
-Directive's Exclusion Entries list for the receiving agent's IP
-address. If not found, proceed to step 6.
-.IP \n+[step].
-Extract the source address and port from the UDP header and the
-Exclusion XID and nonce from the Exclusion Directive. The receiving
-agent MUST ensure that its EDST contains a record for this directive,
-creating a new EDST record if necessary. (This step is also a
-convenient time to delete expired entries from the EDST.)
-.IP \n+[step].
-Extract the source address and port from the incoming request's UDP
-header. Extract the XID from the request's SLP v2 header. If the
-incoming request has an Exclusion Directive, extract the nonce from
-the directive. 
-
-Search the EDST for an entry containing matching values for these data
-(Optionally ignoring the nonce from the EDST entry if the incoming
-request does not contain an exclusion directive). Upon finding a
-matching EDST entry, silently discard the request. Otherwise continue.
-.IP \n+[step].
-If the SA or DA has not discarded the request up to this point,
-evaluate the request normally as outlined in [1].
-.RE
-.KE
-.in 3
-
-It is worth repeating that the Exclusion Directive only applies to
-SLP v2 request messages that have the R (Request Multicast) flag
-turned on in the SLP v2 header. Agents MUST NOT silently discard
-unicast request messages regardless of exclusion directives or EDST
-entries.
-
-Note that additional steps may be necessary if the Exclusion
-directive contains one or more authentication blocks. These
-steps are outlined in section 4.
-
-.KS 
-.HDR_2 Dummy\ Service\ Request\ Message\ with\ Exclusion\ Directive 
-
-A "dummy" request message is one that has zero-length fields
-for the entire request body, exclusive of the SLP v2 header and the
-Exclusion directive.
-
-Using a dummy SLP request message for the sole purpose of transporting
-an Exclusion Directive may be helpful in two cases:
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-The Exclusion Directive is too large to fit within a single request
-datagram alongside the SLP header, service type, predicate, and other request
-data. However, it will fit in a datagram with just itself and the SLP
-header. 
-.IP \n+[step].
-The Exclusion Directive is larger than the sum of the network MTU
-and the SLP Header. The agent can divide the Exclusion Entries list
-across two or more Exclusion Directives and transport those Directives
-within a corresponding number of dummy SLP request messages.
-
-This method can support Exclusion Entry lists that contain thousands
-of addresses. 
-.RE
-.in 3
-.sp 1
-When an SA or DA receives a dummy SLP request that contains an
-Exclusion Directive, the receiving agent MUST extract the Exclusion
-Directive from the dummy request and ensure that the local EDST
-contains a record corresponding to the Exclusion Directive. This is
-described in section 3, step 4 above. 
-
-
-A Dummy request message MUST have the R (Request Multicast) flag
-turned on in the SLP v2 header. This causes SLP v2 SAs and DAs that
-are unaware of the Exclusion Directive to silently discard dummy
-request messages due to a parsing error (instead of responding to the
-sending agent with an error code).
-.KE 
-.KS
-
-.HDR_3 Format\ of\ Dummy\ Service\ Request
-.DS L
-   0                   1                   2                   3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | Service Location Header (R flag on) (function = SrvRqst = 1)  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |    length of <PRList> = 0     | length of <service-type> = 0  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |   length of <scope-list> = 0  |   length of <predicate> = 0   |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |    length of <SLP SPI > = 0   |   Extension ID = Exclusion    |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |         Next Extension Offset                 |     size      |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     Exclusion XID             |   Nonce                       |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |          Nonce, cont'd.       |       Exclusion Interval      |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |        Number of Entries      |          Exclusion Entries    \\
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   \\ # auth blocks                 |  authentication block (if any)\\
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-.DE
-.KE
-.HDR_3 Processing\ the\ Dummy\ Service\ Request
-
-Dummy Service Request messages MUST be processed as outlined in
-section 3 above. The result is that the receiving agents which support
-the Exclusion Directive will process the Directive, while all other
-agents will silently discard the message due to a parsing error.
-
-After processing the Exclusion Directive, the receiving agent will
-produce a parse error. Because the service request has the multicast
-flag set, the receiving agent will not send an error response to the
-originating agent.
-
-Note that if the Exclusion Directive contains an authentication
-block, the SA or DA SHOULD validate the signature of the Exclusion
-Directive. Authentication of Exclusion Directives is covered in
-section 4.
-
-.KS
-.HDR_3 Using\ the\ Exclusion\ Directive\ and\ PR\ List\ Together
-
-The steps below show how to use the
-Exclusion Directive in combination with the SLP PR list to perform
-multicast discovery (substitute actual XIDs in real usage):
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-Send a new Service Request with no PR list and no Exclusion Directive;
-process the replies and remember the respondents as RL1. 
-.IP \n+[step].
-Build an exclusion list and remember it as list EL1.
-.IP \n+[step].
-Immediately re-transmit the Service Request from (1) with no PR list
-and but with an Exclusion Directive that contains Exclusion List EL1;
-process the replies and remember the respondents as RL2.
-.IP \n+[step].
-The intersection of EL1 and RL2 are agents that do not support the
-Exclusion Directive. Create PRL1 = EL1 n RL2. Build EL2 = RL2 - PRL1.
-.IP \n+[step].
-Immediately re-transmit the Service Request from (3) including PRL1 in
-the SLP header and substituting EL2 for EL1 in the Exclusion
-Directive. If no responses the discovery cycle is complete. 
-.IP \n+[step].
-Repeat the previous thre steps n times using ELn-1, RLn, PRLn-1, and ELn until the
-UA receives no responses for the configured timeout period. 
-.RE
-.in 3
-.sp 1
-In steps 1 - 6 above, it is important that each Service Request (steps
-1, 3, and 5) have the same XID in the SLP Header ; and equally that
-each Exclusion Directive also has the same value in the XID field.
-.KE
-.KS
-
-.RETURN_HDR_1 Authenticating\ Exclusion\ Directives
-
-To prevent denial of service attacks against UAs, all agents that
-recognize the Exclusion Directive SHOULD support authentication of
-the Exclusion Directive.
-
-Authenticating Exclusion Directives places the additional burden upon
-the User Agent of signing data. In standard SLP v2, UAs only need to
-verify signatures. The additional ability to generate signatures
-means that UAs must be issued private key material.
-
-.HDR_2 The\ Exclusion\ Directive\ Authentication\ Block
-
-The format of the Exclusion Directive Authentication Block is the same
-as that used by SLP v2 [1].
-
-.DS L
-   0                   1                   2                     3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Block Structure Descriptor   |  Authentication Block Length  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                           Timestamp                           |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     SLP SPI String Length     |         SLP SPI String        \\
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   \\                Structured Authentication Block...            \\
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-.DE
-.KE
-.KS
-.HDR_2 Exclusion\ Directive\ Authentication\ Rules
-
-To sign or verify the signature of an Exclusion Directive, the SLP
-agent MUST use the following components of the Exclusion Directive as
-if they were a single continuous byte-aligned buffer:
-.nr PI 5
-.RS
-.IP \[bu] 3 
-16-bit Exclusion XID
-.IP \[bu] 
-32-bit Nonce
-.IP \[bu] 
-16-bit Exclusion Interval
-.IP \[bu] 
-8-bit Exclusion Entry size
-.IP \[bu] 
-16-bit Number of Entries
-.IP \[bu] 
-Variable-length Exclusion Entries.
-.RE
-.KE
-
-.RETURN_HDR_1 Using\ the\ NONCE\ Value\ to\ Prevent\ Replay\ Attacks
-
-Despite the use of signatures to authenticate Exclusion Directives,
-UAs may still be vulnerable to a replay denial of service attack.  To
-prevent this possibility, SLP Agents that recognize the Exclusion
-directive SHOULD make use of the nonce value as described in this
-section.
-
-Every Exclusion Directive contains a 128-bit nonce field, which MUST
-contain a 128-bit cryptographicly random value or be filled with
-zeros. If the nonce is filled with zeroes, the UA is open to a
-denial-of service attack. 
-
-Because the nonce field is included in signature generation and
-validation, each signed Exclusion Directive can be cryptographically
-unique. Unsigned Exclusion Directives can also be cryptographically
-unique but their source can be spoofed.
-
-.KS
-By using the nonce correctly, Exclusion Directives can be specific
-to:
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-The source address and port of the requesting UA.
-.IP \n+[step].
-The XID of the request.
-.IP \n+[step].
-A cryptographically unique value for each and every request. To make
-this work, SAs and DAs MUST include the nonce value, along with the UA
-source address and the request XID when deciding whether or not an
-Exclusion Directive applies to a request message.  
-.RE 
-.KE 
-
-.HDR_2 UA\ Use\ of\ the\ Nonce\ to\ Prevent\ Denial\ of\ Service\ Attack
-
-The UA is the SLP component vulnerable to a denial of service attack
-so it is responsible for using an appropriate algorithm to generate a
-nonce with the requisite random characteristics. 
-
-.KS
-For each Exclusion Directive:
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-Generate a random 128-bit integer to use as the nonce.
-.IP \n+[step].
-Initialize an Exclusion Directive, including the XID of the
-request that is subject to response suppression.
-.IP \n+[step].
-Insert the nonce value from (1) into the Exclusion Directive.
-.IP \n+[step].
-Optionally sign the Exclusion Directive as outlined in the section on
-Authentication above. 
-.IP \n+[step].
-Use a Exclusion Directive containing the nonce in all
-requests and dummy Service Requests for the XID in step (2).
-.IP \n+[step].
-IMPORTANT - use a DIFFERENT, cryptographically generated nonce
-for each request XID for which you are issuing an Exclusion
-directive.
-.RE
-.KE
-.KS
-.HDR_2 DA\ and\ SA\ Use\ of\ the\ Nonce
-
-SA's DAs that recognize the Exclusion Directive MUST use the nonce
-value to initialize EDST entries and to evaluate Exclusion Directives
-in request messages. 
-
-.HDR_3 Zero-filled\ Nonce
-
-UAs that don't have the ability to generate unique
-nonce values MUST fill the nonce field of the Exclusion Directive
-with zeros. This opens the agent up to a denial of service attack,
-however. (See below).
-
-.RETURN_HDR_2 Theory\ Behind\ the\ Nonce 
-The nonce is a simple mechanism to make it as difficult as possible
-for an attacker to predict the composition of SLP service
-requests that a particular UA may issue in the near future. 
-
-Most UA's use the XID field in the SLP 2 header as a sequential
-counter. Hence an attacker that has a copy of a recent SLP request can
-guess the XID of the next request the agent will make. Using the
-Exclusion Directive, an attacker can cause DA's and SA's not to
-respond to subsequent SLP requests made by the attacked agent. 
-
-However, the inclusion of the nonce value in the Exclusion Directive
-makes it infeasible for an attacker to guess the composition of future
-requests made by the UA. This is true because the nonce, unlike the
-XID, is a random value. Also, the nonce is large enough to make
-guessing its value in the next request too difficult for the attacker.
-.KE
-.RETURN_HDR_1 Security\ Considerations
-
-Implementing the Exclusion Directive without using the nonce value
-opens SLP v2 UAs up to a trivial denial of service attack, which would
-nullify the ability of the UA to perform discovery.
-
-Implementing the Exclusion Directive with authentication but without
-using the nonce value may leave the UA open to a more sophisticated
-replay attack using previously signed and multicast request messages.
-
-UAs that support the Exclusion Directive SHOULD authenticate their
-requests as outlined in section 4 and SHOULD include the nonce value
-in all Exclusion Directives.
-
-SAs and DAs that support the Exclusion Directive SHOULD be able to
-verify signed Exclusion Directives and MUST store the nonce value in
-the EDST entry for that directive.
-
-Nonce values generated by UAs MUST  be cryptographically unique and
-random values if they are to provide any safeguard against a replay
-attack.
-
-.HDR_1 Acknowledgements
-
-Erik Guttman has provided a great deal of feedback and improvements
-to this document. The srvloc working group also contributed to the
-development of this document, especialy Kevin Arnold, James Kempf,
-Ira McDonald, Evan Hughes, Terry Lambert, and others. Thomas Narten
-recommended some important changes during the review process.
-.KS
-.HDR_1 References
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3 
-Guttman, E., Perkins, C., Veizades, J., and M. Day, "Service
-Location Protocol Version 2", RFC 2608, June 1999.
-.IP \n+[step].
-Bradner, S,. "Key Words for Use in RFCs to Indicate Requirements
-Levels", BCP 14, RFC 2119, March 1997
-.RE
-.KE
-.KS
-.HDR_1 Author's\ Contact\ Information
-
-Michael Day
-IBM
-3039 Cornwallis Road
-Research Triangle Park, NC 27709
-
-Phone:  919 543-4283
-
-Email:  mdday@us.ibm.com
-.KE
-.KS
-.HDR_1 Full\ Copyright\ Statement
-
-Copyright (C) The Internet Society (2000-2002).  All Rights Reserved.
-
-This document and translations of it may be copied and furnished to
-others, and derivative works that comment on or otherwise explain it
-or assist in its implementation may be prepared, copied, published and
-distributed, in whole or in part, without restriction of any kind,
-provided that the above copyright notice and this paragraph are
-included on all such copies and derivative works.  However, this
-document itself may not be modified in any way, such as by removing
-the copyright notice or references to the Internet Society or other
-Internet organizations, except as needed for the purpose of developing
-Internet standards in which case the procedures for copyrights defined
-in the Internet Standards process must be followed, or as required to
-translate it into languages other than English.
-
-The limited permissions granted above are perpetual and will not be
-revoked by the Internet Society or its successors or assigns.
-
-This document and the information contained herein is provided on an
-"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
-TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
-NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN
-WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE."
-.KE
-
-.TC
diff --git a/src/Unsupported/slp_client/doc/draft-day-srvloc-exclusion-02.nr.txt b/src/Unsupported/slp_client/doc/draft-day-srvloc-exclusion-02.nr.txt
deleted file mode 100644 (file)
index f381dac..0000000
+++ /dev/null
@@ -1,817 +0,0 @@
-.\"-----------------------------------------------------------------
-.\" Registers to store heading levels as variables
-.\"-----------------------------------------------------------------
-.nr head1 0 1
-.nr head2 0 1
-.nr head3 0 1 
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-
-.\"-----------------------------------------------------------------
-.\" Return to header level 1, 2, etc. 
-.\" resets the level registers and indent
-.\"-----------------------------------------------------------------
-.de RETURN_HDR_1
-.nr head2 0 1
-.nr head3 0 1 
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_1 \\$1 
-..
-
-.de RETURN_HDR_2
-.nr head3 0 1 
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_2 \\$1
-..
-.de RETURN_HDR_3
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_3 \\$1
-..
-
-.de RETURN_HDR_4
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_4 \\$1
-..
-
-.de RETURN_HDR_5
-.nr head6 0 1
-.in 0 
-\.HDR_5 \\$1
-..
-
-.\"-----------------------------------------------------------------
-.\" Create a level 1, 2, etc,.  heading 
-.\" resets indent, creates a TOC entry
-.\" Parameter is the title of the heading
-.\"-----------------------------------------------------------------
-.de HDR_1
-.sp 1
-.in 0 
-\\n+[head1]\\  \\$1
-.XS
-\\n[head1]\\  \\$1
-.XE
-.in 3
-.. 
-
-
-.de HDR_2
-.sp 1
-.in 0 
-\\n[head1]\\.\\n+[head2]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_3
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n+[head3]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_4
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n+[head4]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_5
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n+[head5]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n[head5]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_6
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n[head5]\\.\\n+[head6]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n[head5]\\.\\n[head6]\\ \\$1
-.in 3
-.XE
-.. 
-
-.\"-----------------------------------------------------------------
-.\" END MACRO DEFINITIONS
-.\"-----------------------------------------------------------------
-
-.pl 58
-.po 0
-.ll 72
-.lt 72
-.ds LF Day 
-.ds RF FORMFEED[Page %]^
-.ds CF 
-.ds LH INTERNET DRAFT
-.ds CH SLP Exclusion Directive
-.ds RH Exp. May 2003  
-.hy 0
-.ad l
-.in 0
-
-   
-Internet Engineering Task Force                            Michael Day
-INTERNET DRAFT                                                     IBM
-23 December 2002                                Expires in six months
-
-.ce 1000
-Exclusion Extension for Service Location Protocol v2
-draft-day-svrloc-exclusion-03.txt
-.ce 0
-.sp 5
-
-.in 0
-Status of This Memo
-.in 3
-This document is an Internet-Draft and is subject to
-all provisions of Section 10 of RFC2026.
-
-Internet-Drafts are working documents of the Internet Engineering
-Task Force (IETF), its areas, and its working groups.  Note that
-other groups may also distribute working documents as
-Internet-Drafts.
-
-Internet-Drafts are draft documents valid for a maximum of six
-months and may be updated, replaced, or obsoleted by other
-documents at any time.  It is inappropriate to use Internet-
-Drafts as reference material or to cite them other than as
-"work in progress."
-
-The list of current Internet-Drafts can be accessed at
-http://www.ietf.org/1id-abstracts.html
-
-The list of Internet-Draft Shadow Directories can be accessed at
-http://www.ietf.org/shadow.html
-
-This document is an individual contribution to the Internet
-Engineering Task Force (IETF). Comments should be submitted to the
-srvloc@srvloc.org mailing list.
-
-Distribution of this memo is unlimited.
-       
-.bp
-.HDR_1 Introduction 
-
-The Service Location Protocol, Version 2 [1] allows the use of
-multicast and broadcast discovery requests.  The SLP exclusion
-directive is an extension to SLP that optimizes the use of
-multicasting and broadcasting to find services on an intranet. This
-document hereafter refers to multicast discovery but all its contents
-apply to broadcast discovery as well.
-
-.HDR_2 "Present SLPv2 Multicast Behavior"
-
-Multicast discovery requests allow an SLP User Agent to discover
-services with no prior configuration. Multicast discovery requests are
-not sent reliably and must be retransmitted in order to find all
-services of the desired type on the network.
-
-When SLP v2 SrvRqst, SrvTypeRqst, and AttrRqst messages are multicast,
-they contain a <PRList> of previous respondents. Initially the
-<PRList> is empty. When these requests are unicast, the <PRList> is
-always empty.
-
-Any DA or SA which sees its address in the <PRList> does not respond
-to the request (as specified in RFC 2608).
-
-The User Agent then retransmits the discovery request until the
-<PRList> causes no further responses to be elicited or the previous
-responder list and the request will not fit into a single datagram or
-until CONFIG_MC_MAX seconds elapse[1].
-
-The PR list is an effective mechanism for suppressing duplicate
-responses in smaller environments. However, because of the way PR
-lists are encoded with the SLP v2 header, the PR List has a limit of
-as few as 90 IPv4 addressees, and even fewer IPv6 addresses. This
-means in most environments a User Agent may suppress duplicate
-responses from approximately 90 host addresses at best.
-
-.HDR_2 Optimizations\ Made\ by\ Exclusion\ Directive
-
-The Exclusion Directive extension presented in this document allows a
-User Agent (UA) to direct those Directory Agents (DAs) and Service
-Agents (SAs) from which it has already received responses not to
-respond to retransmissions of a particular query. Hence subsequent
-retransmissions only generate responses from agents from which the
-requester has not already received a response.
-
-This extension can be used in conjunction with the SLP v2 PR list.
-SAs and DAs which do not understand the Exclusion Directive extension
-will ignore it. With the use of the Exclusion Directive extension, SLP
-v2 User Agents may perform multicast discovery with a high degree of
-success and efficiency, even when the number of respondents reaches
-into the thousands. .
-
-.HDR_2 Terminology
-
-In this document, the key words "MAY", "MUST, "MUST NOT", "optional",
-"recommended", "SHOULD", and "SHOULD NOT", are to be interpreted as
-described in RFC 2119 [2].
-
-.bp
-.RETURN_HDR_1 Exclusion\ Extension\ Format
-
-The fields in an Exclusion extension form an Exclusion Directive that
-tells receiving agents not to respond to a specific request from a
-specific host for a specific time interval.
-
-Each Exclusion Directive is     fully  contained within one  SLP    v2
-extension block. However, a single SLP v2  request message may contain
-multiple Exclusion Directives.  For example, a single Service  Request
-may  contain three Exclusion  Directives  within three distinct SLP v2
-extension blocks.
-
-.KS
-.HDR_2 Exclusion\ Extension\ Fields
-
-The Exclusion extension has the following format:
-.DS L
-
-
-   0             1                   2                   3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Extension ID = 0x000?        |     Next Extension Offset     |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | Offset, contd.|     size      |        Exclusion XID          |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                             Nonce                             |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Exclusion Interval           |    Number of Entries          |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                     Exclusion Entries                         |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | # auth blocks                 | authentication block (if any) |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-.DE
-.KE 
-.HDR_3 Size\ Field
-
-The size field specifies the size, in bytes, of each address entry. A
-size value of 4 bytes MUST be encoded as an IP v4 address in network
-byte order. A size value of 16 bytes MUST be encoded as an IP v6
-address in network byte order. Other address sizes are assumed to be
-opaque data and will not be interoperable among different
-implementations
-
-.HDR_4 Using\ the\ Size\ Field\ to\ Calculate\ Length\ of\ Entries
-
-The size of the Exclusion Entries field MUST be calculated by
-multiplying the value of the Size field by the value of the Number of
-Entries field. 
-
-.RETURN_HDR_3 Exclusion\ XID
-
-The Exclusion XID identifies the SLP request to which the enclosing
-Exclusion Directive applies. An Exclusion Directive always applies to
-exactly one specific XID from exactly one host IP address.
-
-It is possible that the value of XID field in the Exclusion Directive
-and the XID in the SLP header of the message containing the Exclusion
-Directive will be different. This is a subtle but important point: the
-SLP v2 header XID and the Exclusion XID are not equivalent. See
-section 3.0 for details of how the exclusion XID works.
-
-.HDR_3 Nonce
-
-The Nonce adds a unique value to each Exclusion Directive that makes
-it difficult to mount a denial of service attack by replaying
-Exclusion Directives. The Nonce is a 128-bit field which MUST contain
-a cryptographic-quality random unique value; or alternatively must be
-filled with zero bytes. (If the Nonce is filled with zero bytes, it is
-ignored.)
-
-The usage of the Nonce is explained further in section 4.3.
-
-.HDR_3 Exclusion\ Interval
-
-The Exclusion Interval indicates the lifetime, in seconds, of the
-containing Exclusion Directive. The interval begins when the SA or DA
-receives the Exclusion Directive. Exclusion Directives SHOULD have an
-interval from one to several seconds. However, the Exclusion Interval
-may need to be increased for unusually large networks or media with
-high latency characteristics, such as satellite links. 
-
-.HDR_3  Exclusion\ Entries
-
-The Exclusion Entries field is the list of host IP addresses that are
-subject to the containing Exclusion Directive. The length of the Exclusion
-Entries field is the number of IP addresses in the list multiplied by
-the size of each IP address.
-
-The size of each IP address is determined by the value of the size
-field. Each Exclusion Directive therefore may only contain IPv4
-addresses or IPv6 addresses, but not both.
-
-.HDR_4 Dual-stack\ IP\ Environments
-
-In environments using both IPv4 and IPv6 addresses it may be necessary
-to deliver two Exclusion Directives where otherwise one would be
-sufficient. E.g., one Directive containing IPv4 addresses and another
-Directive containing IPv6 addresses. One way to accomplish this is to
-pack two separate Exclusion Directives into a single SLP
-request. Another way involves using dummy request messages to deliver
-Exclusion Directives. Dummy request messages are covered in section
-3.1 below.
-
-.RETURN_HDR_3 Authentication\ Blocks
-
-The Number of Auth Blocks indicates how many authentication blocks
-are contained in the containing Exclusion Directive. The format of the
-authentication block is covered in section 4 below.
-
-.KS
-.RETURN_HDR_2 Exclusion\ Directive\ Functionality
-
-The purpose of the Exclusion Directive is to cause SAs or DAs to
-silently discard specific SLP requests that originate from specific IP
-addresses. This purpose aids in the use of multicasting to discover
-services in large network environments. The Exclusion Directive makes
-multicast discovery  more reliable and efficient by: 
-
-.nr PI 5
-.nr step 1 1
-.RS
-.IP \n[step]. 3
-Providing a more compact mechanism to silence previous responders.
-.IP \n+[step].
-Magnifying the effect of the silencing mechanism by specifying a quiet interval.
-.RE
-.KE
-
-.HDR_3 Exclusion\ Directive\ State\ Table\ (EDST)
-
-When the Exclusion Directive is present in an SLP request, the
-receiving agent uses the directive to create and maintain state
-information that causes the receiving agent to ignore and discard
-matching requests (possibly including the request containing the
-Exclusion Directive).
-
-The Exclusion Directive State Table (EDST) is the collection of
-information describing all current Exclusion Directives received by
-the agent. EDST entries are a record with five fields: Source Address,
-Source Port, exclusion XID , exclusion nonce value, and expiration
-time. (The nonce value MAY be zero filled.)
-
-The Exclusion Directive only applies to SLP v2 messages that have the
-multicast flag set. The SA or DA MUST respond to SLP v2 messages that
-do not have the multicast flag set as specified in [1].
-
-If the incoming request message matches a current record in the
-receiving agent's EDST, and if the incoming request's Multicast flag
-is set in the SLP header, the DA or SA MUST silently discard the
-message. 
-
-When the Exclusion Interval of an Exclusion Directive has expired, the
-SA or DA MUST delete the corresponding record in its EDST and resume
-processing SLP v2 multicast request as if that Exclusion Directive
-was never received.
-
-If an incoming request does not contain an Exclusion Directive, the
-receiving agent MUST process that request without regard to the local
-EDST. (In other words, process the request normally.)
-
-
-.RETURN_HDR_1  Exclusion\ Directives\ in\ SLP\ v2\ Request\ Messages
-
-An SA or DA may encounter the Exclusion Directive in Service Request,
-Attribute Request, and Service Type Request messages. In each case,
-the request may also contain a PR list as described in [1].
-
-A UA MUST NOT include an Exclusion Directive in a unicast SLP v2
-request message. DAs and SAs MUST ignore Exclusion Directives that
-are erroneously included in unicast request messages.
-
-.KS
-If the SA or DA supports the Exclusion Directive, it MUST perform the
-following steps when processing an SLP v2 Request message.
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-If the request message is unicast or if the receiving agent does not
-recognize the Exclusion Directive, go to step 6 below.
-.IP \n+[step].
-If the incoming request does not have an Exclusion Directive,
-proceed to step 6.
-.IP \n+[step].
-Extract the Exclusion Directive from the request. Search the
-Directive's Exclusion Entries list for the receiving agent's IP
-address. If not found, proceed to step 6.
-.IP \n+[step].
-Extract the source address and port from the UDP header and the
-Exclusion XID and nonce from the Exclusion Directive. The receiving
-agent MUST ensure that its EDST contains a record for this directive,
-creating a new EDST record if necessary. (This step is also a
-convenient time to delete expired entries from the EDST.)
-.IP \n+[step].
-Extract the source address and port from the incoming request's UDP
-header. Extract the XID from the request's SLP v2 header. If the
-incoming request has an Exclusion Directive, extract the nonce from
-the directive. 
-
-Search the EDST for an entry containing matching values for these data
-(Optionally ignoring the nonce from the EDST entry if the incoming
-request does not contain an exclusion directive). Upon finding a
-matching EDST entry, silently discard the request. Otherwise continue.
-.IP \n+[step].
-If the SA or DA has not discarded the request up to this point,
-evaluate the request normally as outlined in [1].
-.RE
-.KE
-.in 3
-
-It is worth repeating that the Exclusion Directive only applies to
-SLP v2 request messages that have the R (Request Multicast) flag
-turned on in the SLP v2 header. Agents MUST NOT silently discard
-unicast request messages regardless of exclusion directives or EDST
-entries.
-
-Note that additional steps may be necessary if the Exclusion
-directive contains one or more authentication blocks. These
-steps are outlined in section 4.
-
-.KS 
-.HDR_2 Dummy\ Service\ Request\ Message\ with\ Exclusion\ Directive 
-
-A "dummy" request message is one that has zero-length fields
-for the entire request body, exclusive of the SLP v2 header and the
-Exclusion directive.
-
-Using a dummy SLP request message for the sole purpose of transporting
-an Exclusion Directive may be helpful in two cases:
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-The Exclusion Directive is too large to fit within a single request
-datagram alongside the SLP header, service type, predicate, and other request
-data. However, it will fit in a datagram with just itself and the SLP
-header. 
-.IP \n+[step].
-The Exclusion Directive is larger than the sum of the network MTU
-and the SLP Header. The agent can divide the Exclusion Entries list
-across two or more Exclusion Directives and transport those Directives
-within a corresponding number of dummy SLP request messages.
-
-This method can support Exclusion Entry lists that contain thousands
-of addresses. 
-.RE
-.in 3
-.sp 1
-When an SA or DA receives a dummy SLP request that contains an
-Exclusion Directive, the receiving agent MUST extract the Exclusion
-Directive from the dummy request and ensure that the local EDST
-contains a record corresponding to the Exclusion Directive. This is
-described in section 3, step 4 above. 
-
-
-A Dummy request message MUST have the R (Request Multicast) flag
-turned on in the SLP v2 header. This causes SLP v2 SAs and DAs that
-are unaware of the Exclusion Directive to silently discard dummy
-request messages due to a parsing error (instead of responding to the
-sending agent with an error code).
-.KE 
-.KS
-
-.HDR_3 Format\ of\ Dummy\ Service\ Request
-.DS L
-   0                   1                   2                   3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | Service Location Header (R flag on) (function = SrvRqst = 1)  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |    length of <PRList> = 0     | length of <service-type> = 0  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |   length of <scope-list> = 0  |   length of <predicate> = 0   |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |    length of <SLP SPI > = 0   |   Extension ID = Exclusion    |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |         Next Extension Offset                 |     size      |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     Exclusion XID             |   Nonce                       |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |          Nonce, cont'd.       |       Exclusion Interval      |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |        Number of Entries      |          Exclusion Entries    \\
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   \\ # auth blocks                 |  authentication block (if any)\\
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-.DE
-.KE
-.HDR_3 Processing\ the\ Dummy\ Service\ Request
-
-Dummy Service Request messages MUST be processed as outlined in
-section 3 above. The result is that the receiving agents which support
-the Exclusion Directive will process the Directive, while all other
-agents will silently discard the message due to a parsing error.
-
-After processing the Exclusion Directive, the receiving agent will
-produce a parse error. Because the service request has the multicast
-flag set, the receiving agent will not send an error response to the
-originating agent.
-
-Note that if the Exclusion Directive contains an authentication
-block, the SA or DA SHOULD validate the signature of the Exclusion
-Directive. Authentication of Exclusion Directives is covered in
-section 4.
-
-.KS
-.HDR_3 Using\ the\ Exclusion\ Directive\ and\ PR\ List\ Together
-
-The steps below show how to use the
-Exclusion Directive in combination with the SLP PR list to perform
-multicast discovery (substitute actual XIDs in real usage):
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-Send a new Service Request with no PR list and no Exclusion Directive;
-process the replies and remember the respondents as RL1. 
-.IP \n+[step].
-Build an exclusion list and remember it as list EL1.
-.IP \n+[step].
-Immediately re-transmit the Service Request from (1) with no PR list
-and but with an Exclusion Directive that contains Exclusion List EL1;
-process the replies and remember the respondents as RL2.
-.IP \n+[step].
-The intersection of EL1 and RL2 are agents that do not support the
-Exclusion Directive. Create PRL1 = EL1 n RL2. Build EL2 = RL2 - PRL1.
-.IP \n+[step].
-Immediately re-transmit the Service Request from (3) including PRL1 in
-the SLP header and substituting EL2 for EL1 in the Exclusion
-Directive. If no responses the discovery cycle is complete. 
-.IP \n+[step].
-Repeat the previous thre steps n times using ELn-1, RLn, PRLn-1, and ELn until the
-UA receives no responses for the configured timeout period. 
-.RE
-.in 3
-.sp 1
-In steps 1 - 6 above, it is important that each Service Request (steps
-1, 3, and 5) have the same XID in the SLP Header ; and equally that
-each Exclusion Directive also has the same value in the XID field.
-.KE
-.KS
-
-.RETURN_HDR_1 Authenticating\ Exclusion\ Directives
-
-To prevent denial of service attacks against UAs, all agents that
-recognize the Exclusion Directive SHOULD support authentication of
-the Exclusion Directive.
-
-Authenticating Exclusion Directives places the additional burden upon
-the User Agent of signing data. In standard SLP v2, UAs only need to
-verify signatures. The additional ability to generate signatures
-means that UAs must be issued private key material.
-
-.HDR_2 The\ Exclusion\ Directive\ Authentication\ Block
-
-The format of the Exclusion Directive Authentication Block is the same
-as that used by SLP v2 [1].
-
-.DS L
-   0                   1                   2                     3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Block Structure Descriptor   |  Authentication Block Length  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                           Timestamp                           |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     SLP SPI String Length     |         SLP SPI String        \\
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   \\                Structured Authentication Block...            \\
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-.DE
-.KE
-.KS
-.HDR_2 Exclusion\ Directive\ Authentication\ Rules
-
-To sign or verify the signature of an Exclusion Directive, the SLP
-agent MUST use the following components of the Exclusion Directive as
-if they were a single continuous byte-aligned buffer:
-.nr PI 5
-.RS
-.IP \[bu] 3 
-16-bit Exclusion XID
-.IP \[bu] 
-32-bit Nonce
-.IP \[bu] 
-16-bit Exclusion Interval
-.IP \[bu] 
-8-bit Exclusion Entry size
-.IP \[bu] 
-16-bit Number of Entries
-.IP \[bu] 
-Variable-length Exclusion Entries.
-.RE
-.KE
-
-.RETURN_HDR_1 Using\ the\ NONCE\ Value\ to\ Prevent\ Replay\ Attacks
-
-Despite the use of signatures to authenticate Exclusion Directives,
-UAs may still be vulnerable to a replay denial of service attack.  To
-prevent this possibility, SLP Agents that recognize the Exclusion
-directive SHOULD make use of the nonce value as described in this
-section.
-
-Every Exclusion Directive contains a 128-bit nonce field, which MUST
-contain a 128-bit cryptographicly random value or be filled with
-zeros. If the nonce is filled with zeroes, the UA is open to a
-denial-of service attack. 
-
-Because the nonce field is included in signature generation and
-validation, each signed Exclusion Directive can be cryptographically
-unique. Unsigned Exclusion Directives can also be cryptographically
-unique but their source can be spoofed.
-
-.KS
-By using the nonce correctly, Exclusion Directives can be specific
-to:
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-The source address and port of the requesting UA.
-.IP \n+[step].
-The XID of the request.
-.IP \n+[step].
-A cryptographically unique value for each and every request. To make
-this work, SAs and DAs MUST include the nonce value, along with the UA
-source address and the request XID when deciding whether or not an
-Exclusion Directive applies to a request message.  
-.RE 
-.KE 
-
-.HDR_2 UA\ Use\ of\ the\ Nonce\ to\ Prevent\ Denial\ of\ Service\ Attack
-
-The UA is the SLP component vulnerable to a denial of service attack
-so it is responsible for using an appropriate algorithm to generate a
-nonce with the requisite random characteristics. 
-
-.KS
-For each Exclusion Directive:
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-Generate a random 128-bit integer to use as the nonce.
-.IP \n+[step].
-Initialize an Exclusion Directive, including the XID of the
-request that is subject to response suppression.
-.IP \n+[step].
-Insert the nonce value from (1) into the Exclusion Directive.
-.IP \n+[step].
-Optionally sign the Exclusion Directive as outlined in the section on
-Authentication above. 
-.IP \n+[step].
-Use a Exclusion Directive containing the nonce in all
-requests and dummy Service Requests for the XID in step (2).
-.IP \n+[step].
-IMPORTANT - use a DIFFERENT, cryptographically generated nonce
-for each request XID for which you are issuing an Exclusion
-directive.
-.RE
-.KE
-.KS
-.HDR_2 DA\ and\ SA\ Use\ of\ the\ Nonce
-
-SA's DAs that recognize the Exclusion Directive MUST use the nonce
-value to initialize EDST entries and to evaluate Exclusion Directives
-in request messages. 
-
-.HDR_3 Zero-filled\ Nonce
-
-UAs that don't have the ability to generate unique
-nonce values MUST fill the nonce field of the Exclusion Directive
-with zeros. This opens the agent up to a denial of service attack,
-however. (See below).
-
-.RETURN_HDR_2 Theory\ Behind\ the\ Nonce 
-The nonce is a simple mechanism to make it as difficult as possible
-for an attacker to predict the composition of SLP service
-requests that a particular UA may issue in the near future. 
-
-Most UA's use the XID field in the SLP 2 header as a sequential
-counter. Hence an attacker that has a copy of a recent SLP request can
-guess the XID of the next request the agent will make. Using the
-Exclusion Directive, an attacker can cause DA's and SA's not to
-respond to subsequent SLP requests made by the attacked agent. 
-
-However, the inclusion of the nonce value in the Exclusion Directive
-makes it infeasible for an attacker to guess the composition of future
-requests made by the UA. This is true because the nonce, unlike the
-XID, is a random value. Also, the nonce is large enough to make
-guessing its value in the next request too difficult for the attacker.
-.KE
-.RETURN_HDR_1 Security\ Considerations
-
-Implementing the Exclusion Directive without using the nonce value
-opens SLP v2 UAs up to a trivial denial of service attack, which would
-nullify the ability of the UA to perform discovery.
-
-Implementing the Exclusion Directive with authentication but without
-using the nonce value may leave the UA open to a more sophisticated
-replay attack using previously signed and multicast request messages.
-
-UAs that support the Exclusion Directive SHOULD authenticate their
-requests as outlined in section 4 and SHOULD include the nonce value
-in all Exclusion Directives.
-
-SAs and DAs that support the Exclusion Directive SHOULD be able to
-verify signed Exclusion Directives and MUST store the nonce value in
-the EDST entry for that directive.
-
-Nonce values generated by UAs MUST  be cryptographically unique and
-random values if they are to provide any safeguard against a replay
-attack.
-
-.HDR_1 Acknowledgements
-
-Erik Guttman has provided a great deal of feedback and improvements
-to this document. The srvloc working group also contributed to the
-development of this document, especialy Kevin Arnold, James Kempf,
-Ira McDonald, Evan Hughes, Terry Lambert, and others. Thomas Narten
-recommended some important changes during the review process.
-.KS
-.HDR_1 References
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3 
-Guttman, E., Perkins, C., Veizades, J., and M. Day, "Service
-Location Protocol Version 2", RFC 2608, June 1999.
-.IP \n+[step].
-Bradner, S,. "Key Words for Use in RFCs to Indicate Requirements
-Levels", BCP 14, RFC 2119, March 1997
-.RE
-.KE
-.KS
-.HDR_1 Author's\ Contact\ Information
-
-Michael Day
-IBM
-3039 Cornwallis Road
-Research Triangle Park, NC 27709
-
-Phone:  919 543-4283
-
-Email:  mdday@us.ibm.com
-.KE
-.KS
-.HDR_1 Full\ Copyright\ Statement
-
-Copyright (C) The Internet Society (2000-2002).  All Rights Reserved.
-
-This document and translations of it may be copied and furnished to
-others, and derivative works that comment on or otherwise explain it
-or assist in its implementation may be prepared, copied, published and
-distributed, in whole or in part, without restriction of any kind,
-provided that the above copyright notice and this paragraph are
-included on all such copies and derivative works.  However, this
-document itself may not be modified in any way, such as by removing
-the copyright notice or references to the Internet Society or other
-Internet organizations, except as needed for the purpose of developing
-Internet standards in which case the procedures for copyrights defined
-in the Internet Standards process must be followed, or as required to
-translate it into languages other than English.
-
-The limited permissions granted above are perpetual and will not be
-revoked by the Internet Society or its successors or assigns.
-
-This document and the information contained herein is provided on an
-"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
-TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
-NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN
-WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE."
-.KE
-
-.TC
diff --git a/src/Unsupported/slp_client/doc/draft-day-srvloc-exclusion-02.txt b/src/Unsupported/slp_client/doc/draft-day-srvloc-exclusion-02.txt
deleted file mode 100644 (file)
index 5d59222..0000000
+++ /dev/null
@@ -1,1030 +0,0 @@
-
-
-
-
-
-
-Internet Engineering Task Force                            Michael Day
-INTERNET DRAFT                                                     IBM
-23 December 2002                                Expires in six months
-
-          Exclusion Extension for Service Location Protocol v2
-                   draft-day-srvloc-exclusion-02.txt
-
-
-
-
-
-
-Status of This Memo
-   This document is an Internet-Draft and is subject to all provisions
-   of Section 10 of RFC2026.
-
-   Internet-Drafts are working documents of the Internet Engineering
-   Task Force (IETF), its areas, and its working groups.  Note that
-   other groups may also distribute working documents as Internet-
-   Drafts.
-
-   Internet-Drafts are draft documents valid for a maximum of six months
-   and may be updated, replaced, or obsoleted by other documents at any
-   time.  It is inappropriate to use Internet- Drafts as reference
-   material or to cite them other than as "work in progress."
-
-   The list of current Internet-Drafts can be accessed at
-   http://www.ietf.org/1id-abstracts.html
-
-   The list of Internet-Draft Shadow Directories can be accessed at
-   http://www.ietf.org/shadow.html
-
-   This document is an individual contribution to the Internet
-   Engineering Task Force (IETF). Comments should be submitted to the
-   srvloc@srvloc.org mailing list.
-
-   Distribution of this memo is unlimited.
-
-
-
-
-
-
-
-
-
-
-
-
-Day                                                [Page i]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-                     Table of Contents
-
-
-1  Introduction  . . . . . . . . . . . . . . . . . . . .   2
-1.1 Present SLPv2 Multicast Behavior . . . . . . . . . .   2
-1.2 Optimizations Made by Exclusion Directive  . . . . .   2
-1.3 Terminology  . . . . . . . . . . . . . . . . . . . .   3
-2  Exclusion Extension Format  . . . . . . . . . . . . .   4
-2.1 Exclusion Extension Fields . . . . . . . . . . . . .   4
-2.1.1 Size Field . . . . . . . . . . . . . . . . . . . .   4
-2.1.1.1 Using the Size Field to Calcu-
-late Length of Entries . . . . . . . . . . . . . . . . .   5
-2.1.2 Exclusion XID  . . . . . . . . . . . . . . . . . .   5
-2.1.3 Nonce  . . . . . . . . . . . . . . . . . . . . . .   5
-2.1.4 Exclusion Interval . . . . . . . . . . . . . . . .   5
-2.1.5 Exclusion Entries  . . . . . . . . . . . . . . . .   6
-2.1.5.1 Dual-stack IP Environments . . . . . . . . . . .   6
-2.1.6 Authentication Blocks  . . . . . . . . . . . . . .   6
-2.2 Exclusion Directive Functionality  . . . . . . . . .   6
-2.2.1 Exclusion Directive State Table (EDST) . . . . . .   7
-3  Exclusion Directives in SLP v2 Request Messages . . .   8
-3.1 Dummy Service Request Message with Exclu-
-sion Directive . . . . . . . . . . . . . . . . . . . . .  10
-3.1.1 Format of Dummy Service Request  . . . . . . . . .  11
-3.1.2 Processing the Dummy Service Request . . . . . . .  11
-3.1.3 Using the Exclusion Direc-
-tive and PR List Together  . . . . . . . . . . . . . . .  12
-4  Authenticating Exclusion Directives . . . . . . . . .  13
-4.1 The Exclusion Directive Authentication Block . . . .  13
-4.2 Exclusion Directive Authentication Rules . . . . . .  14
-5  Using the NONCE Value to Prevent Replay Attacks
- . . . . . . . . . . . . . . . . . . . . . . . . . . . .  15
-5.1 UA Use of the Nonce to Prevent Denial of Ser-
-vice Attack  . . . . . . . . . . . . . . . . . . . . . .  16
-5.2 DA and SA Use of the Nonce . . . . . . . . . . . . .  16
-5.2.1 Zero-filled Nonce  . . . . . . . . . . . . . . . .  16
-5.3 Theory Behind the Nonce  . . . . . . . . . . . . . .  16
-6  Security Considerations . . . . . . . . . . . . . . .  16
-7  Acknowledgements  . . . . . . . . . . . . . . . . . .  17
-8  References  . . . . . . . . . . . . . . . . . . . . .  17
-9  Author's Contact Information  . . . . . . . . . . . .  17
-10  Full Copyright Statement . . . . . . . . . . . . . .  18
-
-
-
-
-
-
-
-Day                                                [Page 1]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-1  Introduction
-
-   The Service Location Protocol, Version 2 [1] allows the use of
-   multicast and broadcast discovery requests.  The SLP exclusion
-   directive is an extension to SLP that optimizes the use of
-   multicasting and broadcasting to find services on an intranet. This
-   document hereafter refers to multicast discovery but all its contents
-   apply to broadcast discovery as well.
-
-
-1.1 Present SLPv2 Multicast Behavior
-
-   Multicast discovery requests allow an SLP User Agent to discover
-   services with no prior configuration. Multicast discovery requests
-   are not sent reliably and must be retransmitted in order to find all
-   services of the desired type on the network.
-
-   When SLP v2 SrvRqst, SrvTypeRqst, and AttrRqst messages are
-   multicast, they contain a <PRList> of previous respondents. Initially
-   the <PRList> is empty. When these requests are unicast, the <PRList>
-   is always empty.
-
-   Any DA or SA which sees its address in the <PRList> does not respond
-   to the request (as specified in RFC 2608).
-
-   The User Agent then retransmits the discovery request until the
-   <PRList> causes no further responses to be elicited or the previous
-   responder list and the request will not fit into a single datagram or
-   until CONFIG_MC_MAX seconds elapse[1].
-
-   The PR list is an effective mechanism for suppressing duplicate
-   responses in smaller environments. However, because of the way PR
-   lists are encoded with the SLP v2 header, the PR List has a limit of
-   as few as 90 IPv4 addressees, and even fewer IPv6 addresses. This
-   means in most environments a User Agent may suppress duplicate
-   responses from approximately 90 host addresses at best.
-
-
-1.2 Optimizations Made by Exclusion Directive
-
-   The Exclusion Directive extension presented in this document allows a
-   User Agent (UA) to direct those Directory Agents (DAs) and Service
-   Agents (SAs) from which it has already received responses not to
-   respond to retransmissions of a particular query. Hence subsequent
-   retransmissions only generate responses from agents from which the
-   requester has not already received a response.
-
-
-
-Day                                                [Page 2]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-   This extension can be used in conjunction with the SLP v2 PR list.
-   SAs and DAs which do not understand the Exclusion Directive extension
-   will ignore it. With the use of the Exclusion Directive extension,
-   SLP v2 User Agents may perform multicast discovery with a high degree
-   of success and efficiency, even when the number of respondents
-   reaches into the thousands. .
-
-
-1.3 Terminology
-
-   In this document, the key words "MAY", "MUST, "MUST NOT", "optional",
-   "recommended", "SHOULD", and "SHOULD NOT", are to be interpreted as
-   described in RFC 2119 [2].
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                                                [Page 3]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-2  Exclusion Extension Format
-
-   The fields in an Exclusion extension form an Exclusion Directive that
-   tells receiving agents not to respond to a specific request from a
-   specific host for a specific time interval.
-
-   Each Exclusion Directive is     fully  contained within one  SLP
-   v2 extension block. However, a single SLP v2  request message may
-   contain multiple Exclusion Directives.  For example, a single Service
-   Request may  contain three Exclusion  Directives  within three
-   distinct SLP v2 extension blocks.
-
-
-2.1 Exclusion Extension Fields
-
-   The Exclusion extension has the following format:
-
-
-
-   0             1                   2                   3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Extension ID = 0x000?        |     Next Extension Offset     |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | Offset, contd.|     size      |        Exclusion XID          |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                             Nonce                             |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Exclusion Interval           |    Number of Entries          |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                     Exclusion Entries                         |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | # auth blocks                 | authentication block (if any) |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-
-2.1.1 Size Field
-
-   The size field specifies the size, in bytes, of each
-   address entry. A size value of 4 bytes MUST be encoded as
-   an IP v4 address in network byte order. A size value of
-   16 bytes MUST be encoded as an IP v6 address in network
-   byte order. Other address sizes are assumed to be opaque
-   data and will not be interoperable among different imple-
-   mentations
-
-
-
-Day                                                [Page 4]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-2.1.1.1 Using the Size Field to Calculate Length of Entries
-
-   The size of the Exclusion Entries field MUST be calcu-
-   lated by multiplying the value of the Size field by the
-   value of the Number of Entries field.
-
-
-2.1.2 Exclusion XID
-
-   The Exclusion XID identifies the SLP request to which the
-   enclosing Exclusion Directive applies. An Exclusion
-   Directive always applies to exactly one specific XID from
-   exactly one host IP address.
-
-   It is possible that the value of XID field in the Exclu-
-   sion Directive and the XID in the SLP header of the mes-
-   sage containing the Exclusion Directive will be differ-
-   ent. This is a subtle but important point: the SLP v2
-   header XID and the Exclusion XID are not equivalent. See
-   section 3.0 for details of how the exclusion XID works.
-
-
-2.1.3 Nonce
-
-   The Nonce adds a unique value to each Exclusion Directive
-   that makes it difficult to mount a denial of service
-   attack by replaying Exclusion Directives. The Nonce is a
-   128-bit field which MUST contain a cryptographic-quality
-   random unique value; or alternatively must be filled with
-   zero bytes. (If the Nonce is filled with zero bytes, it
-   is ignored.)
-
-   The usage of the Nonce is explained further in section
-   4.3.
-
-
-2.1.4 Exclusion Interval
-
-   The Exclusion Interval indicates the lifetime, in sec-
-   onds, of the containing Exclusion Directive. The interval
-   begins when the SA or DA receives the Exclusion Direc-
-   tive. Exclusion Directives SHOULD have an interval from
-   one to several seconds. However, the Exclusion Interval
-   may need to be increased for unusually large networks or
-   media with high latency characteristics, such as satel-
-   lite links.
-
-
-
-Day                                                [Page 5]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-2.1.5 Exclusion Entries
-
-   The Exclusion Entries field is the list of host IP
-   addresses that are subject to the containing Exclusion
-   Directive. The length of the Exclusion Entries field is
-   the number of IP addresses in the list multiplied by the
-   size of each IP address.
-
-   The size of each IP address is determined by the value of
-   the size field. Each Exclusion Directive therefore may
-   only contain IPv4 addresses or IPv6 addresses, but not
-   both.
-
-
-2.1.5.1 Dual-stack IP Environments
-
-   In environments using both IPv4 and IPv6 addresses it may
-   be necessary to deliver two Exclusion Directives where
-   otherwise one would be sufficient. E.g., one Directive
-   containing IPv4 addresses and another Directive contain-
-   ing IPv6 addresses. One way to accomplish this is to pack
-   two separate Exclusion Directives into a single SLP
-   request. Another way involves using dummy request mes-
-   sages to deliver Exclusion Directives. Dummy request mes-
-   sages are covered in section 3.1 below.
-
-
-2.1.6 Authentication Blocks
-
-   The Number of Auth Blocks indicates how many authentica-
-   tion blocks are contained in the containing Exclusion
-   Directive. The format of the authentication block is cov-
-   ered in section 4 below.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                                                [Page 6]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-2.2 Exclusion Directive Functionality
-
-   The purpose of the Exclusion Directive is to cause SAs or
-   DAs to silently discard specific SLP requests that origi-
-   nate from specific IP addresses. This purpose aids in the
-   use of multicasting to discover services in large network
-   environments. The Exclusion Directive makes multicast
-   discovery  more reliable and efficient by:
-
-
-     1. Providing a more compact mechanism to silence previ-
-        ous responders.
-
-     2. Magnifying the effect of the silencing mechanism by
-        specifying a quiet interval.
-
-
-2.2.1 Exclusion Directive State Table (EDST)
-
-   When the Exclusion Directive is present in an SLP
-   request, the receiving agent uses the directive to create
-   and maintain state information that causes the receiving
-   agent to ignore and discard matching requests (possibly
-   including the request containing the Exclusion Direc-
-   tive).
-
-   The Exclusion Directive State Table (EDST) is the collec-
-   tion of information describing all current Exclusion
-   Directives received by the agent. EDST entries are a
-   record with five fields: Source Address, Source Port,
-   exclusion XID , exclusion nonce value, and expiration
-   time. (The nonce value MAY be zero filled.)
-
-   The Exclusion Directive only applies to SLP v2 messages
-   that have the multicast flag set. The SA or DA MUST
-   respond to SLP v2 messages that do not have the multicast
-   flag set as specified in [1].
-
-   If the incoming request message matches a current record
-   in the receiving agent's EDST, and if the incoming
-   request's Multicast flag is set in the SLP header, the DA
-   or SA MUST silently discard the message.
-
-   When the Exclusion Interval of an Exclusion Directive has
-   expired, the SA or DA MUST delete the corresponding
-   record in its EDST and resume processing SLP v2 multicast
-
-
-
-Day                                                [Page 7]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-   request as if that Exclusion Directive was never
-   received.
-
-   If an incoming request does not contain an Exclusion
-   Directive, the receiving agent MUST process that request
-   without regard to the local EDST. (In other words, pro-
-   cess the request normally.)
-
-
-
-3  Exclusion Directives in SLP v2 Request Messages
-
-   An SA or DA may encounter the Exclusion Directive in Ser-
-   vice Request, Attribute Request, and Service Type Request
-   messages. In each case, the request may also contain a PR
-   list as described in [1].
-
-   A UA MUST NOT include an Exclusion Directive in a unicast
-   SLP v2 request message. DAs and SAs MUST ignore Exclusion
-   Directives that are erroneously included in unicast
-   request messages.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                                                [Page 8]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-   If the SA or DA supports the Exclusion Directive, it MUST
-   perform the following steps when processing an SLP v2
-   Request message.
-
-     1. If the request message is unicast or if the receiv-
-        ing agent does not recognize the Exclusion Direc-
-        tive, go to step 6 below.
-
-     2. If the incoming request does not have an Exclusion
-        Directive, proceed to step 6.
-
-     3. Extract the Exclusion Directive from the request.
-        Search the Directive's Exclusion Entries list for
-        the receiving agent's IP address. If not found, pro-
-        ceed to step 6.
-
-     4. Extract the source address and port from the UDP
-        header and the Exclusion XID and nonce from the
-        Exclusion Directive. The receiving agent MUST ensure
-        that its EDST contains a record for this directive,
-        creating a new EDST record if necessary. (This step
-        is also a convenient time to delete expired entries
-        from the EDST.)
-
-     5. Extract the source address and port from the incom-
-        ing request's UDP header. Extract the XID from the
-        request's SLP v2 header. If the incoming request has
-        an Exclusion Directive, extract the nonce from the
-        directive.
-
-        Search the EDST for an entry containing matching
-        values for these data (Optionally ignoring the nonce
-        from the EDST entry if the incoming request does not
-        contain an exclusion directive). Upon finding a
-        matching EDST entry, silently discard the request.
-        Otherwise continue.
-
-     6. If the SA or DA has not discarded the request up to
-        this point, evaluate the request normally as out-
-        lined in [1].
-
-   It is worth repeating that the Exclusion Directive only
-   applies to SLP v2 request messages that have the R
-   (Request Multicast) flag turned on in the SLP v2 header.
-   Agents MUST NOT silently discard unicast request messages
-   regardless of exclusion directives or EDST entries.
-
-
-
-Day                                                [Page 9]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-   Note that additional steps may be necessary if the Exclu-
-   sion directive contains one or more authentication
-   blocks. These steps are outlined in section 4.
-
-
-3.1 Dummy Service Request Message with Exclusion Directive
-
-   A "dummy" request message is one that has zero-length
-   fields for the entire request body, exclusive of the SLP
-   v2 header and the Exclusion directive.
-
-   Using a dummy SLP request message for the sole purpose of
-   transporting an Exclusion Directive may be helpful in two
-   cases:
-
-     1. The Exclusion Directive is too large to fit within a
-        single request datagram alongside the SLP header,
-        service type, predicate, and other request data.
-        However, it will fit in a datagram with just itself
-        and the SLP header.
-
-     2. The Exclusion Directive is larger than the sum of
-        the network MTU and the SLP Header. The agent can
-        divide the Exclusion Entries list across two or more
-        Exclusion Directives and transport those Directives
-        within a corresponding number of dummy SLP request
-        messages.
-
-               This method can support Exclusion Entry lists that
-        contain thousands of addresses.
-
-   When an SA or DA receives a dummy SLP request that con-
-   tains an Exclusion Directive, the receiving agent MUST
-   extract the Exclusion Directive from the dummy request
-   and ensure that the local EDST contains a record corre-
-   sponding to the Exclusion Directive. This is described in
-   section 3, step 4 above.
-
-
-   A Dummy request message MUST have the R (Request Multi-
-   cast) flag turned on in the SLP v2 header. This causes
-   SLP v2 SAs and DAs that are unaware of the Exclusion
-   Directive to silently discard dummy request messages due
-   to a parsing error (instead of responding to the sending
-   agent with an error code).
-
-
-
-
-Day                                               [Page 10]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-3.1.1 Format of Dummy Service Request
-
-   0                   1                   2                   3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | Service Location Header (R flag on) (function = SrvRqst = 1)  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |    length of <PRList> = 0     | length of <service-type> = 0  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |   length of <scope-list> = 0  |   length of <predicate> = 0   |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |    length of <SLP SPI > = 0   |   Extension ID = Exclusion    |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |         Next Extension Offset                 |     size      |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     Exclusion XID             |   Nonce                       |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |          Nonce, cont'd.       |       Exclusion Interval      |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |        Number of Entries      |          Exclusion Entries    \
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   \ # auth blocks                 |  authentication block (if any)\
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-3.1.2 Processing the Dummy Service Request
-
-   Dummy Service Request messages MUST be processed as out-
-   lined in section 3 above. The result is that the receiv-
-   ing agents which support the Exclusion Directive will
-   process the Directive, while all other agents will
-   silently discard the message due to a parsing error.
-
-   After processing the Exclusion Directive, the receiving
-   agent will produce a parse error. Because the service
-   request has the multicast flag set, the receiving agent
-   will not send an error response to the originating agent.
-
-   Note that if the Exclusion Directive contains an authen-
-   tication block, the SA or DA SHOULD validate the signa-
-   ture of the Exclusion Directive. Authentication of Exclu-
-   sion Directives is covered in section 4.
-
-
-
-
-
-
-
-Day                                               [Page 11]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-3.1.3 Using the Exclusion Directive and PR List Together
-
-   The steps below show how to use the Exclusion Directive
-   in combination with the SLP PR list to perform multicast
-   discovery (substitute actual XIDs in real usage):
-
-     1. Send a new Service Request with no PR list and no
-        Exclusion Directive; process the replies and remem-
-        ber the respondents as RL1.
-
-     2. Build an exclusion list and remember it as list EL1.
-
-     3. Immediately re-transmit the Service Request from (1)
-        with no PR list and but with an Exclusion Directive
-        that contains Exclusion List EL1; process the
-        replies and remember the respondents as RL2.
-
-     4. The intersection of EL1 and RL2 are agents that do
-        not support the Exclusion Directive. Create PRL1 =
-        EL1 n RL2. Build EL2 = RL2 - PRL1.
-
-     5. Immediately re-transmit the Service Request from (3)
-        including PRL1 in the SLP header and substituting
-        EL2 for EL1 in the Exclusion Directive. If no
-        responses the discovery cycle is complete.
-
-     6. Repeat the previous thre steps n times using ELn-1,
-        RLn, PRLn-1, and ELn until the UA receives no
-        responses for the configured timeout period.
-
-   In steps 1 - 6 above, it is important that each Service
-   Request (steps 1, 3, and 5) have the same XID in the SLP
-   Header ; and equally that each Exclusion Directive also
-   has the same value in the XID field.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                                               [Page 12]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-4  Authenticating Exclusion Directives
-
-   To prevent denial of service attacks against UAs, all
-   agents that recognize the Exclusion Directive SHOULD sup-
-   port authentication of the Exclusion Directive.
-
-   Authenticating Exclusion Directives places the additional
-   burden upon the User Agent of signing data. In standard
-   SLP v2, UAs only need to verify signatures. The addi-
-   tional ability to generate signatures means that UAs must
-   be issued private key material.
-
-
-4.1 The Exclusion Directive Authentication Block
-
-   The format of the Exclusion Directive Authentication
-   Block is the same as that used by SLP v2 [1].
-
-
-   0                   1                   2                     3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Block Structure Descriptor   |  Authentication Block Length  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                           Timestamp                           |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     SLP SPI String Length     |         SLP SPI String        \
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   \                Structured Authentication Block...            \
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                                               [Page 13]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-4.2 Exclusion Directive Authentication Rules
-
-   To sign or verify the signature of an Exclusion Direc-
-   tive, the SLP agent MUST use the following components of
-   the Exclusion Directive as if they were a single continu-
-   ous byte-aligned buffer:
-
-     Â·  16-bit Exclusion XID
-
-     Â·  32-bit Nonce
-
-     Â·  16-bit Exclusion Interval
-
-     Â·  8-bit Exclusion Entry size
-
-     Â·  16-bit Number of Entries
-
-     Â·  Variable-length Exclusion Entries.
-
-
-5  Using the NONCE Value to Prevent Replay Attacks
-
-   Despite the use of signatures to authenticate Exclusion
-   Directives, UAs may still be vulnerable to a replay
-   denial of service attack.  To prevent this possibility,
-   SLP Agents that recognize the Exclusion directive SHOULD
-   make use of the nonce value as described in this section.
-
-   Every Exclusion Directive contains a 128-bit nonce field,
-   which MUST contain a 128-bit cryptographicly random value
-   or be filled with zeros. If the nonce is filled with
-   zeroes, the UA is open to a denial-of service attack.
-
-   Because the nonce field is included in signature genera-
-   tion and validation, each signed Exclusion Directive can
-   be cryptographically unique. Unsigned Exclusion Direc-
-   tives can also be cryptographically unique but their
-   source can be spoofed.
-
-
-
-
-
-
-
-
-
-
-
-Day                                               [Page 14]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-   By using the nonce correctly, Exclusion Directives can be
-   specific to:
-
-     1. The source address and port of the requesting UA.
-
-     2. The XID of the request.
-
-     3. A cryptographically unique value for each and every
-        request. To make this work, SAs and DAs MUST include
-        the nonce value, along with the UA source address
-        and the request XID when deciding whether or not an
-        Exclusion Directive applies to a request message.
-
-
-5.1 UA Use of the Nonce to Prevent Denial of Service Attack
-
-   The UA is the SLP component vulnerable to a denial of
-   service attack so it is responsible for using an appro-
-   priate algorithm to generate a nonce with the requisite
-   random characteristics.
-
-   For each Exclusion Directive:
-
-     1. Generate a random 128-bit integer to use as the
-        nonce.
-
-     2. Initialize an Exclusion Directive, including the XID
-        of the request that is subject to response suppres-
-        sion.
-
-     3. Insert the nonce value from (1) into the Exclusion
-        Directive.
-
-     4. Optionally sign the Exclusion Directive as outlined
-        in the section on Authentication above.
-
-     5. Use a Exclusion Directive containing the nonce in
-        all requests and dummy Service Requests for the XID
-        in step (2).
-
-     6. IMPORTANT - use a DIFFERENT, cryptographically gen-
-        erated nonce for each request XID for which you are
-        issuing an Exclusion directive.
-
-
-
-
-
-
-Day                                               [Page 15]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-5.2 DA and SA Use of the Nonce
-
-   SA's DAs that recognize the Exclusion Directive MUST use
-   the nonce value to initialize EDST entries and to evalu-
-   ate Exclusion Directives in request messages.
-
-
-5.2.1 Zero-filled Nonce
-
-   UAs that don't have the ability to generate unique nonce
-   values MUST fill the nonce field of the Exclusion Direc-
-   tive with zeros. This opens the agent up to a denial of
-   service attack, however. (See below).
-
-
-5.3 Theory Behind the Nonce
-   The nonce is a simple mechanism to make it as difficult
-   as possible for an attacker to predict the composition of
-   SLP service requests that a particular UA may issue in
-   the near future.
-
-   Most UA's use the XID field in the SLP 2 header as a
-   sequential counter. Hence an attacker that has a copy of
-   a recent SLP request can guess the XID of the next
-   request the agent will make. Using the Exclusion Direc-
-   tive, an attacker can cause DA's and SA's not to respond
-   to subsequent SLP requests made by the attacked agent.
-
-   However, the inclusion of the nonce value in the Exclu-
-   sion Directive makes it infeasible for an attacker to
-   guess the composition of future requests made by the UA.
-   This is true because the nonce, unlike the XID, is a ran-
-   dom value. Also, the nonce is large enough to make guess-
-   ing its value in the next request too difficult for the
-   attacker.
-
-6  Security Considerations
-
-   Implementing the Exclusion Directive without using the
-   nonce value opens SLP v2 UAs up to a trivial denial of
-   service attack, which would nullify the ability of the UA
-   to perform discovery.
-
-   Implementing the Exclusion Directive with authentication
-   but without using the nonce value may leave the UA open
-   to a more sophisticated replay attack using previously
-
-
-
-Day                                               [Page 16]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-   signed and multicast request messages.
-
-   UAs that support the Exclusion Directive SHOULD authenti-
-   cate their requests as outlined in section 4 and SHOULD
-   include the nonce value in all Exclusion Directives.
-
-   SAs and DAs that support the Exclusion Directive SHOULD
-   be able to verify signed Exclusion Directives and MUST
-   store the nonce value in the EDST entry for that direc-
-   tive.
-
-   Nonce values generated by UAs MUST  be cryptographically
-   unique and random values if they are to provide any safe-
-   guard against a replay attack.
-
-
-7  Acknowledgements
-
-   Erik Guttman has provided a great deal of feedback and
-   improvements to this document. The srvloc working group
-   also contributed to the development of this document,
-   especialy Kevin Arnold, James Kempf, Ira McDonald, Evan
-   Hughes, Terry Lambert, and others. Thomas Narten recom-
-   mended some important changes during the review process.
-
-8  References
-
-     1. Guttman, E., Perkins, C., Veizades, J., and M. Day,
-        "Service Location Protocol Version 2", RFC 2608,
-        June 1999.
-
-     2. Bradner, S,. "Key Words for Use in RFCs to Indicate
-        Requirements Levels", BCP 14, RFC 2119, March 1997
-
-9  Author's Contact Information
-
-   Michael Day IBM 3039 Cornwallis Road Research Triangle
-   Park, NC 27709
-
-   Phone:  919 543-4283
-
-   Email:  mdday@us.ibm.com
-
-
-
-
-
-
-
-Day                                               [Page 17]
-\f
-INTERNET DRAFT     SLP Exclusion Directive   Exp. May 2003
-
-
-10  Full Copyright Statement
-
-   Copyright (C) The Internet Society (2000-2002).  All
-   Rights Reserved.
-
-   This document and translations of it may be copied and
-   furnished to others, and derivative works that comment on
-   or otherwise explain it or assist in its implementation
-   may be prepared, copied, published and distributed, in
-   whole or in part, without restriction of any kind, pro-
-   vided that the above copyright notice and this paragraph
-   are included on all such copies and derivative works.
-   However, this document itself may not be modified in any
-   way, such as by removing the copyright notice or refer-
-   ences to the Internet Society or other Internet organiza-
-   tions, except as needed for the purpose of developing
-   Internet standards in which case the procedures for copy-
-   rights defined in the Internet Standards process must be
-   followed, or as required to translate it into languages
-   other than English.
-
-   The limited permissions granted above are perpetual and
-   will not be revoked by the Internet Society or its suc-
-   cessors or assigns.
-
-   This document and the information contained herein is
-   provided on an "AS IS" basis and THE INTERNET SOCIETY AND
-   THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WAR-
-   RANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
-   ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL
-   NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MER-
-   CHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE."
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                                               [Page 18]
-
-
diff --git a/src/Unsupported/slp_client/doc/draft-day-svrloc-exclusion-03.nr.txt b/src/Unsupported/slp_client/doc/draft-day-svrloc-exclusion-03.nr.txt
deleted file mode 100644 (file)
index 19471e3..0000000
+++ /dev/null
@@ -1,816 +0,0 @@
-.\"-----------------------------------------------------------------
-.\" Registers to store heading levels as variables
-.\"-----------------------------------------------------------------
-.nr head1 0 1
-.nr head2 0 1
-.nr head3 0 1 
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-
-.\"-----------------------------------------------------------------
-.\" Return to header level 1, 2, etc. 
-.\" resets the level registers and indent
-.\"-----------------------------------------------------------------
-.de RETURN_HDR_1
-.nr head2 0 1
-.nr head3 0 1 
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_1 \\$1 
-..
-
-.de RETURN_HDR_2
-.nr head3 0 1 
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_2 \\$1
-..
-.de RETURN_HDR_3
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_3 \\$1
-..
-
-.de RETURN_HDR_4
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_4 \\$1
-..
-
-.de RETURN_HDR_5
-.nr head6 0 1
-.in 0 
-\.HDR_5 \\$1
-..
-
-.\"-----------------------------------------------------------------
-.\" Create a level 1, 2, etc,.  heading 
-.\" resets indent, creates a TOC entry
-.\" Parameter is the title of the heading
-.\"-----------------------------------------------------------------
-.de HDR_1
-.sp 1
-.in 0 
-\\n+[head1]\\  \\$1
-.XS
-\\n[head1]\\  \\$1
-.XE
-.in 3
-.. 
-
-
-.de HDR_2
-.sp 1
-.in 0 
-\\n[head1]\\.\\n+[head2]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_3
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n+[head3]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_4
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n+[head4]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_5
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n+[head5]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n[head5]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_6
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n[head5]\\.\\n+[head6]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n[head5]\\.\\n[head6]\\ \\$1
-.in 3
-.XE
-.. 
-
-.\"-----------------------------------------------------------------
-.\" END MACRO DEFINITIONS
-.\"-----------------------------------------------------------------
-
-.pl 58
-.po 0
-.ll 72
-.lt 72
-.ds LF Day 
-.ds RF FORMFEED[Page %]^
-.ds CF 
-.ds LH INTERNET DRAFT
-.ds CH SLP Exclusion Directive
-.ds RH Exp. June 2003  
-.hy 0
-.ad l
-.in 0
-
-   
-Internet Engineering Task Force                            Michael Day
-INTERNET DRAFT                                                     IBM
-07 January 2003                                         Expires in six months
-
-.ce 1000
-Exclusion Extension for Service Location Protocol v2
-draft-day-svrloc-exclusion-03.txt
-.ce 0
-.sp 5
-
-.in 0
-Status of This Memo
-.in 3
-This document is an Internet-Draft and is subject to
-all provisions of Section 10 of RFC2026.
-
-Internet-Drafts are working documents of the Internet Engineering
-Task Force (IETF), its areas, and its working groups.  Note that
-other groups may also distribute working documents as
-Internet-Drafts.
-
-Internet-Drafts are draft documents valid for a maximum of six
-months and may be updated, replaced, or obsoleted by other
-documents at any time.  It is inappropriate to use Internet-
-Drafts as reference material or to cite them other than as
-"work in progress."
-
-The list of current Internet-Drafts can be accessed at
-http://www.ietf.org/1id-abstracts.html
-
-The list of Internet-Draft Shadow Directories can be accessed at
-http://www.ietf.org/shadow.html
-
-This document is an individual contribution to the Internet
-Engineering Task Force (IETF). Comments should be submitted to the
-srvloc@srvloc.org mailing list.
-
-Distribution of this memo is unlimited.
-       
-.bp
-.HDR_1 Introduction 
-
-The Service Location Protocol, Version 2 [1] allows the use of
-multicast and broadcast discovery requests.  The SLP exclusion
-directive is an extension to SLP that optimizes the use of
-multicasting and broadcasting to find services on an intranet. This
-document hereafter refers to multicast discovery but all its contents
-apply to broadcast discovery as well.
-
-.HDR_2 "Present SLPv2 Multicast Behavior"
-
-Multicast discovery requests allow an SLP User Agent to discover
-services with no prior configuration. Multicast discovery requests are
-not sent reliably and must be retransmitted in order to find all
-services of the desired type on the network.
-
-When SLP v2 SrvRqst, SrvTypeRqst, and AttrRqst messages are multicast,
-they contain a <PRList> of previous respondents. Initially the
-<PRList> is empty. When these requests are unicast, the <PRList> is
-always empty.
-
-Any DA or SA which sees its address in the <PRList> does not respond
-to the request (as specified in RFC 2608).
-
-The User Agent then retransmits the discovery request until the
-<PRList> causes no further responses to be elicited or the previous
-responder list and the request will not fit into a single datagram or
-until CONFIG_MC_MAX seconds elapse[1].
-
-The PR list is an effective mechanism for suppressing duplicate
-responses in smaller environments. However, because of the way PR
-lists are encoded with the SLP v2 header, the PR List has a limit of
-as few as 90 IPv4 addressees, and even fewer IPv6 addresses. This
-means in most environments a User Agent may suppress duplicate
-responses from approximately 90 host addresses at best.
-
-.HDR_2 Optimizations\ Made\ by\ Exclusion\ Directive
-
-The Exclusion Directive extension presented in this document allows a
-User Agent (UA) to direct those Directory Agents (DAs) and Service
-Agents (SAs) from which it has already received responses not to
-respond to retransmissions of a particular query. Hence subsequent
-retransmissions only generate responses from agents from which the
-requester has not already received a response.
-
-This extension can be used in conjunction with the SLP v2 PR list.
-SAs and DAs which do not understand the Exclusion Directive extension
-will ignore it. With the use of the Exclusion Directive extension, SLP
-v2 User Agents may perform multicast discovery with a high degree of
-success and efficiency, even when the number of respondents reaches
-into the thousands. .
-
-.HDR_2 Terminology
-
-In this document, the key words "MAY", "MUST, "MUST NOT", "optional",
-"recommended", "SHOULD", and "SHOULD NOT", are to be interpreted as
-described in RFC 2119 [2].
-
-.bp
-.RETURN_HDR_1 Exclusion\ Extension\ Format
-
-The fields in an Exclusion extension form an Exclusion Directive that
-tells receiving agents not to respond to a specific request from a
-specific host for a specific time interval.
-
-Each Exclusion Directive is     fully  contained within one  SLP    v2
-extension block. However, a single SLP v2  request message may contain
-multiple Exclusion Directives.  For example, a single Service  Request
-may  contain three Exclusion  Directives  within three distinct SLP v2
-extension blocks.
-
-.KS
-.HDR_2 Exclusion\ Extension\ Fields
-
-The Exclusion extension has the following format:
-.DS L
-
-
-   0             1                   2                   3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Extension ID = 0x000?        |     Next Extension Offset     |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | Offset, contd.|     size      |        Exclusion XID          |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                             Nonce                             |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Exclusion Interval           |    Number of Entries          |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                     Exclusion Entries                         |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | # auth blocks                 | authentication block (if any) |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-.DE
-.KE 
-.HDR_3 Size\ Field
-
-The size field specifies the size, in bytes, of each address entry. A
-size value of 4 bytes MUST be encoded as an IP v4 address in network
-byte order. A size value of 16 bytes MUST be encoded as an IP v6
-address in network byte order. Other address sizes are assumed to be
-opaque data and will not be interoperable among different
-implementations
-
-.HDR_4 Using\ the\ Size\ Field\ to\ Calculate\ Length\ of\ Entries
-
-The size of the Exclusion Entries field MUST be calculated by
-multiplying the value of the Size field by the value of the Number of
-Entries field. 
-
-.RETURN_HDR_3 Exclusion\ XID
-
-The Exclusion XID identifies the SLP request to which the enclosing
-Exclusion Directive applies. An Exclusion Directive always applies to
-exactly one specific XID from exactly one host IP address.
-
-It is possible that the value of XID field in the Exclusion Directive
-and the XID in the SLP header of the message containing the Exclusion
-Directive will be different. This is a subtle but important point: the
-SLP v2 header XID and the Exclusion XID are not equivalent. See
-section 3.0 for details of how the exclusion XID works.
-
-.HDR_3 Nonce
-
-The Nonce adds a unique value to each Exclusion Directive that makes
-it difficult to mount a denial of service attack by replaying
-Exclusion Directives. The Nonce is a 128-bit field which MUST contain
-a cryptographic-quality random unique value; or alternatively must be
-filled with zero bytes. (If the Nonce is filled with zero bytes, it is
-ignored.)
-
-The usage of the Nonce is explained further in section 4.3.
-
-.HDR_3 Exclusion\ Interval
-
-The Exclusion Interval indicates the lifetime, in seconds, of the
-containing Exclusion Directive. The interval begins when the SA or DA
-receives the Exclusion Directive. Exclusion Directives SHOULD have an
-interval from one to several seconds. However, the Exclusion Interval
-may need to be increased for unusually large networks or media with
-high latency characteristics, such as satellite links. 
-
-.HDR_3  Exclusion\ Entries
-
-The Exclusion Entries field is the list of host IP addresses that are
-subject to the containing Exclusion Directive. The length of the Exclusion
-Entries field is the number of IP addresses in the list multiplied by
-the size of each IP address.
-
-The size of each IP address is determined by the value of the size
-field. Each Exclusion Directive therefore may only contain IPv4
-addresses or IPv6 addresses, but not both.
-
-.HDR_4 Dual-stack\ IP\ Environments
-
-In environments using both IPv4 and IPv6 addresses it may be necessary
-to deliver two Exclusion Directives where otherwise one would be
-sufficient. E.g., one Directive containing IPv4 addresses and another
-Directive containing IPv6 addresses. One way to accomplish this is to
-pack two separate Exclusion Directives into a single SLP
-request. Another way involves using dummy request messages to deliver
-Exclusion Directives. Dummy request messages are covered in section
-3.1 below.
-
-.RETURN_HDR_3 Authentication\ Blocks
-
-The Number of Auth Blocks indicates how many authentication blocks
-are contained in the containing Exclusion Directive. The format of the
-authentication block is covered in section 4 below.
-
-.KS
-.RETURN_HDR_2 Exclusion\ Directive\ Functionality
-
-The purpose of the Exclusion Directive is to cause SAs or DAs to
-silently discard specific SLP requests that originate from specific IP
-addresses. This purpose aids in the use of multicasting to discover
-services in large network environments. The Exclusion Directive makes
-multicast discovery  more reliable and efficient by: 
-
-.nr PI 5
-.nr step 1 1
-.RS
-.IP \n[step]. 3
-Providing a more compact mechanism to silence previous responders.
-.IP \n+[step].
-Magnifying the effect of the silencing mechanism by specifying a quiet interval.
-.RE
-.KE
-
-.HDR_3 Exclusion\ Directive\ State\ Table\ (EDST)
-
-When the Exclusion Directive is present in an SLP request, the
-receiving agent uses the directive to create and maintain state
-information that causes the receiving agent to ignore and discard
-matching requests (possibly including the request containing the
-Exclusion Directive).
-
-The Exclusion Directive State Table (EDST) is the collection of
-information describing all current Exclusion Directives received by
-the agent. EDST entries are a record with five fields: Source Address,
-Source Port, exclusion XID , exclusion nonce value, and expiration
-time. (The nonce value MAY be zero filled.)
-
-The Exclusion Directive only applies to SLP v2 messages that have the
-multicast flag set. The SA or DA MUST respond to SLP v2 messages that
-do not have the multicast flag set as specified in [1].
-
-If the incoming request message matches a current record in the
-receiving agent's EDST, and if the incoming request's Multicast flag
-is set in the SLP header, the DA or SA MUST silently discard the
-message. 
-
-When the Exclusion Interval of an Exclusion Directive has expired, the
-SA or DA MUST delete the corresponding record in its EDST and resume
-processing SLP v2 multicast request as if that Exclusion Directive
-was never received.
-
-If an incoming request does not contain an Exclusion Directive, the
-receiving agent MUST process that request without regard to the local
-EDST. (In other words, process the request normally.)
-
-
-.RETURN_HDR_1  Exclusion\ Directives\ in\ SLP\ v2\ Request\ Messages
-
-An SA or DA may encounter the Exclusion Directive in Service Request,
-Attribute Request, and Service Type Request messages. In each case,
-the request may also contain a PR list as described in [1].
-
-A UA MUST NOT include an Exclusion Directive in a unicast SLP v2
-request message. DAs and SAs MUST ignore Exclusion Directives that
-are erroneously included in unicast request messages.
-
-.KS
-If the SA or DA supports the Exclusion Directive, it MUST perform the
-following steps when processing an SLP v2 Request message.
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-If the request message is unicast or if the receiving agent does not
-recognize the Exclusion Directive, go to step 6 below.
-.IP \n+[step].
-If the incoming request does not have an Exclusion Directive,
-proceed to step 6.
-.IP \n+[step].
-Extract the Exclusion Directive from the request. Search the
-Directive's Exclusion Entries list for the receiving agent's IP
-address. If not found, proceed to step 6.
-.IP \n+[step].
-Extract the source address and port from the UDP header and the
-Exclusion XID and nonce from the Exclusion Directive. The receiving
-agent MUST ensure that its EDST contains a record for this directive,
-creating a new EDST record if necessary. (This step is also a
-convenient time to delete expired entries from the EDST.)
-.IP \n+[step].
-Extract the source address and port from the incoming request's UDP
-header. Extract the XID from the request's SLP v2 header. Extract the 
-nonce from the Exclusion directive. 
-
-Search the EDST for an entry containing matching values for these data
-(Optionally ignoring the nonce from the EDST entry if the incoming
-request does not contain an exclusion directive). Upon finding a
-matching EDST entry, silently discard the request. Otherwise continue.
-.IP \n+[step].
-If the SA or DA has not discarded the request up to this point,
-evaluate the request normally as outlined in [1].
-.RE
-.KE
-.in 3
-
-It is worth repeating that the Exclusion Directive only applies to
-SLP v2 request messages that have the R (Request Multicast) flag
-turned on in the SLP v2 header. Agents MUST NOT silently discard
-unicast request messages regardless of exclusion directives or EDST
-entries.
-
-Note that additional steps may be necessary if the Exclusion
-directive contains one or more authentication blocks. These
-steps are outlined in section 4.
-
-.KS 
-.HDR_2 Dummy\ Service\ Request\ Message\ with\ Exclusion\ Directive 
-
-A "dummy" request message is one that has zero-length fields
-for the entire request body, exclusive of the SLP v2 header and the
-Exclusion directive.
-
-Using a dummy SLP request message for the sole purpose of transporting
-an Exclusion Directive may be helpful in two cases:
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-The Exclusion Directive is too large to fit within a single request
-datagram alongside the SLP header, service type, predicate, and other request
-data. However, it will fit in a datagram with just itself and the SLP
-header. 
-.IP \n+[step].
-The Exclusion Directive is larger than the sum of the network MTU
-and the SLP Header. The agent can divide the Exclusion Entries list
-across two or more Exclusion Directives and transport those Directives
-within a corresponding number of dummy SLP request messages.
-
-This method can support Exclusion Entry lists that contain thousands
-of addresses. 
-.RE
-.in 3
-.sp 1
-When an SA or DA receives a dummy SLP request that contains an
-Exclusion Directive, the receiving agent MUST extract the Exclusion
-Directive from the dummy request and ensure that the local EDST
-contains a record corresponding to the Exclusion Directive. This is
-described in section 3, step 4 above. 
-
-
-A Dummy request message MUST have the R (Request Multicast) flag
-turned on in the SLP v2 header. This causes SLP v2 SAs and DAs that
-are unaware of the Exclusion Directive to silently discard dummy
-request messages due to a parsing error (instead of responding to the
-sending agent with an error code).
-.KE 
-.KS
-
-.HDR_3 Format\ of\ Dummy\ Service\ Request
-.DS L
-   0                   1                   2                   3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | Service Location Header (R flag on) (function = SrvRqst = 1)  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |    length of <PRList> = 0     | length of <service-type> = 0  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |   length of <scope-list> = 0  |   length of <predicate> = 0   |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |    length of <SLP SPI > = 0   |   Extension ID = Exclusion    |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |         Next Extension Offset                 |     size      |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     Exclusion XID             |   Nonce                       |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |          Nonce, cont'd.       |       Exclusion Interval      |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |        Number of Entries      |          Exclusion Entries    \\
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   \\ # auth blocks                 |  authentication block (if any)\\
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-.DE
-.KE
-.HDR_3 Processing\ the\ Dummy\ Service\ Request
-
-Dummy Service Request messages MUST be processed as outlined in
-section 3 above. The result is that the receiving agents which support
-the Exclusion Directive will process the Directive, while all other
-agents will silently discard the message due to a parsing error.
-
-After processing the Exclusion Directive, the receiving agent will
-produce a parse error. Because the service request has the multicast
-flag set, the receiving agent will not send an error response to the
-originating agent.
-
-Note that if the Exclusion Directive contains an authentication
-block, the SA or DA SHOULD validate the signature of the Exclusion
-Directive. Authentication of Exclusion Directives is covered in
-section 4.
-
-.KS
-.HDR_3 Using\ the\ Exclusion\ Directive\ and\ PR\ List\ Together
-
-The steps below show how to use the
-Exclusion Directive in combination with the SLP PR list to perform
-multicast discovery (substitute actual XIDs in real usage):
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-Send a new Service Request with no PR list and no Exclusion Directive;
-process the replies and remember the respondents as RL1. 
-.IP \n+[step].
-Build an exclusion list and remember it as list EL1.
-.IP \n+[step].
-Immediately re-transmit the Service Request from (1) with no PR list
-but with an Exclusion Directive that contains Exclusion List EL1;
-process the replies and remember the respondents as RL2.
-.IP \n+[step].
-The intersection of EL1 and RL2 are agents that do not support the
-Exclusion Directive. Create PRL1 = EL1 n RL2. Build EL2 = RL2 - PRL1.
-.IP \n+[step].
-Immediately re-transmit the Service Request from (3) including PRL1 in
-the SLP header and substituting EL2 for EL1 in the Exclusion
-Directive. If no responses the discovery cycle is complete. 
-.IP \n+[step].
-Repeat the previous thre steps n times using ELn-1, RLn, PRLn-1, and ELn until the
-UA receives no responses for the configured timeout period. 
-.RE
-.in 3
-.sp 1
-In steps 1 - 6 above, it is important that each Service Request (steps
-1, 3, and 5) have the same XID in the SLP Header ; and equally that
-each Exclusion Directive also has the same value in the XID field.
-.KE
-.KS
-
-.RETURN_HDR_1 Authenticating\ Exclusion\ Directives
-
-To prevent denial of service attacks against UAs, all agents that
-recognize the Exclusion Directive SHOULD support authentication of
-the Exclusion Directive.
-
-Authenticating Exclusion Directives places the additional burden upon
-the User Agent of signing data. In standard SLP v2, UAs only need to
-verify signatures. The additional ability to generate signatures
-means that UAs must be issued private key material.
-
-.HDR_2 The\ Exclusion\ Directive\ Authentication\ Block
-
-The format of the Exclusion Directive Authentication Block is the same
-as that used by SLP v2 [1].
-
-.DS L
-   0                   1                   2                     3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Block Structure Descriptor   |  Authentication Block Length  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                           Timestamp                           |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     SLP SPI String Length     |         SLP SPI String        \\
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   \\                Structured Authentication Block...            \\
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-.DE
-.KE
-.KS
-.HDR_2 Exclusion\ Directive\ Authentication\ Rules
-
-To sign or verify the signature of an Exclusion Directive, the SLP
-agent MUST use the following components of the Exclusion Directive as
-if they were a single continuous byte-aligned buffer:
-.nr PI 5
-.RS
-.IP \[bu] 3 
-16-bit Exclusion XID
-.IP \[bu] 
-32-bit Nonce
-.IP \[bu] 
-16-bit Exclusion Interval
-.IP \[bu] 
-8-bit Exclusion Entry size
-.IP \[bu] 
-16-bit Number of Entries
-.IP \[bu] 
-Variable-length Exclusion Entries.
-.RE
-.KE
-
-.RETURN_HDR_1 Using\ the\ NONCE\ Value\ to\ Prevent\ Replay\ Attacks
-
-Despite the use of signatures to authenticate Exclusion Directives,
-UAs may still be vulnerable to a replay denial of service attack.  To
-prevent this possibility, SLP Agents that recognize the Exclusion
-directive SHOULD make use of the nonce value as described in this
-section.
-
-Every Exclusion Directive contains a 128-bit nonce field, which MUST
-contain a 128-bit cryptographicly random value or be filled with
-zeros. If the nonce is filled with zeroes, the UA is open to a
-denial-of service attack. 
-
-Because the nonce field is included in signature generation and
-validation, each signed Exclusion Directive can be cryptographically
-unique. Unsigned Exclusion Directives can also be cryptographically
-unique but their source can be spoofed.
-
-.KS
-By using the nonce correctly, Exclusion Directives can be specific
-to:
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-The source address and port of the requesting UA.
-.IP \n+[step].
-The XID of the request.
-.IP \n+[step].
-A cryptographically unique value for each and every request. To make
-this work, SAs and DAs MUST include the nonce value, along with the UA
-source address and the request XID when deciding whether or not an
-Exclusion Directive applies to a request message.  
-.RE 
-.KE 
-
-.HDR_2 UA\ Use\ of\ the\ Nonce\ to\ Prevent\ Denial\ of\ Service\ Attack
-
-The UA is the SLP component vulnerable to a denial of service attack
-so it is responsible for using an appropriate algorithm to generate a
-nonce with the requisite random characteristics. 
-
-.KS
-For each Exclusion Directive:
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-Generate a random 128-bit integer to use as the nonce.
-.IP \n+[step].
-Initialize an Exclusion Directive, including the XID of the
-request that is subject to response suppression.
-.IP \n+[step].
-Insert the nonce value from (1) into the Exclusion Directive.
-.IP \n+[step].
-Optionally sign the Exclusion Directive as outlined in the section on
-Authentication above. 
-.IP \n+[step].
-Use a Exclusion Directive containing the nonce in all
-requests and dummy Service Requests for the XID in step (2).
-.IP \n+[step].
-IMPORTANT - use a DIFFERENT, cryptographically generated nonce
-for each request XID for which you are issuing an Exclusion
-directive.
-.RE
-.KE
-.KS
-.HDR_2 DA\ and\ SA\ Use\ of\ the\ Nonce
-
-SA's DAs that recognize the Exclusion Directive MUST use the nonce
-value to initialize EDST entries and to evaluate Exclusion Directives
-in request messages. 
-
-.HDR_3 Zero-filled\ Nonce
-
-UAs that don't have the ability to generate unique
-nonce values MUST fill the nonce field of the Exclusion Directive
-with zeros. This opens the agent up to a denial of service attack,
-however. (See below).
-
-.RETURN_HDR_2 Theory\ Behind\ the\ Nonce 
-The nonce is a simple mechanism to make it as difficult as possible
-for an attacker to predict the composition of SLP service
-requests that a particular UA may issue in the near future. 
-
-Most UA's use the XID field in the SLP 2 header as a sequential
-counter. Hence an attacker that has a copy of a recent SLP request can
-guess the XID of the next request the agent will make. Using the
-Exclusion Directive, an attacker can cause DA's and SA's not to
-respond to subsequent SLP requests made by the attacked agent. 
-
-However, the inclusion of the nonce value in the Exclusion Directive
-makes it infeasible for an attacker to guess the composition of future
-requests made by the UA. This is true because the nonce, unlike the
-XID, is a random value. Also, the nonce is large enough to make
-guessing its value in the next request too difficult for the attacker.
-.KE
-.RETURN_HDR_1 Security\ Considerations
-
-Implementing the Exclusion Directive without using the nonce value
-opens SLP v2 UAs up to a trivial denial of service attack, which would
-nullify the ability of the UA to perform discovery.
-
-Implementing the Exclusion Directive with authentication but without
-using the nonce value may leave the UA open to a more sophisticated
-replay attack using previously signed and multicast request messages.
-
-UAs that support the Exclusion Directive SHOULD authenticate their
-requests as outlined in section 4 and SHOULD include the nonce value
-in all Exclusion Directives.
-
-SAs and DAs that support the Exclusion Directive SHOULD be able to
-verify signed Exclusion Directives and MUST store the nonce value in
-the EDST entry for that directive.
-
-Nonce values generated by UAs MUST  be cryptographically unique and
-random values if they are to provide any safeguard against a replay
-attack.
-
-.HDR_1 Acknowledgements
-
-Erik Guttman has provided a great deal of feedback and improvements
-to this document. The srvloc working group also contributed to the
-development of this document, especialy Kevin Arnold, James Kempf,
-Ira McDonald, Evan Hughes, Terry Lambert, and others. Thomas Narten
-recommended some important changes during the review process.
-.KS
-.HDR_1 References
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3 
-Guttman, E., Perkins, C., Veizades, J., and M. Day, "Service
-Location Protocol Version 2", RFC 2608, June 1999.
-.IP \n+[step].
-Bradner, S,. "Key Words for Use in RFCs to Indicate Requirements
-Levels", BCP 14, RFC 2119, March 1997
-.RE
-.KE
-.KS
-.HDR_1 Author's\ Contact\ Information
-
-Michael Day
-IBM
-3039 Cornwallis Road
-Research Triangle Park, NC 27709
-
-Phone:  919 543-4283
-
-Email:  mdday@us.ibm.com
-.KE
-.KS
-.HDR_1 Full\ Copyright\ Statement
-
-Copyright (C) The Internet Society (2000-2002).  All Rights Reserved.
-
-This document and translations of it may be copied and furnished to
-others, and derivative works that comment on or otherwise explain it
-or assist in its implementation may be prepared, copied, published and
-distributed, in whole or in part, without restriction of any kind,
-provided that the above copyright notice and this paragraph are
-included on all such copies and derivative works.  However, this
-document itself may not be modified in any way, such as by removing
-the copyright notice or references to the Internet Society or other
-Internet organizations, except as needed for the purpose of developing
-Internet standards in which case the procedures for copyrights defined
-in the Internet Standards process must be followed, or as required to
-translate it into languages other than English.
-
-The limited permissions granted above are perpetual and will not be
-revoked by the Internet Society or its successors or assigns.
-
-This document and the information contained herein is provided on an
-"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
-TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
-NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN
-WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE."
-.KE
-
-.TC
diff --git a/src/Unsupported/slp_client/doc/draft-day-svrloc-exclusion-03.txt b/src/Unsupported/slp_client/doc/draft-day-svrloc-exclusion-03.txt
deleted file mode 100644 (file)
index 5f6ffa9..0000000
+++ /dev/null
@@ -1,1029 +0,0 @@
-
-
-
-
-
-
-Internet Engineering Task Force                            Michael Day
-INTERNET DRAFT                                                     IBM
-07 January 2003                         Expires in six months
-
-          Exclusion Extension for Service Location Protocol v2
-                   draft-day-svrloc-exclusion-03.txt
-
-
-
-
-
-
-Status of This Memo
-   This document is an Internet-Draft and is subject to all provisions
-   of Section 10 of RFC2026.
-
-   Internet-Drafts are working documents of the Internet Engineering
-   Task Force (IETF), its areas, and its working groups.  Note that
-   other groups may also distribute working documents as Internet-
-   Drafts.
-
-   Internet-Drafts are draft documents valid for a maximum of six months
-   and may be updated, replaced, or obsoleted by other documents at any
-   time.  It is inappropriate to use Internet- Drafts as reference
-   material or to cite them other than as "work in progress."
-
-   The list of current Internet-Drafts can be accessed at
-   http://www.ietf.org/1id-abstracts.html
-
-   The list of Internet-Draft Shadow Directories can be accessed at
-   http://www.ietf.org/shadow.html
-
-   This document is an individual contribution to the Internet
-   Engineering Task Force (IETF). Comments should be submitted to the
-   srvloc@srvloc.org mailing list.
-
-   Distribution of this memo is unlimited.
-
-
-
-
-
-
-
-
-
-
-
-
-Day                                                [Page i]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-                     \e[1mTable of Contents\e[0m
-
-
-1  Introduction  . . . . . . . . . . . . . . . . . . . .   2
-1.1 Present SLPv2 Multicast Behavior . . . . . . . . . .   2
-1.2 Optimizations Made by Exclusion Directive  . . . . .   2
-1.3 Terminology  . . . . . . . . . . . . . . . . . . . .   3
-2  Exclusion Extension Format  . . . . . . . . . . . . .   4
-2.1 Exclusion Extension Fields . . . . . . . . . . . . .   4
-2.1.1 Size Field . . . . . . . . . . . . . . . . . . . .   4
-2.1.1.1 Using the Size Field to Calcu-
-late Length of Entries . . . . . . . . . . . . . . . . .   5
-2.1.2 Exclusion XID  . . . . . . . . . . . . . . . . . .   5
-2.1.3 Nonce  . . . . . . . . . . . . . . . . . . . . . .   5
-2.1.4 Exclusion Interval . . . . . . . . . . . . . . . .   5
-2.1.5 Exclusion Entries  . . . . . . . . . . . . . . . .   6
-2.1.5.1 Dual-stack IP Environments . . . . . . . . . . .   6
-2.1.6 Authentication Blocks  . . . . . . . . . . . . . .   6
-2.2 Exclusion Directive Functionality  . . . . . . . . .   6
-2.2.1 Exclusion Directive State Table (EDST) . . . . . .   7
-3  Exclusion Directives in SLP v2 Request Messages . . .   8
-3.1 Dummy Service Request Message with Exclu-
-sion Directive . . . . . . . . . . . . . . . . . . . . .  10
-3.1.1 Format of Dummy Service Request  . . . . . . . . .  11
-3.1.2 Processing the Dummy Service Request . . . . . . .  12
-3.1.3 Using the Exclusion Direc-
-tive and PR List Together  . . . . . . . . . . . . . . .  12
-4  Authenticating Exclusion Directives . . . . . . . . .  13
-4.1 The Exclusion Directive Authentication Block . . . .  13
-4.2 Exclusion Directive Authentication Rules . . . . . .  13
-5  Using the NONCE Value to Prevent Replay Attacks
- . . . . . . . . . . . . . . . . . . . . . . . . . . . .  14
-5.1 UA Use of the Nonce to Prevent Denial of Ser-
-vice Attack  . . . . . . . . . . . . . . . . . . . . . .  15
-5.2 DA and SA Use of the Nonce . . . . . . . . . . . . .  16
-5.2.1 Zero-filled Nonce  . . . . . . . . . . . . . . . .  16
-5.3 Theory Behind the Nonce  . . . . . . . . . . . . . .  16
-6  Security Considerations . . . . . . . . . . . . . . .  16
-7  Acknowledgements  . . . . . . . . . . . . . . . . . .  17
-8  References  . . . . . . . . . . . . . . . . . . . . .  17
-9  Author's Contact Information  . . . . . . . . . . . .  17
-10  Full Copyright Statement . . . . . . . . . . . . . .  18
-
-
-
-
-
-
-
-Day                                                [Page 1]
-\f
-
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-1  Introduction
-
-   The Service Location Protocol, Version 2 [1] allows the use of
-   multicast and broadcast discovery requests.  The SLP exclusion
-   directive is an extension to SLP that optimizes the use of
-   multicasting and broadcasting to find services on an intranet. This
-   document hereafter refers to multicast discovery but all its contents
-   apply to broadcast discovery as well.
-
-
-1.1 Present SLPv2 Multicast Behavior
-
-   Multicast discovery requests allow an SLP User Agent to discover
-   services with no prior configuration. Multicast discovery requests
-   are not sent reliably and must be retransmitted in order to find all
-   services of the desired type on the network.
-
-   When SLP v2 SrvRqst, SrvTypeRqst, and AttrRqst messages are
-   multicast, they contain a <PRList> of previous respondents. Initially
-   the <PRList> is empty. When these requests are unicast, the <PRList>
-   is always empty.
-
-   Any DA or SA which sees its address in the <PRList> does not respond
-   to the request (as specified in RFC 2608).
-
-   The User Agent then retransmits the discovery request until the
-   <PRList> causes no further responses to be elicited or the previous
-   responder list and the request will not fit into a single datagram or
-   until CONFIG_MC_MAX seconds elapse[1].
-
-   The PR list is an effective mechanism for suppressing duplicate
-   responses in smaller environments. However, because of the way PR
-   lists are encoded with the SLP v2 header, the PR List has a limit of
-   as few as 90 IPv4 addressees, and even fewer IPv6 addresses. This
-   means in most environments a User Agent may suppress duplicate
-   responses from approximately 90 host addresses at best.
-
-
-1.2 Optimizations Made by Exclusion Directive
-
-   The Exclusion Directive extension presented in this document allows a
-   User Agent (UA) to direct those Directory Agents (DAs) and Service
-   Agents (SAs) from which it has already received responses not to
-   respond to retransmissions of a particular query. Hence subsequent
-   retransmissions only generate responses from agents from which the
-   requester has not already received a response.
-
-
-
-Day                                                [Page 2]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-   This extension can be used in conjunction with the SLP v2 PR list.
-   SAs and DAs which do not understand the Exclusion Directive extension
-   will ignore it. With the use of the Exclusion Directive extension,
-   SLP v2 User Agents may perform multicast discovery with a high degree
-   of success and efficiency, even when the number of respondents
-   reaches into the thousands. .
-
-
-1.3 Terminology
-
-   In this document, the key words "MAY", "MUST, "MUST NOT", "optional",
-   "recommended", "SHOULD", and "SHOULD NOT", are to be interpreted as
-   described in RFC 2119 [2].
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                                                [Page 3]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-2  Exclusion Extension Format
-
-   The fields in an Exclusion extension form an Exclusion Directive that
-   tells receiving agents not to respond to a specific request from a
-   specific host for a specific time interval.
-
-   Each Exclusion Directive is     fully  contained within one  SLP
-   v2 extension block. However, a single SLP v2  request message may
-   contain multiple Exclusion Directives.  For example, a single Service
-   Request may  contain three Exclusion  Directives  within three
-   distinct SLP v2 extension blocks.
-
-
-2.1 Exclusion Extension Fields
-
-   The Exclusion extension has the following format:
-
-
-
-   0             1                   2                   3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Extension ID = 0x000?        |     Next Extension Offset     |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | Offset, contd.|     size      |        Exclusion XID          |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                             Nonce                             |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Exclusion Interval           |    Number of Entries          |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                     Exclusion Entries                         |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | # auth blocks                 | authentication block (if any) |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-
-2.1.1 Size Field
-
-   The size field specifies the size, in bytes, of each
-   address entry. A size value of 4 bytes MUST be encoded as
-   an IP v4 address in network byte order. A size value of
-   16 bytes MUST be encoded as an IP v6 address in network
-   byte order. Other address sizes are assumed to be opaque
-   data and will not be interoperable among different imple-
-   mentations
-
-
-
-Day                                                [Page 4]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-2.1.1.1 Using the Size Field to Calculate Length of Entries
-
-   The size of the Exclusion Entries field MUST be calcu-
-   lated by multiplying the value of the Size field by the
-   value of the Number of Entries field.
-
-
-2.1.2 Exclusion XID
-
-   The Exclusion XID identifies the SLP request to which the
-   enclosing Exclusion Directive applies. An Exclusion
-   Directive always applies to exactly one specific XID from
-   exactly one host IP address.
-
-   It is possible that the value of XID field in the Exclu-
-   sion Directive and the XID in the SLP header of the mes-
-   sage containing the Exclusion Directive will be differ-
-   ent. This is a subtle but important point: the SLP v2
-   header XID and the Exclusion XID are not equivalent. See
-   section 3.0 for details of how the exclusion XID works.
-
-
-2.1.3 Nonce
-
-   The Nonce adds a unique value to each Exclusion Directive
-   that makes it difficult to mount a denial of service
-   attack by replaying Exclusion Directives. The Nonce is a
-   128-bit field which MUST contain a cryptographic-quality
-   random unique value; or alternatively must be filled with
-   zero bytes. (If the Nonce is filled with zero bytes, it
-   is ignored.)
-
-   The usage of the Nonce is explained further in section
-   4.3.
-
-
-2.1.4 Exclusion Interval
-
-   The Exclusion Interval indicates the lifetime, in sec-
-   onds, of the containing Exclusion Directive. The interval
-   begins when the SA or DA receives the Exclusion Direc-
-   tive. Exclusion Directives SHOULD have an interval from
-   one to several seconds. However, the Exclusion Interval
-   may need to be increased for unusually large networks or
-   media with high latency characteristics, such as satel-
-   lite links.
-
-
-
-Day                                                [Page 5]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-2.1.5 Exclusion Entries
-
-   The Exclusion Entries field is the list of host IP
-   addresses that are subject to the containing Exclusion
-   Directive. The length of the Exclusion Entries field is
-   the number of IP addresses in the list multiplied by the
-   size of each IP address.
-
-   The size of each IP address is determined by the value of
-   the size field. Each Exclusion Directive therefore may
-   only contain IPv4 addresses or IPv6 addresses, but not
-   both.
-
-
-2.1.5.1 Dual-stack IP Environments
-
-   In environments using both IPv4 and IPv6 addresses it may
-   be necessary to deliver two Exclusion Directives where
-   otherwise one would be sufficient. E.g., one Directive
-   containing IPv4 addresses and another Directive contain-
-   ing IPv6 addresses. One way to accomplish this is to pack
-   two separate Exclusion Directives into a single SLP
-   request. Another way involves using dummy request mes-
-   sages to deliver Exclusion Directives. Dummy request mes-
-   sages are covered in section 3.1 below.
-
-
-2.1.6 Authentication Blocks
-
-   The Number of Auth Blocks indicates how many authentica-
-   tion blocks are contained in the containing Exclusion
-   Directive. The format of the authentication block is cov-
-   ered in section 4 below.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                                                [Page 6]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-2.2 Exclusion Directive Functionality
-
-   The purpose of the Exclusion Directive is to cause SAs or
-   DAs to silently discard specific SLP requests that origi-
-   nate from specific IP addresses. This purpose aids in the
-   use of multicasting to discover services in large network
-   environments. The Exclusion Directive makes multicast
-   discovery  more reliable and efficient by:
-
-
-     1. Providing a more compact mechanism to silence previ-
-        ous responders.
-
-     2. Magnifying the effect of the silencing mechanism by
-        specifying a quiet interval.
-
-
-2.2.1 Exclusion Directive State Table (EDST)
-
-   When the Exclusion Directive is present in an SLP
-   request, the receiving agent uses the directive to create
-   and maintain state information that causes the receiving
-   agent to ignore and discard matching requests (possibly
-   including the request containing the Exclusion Direc-
-   tive).
-
-   The Exclusion Directive State Table (EDST) is the collec-
-   tion of information describing all current Exclusion
-   Directives received by the agent. EDST entries are a
-   record with five fields: Source Address, Source Port,
-   exclusion XID , exclusion nonce value, and expiration
-   time. (The nonce value MAY be zero filled.)
-
-   The Exclusion Directive only applies to SLP v2 messages
-   that have the multicast flag set. The SA or DA MUST
-   respond to SLP v2 messages that do not have the multicast
-   flag set as specified in [1].
-
-   If the incoming request message matches a current record
-   in the receiving agent's EDST, and if the incoming
-   request's Multicast flag is set in the SLP header, the DA
-   or SA MUST silently discard the message.
-
-   When the Exclusion Interval of an Exclusion Directive has
-   expired, the SA or DA MUST delete the corresponding
-   record in its EDST and resume processing SLP v2 multicast
-
-
-
-Day                                                [Page 7]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-   request as if that Exclusion Directive was never
-   received.
-
-   If an incoming request does not contain an Exclusion
-   Directive, the receiving agent MUST process that request
-   without regard to the local EDST. (In other words, pro-
-   cess the request normally.)
-
-
-
-3  Exclusion Directives in SLP v2 Request Messages
-
-   An SA or DA may encounter the Exclusion Directive in Ser-
-   vice Request, Attribute Request, and Service Type Request
-   messages. In each case, the request may also contain a PR
-   list as described in [1].
-
-   A UA MUST NOT include an Exclusion Directive in a unicast
-   SLP v2 request message. DAs and SAs MUST ignore Exclusion
-   Directives that are erroneously included in unicast
-   request messages.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                                                [Page 8]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-   If the SA or DA supports the Exclusion Directive, it MUST
-   perform the following steps when processing an SLP v2
-   Request message.
-
-     1. If the request message is unicast or if the receiv-
-        ing agent does not recognize the Exclusion Direc-
-        tive, go to step 6 below.
-
-     2. If the incoming request does not have an Exclusion
-        Directive, proceed to step 6.
-
-     3. Extract the Exclusion Directive from the request.
-        Search the Directive's Exclusion Entries list for
-        the receiving agent's IP address. If not found, pro-
-        ceed to step 6.
-
-     4. Extract the source address and port from the UDP
-        header and the Exclusion XID and nonce from the
-        Exclusion Directive. The receiving agent MUST ensure
-        that its EDST contains a record for this directive,
-        creating a new EDST record if necessary. (This step
-        is also a convenient time to delete expired entries
-        from the EDST.)
-
-     5. Extract the source address and port from the incom-
-        ing request's UDP header. Extract the XID from the
-        request's SLP v2 header. Extract the nonce from the
-        Exclusion directive.
-
-        Search the EDST for an entry containing matching
-        values for these data (Optionally ignoring the nonce
-        from the EDST entry if the incoming request does not
-        contain an exclusion directive). Upon finding a
-        matching EDST entry, silently discard the request.
-        Otherwise continue.
-
-     6. If the SA or DA has not discarded the request up to
-        this point, evaluate the request normally as out-
-        lined in [1].
-
-   It is worth repeating that the Exclusion Directive only
-   applies to SLP v2 request messages that have the R
-   (Request Multicast) flag turned on in the SLP v2 header.
-   Agents MUST NOT silently discard unicast request messages
-   regardless of exclusion directives or EDST entries.
-
-
-
-
-Day                                                [Page 9]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-   Note that additional steps may be necessary if the Exclu-
-   sion directive contains one or more authentication
-   blocks. These steps are outlined in section 4.
-
-
-3.1 Dummy Service Request Message with Exclusion Directive
-
-   A "dummy" request message is one that has zero-length
-   fields for the entire request body, exclusive of the SLP
-   v2 header and the Exclusion directive.
-
-   Using a dummy SLP request message for the sole purpose of
-   transporting an Exclusion Directive may be helpful in two
-   cases:
-
-     1. The Exclusion Directive is too large to fit within a
-        single request datagram alongside the SLP header,
-        service type, predicate, and other request data.
-        However, it will fit in a datagram with just itself
-        and the SLP header.
-
-     2. The Exclusion Directive is larger than the sum of
-        the network MTU and the SLP Header. The agent can
-        divide the Exclusion Entries list across two or more
-        Exclusion Directives and transport those Directives
-        within a corresponding number of dummy SLP request
-        messages.
-
-        This method can support Exclusion Entry lists that
-        contain thousands of addresses.
-
-   When an SA or DA receives a dummy SLP request that con-
-   tains an Exclusion Directive, the receiving agent MUST
-   extract the Exclusion Directive from the dummy request
-   and ensure that the local EDST contains a record corre-
-   sponding to the Exclusion Directive. This is described in
-   section 3, step 4 above.
-
-
-   A Dummy request message MUST have the R (Request Multi-
-   cast) flag turned on in the SLP v2 header. This causes
-   SLP v2 SAs and DAs that are unaware of the Exclusion
-   Directive to silently discard dummy request messages due
-   to a parsing error (instead of responding to the sending
-   agent with an error code).
-
-
-
-
-Day                                               [Page 10]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-3.1.1 Format of Dummy Service Request
-
-   0                   1                   2                   3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | Service Location Header (R flag on) (function = SrvRqst = 1)  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |    length of <PRList> = 0     | length of <service-type> = 0  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |   length of <scope-list> = 0  |   length of <predicate> = 0   |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |    length of <SLP SPI > = 0   |   Extension ID = Exclusion    |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |         Next Extension Offset                 |     size      |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     Exclusion XID             |   Nonce                       |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |          Nonce, cont'd.       |       Exclusion Interval      |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |        Number of Entries      |          Exclusion Entries    \
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   \ # auth blocks                 |  authentication block (if any)\
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-3.1.2 Processing the Dummy Service Request
-
-   Dummy Service Request messages MUST be processed as out-
-   lined in section 3 above. The result is that the receiv-
-   ing agents which support the Exclusion Directive will
-   process the Directive, while all other agents will
-   silently discard the message due to a parsing error.
-
-   After processing the Exclusion Directive, the receiving
-   agent will produce a parse error. Because the service
-   request has the multicast flag set, the receiving agent
-   will not send an error response to the originating agent.
-
-   Note that if the Exclusion Directive contains an authen-
-   tication block, the SA or DA SHOULD validate the signa-
-   ture of the Exclusion Directive. Authentication of Exclu-
-   sion Directives is covered in section 4.
-
-
-
-
-
-
-
-Day                                               [Page 11]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-3.1.3 Using the Exclusion Directive and PR List Together
-
-   The steps below show how to use the Exclusion Directive
-   in combination with the SLP PR list to perform multicast
-   discovery (substitute actual XIDs in real usage):
-
-     1. Send a new Service Request with no PR list and no
-        Exclusion Directive; process the replies and remem-
-        ber the respondents as RL1.
-
-     2. Build an exclusion list and remember it as list EL1.
-
-     3. Immediately re-transmit the Service Request from (1)
-        with no PR list but with an Exclusion Directive that
-        contains Exclusion List EL1; process the replies and
-        remember the respondents as RL2.
-
-     4. The intersection of EL1 and RL2 are agents that do
-        not support the Exclusion Directive. Create PRL1 =
-        EL1 n RL2. Build EL2 = RL2 - PRL1.
-
-     5. Immediately re-transmit the Service Request from (3)
-        including PRL1 in the SLP header and substituting
-        EL2 for EL1 in the Exclusion Directive. If no
-        responses the discovery cycle is complete.
-
-     6. Repeat the previous thre steps n times using ELn-1,
-        RLn, PRLn-1, and ELn until the UA receives no
-        responses for the configured timeout period.
-
-   In steps 1 - 6 above, it is important that each Service
-   Request (steps 1, 3, and 5) have the same XID in the SLP
-   Header ; and equally that each Exclusion Directive also
-   has the same value in the XID field.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                                               [Page 12]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-4  Authenticating Exclusion Directives
-
-   To prevent denial of service attacks against UAs, all
-   agents that recognize the Exclusion Directive SHOULD sup-
-   port authentication of the Exclusion Directive.
-
-   Authenticating Exclusion Directives places the additional
-   burden upon the User Agent of signing data. In standard
-   SLP v2, UAs only need to verify signatures. The addi-
-   tional ability to generate signatures means that UAs must
-   be issued private key material.
-
-
-4.1 The Exclusion Directive Authentication Block
-
-   The format of the Exclusion Directive Authentication
-   Block is the same as that used by SLP v2 [1].
-
-
-   0                   1                   2                     3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Block Structure Descriptor   |  Authentication Block Length  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                           Timestamp                           |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     SLP SPI String Length     |         SLP SPI String        \
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   \                Structured Authentication Block...            \
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                                               [Page 13]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-4.2 Exclusion Directive Authentication Rules
-
-   To sign or verify the signature of an Exclusion Direc-
-   tive, the SLP agent MUST use the following components of
-   the Exclusion Directive as if they were a single continu-
-   ous byte-aligned buffer:
-
-     Â·  16-bit Exclusion XID
-
-     Â·  32-bit Nonce
-
-     Â·  16-bit Exclusion Interval
-
-     Â·  8-bit Exclusion Entry size
-
-     Â·  16-bit Number of Entries
-
-     Â·  Variable-length Exclusion Entries.
-
-
-5  Using the NONCE Value to Prevent Replay Attacks
-
-   Despite the use of signatures to authenticate Exclusion
-   Directives, UAs may still be vulnerable to a replay
-   denial of service attack.  To prevent this possibility,
-   SLP Agents that recognize the Exclusion directive SHOULD
-   make use of the nonce value as described in this section.
-
-   Every Exclusion Directive contains a 128-bit nonce field,
-   which MUST contain a 128-bit cryptographicly random value
-   or be filled with zeros. If the nonce is filled with
-   zeroes, the UA is open to a denial-of service attack.
-
-   Because the nonce field is included in signature genera-
-   tion and validation, each signed Exclusion Directive can
-   be cryptographically unique. Unsigned Exclusion Direc-
-   tives can also be cryptographically unique but their
-   source can be spoofed.
-
-
-
-
-
-
-
-
-
-
-
-Day                                               [Page 14]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-   By using the nonce correctly, Exclusion Directives can be
-   specific to:
-
-     1. The source address and port of the requesting UA.
-
-     2. The XID of the request.
-
-     3. A cryptographically unique value for each and every
-        request. To make this work, SAs and DAs MUST include
-        the nonce value, along with the UA source address
-        and the request XID when deciding whether or not an
-        Exclusion Directive applies to a request message.
-
-
-5.1 UA Use of the Nonce to Prevent Denial of Service Attack
-
-   The UA is the SLP component vulnerable to a denial of
-   service attack so it is responsible for using an appro-
-   priate algorithm to generate a nonce with the requisite
-   random characteristics.
-
-   For each Exclusion Directive:
-
-     1. Generate a random 128-bit integer to use as the
-        nonce.
-
-     2. Initialize an Exclusion Directive, including the XID
-        of the request that is subject to response suppres-
-        sion.
-
-     3. Insert the nonce value from (1) into the Exclusion
-        Directive.
-
-     4. Optionally sign the Exclusion Directive as outlined
-        in the section on Authentication above.
-
-     5. Use a Exclusion Directive containing the nonce in
-        all requests and dummy Service Requests for the XID
-        in step (2).
-
-     6. IMPORTANT - use a DIFFERENT, cryptographically gen-
-        erated nonce for each request XID for which you are
-        issuing an Exclusion directive.
-
-
-
-
-
-
-Day                                               [Page 15]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-5.2 DA and SA Use of the Nonce
-
-   SA's DAs that recognize the Exclusion Directive MUST use
-   the nonce value to initialize EDST entries and to evalu-
-   ate Exclusion Directives in request messages.
-
-
-5.2.1 Zero-filled Nonce
-
-   UAs that don't have the ability to generate unique nonce
-   values MUST fill the nonce field of the Exclusion Direc-
-   tive with zeros. This opens the agent up to a denial of
-   service attack, however. (See below).
-
-
-5.3 Theory Behind the Nonce
-   The nonce is a simple mechanism to make it as difficult
-   as possible for an attacker to predict the composition of
-   SLP service requests that a particular UA may issue in
-   the near future.
-
-   Most UA's use the XID field in the SLP 2 header as a
-   sequential counter. Hence an attacker that has a copy of
-   a recent SLP request can guess the XID of the next
-   request the agent will make. Using the Exclusion Direc-
-   tive, an attacker can cause DA's and SA's not to respond
-   to subsequent SLP requests made by the attacked agent.
-
-   However, the inclusion of the nonce value in the Exclu-
-   sion Directive makes it infeasible for an attacker to
-   guess the composition of future requests made by the UA.
-   This is true because the nonce, unlike the XID, is a ran-
-   dom value. Also, the nonce is large enough to make guess-
-   ing its value in the next request too difficult for the
-   attacker.
-
-6  Security Considerations
-
-   Implementing the Exclusion Directive without using the
-   nonce value opens SLP v2 UAs up to a trivial denial of
-   service attack, which would nullify the ability of the UA
-   to perform discovery.
-
-   Implementing the Exclusion Directive with authentication
-   but without using the nonce value may leave the UA open
-   to a more sophisticated replay attack using previously
-
-
-
-Day                                               [Page 16]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-   signed and multicast request messages.
-
-   UAs that support the Exclusion Directive SHOULD authenti-
-   cate their requests as outlined in section 4 and SHOULD
-   include the nonce value in all Exclusion Directives.
-
-   SAs and DAs that support the Exclusion Directive SHOULD
-   be able to verify signed Exclusion Directives and MUST
-   store the nonce value in the EDST entry for that direc-
-   tive.
-
-   Nonce values generated by UAs MUST  be cryptographically
-   unique and random values if they are to provide any safe-
-   guard against a replay attack.
-
-
-7  Acknowledgements
-
-   Erik Guttman has provided a great deal of feedback and
-   improvements to this document. The srvloc working group
-   also contributed to the development of this document,
-   especialy Kevin Arnold, James Kempf, Ira McDonald, Evan
-   Hughes, Terry Lambert, and others. Thomas Narten recom-
-   mended some important changes during the review process.
-
-8  References
-
-     1. Guttman, E., Perkins, C., Veizades, J., and M. Day,
-        "Service Location Protocol Version 2", RFC 2608,
-        June 1999.
-
-     2. Bradner, S,. "Key Words for Use in RFCs to Indicate
-        Requirements Levels", BCP 14, RFC 2119, March 1997
-
-9  Author's Contact Information
-
-   Michael Day IBM 3039 Cornwallis Road Research Triangle
-   Park, NC 27709
-
-   Phone:  919 543-4283
-
-   Email:  mdday@us.ibm.com
-
-
-
-
-
-
-
-Day                                               [Page 17]
-\f
-INTERNET DRAFT     SLP Exclusion Directive  Exp. June 2003
-
-
-10  Full Copyright Statement
-
-   Copyright (C) The Internet Society (2000-2002).  All
-   Rights Reserved.
-
-   This document and translations of it may be copied and
-   furnished to others, and derivative works that comment on
-   or otherwise explain it or assist in its implementation
-   may be prepared, copied, published and distributed, in
-   whole or in part, without restriction of any kind, pro-
-   vided that the above copyright notice and this paragraph
-   are included on all such copies and derivative works.
-   However, this document itself may not be modified in any
-   way, such as by removing the copyright notice or refer-
-   ences to the Internet Society or other Internet organiza-
-   tions, except as needed for the purpose of developing
-   Internet standards in which case the procedures for copy-
-   rights defined in the Internet Standards process must be
-   followed, or as required to translate it into languages
-   other than English.
-
-   The limited permissions granted above are perpetual and
-   will not be revoked by the Internet Society or its suc-
-   cessors or assigns.
-
-   This document and the information contained herein is
-   provided on an "AS IS" basis and THE INTERNET SOCIETY AND
-   THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WAR-
-   RANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
-   ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL
-   NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MER-
-   CHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE."
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                                               [Page 18]
diff --git a/src/Unsupported/slp_client/doc/draft-day-svrloc-signature-00-nr.txt b/src/Unsupported/slp_client/doc/draft-day-svrloc-signature-00-nr.txt
deleted file mode 100644 (file)
index 87dc8a2..0000000
+++ /dev/null
@@ -1,595 +0,0 @@
-\"-----------------------------------------------------------------
-.\" Registers to store heading levels as variables
-.\"-----------------------------------------------------------------
-.nr head1 0 1
-.nr head2 0 1
-.nr head3 0 1 
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-
-.\"-----------------------------------------------------------------
-.\" Return to header level 1, 2, etc. 
-.\" resets the level registers and indent
-.\"-----------------------------------------------------------------
-.de RETURN_HDR_1
-.nr head2 0 1
-.nr head3 0 1 
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_1 \\$1 
-..
-
-.de RETURN_HDR_2
-.nr head3 0 1 
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_2 \\$1
-..
-.de RETURN_HDR_3
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_3 \\$1
-..
-
-.de RETURN_HDR_4
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_4 \\$1
-..
-
-.de RETURN_HDR_5
-.nr head6 0 1
-.in 0 
-\.HDR_5 \\$1
-..
-
-.\"-----------------------------------------------------------------
-.\" Create a level 1, 2, etc,.  heading 
-.\" resets indent, creates a TOC entry
-.\" Parameter is the title of the heading
-.\"-----------------------------------------------------------------
-.de HDR_1
-.sp 1
-.in 0 
-\\n+[head1]\\  \\$1
-.XS
-\\n[head1]\\  \\$1
-.XE
-.in 3
-.. 
-
-
-.de HDR_2
-.sp 1
-.in 0 
-\\n[head1]\\.\\n+[head2]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_3
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n+[head3]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_4
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n+[head4]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_5
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n+[head5]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n[head5]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_6
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n[head5]\\.\\n+[head6]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n[head5]\\.\\n[head6]\\ \\$1
-.in 3
-.XE
-.. 
-
-.\"-----------------------------------------------------------------
-.\" END MACRO DEFINITIONS
-.\"-----------------------------------------------------------------
-
-.pl 10.5i
-.po 0
-.ll 7.2i
-.lt 7.2i
-.nr LL 7.2i
-.nr LT 7.2i
-.ds LH Internet Draft
-.ds CH SLP Signature Extension
-.ds RH April 2003 
-.ds LF Day, McDonald
-.ds CF Expires: \n(dy September 2003
-.ds RF FORMFEED[Page %]
-.hy 0
-.ad l
-.de NS
-.ne 4
-.ti 0
-..
-
-   
-Internet Engineering Task Force                             Michael Day
-INTERNET DRAFT                                                      IBM
-                                                           Ira McDonald
-[Target Category: Experimental]                              High North
-\n(dy April 2003                                      Expires in Six Months
-
-.ce 1000
-Signature Extension for Service Location Protocol v2
-draft-day-svrloc-signature-00.txt
-.ce 0
-.sp 5
-
-.in 0
-Status of This Memo
-.in 3
-This document is an Internet-Draft and is subject to
-all provisions of Section 10 of RFC2026.
-
-Internet-Drafts are working documents of the Internet Engineering
-Task Force (IETF), its areas, and its working groups.  Note that
-other groups may also distribute working documents as
-Internet-Drafts.
-
-Internet-Drafts are draft documents valid for a maximum of six
-months and may be updated, replaced, or obsoleted by other
-documents at any time.  It is inappropriate to use Internet-
-Drafts as reference material or to cite them other than as
-"work in progress."
-
-The list of current Internet-Drafts can be accessed at
-http://www.ietf.org/1id-abstracts.html
-
-The list of Internet-Draft Shadow Directories can be accessed at
-http://www.ietf.org/shadow.html
-
-This document is an individual contribution to the Internet
-Engineering Task Force (IETF). Comments should be submitted to the
-srvloc@srvloc.org mailing list.
-
-Distribution of this memo is unlimited.
-       
-.bp
-.HDR_1 Introduction 
-
-The Service Location Protocol [rfc2608bis] provides a scalable
-framework for the discovery and selection of network services. Using
-this protocol, computers using the Internet need little or no static
-configuration of network services for network based applications.
-
-SLP recommends the use of IPSec Authentication Headers [AH] for
-authenticating service information. It also recommends the use of
-the IPSec Encapsulating Security Payload [ESP] for causing SLP
-exchanges to be private.
-
-An addition to [rfc2608bis], the internet-draft "Upgrading to TLS
-Within Service Location Protocol" (work in progress) [TLS] also
-specifies a method for upgrading TCP connections to be encrypted.
-
-The security discussion in section 15 of [rfcs608bis] enumerates the
-security implications of using SLP for the discovery and selection of
-network services. IPSec SHOULD be used in the manner described
-whenever possible. 
-
-.KS
-There are some situations where the use of IPSEC is not an option for
-SLP. These include 
-
-.nr PI 5 
-.RS 
-.nr step 1 1
-.IP \n[step]. 3
-SLP is being transported by a protocol stack other than IP. This point
-includes the case where SLP is publishing information about a service
-that is accessible only via non-IP media. 
-.IP \n+[step]. 
-The SLP agent is running on a platform for which IPSec
-has not been implemented, such as an embedded system.
-.IP \n+[step].
-SLP is being used within an application model that does not have an
-affinity with IPSec security associations, such as with a high-latency
-store-and-forward protocol or a many-to-one fanout engine. 
-.KE 
-.RE
-.in 3 
-
-When using SLP in environments where IPSec AH is not avialable
-it is still desirable to provide a means to authenticate SLP
-messages. This document describes an optional SLP protocol extension
-for the generation and verification of signatures of SLP messages. It
-uses the Crytographic Message Syntax [CMS] as the signature format. 
-
-.HDR_1 Applicability\ Statement
-       
-This extension SHOULD NOT be used with SLP when IPSec Authentication
-Headers [AH] are available for use. IPSec Authentication Headers
-SHOULD be used to authenticate SLP messages whenever possible, as
-outlined in [rfc2608bis].
-
-When there is an acceptable mechanism for managing public keys in
-place and when IPSec Authentication Headers are not available for use,
-the signature extension MAY be used to authenticate SLP
-messages. 
-
-This extension is based upon the Cryptographic Message Syntax
-[CMS]. CMS requires distribution of key material to occur but does not
-specify how keys should be distributed. CMS supports different Public
-Key algorithms and the use of Public Key Certificates. There are many
-ways to distribute Certificates and other key material, and [CMS]
-states that "The recipient MAY obtain the correct public key for the
-signer by any means." Further, [CMS] states:
-
-.in 5
-"[CMS] supports a wide variety of architectures for certificate-based
-key management, such as the one defined by the PKIX working group. [PROFILE]."
-
-.in 3
-The selection and implementation of a public-key infrastructure is
-beyond the scope of this document. 
-
-Assuming private keys are secret, the signature extension can provide
-assurance that SLP messages originate from the purported host and that
-they have not been modified in transit to the receiving host.
-
-.HDR_2 Use\ with\ DAs 
-
-All SLP message are request-response tuples, even when using
-multicast or broadcast. The signature extension works for direct
-exchanges between two SLP agents. In such a case, the sender of an SLP
-message signs that message and the receiver verifies the signature. 
-
-When using DAs, SLP transactions can involve three SLP agents and two
-request-response tuples. For example, an SA registers service
-information with a DA. Later, a UA requests that service information
-from the DA. 
-
-In this case the UA and SA do not transact directly with each other
-and, therefore, cannot derive mutual trust through the direct exchange
-of signed messages. Instead, they communicate indirectly through the
-DA. 
-
-Through administration of a public key infrastructure associative
-trust between the UA and SA may be achieved through the DA. For this
-to be achievable, the UA, SA, and DA must be configured with the same
-root certificate authority, and must also be configured to reject SLP
-signature extensions signed by a public key outside of the root of
-trust. When this is the case, a UA and SA can derive associative trust
-indirectly through signed messages via the DA. 
-
-.bp
-.HDR_2 Use\ with\ SLP\ Messages
-
-The signature extension MAY be used with any SLP message.
-
-.RETURN_HDR_1 Signature\ Extension\ Format
-
-The Signature Extension comprises an envelope for a Cryptographic
-Message Syntax signed-data content type. (See section 5.1 of [CMS].)
-
-.KS
-.HDR_2 Signature\ Extension\ Fields
-
-The Signature Extension has the following format: 
-.DS L 
-   0             1                   2                   3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Extension ID = 0x000?        |Next Ext. Offset (must be zero)|
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | Offset, contd.|               CMS signed-data                 \\
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-.DE
-.KE 
-.HDR_3 CMS\ signed-data\ Field
-
-The CMS signed-data field contains the signature of the SLP message
-and accompanying data. The format for the signed-data field is
-outlined in section 5.1 of [CMS]. It is a BER-encoded [X.209-88]
-buffer that may include at least the following information:
-
-.nr PI 5 
-.RS 
-.nr step 1 1
-.IP \n[step]. 3
-Version of the CMS used to sign the message data. 
-.IP \n+[step]. 
-Algorithms used to generate and sign the message digest. 
-.IP \n+[step].
-Signed content, which includes a digest of the message data. 
-.IP \n+[step]. 
-Optional Signer information, which may include Public-Key
-Certificates. Signer attributes are subject to additional encoding
-rules. 
-.RE
-.in 3 
-
-The list above is generalized. For example, if the signed-data field
-contains variable-length attribute data that data must use special
-additional rules. See [CMS] for precise details.
-.bp
-.HDR_3 Size\ of\ signed-data\ Field
-
-There is a paradox involving the size of the signed-data field and the
-generation of the signed message digest. 
-
-The SLP header MUST be included in the input for the message digest
-contained in the signed-data field. Because the SLP Header includes a
-length field, the length of the message including the signature
-extension must be part of the input into the message digest contained
-in the signature extension.
-
-The message digest and the signature of the message digest are 
-fixed-length fields and their length is known prior to generating the
-signed digest. This makes it straightforward to calculate the length
-of the SLP message, initialize the length field in the SLP header, and
-then generate the signed message digest. 
-
-.HDR_2 Contents\ of\ signed-data\ Field
-
-The CMS provides considerable flexibility when generating signed-data
-content. For example, it allows multiple signers and multiple
-signatures. It also allows a variable number and type of signer
-attributes including certificates.
-
-To be consistent with the goals of SLP UAs and SAs SHOULD keep the
-signed-data field as simple as possible when generating signature
-extensions. A simple signed-data field with only a message digest, a
-signature of the message digest, and a subject key identifier makes a
-prior calculation of the signed-data length simple and ensures that
-generating and verifying signatures of SLP messages requires the
-smallest possible overhead.
-
-A signed-data field that contains only a signed message digest and a
-subject key identifier can fit easily within the datagram MTU of most
-network environments and does not represent an unusual field size relative to
-other SLP fields. However, embellishing the signed-data with
-additional variable length attributes may quickly cause the SLP
-message to exceed the datagram MTU. 
-
-.HDR_2 Omission\ of\ eContent
-
-The CMS referrs to the data being signed for authentication as
-"eContent." In this case, the eContent is an SLP Message minus the
-signature extension. 
-
-The CMS allows signed content to be either encapsulated within a
-signed-data "envelope" or "external." The signature extension requires
-the eContent to be "external."
-.KS
-To quote from section 5.2 of [CMS]: 
-
-.in 5
-The optional omission of the eContent within the
-EncapsulatedContentInfo field makes it possible to construct
-"external signatures."  In the case of external signatures, the
-content being signed is absent from the EncapsulatedContentInfo value
-included in the signed-data content type.  If the eContent value
-within EncapsulatedContentInfo is absent, then the signatureValue is
-calculated and the eContentType is assigned as though the eContent
-value was present.
-.KE
-.in 3
-
-In other words, the signed-data field will always contain a signed
-digest of the SLP message but not the SLP message itself. 
-
-.RETURN_HDR_1 Use\ of\ the\ Signature\ Extension
-
-Subject to the applicability guidelines in section 2 above, the
-Signature extension can provide additional security to SLP by
-authenticating the content SLP messages, including other SLP
-extensions. It cannot provide privacy and it cannot authenticate the
-origin of IP messages. IPSec [AH] is required to authenticate IP headers.
-
-.HDR_2 Input\ to\ signed-data\ Field
-
-When generating a signature extension for an SLP message, the
-following data MUST be used as input to the message digest:
-
-.KS
-.nr PI 5 
-.RS 
-.nr step 1 1
-.IP \n[step]. 3
-SLP Header and message.
-.IP \n+[step]. 
-Any SLP extension up to but not including the signature extension.
-.IP \n+[step].
-The Signature extension MUST be the last extension present in an SLP message.
-.KE
-.RE
-.in 3
-.KS
-.HDR_3 Calculating\ the\ Length\ of\ a\ Signed\ SLP\ Message
-
-The following steps should be used to calculate the length of an SLP
-message that includes the signature extension. 
-
-.nr PI 5 
-.RS 
-.nr step 1 1
-.IP \n[step]. 3
-Determine the length of the signature extension. The signature
-extension will always be 6 bytes larger than the size of the CMS
-signed-data field. If the signed-data field will contain any variable
-length data such as signer attributes it will be necessary to encode
-the signed-data field using a dummy message digest and signature to
-obtain its length.
-.IP \n+[step]. 
-Determine the length of the SLP message, including the length of the
-signature extension and all preceeding extensions. 
-.IP \n+[step].
-Initialize the SLP Header with the length of the message. 
-.RE
-.in 3
-.KE
-
-.RETURN_HDR_2 Signature\ Generation\ Process
-
-The details of generating signatures for a CMS signed-data field are
-contained in [CMS] sections 5.4 and 5.5. The following is an overview
-for using CMS signed-data in the SLP signature extension. The details
-for performing the individual steps are covered in [CMS].
-
-.KS
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-Generate a message digest of the SLP message beginning with the first
-byte of the SLP Header up to and including the last byte of the
-message and extensions not including the signature extension. Note that if CMS signed
-attributes are to be included in the signed-data field they too must
-be input to the message digest. See [CMS] for details. 
-.IP \n+[step].
-Generate a signature of the digest from step 1. The input to the
-signature is the digest and the signer's private key. 
-.RE
-.KE
-.in 3
-.KS
-.HDR_2 Signature\ Verification\ Process
-
-The details of verifying signatures for a CMS signed-data field are
-contained in [CMS] section 5.6. The following is an overview for
-verifying signatures in CMS signed-data fields within an SLP signature
-extension.
-
-.nr PI 5
-.RS
-.nr step 1 1
-.IP \n[step]. 3
-Generate a message digest exactly as in step [1] in section 4.2
-above. 
-.IP \n+[step]. 
-The signer's public key must be obtained separately. 
-.IP \n+[step]. 
-The input to the signature verification step is the
-digest generated in step 1 and the signers public key. The details
-depend upon the exact signature algorithm employed but generally include
-encrypting the locally generated digest with the signers
-public key and comparing the result to the signature contained in the
-message. 
-.RE
-.KE
-.in 3
-
-.HDR_1 Acknowledgements
-
-James Kempf was instrumental in the development of this document.
-Erik Guttman contributed the basic theory of using
-digital signatures with SLP and offered valuable insights 
-during the preparation of this document. 
-. 
-.HDR_1 References
-
-.IP [rfc2608bis] 3
-Guttman, E., Kempf, J., Service Location Protocol, Version 2 (work in
-progress). draft-guttman-svrloc-rfc2608bis-03.txt, August 2002.
-
-.IP [TLS] 3 
-McDonald, Ira, Kempf, J., Day, M., "Upgrading to TLS With
-Service Location Protocol", draft-mcdonald-svrloc-tls-00.txt (work in
-progress).
-
-.IP [AH] 3
-Kent, S., and Atkinson, R., "IP Authentication Header," RFC
-2402, November, 1998.
-.IP [ESP] 3 
-Kent, S., and Atkinson, R., "IP Encapsulating Security Payload
-(ESP)," RFC 2406, November, 1998.
-.IP [CMS] 3
-Housely, R., "Cryptographic Message Syntax", RFC 3369, August, 2002.
-
-.IP [PROFILE] 3
-Housley, R., Polk, W., Ford, W. and D. Solo, "Internet
-X.509 Public Key Infrastructure: Certificate and CRL
-rofile", RFC 3280, April 2002.
-.IP [X.209-88] 3 
-CCITT.  Recommendation X.209: Specification of Basic
-Encoding Rules for Abstract Syntax Notation One (ASN.1).
-1988.
-
-.KS
-.HDR_1 Author's\ Contact\ Information
-
-Michael Day
-IBM
-3039 Cornwallis Road
-Research Triangle Park, NC 27709
-USA
-Phone:  +1 919 543-4283
-Email:  mdday@us.ibm.com
-
-Ira McDonald
-High North Inc
-221 Ridge Ave
-Grand Marais, MI 49839
-USA
-Phone: +1 906 494-2434
-Email: imcdonald@sharplabs.com
-.KE
-
-.HDR_1 Full\ Copyright\ Statement
-
-Copyright (C) The Internet Society (2000-2002).  All Rights Reserved.
-
-This document and translations of it may be copied and furnished to
-others, and derivative works that comment on or otherwise explain it
-or assist in its implementation may be prepared, copied, published and
-distributed, in whole or in part, without restriction of any kind,
-provided that the above copyright notice and this paragraph are
-included on all such copies and derivative works.  However, this
-document itself may not be modified in any way, such as by removing
-the copyright notice or references to the Internet Society or other
-Internet organizations, except as needed for the purpose of developing
-Internet standards in which case the procedures for copyrights defined
-in the Internet Standards process must be followed, or as required to
-translate it into languages other than English.
-
-The limited permissions granted above are perpetual and will not be
-revoked by the Internet Society or its successors or assigns.
-
-This document and the information contained herein is provided on an
-"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
-TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
-NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN
-WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE."
-
-
-.TC
diff --git a/src/Unsupported/slp_client/doc/draft-day-svrloc-signature-00.txt b/src/Unsupported/slp_client/doc/draft-day-svrloc-signature-00.txt
deleted file mode 100644 (file)
index 34617e1..0000000
+++ /dev/null
@@ -1,606 +0,0 @@
-
-
-Internet Engineering Task Force                             Michael Day
-INTERNET DRAFT                                                      IBM
-                                                           Ira McDonald
-[Target Category: Experimental]                              High North
-25 April 2003                                      Expires in Six Months
-
-          Signature Extension for Service Location Protocol v2
-                   draft-day-svrloc-signature-00.txt
-
-
-
-
-
-
-Status of This Memo
-   This document is an Internet-Draft and is subject to all provisions
-   of Section 10 of RFC2026.
-
-   Internet-Drafts are working documents of the Internet Engineering
-   Task Force (IETF), its areas, and its working groups.  Note that
-   other groups may also distribute working documents as Internet-
-   Drafts.
-
-   Internet-Drafts are draft documents valid for a maximum of six months
-   and may be updated, replaced, or obsoleted by other documents at any
-   time.  It is inappropriate to use Internet- Drafts as reference
-   material or to cite them other than as "work in progress."
-
-   The list of current Internet-Drafts can be accessed at
-   http://www.ietf.org/1id-abstracts.html
-
-   The list of Internet-Draft Shadow Directories can be accessed at
-   http://www.ietf.org/shadow.html
-
-   This document is an individual contribution to the Internet
-   Engineering Task Force (IETF). Comments should be submitted to the
-   srvloc@srvloc.org mailing list.
-
-   Distribution of this memo is unlimited.
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                      Expires: 25 August 2003                [Page i]
-\f
-Internet Draft           SLP Signature Extension             April 2003
-
-   Table of Contents
-
-
-   1  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .   2
-   2  Applicability Statement  . . . . . . . . . . . . . . . . . . .   2
-   2.1 Use with DAs  . . . . . . . . . . . . . . . . . . . . . . . .   3
-   2.2 Use with SLP Messages . . . . . . . . . . . . . . . . . . . .   4
-   3  Signature Extension Format . . . . . . . . . . . . . . . . . .   4
-   3.1 Signature Extension Fields  . . . . . . . . . . . . . . . . .   4
-   3.1.1 CMS signed-data Field . . . . . . . . . . . . . . . . . . .   4
-   3.1.2 Size of signed-data Field . . . . . . . . . . . . . . . . .   5
-   3.2 Contents of signed-data Field . . . . . . . . . . . . . . . .   5
-   3.3 Omission of eContent  . . . . . . . . . . . . . . . . . . . .   5
-   4  Use of the Signature Extension . . . . . . . . . . . . . . . .   6
-   4.1 Input to signed-data Field  . . . . . . . . . . . . . . . . .   6
-   4.1.1 Calculating the Length of a Signed SLP Message  . . . . . .   6
-   4.2 Signature Generation Process  . . . . . . . . . . . . . . . .   7
-   4.3 Signature Verification Process  . . . . . . . . . . . . . . .   7
-   5  Acknowledgements . . . . . . . . . . . . . . . . . . . . . . .   8
-   6  References . . . . . . . . . . . . . . . . . . . . . . . . . .   8
-   7  Author's Contact Information . . . . . . . . . . . . . . . . .   9
-   8  Full Copyright Statement . . . . . . . . . . . . . . . . . . .   9
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                      Expires: 25 August 2003                [Page 1]
-\f
-Internet Draft           SLP Signature Extension             April 2003
-
-
-1  Introduction
-
-   The Service Location Protocol [rfc2608bis] provides a scalable
-   framework for the discovery and selection of network services. Using
-   this protocol, computers using the Internet need little or no static
-   configuration of network services for network based applications.
-
-   SLP recommends the use of IPSec Authentication Headers [AH] for
-   authenticating service information. It also recommends the use of the
-   IPSec Encapsulating Security Payload [ESP] for causing SLP exchanges
-   to be private.
-
-   An addition to [rfc2608bis], the internet-draft "Upgrading to TLS
-   Within Service Location Protocol" (work in progress) [TLS] also
-   specifies a method for upgrading TCP connections to be encrypted.
-
-   The security discussion in section 15 of [rfcs608bis] enumerates the
-   security implications of using SLP for the discovery and selection of
-   network services. IPSec SHOULD be used in the manner described
-   whenever possible.
-
-   There are some situations where the use of IPSEC is not an option for
-   SLP. These include
-
-
-     1. SLP is being transported by a protocol stack other than IP. This
-        point includes the case where SLP is publishing information
-        about a service that is accessible only via non-IP media.
-
-     2. The SLP agent is running on a platform for which IPSec has not
-        been implemented, such as an embedded system.
-
-     3. SLP is being used within an application model that does not have
-        an affinity with IPSec security associations, such as with a
-        high-latency store-and-forward protocol or a many-to-one fanout
-        engine.
-
-   When using SLP in environments where IPSec AH is not avialable it is
-   still desirable to provide a means to authenticate SLP messages. This
-   document describes an optional SLP protocol extension for the genera­
-   tion and verification of signatures of SLP messages. It uses the Cry­
-   tographic Message Syntax [CMS] as the signature format.
-
-
-2  Applicability Statement
-
-   This extension SHOULD NOT be used with SLP when IPSec Authentication
-   Headers [AH] are available for use. IPSec Authentication Headers
-   SHOULD be used to authenticate SLP messages whenever possible, as
-   outlined in [rfc2608bis].
-
-
-
-Day                      Expires: 25 August 2003                [Page 2]
-\f
-Internet Draft           SLP Signature Extension             April 2003
-
-
-   When there is an acceptable mechanism for managing public keys in
-   place and when IPSec Authentication Headers are not available for
-   use, the signature extension MAY be used to authenticate SLP mes­
-   sages.
-
-   This extension is based upon the Cryptographic Message Syntax [CMS].
-   CMS requires distribution of key material to occur but does not spec­
-   ify how keys should be distributed. CMS supports different Public Key
-   algorithms and the use of Public Key Certificates. There are many
-   ways to distribute Certificates and other key material, and [CMS]
-   states that "The recipient MAY obtain the correct public key for the
-   signer by any means." Further, [CMS] states:
-
-     "[CMS] supports a wide variety of architectures for certificate-
-     based key management, such as the one defined by the PKIX working
-     group. [PROFILE]."
-
-   The selection and implementation of a public-key infrastructure is
-   beyond the scope of this document.
-
-   Assuming private keys are secret, the signature extension can provide
-   assurance that SLP messages originate from the purported host and
-   that they have not been modified in transit to the receiving host.
-
-
-2.1 Use with DAs
-
-   All SLP message are request-response tuples, even when using multi­
-   cast or broadcast. The signature extension works for direct exchanges
-   between two SLP agents. In such a case, the sender of an SLP message
-   signs that message and the receiver verifies the signature.
-
-   When using DAs, SLP transactions can involve three SLP agents and two
-   request-response tuples. For example, an SA registers service infor­
-   mation with a DA. Later, a UA requests that service information from
-   the DA.
-
-   In this case the UA and SA do not transact directly with each other
-   and, therefore, cannot derive mutual trust through the direct
-   exchange of signed messages. Instead, they communicate indirectly
-   through the DA.
-
-   Through administration of a public key infrastructure associative
-   trust between the UA and SA may be achieved through the DA. For this
-   to be achievable, the UA, SA, and DA must be configured with the same
-   root certificate authority, and must also be configured to reject SLP
-   signature extensions signed by a public key outside of the root of
-   trust. When this is the case, a UA and SA can derive associative
-   trust indirectly through signed messages via the DA.
-
-
-
-
-Day                      Expires: 25 August 2003                [Page 3]
-\f
-Internet Draft           SLP Signature Extension             April 2003
-
-
-2.2 Use with SLP Messages
-
-   The signature extension MAY be used with any SLP message.
-
-
-3  Signature Extension Format
-
-   The Signature Extension comprises an envelope for a Cryptographic
-   Message Syntax signed-data content type. (See section 5.1 of [CMS].)
-
-
-3.1 Signature Extension Fields
-
-   The Signature Extension has the following format:
-
-   0             1                   2                   3
-   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Extension ID = 0x000?        |Next Ext. Offset (must be zero)|
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | Offset, contd.|               CMS signed-data                 \
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-3.1.1 CMS signed-data Field
-
-   The CMS signed-data field contains the signature of the SLP message
-   and accompanying data. The format for the signed-data field is out­
-   lined in section 5.1 of [CMS]. It is a BER-encoded [X.209-88] buffer
-   that may include at least the following information:
-
-
-     1. Version of the CMS used to sign the message data.
-
-     2. Algorithms used to generate and sign the message digest.
-
-     3. Signed content, which includes a digest of the message data.
-
-     4.
-        Optional Signer information, which may include Public-Key Cer­
-        tificates. Signer attributes are subject to additional encoding
-        rules.
-
-   The list above is generalized. For example, if the signed-data field
-   contains variable-length attribute data that data must use special
-   additional rules. See [CMS] for precise details.
-
-
-
-
-
-
-
-Day                      Expires: 25 August 2003                [Page 4]
-\f
-Internet Draft           SLP Signature Extension             April 2003
-
-
-3.1.2 Size of signed-data Field
-
-   There is a paradox involving the size of the signed-data field and
-   the generation of the signed message digest.
-
-   The SLP header MUST be included in the input for the message digest
-   contained in the signed-data field. Because the SLP Header includes a
-   length field, the length of the message including the signature
-   extension must be part of the input into the message digest contained
-   in the signature extension.
-
-   The message digest and the signature of the message digest are fixed-
-   length fields and their length is known prior to generating the
-   signed digest. This makes it straightforward to calculate the length
-   of the SLP message, initialize the length field in the SLP header,
-   and then generate the signed message digest.
-
-
-3.2 Contents of signed-data Field
-
-   The CMS provides considerable flexibility when generating signed-data
-   content. For example, it allows multiple signers and multiple signa­
-   tures. It also allows a variable number and type of signer attributes
-   including certificates.
-
-   To be consistent with the goals of SLP UAs and SAs SHOULD keep the
-   signed-data field as simple as possible when generating signature
-   extensions. A simple signed-data field with only a message digest, a
-   signature of the message digest, and a subject key identifier makes a
-   prior calculation of the signed-data length simple and ensures that
-   generating and verifying signatures of SLP messages requires the
-   smallest possible overhead.
-
-   A signed-data field that contains only a signed message digest and a
-   subject key identifier can fit easily within the datagram MTU of most
-   network environments and does not represent an unusual field size
-   relative to other SLP fields. However, embellishing the signed-data
-   with additional variable length attributes may quickly cause the SLP
-   message to exceed the datagram MTU.
-
-
-3.3 Omission of eContent
-
-   The CMS referrs to the data being signed for authentication as "eCon­
-   tent." In this case, the eContent is an SLP Message minus the signa­
-   ture extension.
-
-   The CMS allows signed content to be either encapsulated within a
-   signed-data "envelope" or "external." The signature extension
-   requires the eContent to be "external."
-
-
-
-Day                      Expires: 25 August 2003                [Page 5]
-\f
-Internet Draft           SLP Signature Extension             April 2003
-
-
-   To quote from section 5.2 of [CMS]:
-
-     The optional omission of the eContent within the EncapsulatedCon­
-     tentInfo field makes it possible to construct "external signa­
-     tures."  In the case of external signatures, the content being
-     signed is absent from the EncapsulatedContentInfo value included in
-     the signed-data content type.  If the eContent value within Encap­
-     sulatedContentInfo is absent, then the signatureValue is calculated
-     and the eContentType is assigned as though the eContent value was
-     present.
-
-   In other words, the signed-data field will always contain a signed
-   digest of the SLP message but not the SLP message itself.
-
-
-4  Use of the Signature Extension
-
-   Subject to the applicability guidelines in section 2 above, the Sig­
-   nature extension can provide additional security to SLP by authenti­
-   cating the content SLP messages, including other SLP extensions. It
-   cannot provide privacy and it cannot authenticate the origin of IP
-   messages. IPSec [AH] is required to authenticate IP headers.
-
-
-4.1 Input to signed-data Field
-
-   When generating a signature extension for an SLP message, the follow­
-   ing data MUST be used as input to the message digest:
-
-
-     1. SLP Header and message.
-
-     2. Any SLP extension up to but not including the signature exten­
-        sion.
-
-     3. The Signature extension MUST be the last extension present in an
-        SLP message.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                      Expires: 25 August 2003                [Page 6]
-\f
-Internet Draft           SLP Signature Extension             April 2003
-
-
-4.1.1 Calculating the Length of a Signed SLP Message
-
-   The following steps should be used to calculate the length of an SLP
-   message that includes the signature extension.
-
-
-     1. Determine the length of the signature extension. The signature
-        extension will always be 6 bytes larger than the size of the CMS
-        signed-data field. If the signed-data field will contain any
-        variable length data such as signer attributes it will be neces­
-        sary to encode the signed-data field using a dummy message
-        digest and signature to obtain its length.
-
-     2. Determine the length of the SLP message, including the length of
-        the signature extension and all preceeding extensions.
-
-     3. Initialize the SLP Header with the length of the message.
-
-
-4.2 Signature Generation Process
-
-   The details of generating signatures for a CMS signed-data field are
-   contained in [CMS] sections 5.4 and 5.5. The following is an overview
-   for using CMS signed-data in the SLP signature extension. The details
-   for performing the individual steps are covered in [CMS].
-
-
-     1. Generate a message digest of the SLP message beginning with the
-        first byte of the SLP Header up to and including the last byte
-        of the message and extensions not including the signature exten­
-        sion. Note that if CMS signed attributes are to be included in
-        the signed-data field they too must be input to the message
-        digest. See [CMS] for details.
-
-     2. Generate a signature of the digest from step 1. The input to the
-        signature is the digest and the signer's private key.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                      Expires: 25 August 2003                [Page 7]
-\f
-Internet Draft           SLP Signature Extension             April 2003
-
-
-4.3 Signature Verification Process
-
-   The details of verifying signatures for a CMS signed-data field are
-   contained in [CMS] section 5.6. The following is an overview for ver­
-   ifying signatures in CMS signed-data fields within an SLP signature
-   extension.
-
-
-     1. Generate a message digest exactly as in step [1] in section 4.2
-        above.
-
-     2. The signer's public key must be obtained separately.
-
-     3. The input to the signature verification step is the digest gen­
-        erated in step 1 and the signers public key. The details depend
-        upon the exact signature algorithm employed but generally
-        include encrypting the locally generated digest with the signers
-        public key and comparing the result to the signature contained
-        in the message.
-
-
-5  Acknowledgements
-
-   James Kempf was instrumental in the development of this document.
-   Erik Guttman contributed the basic theory of using digital signatures
-   with SLP and offered valuable insights during the preparation of this
-   document.
-
-6  References
-
-
-[rfc2608bis]
-   Guttman, E., Kempf, J., Service Location Protocol, Version 2 (work in
-   progress). draft-guttman-svrloc-rfc2608bis-03.txt, August 2002.
-
-
-[TLS]
-   McDonald, Ira, Kempf, J., Day, M., "Upgrading to TLS With Service
-   Location Protocol", draft-mcdonald-svrloc-tls-00.txt (work in
-   progress).
-
-
-[AH]
-   Kent, S., and Atkinson, R., "IP Authentication Header," RFC 2402,
-   November, 1998.
-
-[ESP]
-   Kent, S., and Atkinson, R., "IP Encapsulating Security Payload
-   (ESP)," RFC 2406, November, 1998.
-
-
-
-
-Day                      Expires: 25 August 2003                [Page 8]
-\f
-Internet Draft           SLP Signature Extension             April 2003
-
-
-[CMS]
-   Housely, R., "Cryptographic Message Syntax", RFC 3369, August, 2002.
-
-
-[PROFILE]
-   Housley, R., Polk, W., Ford, W. and D. Solo, "Internet X.509 Public
-   Key Infrastructure: Certificate and CRL rofile", RFC 3280, April
-   2002.
-
-[X.209-88]
-   CCITT.  Recommendation X.209: Specification of Basic Encoding Rules
-   for Abstract Syntax Notation One (ASN.1).  1988.
-
-
-7  Author's Contact Information
-
-   Michael Day IBM 3039 Cornwallis Road Research Triangle Park, NC 27709
-   USA Phone:  +1 919 543-4283 Email:  mdday@us.ibm.com
-
-   Ira McDonald High North Inc 221 Ridge Ave Grand Marais, MI 49839 USA
-   Phone: +1 906 494-2434 Email: imcdonald@sharplabs.com
-
-
-8  Full Copyright Statement
-
-   Copyright (C) The Internet Society (2000-2002).  All Rights Reserved.
-
-   This document and translations of it may be copied and furnished to
-   others, and derivative works that comment on or otherwise explain it
-   or assist in its implementation may be prepared, copied, published
-   and distributed, in whole or in part, without restriction of any
-   kind, provided that the above copyright notice and this paragraph are
-   included on all such copies and derivative works.  However, this doc­
-   ument itself may not be modified in any way, such as by removing the
-   copyright notice or references to the Internet Society or other
-   Internet organizations, except as needed for the purpose of develop­
-   ing Internet standards in which case the procedures for copyrights
-   defined in the Internet Standards process must be followed, or as
-   required to translate it into languages other than English.
-
-   The limited permissions granted above are perpetual and will not be
-   revoked by the Internet Society or its successors or assigns.
-
-   This document and the information contained herein is provided on an
-   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
-   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
-   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MER­
-   CHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE."
-
-
-
-
-Day                      Expires: 25 August 2003                [Page 9]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Day                      Expires: 25 August 2003               [Page 10]
diff --git a/src/Unsupported/slp_client/doc/draft-day-svrloc-signature-01.nr.txt b/src/Unsupported/slp_client/doc/draft-day-svrloc-signature-01.nr.txt
deleted file mode 100644 (file)
index 734f83a..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-.\"-----------------------------------------------------------------
-.\" Registers to store heading levels as variables
-.\"-----------------------------------------------------------------
-.nr head1 0 1
-.nr head2 0 1
-.nr head3 0 1 
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-
-.\"-----------------------------------------------------------------
-.\" Return to header level 1, 2, etc. 
-.\" resets the level registers and indent
-.\"-----------------------------------------------------------------
-.de RETURN_HDR_1
-.nr head2 0 1
-.nr head3 0 1 
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_1 \\$1 
-..
-
-.de RETURN_HDR_2
-.nr head3 0 1 
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_2 \\$1
-..
-.de RETURN_HDR_3
-.nr head4 0 1
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_3 \\$1
-..
-
-.de RETURN_HDR_4
-.nr head5 0 1
-.nr head6 0 1
-.in 0 
-\.HDR_4 \\$1
-..
-
-.de RETURN_HDR_5
-.nr head6 0 1
-.in 0 
-\.HDR_5 \\$1
-..
-
-.\"-----------------------------------------------------------------
-.\" Create a level 1, 2, etc,.  heading 
-.\" resets indent, creates a TOC entry
-.\" Parameter is the title of the heading
-.\"-----------------------------------------------------------------
-.de HDR_1
-.sp 1
-.in 0 
-\\n+[head1]\\  \\$1
-.XS
-\\n[head1]\\  \\$1
-.XE
-.in 3
-.. 
-
-
-.de HDR_2
-.sp 1
-.in 0 
-\\n[head1]\\.\\n+[head2]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_3
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n+[head3]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_4
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n+[head4]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_5
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n+[head5]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n[head5]\\ \\$1
-.XE
-.in 3
-.. 
-
-.de HDR_6
-.sp 1
-.in 0 
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n[head5]\\.\\n+[head6]\\ \\$1
-.XS
-\\n[head1]\\.\\n[head2]\\.\\n[head3]\\.\\n[head4]\\.\\n[head5]\\.\\n[head6]\\ \\$1
-.in 3
-.XE
-.. 
-
-.\"-----------------------------------------------------------------
-.\" END MACRO DEFINITIONS
-.\"-----------------------------------------------------------------
-
-.pl 58
-.po 0
-.ll 72
-.lt 72
-.ds LF Day 
-.ds RF FORMFEED[Page %]^
-.ds CF 
-.ds LH INTERNET DRAFT
-.ds CH SLP Signature Extension
-.ds RH Exp. July 2003  
-.hy 0
-.ad l
-.in 0
-
-
-Internet Engineering Task Force                            Michael Day
-INTERNET DRAFT                                                     IBM
-23 February 2003                                Expires in six months
-
-.ce 1000
-Signature Extension for Service Location Protocol v2
-draft-day-svrloc-svrloc-signature-01.txt
-.ce 0
-.sp 5
-
-.in 0
-Status of This Memo
-.in 3
-This document is an Internet-Draft and is subject to
-all provisions of Section 10 of RFC2026.
-
-Internet-Drafts are working documents of the Internet Engineering
-Task Force (IETF), its areas, and its working groups.  Note that
-other groups may also distribute working documents as
-Internet-Drafts.
-
-Internet-Drafts are draft documents valid for a maximum of six
-months and may be updated, replaced, or obsoleted by other
-documents at any time.  It is inappropriate to use Internet-
-Drafts as reference material or to cite them other than as
-"work in progress."
-
-The list of current Internet-Drafts can be accessed at
-http://www.ietf.org/1id-abstracts.html
-
-The list of Internet-Draft Shadow Directories can be accessed at
-http://www.ietf.org/shadow.html
-
-This document is an individual contribution to the Internet
-Engineering Task Force (IETF). Comments should be submitted to the
-srvloc@srvloc.org mailing list.
-
-Distribution of this memo is unlimited.
-       
-.bp .HDR_1 Introduction 
-
-The Service Location Protocol, Version 2 [rfc2608bis] provides a
-flexible and scalable framework for provisioning network nodes with
-information on the existence, location, and configuration of networked
-services.
-
-[rfc2608bis] recommends using [IPSEC] to provide authentication and
-privacy to SLP messages, transported either upon UDP or TCP. [IPSEC]
-SHOULD be used with SLP. 
-
-This document outlines optional protocol extensions that MAY be used
-for authenticating SLP messages when [IPSEC] is not available in the
-environment. 
-
-As with all SLP protocol extensions, support for the signature
-extension is OPTIONAL and cannot be assumed present in the
-computing environment. 
-
-.HDR_2 Need\ for\ Authentication\ of\ SLP\ Messages
-
-[rfc2608] outlines the need for authentication of SLP messages in
-section 15. 
-
-.KS 
-.HDR_1 References 
-
-.IP [rfc2608bis] 3 
-Guttman, E., Kempf, J., "Service Location Protocol,
-Version 2", draft-guttman-svrloc-rfc2608bis-03.txt
-http://srvloc.sourceforge.net/new_drafts/draft-guttman-svrloc-rfc2608bis-03.txt
-
-.IP [IPSEC] 3 
-Kent, S., and Atkinson, R., "Security Architecture for the
-Internet Protocol," RFC 2401, November, 1998.
-
-.KE
diff --git a/src/Unsupported/slp_client/doc/draft-guttman-svrloc-rfc2608bis-03.txt b/src/Unsupported/slp_client/doc/draft-guttman-svrloc-rfc2608bis-03.txt
deleted file mode 100644 (file)
index 343822f..0000000
+++ /dev/null
@@ -1,2261 +0,0 @@
-
-
-Internet Engineering Task Force                  Erik Guttman
-INTERNET DRAFT                                    James Kempf
-Category: Standards Track
-Obsoletes: 2608
-August 4, 2002
-
-
-                  Service Location Protocol, Version 2
-                <draft-guttman-svrloc-rfc2608bis-03.txt>
-
-Status of this Memo
-
-   This document is an Internet-Draft and is in full conformance with
-   all provisions of Section 10 of RFC2026.
-
-   Comments on this document should be sent to the SLP discussion list,
-   srvloc-discuss@lists.sourceforge.net.
-
-   Internet-Drafts are draft documents of the Internet Engineering Task
-   valid for a maximum of six months and may be updated, replaced, or
-   obsoleted by other documents at any time.  It is inappropriate to use
-   Internet-Drafts as reference material or to cite them other than as
-   "work in progress."  See http://www.ietf.org/ietf/1id-abstracts.txt.
-   Find shadow directories at http://www.ietf.org/shadow.html.
-
-   Copyright (C) The Internet Society (2001).  All Rights Reserved.
-
-Abstract
-
-   The Service Location Protocol provides a scalable framework for the
-   discovery and selection of network services.  Using this protocol,
-   computers using the Internet need little or no static configuration
-   of network services for network based applications.  This is
-   especially important as computers become more portable, and users
-   less tolerant or able to fulfill the demands of network system
-   administration.  This document updates SLPv2, adding clarifications
-   and removing features which were neither widely implemented or deemed
-   useful.
-
-Acknowledgements
-
-   Authors of previous versions of SLP listed alphabetically are Mike
-   Day, Erik Guttman, Scott Kaplan, Charles Perkins and John Veizades.
-   Contributors to this version include (in alphabetical order) Kevin
-   Arnold, Erik Guttman, Evan Hughes, Terry Lambert, Jim Mayer, Ira
-   McDonald, Mikael Pahmp, Matt Peterson and Weibin Zhao.
-
-1. Introduction
-
-   The Service Location Protocol (SLP) provides a flexible and scalable
-   framework for provisioning network nodes with information on the
-
-
-
-Guttman & Kempf         Expires: 3 February 2003                [Page 1]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   existence, location, and configuration of networked services.  Users
-   have had to manually configure the location of services by typing in
-   their domain names or IP addresses.  SLP eliminates this requirement:
-   the user supplies the desired type of service and a set of attributes
-   that describe the service.  Based on that description, SLP returns
-   all required information to communicate with the service.
-
-   SLP is a dynamic configuration mechanism for applications in networks
-   under a common administration.  Client applications using SLP may
-   find available services offered by hosts attached on any network
-   within an enterprise.
-
-   This document obsoletes SLPv2 [RFC2608], correcting protocol errors
-   and removing some requirements.  A separate SLPv2 applicability
-   statement [SLPv2AS] describes both the protocol's domain of
-   applicability as well as the interoperability of this specification
-   with prior versions of the protocol.
-
-2. Terminology and Conventions used in this Document
-
-   Attribute
-      An Attribute consists of a tag and a list of typed values.  An
-      Attribute without a value list, called a "keyword" attribute, may
-      also appear. Attributes are used to describe instances of a
-      service type.
-
-   Directory Agent (DA)
-      A network element that collects and caches service advertisements.
-      There can only be one DA present per host.
-
-   Directory Agent (DA) Service Type
-      The Directory Agent Service Type is the service type
-      "service:directory-agent".  It is used to discover DAs.
-
-   Naming Authority
-      The agency or group that catalogues Service Types and Attributes.
-      The default Naming Authority is IANA.  Except for the default
-      Naming Authority, requires not describing string, a Naming
-      Authority is described by a short string.
-
-   Network Element
-      A software process capable of network communication.
-
-   Scope
-      A named collection of service advertisements, making up a logical
-      administrative group.
-
-   Service Advertisement
-      The set consisting of a Service Type, a Service URL, a list of
-      Scopes, a Language Tag, a List of Attributes and a lifetime,
-      indicating how long the advertisement is valid. This set serves to
-
-
-Guttman & Kempf         Expires: 3 February 2003                [Page 2]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-      describe the service and provide information on its location,
-      availability, and language locale.
-
-   Service Agent (SA)
-      A network element working on the behalf of services to advertise
-      them.
-
-   Service Agent (SA) Service Type
-      The Service Agent Service Type is the service type
-      "service:service-agent". It is used to discover and advertise SAs.
-
-   Service Template
-      A structured description of a service, including the Service Type,
-      Service URL, and Attributes. See [RFC2609].
-
-   Service Type
-      A short string describing the service.  Each type of service has a
-      unique Service Type string.  The default service type for a
-      'generic' URI is its scheme name.  For example, the service type
-      string for "http://www.srvloc.org" is "http".
-
-   Service URL
-      A Service URL serves two functions in SLP.  First, it is a handle
-      to refer to a service advertisement, for purposes of registration,
-      deregistration or requesting associated attributes.  Second, the
-      Service URL may indicate the location of a service.  A service URL
-      may be of the service: scheme [RFC2609] or any other scheme
-      conforming to the URI standard [RFC2396].
-
-   User Agent (UA)
-      A network element working on the user's behalf to establish
-      contact with some service.  The UA retrieves service information
-      from the Service Agents (SAs) or DAs.
-
-   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
-   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" and "OPTIONAL" in this
-   document are to be interpreted as described in [RFC2119].
-
-   In packet diagrams, an explicit length field may be followed by a
-   variable length field. Variable length fields are terminated by a
-   backslash ('\').  Fields are not aligned to 4 byte boundaries.
-
-3. Protocol Overview
-
-   In SLP, service discovery support for a client application is
-   provided by  a UA.  Service advertising support for a service is
-   provided by an SA.  A third network element, the DA, provides
-   scalability to the protocol.
-
-   To discover a service using SLP, the UA MUST issue a Service Request
-   (SrvRqst) on behalf of a client application.  The SrvRqst specifies
-
-
-Guttman & Kempf         Expires: 3 February 2003                [Page 3]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   the characteristics of a service required by the client.  The UA MUST
-   receive one or more Service Reply (SrvRply) specifying the location
-   of all services in the network that match the conditions supplied in
-   the SrvRqst, if the request was successful.
-
-   The SLP framework allows a UA to directly issue requests to SAs.
-   Such requests SHOULD be multicast.  A SA MUST unicast a reply to the
-   UA, containing a Service URL and other information, if the SA
-   advertises a service matching the request.
-
-      +------------+ ----Multicast SrvRqst----> +---------------+
-      | User Agent |                            | Service Agent |
-      +------------+ <----Unicast SrvRply------ +---------------+
-
-   In larger networks, one or more DAs are used.  A DA functions as a
-   cache.  If DAs are in use, SAs MUST send Service Registration
-   (SrvReg) messages, containing all the services they advertise to DAs.
-   SAs MUST receive Service Acknowledgements (SrvAck) messages in reply.
-   Advertisements registered with DAs MUST be refreshed or they will
-   expire, since each advertisement has a finite lifetime.  If DAs are
-   in use, UAs MUST unicast requests to a DA instead of multicasting.
-   Deploying DAs thereby  helps reduce the amount of multicast datagrams
-   in a network.
-
- +-------+ -Unicast SrvRqst-> +-----------+ <-Unicast SrvReg- +--------+
- | User  |                    | Directory |                   |Service |
- | Agent |                    |   Agent   |                   | Agent  |
- +-------+ <-Unicast SrvRply- +-----------+ -Unicast SrvAck-> +--------+
-
-   There are three possible ways for UAs and SAs to discover DAs.  In
-   each case, the agent obtains a DA Advertisement (DAAdvert):
-
-    1) Issue a multicast SrvRqst for the DA Service Type when they start
-       up, and receive a unicast advertisement in reply,
-
-    2) Listen for unsolicited advertisements that are  sent periodically
-       by Directory Agents,
-
-    3) Obtain Directory Agent addresses via DHCP or static
-       configuration, issue a unicast SrvRqst for the Directory Agent
-       Service Type, and receive a unicast DAAdvert in reply.
-
-        +---------------+ --Multicast SrvRqst-> +-----------+
-        |    User or    | <--Unicast DAAdvert-- | Directory |
-        | Service Agent |                       |   Agent   |
-        +---------------+ <-Multicast DAAdvert- +-----------+
-
-   Service advertisements are grouped into named sets called 'scopes'.
-   Scope names are expressed as strings. A scope can indicate a
-   location, administrative grouping, proximity in a network topology or
-   some other category. The mapping between service advertisements and
-
-
-Guttman & Kempf         Expires: 3 February 2003                [Page 4]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   scopes is at the discretion of the network administrator.  SAs and
-   DAs MUST be configured with scopes.
-
-   A UA MAY be assigned scopes, in which case the UA is only able to
-   discover that particular grouping of services.  This allows a network
-   administrator to assign services to particular groups of users.
-   Alternatively, the UA MAY be configured with no scope at all.  In
-   that case, the UA MUST discover all available scopes and a client
-   application may issue requests for any service available on the
-   network.
-
-   In the following figure, the UA is configured with scopes X and Y. If
-   a service is sought in scope X, the request MUST be multicast because
-   no DA supports scope X. If a service is sought in scope Y, the
-   request MUST be unicast to the DA.  If the request is made in both
-   scopes, the request MUST be both unicast and multicast.
-
-   +---------+   Multicast  +-----------+   Unicast   +-----------+
-   | Service | <--SrvRqst-- |   User    | --SrvRqst-> | Directory |
-   |  Agent  |              |   Agent   |             |   Agent   |
-   | Scope=X |   Unicast    | Scope=X,Y |   Unicast   |  Scope=Y  |
-   +---------+ --SrvRply--> +-----------+ <-SrvRply-- +-----------+
-
-3.1 SLP Message Types
-
-   Table 1 contains a brief summary of all SLP, along with the
-   requirement level for the SLP agents. SAs MUST accept multicast and
-   unicast SrvRqsts.  SAs SHOULD accept Attribute Requests (AttrRqsts),
-   see Appendix B.  SAs MAY accept Service Type Requests (SrvTypeRqsts).
-   SAs MUST listen for unsolicited multicast DA Advertisements. DAs MUST
-   support all required and optional SLP message types in the table.  In
-   the absence of multicast routing support in a network, broadcast MAY
-   be used.
-
-+----------------------+----+----+-----+-----+-------------------------+
-| Message              |CODE| UA | SA  | DA  | Purpose                 |
-+----------------------+----+----+-----+-----+-------------------------+
-| Service Register     |  3 |    | MUST| MUST| Register a service (url,|
-| (SrvReg)             |    | NA | send| recv| attrs, etc.) with a DA. |
-+----------------------+----+----+-----+-----+-------------------------+
-| Service Deregister   |  4 |    | MAY | MUST| Deregisters a service   |
-| (SrvDereg)           |    | NA | send| recv| from a DA.              |
-+----------------------+----+----+-----+-----+-------------------------+
-| Service Acknowledge  |  5 |    | MUST| MUST| Contains a DA's response|
-| (SrvAck)             |    | NA | recv| send| to SrvReg and SrvDereg. |
-+----------------------+----+----+-----+-----+-------------------------+
-| Service Request      |  1 |MUST| MUST| MUST| Requests services that  |
-| (SrvRqst)            |    |send|s & r| recv| match query criteria.   |
-+----------------------+----+----+-----+-----+-------------------------+
-| Service Reply        |  2 |MUST| MUST| MUST| Returns services that   |
-| (SrvRply)            |    |recv| send| send| match query criteria.   |
-
-
-Guttman & Kempf         Expires: 3 February 2003                [Page 5]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-+----------------------+----+----+-----+-----+-------------------------+
-| DA Advertisement     |  8 |MUST| MUST| MUST| Contains location, DA   |
-| (DAAdvert)           |    |recv| recv| send| attributes and more.    |
-+----------------------+----+----+-----+-----+-------------------------+
-| SA Advertisement     | 11 |MAY | MUST|     | Contains location, SA   |
-| (SAAdvert)           |    |recv| send| NA  | attributes and more.    |
-+----------------------+----+----+-----+-----+-------------------------+
-| Service Type Request |  9 |MAY | MAY | MUST| Requests available      |
-| (SrvTypeRqst)        |    |send| recv| recv| service types.          |
-+----------------------+----+----+-----+-----+-------------------------+
-| Service Type Reply   | 10 |MAY | MAY | MUST| Contains all available  |
-| (SrvTypeRply)        |    |recv| send| send| service types.          |
-+----------------------+----+----+-----+-----+-------------------------+
-| Attribute Request    |  6 |MAY |SHOULD MUST| Requests attributes for |
-| (AttrRqst)           |    |send| recv| recv| a particular service.   |
-+----------------------+----+----+-----+-----+-------------------------+
-| Attribute Reply      |  7 |MAY |SHOULD MUST| Contains all attributes |
-| (AttrRply)           |    |recv| send| send| of a particular service.|
-+----------------------+----+----+-----+-----+-------------------------+
-
-     Table 1 - Summary of Required and Optional SLP Message Types and
-                             Requirement Level
-
-4. Protocol Elements
-
-All integer fields in SLP messages MUST be in network byte order.
-
-4.1 Error Codes
-
-If the Error Code in a SLP reply message is nonzero, the rest of the
-message MAY be truncated.  No data is necessarily transmitted or should
-be expected after the header and the error code, except if some optional
-extensions are sent to clarify the error.
-
-Errors MUST be return for unicast requests.  Multicast requests that
-result in an error MUST BE silently discarded. A reply MUST NOT be sent
-if a multicast request results in an error.
-
-The following is a list of SLP error codes. Error codes marked with a
-'*' can be returned in response to any request message, all others are
-returned only for specific messages. Error codes returned for specific
-messages are described in the sections where the messages are specified.
-
-OK *                    0  The request was successful.
-
-LANGUAGE_NOT_SUPPORTED  1  The request could not be processed
-                           due to the Language Lag.  Resending
-                           the request SHOULD NOT fail if
-                           the default Language Tag 'en' is
-                           used.
-
-
-
-Guttman & Kempf         Expires: 3 February 2003                [Page 6]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-PARSE_ERROR *           2  The message fails to obey SLP syntax.
-                           The error may be due to misalignment
-                           in the binary format of the message, a
-                           missing header Language Tag, a syntax
-                           error in the header Language Tag, or a
-                           syntax error in a message-specific
-                           string such as a service query or
-                           scope string.
-
-INVALID_REGISTRATION    3  A problem occurred with the parameters
-                           of a SrvReg or SrvDereg message, other
-                           than with the syntax of string parameters.
-
-SCOPE_NOT_SUPPORTED *   4  The scope-list lacks a supported scope.
-
-VER_NOT_SUPPORTED *     9  The SLP version number is not supported.
-
-INTERNAL_ERROR *       10  The DA or SA failed for some reason.
-
-DA_BUSY_NOW *          11  The DA is currently busy processing other
-                           requests.  The UA or SA SHOULD retry,
-                           using exponential back off.
-
-OPTION_NOT_UNDERSTOOD *12  The DA or SA received an unknown SLP
-                           option from the mandatory range.
-
-INVALID_UPDATE         13  A SrvReg was received without the
-                           FRESH bit set.
-
-MSG_NOT_SUPPORTED      14  The SA received an unsupported request.
-
-REFRESH_REJECTED       15  The SA sent a SrvReg with too low a lifetime.
-                           The SA SHOULD consult the DA's minimum
-                           refresh interval attribute (Section 9.4)
-                           for the minimum advertisement lifetime.
-
-4.2 SLP Message Header
-
-      0                   1                   2                   3
-      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |    Version    |     Code      |            Length             |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     | Length, contd.|O|F|R|       Reserved          |Next Ext Offset|
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |  Next Extension Offset, contd.|              XID              |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |      Language Tag Length      |         Language Tag          \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-   All SLP messages begin with this header.
-
-
-Guttman & Kempf         Expires: 3 February 2003                [Page 7]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-    - Version:
-      This field MUST be set to 2.  Else, a VER_NOT_SUPPORTED error
-      results.
-
-    - Code:
-      Identifies the messsage type, see Table 1.  Any value outside
-      those defined in Table 1 or standards track protocols extending
-      SLP MUST be treated as a PARSE_ERROR result.
-
-    - Length:
-      Three byte unsigned integer containing the number of bytes in the
-      SLP message including the header.
-
-    - Flags:
-      O     Field is (0x80).  "OVERFLOW" MUST be set to 1 when a message
-            length exceeds the path MTU and the message contents doesn't
-            fit into a datagram.  See Section 5.1.3.  Otherwise, MUST be
-            0.
-
-      F     Field is (0x40).  "FRESH" MUST be set to 1 on every SrvReg.
-            Otherwise, MUST be 0.
-
-      R     Field is (0x20).  "REQUEST MCAST" MUST be set when
-            multicasting or broadcasting requests.  Otherwise, MUST be
-            0.
-
-      Reserved
-            This bits MUST be set to zero on transmission and ignored on
-            reception. See Section 4.5.
-
-    - Next Extension Offset:
-      MUST be set to 0 unless the message has any extensions.  If the
-      message has extensions, MUST contain the offset from the beginning
-      of the message, in bytes, to the first extension header.
-      Extensions SHOULD come after the message body.  See Section 7.1.
-
-    - XID:
-      The Transaction Identifier MUST be set to a unique value for each
-      unique request.  See Section 9 for the special case of unsolicited
-      DAAdverts.
-
-    - Lang Tag Length:
-      Two byte unsigned integer giving the length in bytes of the
-      Language Tag field.  MUST NOT be zero.
-
-    - Language Tag:
-      MUST contain a variable length field, RFC 3066 [RFC3066] language
-      local string.  This specifies the language locale for all human
-      readable strings in the message.  See Section 14.
-
-   A PARSE_ERROR results if the header is syntactically incorrect.
-
-
-Guttman & Kempf         Expires: 3 February 2003                [Page 8]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-4.3 Strings
-
-   Strings in SLP messages MUST be encoded using UTF-8 [RFC2279].
-   Strings MUST not be null terminated and MUST always be preceded by a
-   two byte unsigned length field indicating the number of bytes that
-   follow.  Optional strings MAY be omitted.  In this case, the Length
-   field is set to zero and the string MUST be absent.
-
-   The specifications for the syntax of string-based protocol elements
-   in this document conform to ABNF [RFC2234].
-
-4.3.1 General String Comparisons
-
-   String comparisons MUST NOT be case sensitive. For example "STRING1"
-   is equal to "String1" and is also equal to "string1".  This
-   corresponds to the LDAPv3 string matching rule caseIgnoreMatch.
-   [RFC2252]
-
-   WARNING! SPECIAL CASE: caseIgnoreMatch specifies that leading and
-   trailing spaces in strings are elided before string comparison is
-   performed.  This feature is not supported in SLPv2.  White spaces in
-   strings MUST NOT be elided for the purposes of string comparison.
-   For example, "string1 " is not equal " string1" nor is it equal to
-   "string1".
-
-   In practice this means that (a) UTF-8 based strings are converted to
-   Unicode, (b) comparisons are done on the basis of numerical magnitude
-   ordering except that (c) case folding occurs according to specific
-   code page rules.  'a' (0x0041) and 'A' (0x0061) are equivalent, as
-   are "u umlaut" (0x00db) and "U umlaut" (0x00fb), both offset by 0x20.
-   Note that on other code pages the offset is different - as Cyrillic
-   "e accent aigue" (0x4400) and "E accent aigue" (0x4450) are offset by
-   0x50!
-
-4.3.2 Lists
-
-   A List is a comma delimited set of strings, which can be of zero
-   length.  Since the list is comma delimited, the comma is a reserved
-   character in string list items.  A comma must be escaped to be
-   considered as a data item.  For example "a\2Cb,c\2Cd" is a string
-   list with two items "a\2Cb" and "c\2Cd".  These items include escaped
-   commas; un-escaped they are "a,b" and "c,d" respectively.
-
-4.3.3 Previous Responder List
-
-   The Previous Responder List (PR List) is a List of dotted decimal
-   notation IPv4 addresses.
-
-   When SLP messages are unicast, PR lists MUST be ignored.  When SLP
-   SrvRqst, SrvTypeRqst, and AttrRqst messages are multicast, they
-   SHOULD contain a PR List (see Section 4.3.1) indicating all
-
-
-Guttman & Kempf         Expires: 3 February 2003                [Page 9]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   responders from which the sender has received replies.  Each
-   responder's IP address (in dotted decimal form) SHOULD be added to
-   form the new List before the request is multicast again.
-
-   Any DA or SA that sees its address in the PR List SHOULD NOT respond
-   to the request. PR Lists MUST NOT be used with unicast requests.
-
-   A multicast request message with a PR List SHOULD be retransmitted
-   until either: a) no further responses are elicited, b) the PR List
-   and the request will not fit into a single datagram, or: c)
-   CONFIG_MC_MAX seconds have elapsed.
-
-   A syntax error in a PR List results in a PARSE_ERROR, and the
-   response is suppressed because PR Lists are only be used with
-   multicast requests.
-
-4.3.4 Service Type
-
-   The Service Type is a string parameter in SrvRqst and SrvReg
-   messages. The syntax of the Service Type is:
-
-      service-type       = generic-uri-scheme / service-scheme
-      generic-uri-scheme = ALPHA *( alpha / digit / '+' / '-' / '.' )
-      service-scheme     = "service:" type ['.' na ] [':' type ]
-      type               = 1*(alpha / digit / '+' / '-' )
-      na                 = 1*(alpha / digit / '+' / '-' )
-                          ; The naming authority field SHOULD have the
-                          ; form described in [vendorext]
-
-   Service Types MUST match with case insensitive string comparison.
-
-   WARNING! SPECIAL CASE:  If the "service:" scheme [RFC2609] is used,
-   special matching rules apply.
-
-   A service type string which begins with "service:" is followed by
-   either one or two "type" fields.
-
-   The first type field after the "service:" scheme MAY have a naming
-   authority string associated with it.  If so, the type is considered
-   unique.  Example: "service:a" does not match "service:a.93439".  This
-   naming authority field allows for vendor extension and is NOT
-   RECOMMENDED. [vendorext] The default Naming Authority is IANA. A
-   Service Type that is registered with IANA MUST NOT contain a Naming
-   Authority string.
-
-   A service type string beginning with "service:" followed by one type
-   field will match service type strings of that form, whether they have
-   one or two type fields which follow.  Example: "service:a" matches
-   "service:a" and "service:a:b".  And: "service:a.1234" matches
-   "service:a.1234:b" but it does not match "service:a:b".
-
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 10]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   A syntax error in a Service Type name MUST result in the return of a
-   PARSE ERROR to the sending agent, if the request was unicast.
-
-4.3.5 Scope List
-
-   With two exceptions, all requests, service advertisement
-   registrations, and service advertisement deregistrations MUST contain
-   a Scope List.  SLP messages that fail to contain a Scope list or that
-   contain a Scope List having no Scopes for which the receiving agent
-   is configured MUST BE either dropped, if the request was multicast,
-   or result in a SCOPE_NOT_SUPPORTED error in reply, if the request was
-   unicast.
-
-   The two exceptions are SrvRqsts for the DA Service Type and for the
-   SA Service Type. These MAY be transmitted without a Scope List if the
-   transmitting agent is interested in obtaining a list of all
-   configured Scopes supported by the replying DA or SA.
-
-   Scope Lists in SLPv2 are a comma delimited list of scope strings.
-   Scope strings have reserved characters which must be expressed as
-   escape values if they are to be included in the scope name.
-
-      reserved   = '(' / ')' / ',' / '\' / '!'  / '<' / '=' / '>' /
-                  '~' /CTL / ';' / '*' / '+'
-      escape-val = '\' HEXDIG HEXDIG
-
-   For example the scope name "ou=sales,o=examplecorp" would have to be
-   represented "ou\3Dsales\2Co\3Dexamplecorp" to escape the "=" and ","
-   characters in the name.
-
-   If a syntax error in a Scope List or Scope name is encountered, the
-   receiving agent MUST return a PARSE ERROR if the request was unicast.
-
-   The default value for the Scope List is the Scope name "DEFAULT".
-   Scope configuration rules are described in Section 8.0.
-
-4.3.6 Attribute List
-
-   A service advertisement is often accompanied by Attributes.  A UA
-   formulates a service query containing Attributes in order to select
-   particular service advertisements.
-
-   A Service Type MAY specify allowable Attributes through a defined
-   service template [RFC2609]. The allowable Attributes for such a
-   service are defined in the service template. Services that are
-   advertised according to a standard template SHOULD register all
-   service Attributes required by the standard template. If no service
-   template is available for a Service Type, then any Attributes are
-   allowed. Support for service templates is optional.
-
-   An Attribute List is a string encoding of the Attributes for a
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 11]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   service advertisement.  The following grammar defines the Attribute
-   list syntax:
-
-      attr-list  = attribute / attribute ',' attr-list
-      attribute  = '(' attr-tag '=' val-list ')' / attr-tag
-      val-list   = attr-val / attr-val ',' val-list
-      attr-tag   = 1*safe-tag / nonstd-tag
-      nonstd-tag = "x-" enum '-' 1*safe-tag
-      enum       = 1*DIGIT
-                     ; The <enum> field corresponds to an Enterprise
-                     ; Number registered with IANA. [IANA] Using this
-                     ; prefix avoids collisions in interpretation of
-                     ; nonstandard attribute name.
-      attr-val   = intval / strval / boolval / opaque
-      intval     = [-]1*DIGIT
-      strval     = 1*safe-val
-      boolval    = "true" / "false"
-      opaque     = "\FF" 1*escape-val
-      safe-val   = ; Any character except reserved.
-      safe-tag   = ; Any character except reserved, '*' and bad-tag.
-      reserved   = '(' / ')' / ',' / '\' / '!'  / '<' / '=' / '>' / '~' / CTL
-      escape-val = '\' HEXDIG HEXDIG
-      bad-tag    = CR / LF / HTAB / '_'
-
-   An Attribute List MUST be scanned prior to evaluation for all
-   occurrences of the escape character '\'.  Reserved characters MUST be
-   escaped while other characters MAY be escaped.  All escaped
-   characters MUST be restored to their value before attempting string
-   matching.  Escaped Opaque values are converted into bytes, not into
-   characters.
-
-   The following list contains more detail on the various types of
-   Attributes:
-
-      Boolean      A Boolean Attribute MUST have a value list that is
-                   one of the Boolean constants "true" or "false". A
-                   Boolean value list MUST only have a single value and
-                   MUST only be compared with '='.  As with all
-                   strings, the Boolean constants are case insensitive.
-
-      Integer      An Integer Attribute MUST have a value list
-                   consisting of Integer constants. Integer constants
-                   MUST be strings that take the form [-] 1*DIGIT and
-                   fall in the range "-2147483648" to "2147483647",
-                   that is, the range of 32 bit signed integers.
-                   Integer values MUST be compared using integer
-                   comparison.
-
-      Opaque       An Opaque Attribute MUST have a value list
-                   consisting of opaque values. Opaque values are
-                   sequences of bytes.  These MUST be distinguished
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 12]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-                   from strings since they begin with the sequence
-                   "\FF".  Unescaping this sequence results in an
-                   illegal UTF-8 encoding, indicating that what follows
-                   is a sequence of escaped bytes and not a UTF-8
-                   string.  For example, a '0' byte is encoded
-                   "\FF\00" and "\ff\00\00\30\39" is a
-                   bigendian representation of 12345.  Opaque values
-                   MUST only be compared with '='.
-
-      String       All other string values are String type. String
-                   values MUST be matched using strict lexical
-                   ordering.   Example of string values with
-                   escaped characters: "Hello\0a" (Hello with
-                   a newline) and "\48\65\6c\6c\6f\0a"
-                   (the same string, entirely escaped).  To
-                   include reserved characters as string data
-                   they must be escaped.  Example "a,b" is "a\40b".
-                   Illegal UTF-8 characters MUST NOT be included
-                   in Strings, ie. "a\ff" is illegal.
-
-      Keyword      A Keyword Attribute has only a tag. A Keyword
-                   Attribute MUST be designated by attr-tag in the
-                   Attribute List, and it MUST have no values.
-
-   Syntax errors in the Attribute List MUST result in a PARSE ERROR,
-   which is returned if the request was unicast.
-
-   When values are advertised by a SA or are registered in a DA, they
-   MUST take on implicit typing rules for matching incoming requests,
-   according to the types described above. Stored value types in
-   Attribute Lists MUST be consistent, i.e., x=4,true,sue,\ff\00\00 is
-   in error. Inconsistent stored value types in a SrvReg MUST result in
-   a PARSE ERROR returned to the SA.
-
-   A DA MUST consolidate multiple instances of the same Attribute within
-   an Attribute List before storing and an SA MUST consolidate multiple
-   instances before sending the Attribute in an AttrRply. For example,
-   if the Attribute List received by a DA is:
-
-      "(x=5,6,7),(y=a,b,c),(x=6,7,8)"
-
-   one Attribute, "x", is stored having value list "5,6,7,8".
-
-   Embedded blanks in Attribute tags and value lists MUST be processed
-   as part of the tags or values in which they appear, embedded blanks
-   MUST NOT be ignored. For example, in the Attribute List "(attra =
-   -345)", the Attribute tag is "attra " and the value is the String "
-   -345". The value is not an Integer due to the embedded blank.
-
-
-
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 13]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-4.3.7 Search Filter
-
-   A SrvRqst message MAY include a LDAPv3 Search Filter [RFC2254], with
-   certain restrictions. RFC 2254 describes the syntax of LDAPv3 Search
-   Filters.
-
-   A DA MUST accept any LDAPv3 query, excluding those with extensible
-   matching rules.  A SA MAY accept only simple queries; otherwise, it
-   MUST accept service queries as a DA would.  A UA SHOULD send only
-   simple queries.
-
-   The syntax for a simple query is:
-
-         simple-query  =  conjoin / term
-         conjoin       =  "(&" term-list ')'
-         term-list     =  term term-list / term
-         term          =  '(' tag querytype item ')' / '(' tag "=*)"
-                          ; The "=*" term tests if the Attribute is
-                          ; present.
-         tag           =  1*tag-safe
-         querytype     =  '='  / "~=" / ">=" / "<="
-                          ; These correspond to equal, approx,
-                          ; greater than or equal, less than or
-                          ; equal.
-         item          =  value / substring
-                          ; Only substring matching is supported.
-         value         =  1*val-safe
-         substring     =  [ value ] any [ value ]
-         any           =  '*' *(value "*")
-         tag-unsafe    =  val-unsafe / CR / LF / HTAB / '_'
-         tag-safe      =  ; All UTF-8 characters are included except
-                          ; those in tag-unsafe.  Tag-unsafe must be
-                          ; escaped.
-         val-unsafe    =  '(' / ')' / ',' / '´ / '!'  / '<' / '=' /
-                          '>' / '~' / CTL
-         val-safe      =  ; All UTF-8 characters are included
-                          ; except those in val-unsafe. Val-unsafe
-                          ; must be escaped.
-         escaped       =  '´ HEXDIG HEXDIG
-
-   Attribute tags and String values MUST be case-folded before
-   performing string matching, as per Section 4.3.1.   Matching rules
-   for other types are as described in 4.3.6.
-
-   If a Service Template [RFC2609] is available, the Service Template
-   SHOULD be used to guide matching of types. If no Service Template is
-   available, for ordered string matching, values MUST be matched using
-   an implicit type system.
-
-   If the Attribute in the query has been registered with multiple
-   values, the query MUST be compared to each value and the results MUST
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 14]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   be combined with logical 'OR', i.e., "(x=\ff\00)" matches an
-   advertisement of (x=\ff\33,\ff\00); "(Y<=0)" matches (y=0,-1).
-   Keywords (i.e., Attributes without values) MUST be matched with a
-   "presence" query, as in "(keyword=*)".
-
-   WARNING! SPECIAL CASE:  Ordering comparisons with strings and
-   integers is subtle.  Integer comparison is only used if both values
-   are integers.  Since implicit type matching is done, this can lead to
-   unexpected results.
-
-   Values of ['-']1*DIGIT MUST be treated as integers, so a service
-   advertisement with Attribute List "(x=12),(y=-55)" would match the
-   query "(&(x>=6)(y<=-44))".  Note that integers MUST NOT match
-   strings, for example, the search query "(x=34*)" matches an Attribute
-   List "(x=34foo)", but not "(x=3432)" since the first value is a
-   String while the second value is an Integer. Embedded blanks MUST NOT
-   be ignored. For example, the query "(&(x= -345)(y=7))" matches the
-   service advertisement with Attribute List "(x= -345)" but not the
-   service advertisement with Attribute List "(x=-345)".  See Section
-
-   Examples: Given an attribute list "(a=12),(b=10,100),(c=100foo)", the
-   query "(a<=16)" is a match.  The query "(a<=100 )" is not a match,
-   since "100 " is a string, so the value "12" must be treated as a
-   string and "100 " is less than "12" by string ordering.  The filter
-   "(b<=20)" matches, because y can be 10, but "(b<= 1000)" does not
-   match: " 1000" begins with a string and space (0x20) is less than
-   "1", the first character of "10" and "100" values of b.  The filter
-   "(c<=2)" matches because c is a string, starting with "1".
-
-   A syntax error in a service query results in a PARSE_ERROR.
-
-4.3.8 Attribute Tag List
-
-   This is a List of Attribute tags, defined as attr-tag the grammar of
-   Section 4.3.4 above. In addition, an member of the list may contain a
-   wild-card according to the following grammar:
-
-         wild-card = ['*'] attr-tag ['*']
-
-4.4 URL Entry
-
-      0                   1                   2                   3
-      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |   Reserved    |          Lifetime             |   URL Length  |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |URL len, contd.|            URL (variable length)              \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |     BC-0      |
-     +-+-+-+-+-+-+-+-+
-
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 15]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   SLP stores URLs in protocol elements called URL Entries, which
-   associate a URL with a lifetime.
-
-Lifetime
-   An unsigned two byte integer giving the lifetime during which the URL
-   is valid (that is, may be cached), in seconds.
-
-URL Length, URL String
-   The Length MUST NOT be zero, the URL MUST NOT be omitted.
-
-4.5 Reserved and Backward Compatibility
-
-Fields marked as Reserved in protocol messages MUST be set to zero on
-transmission and ignored on reception. Fields marked Backward
-Compatibility (or BC with a number) MUST be treated similarly, except
-where compatibility with previous specifications of SLP is being
-provided. [SLPv2AS] provides more details on backward compatibility.
-
-5. Required Features
-
-This section lists requirements for any conforming implementation of
-SLP.  All requirements are identified by a letter (U, S or D, for UA, SA
-or DA requirement) and a number, throughout this specification.
-
-A minimal implementation may consist of either a UA or SA or both.  A DA
-is not required for SLP to function, but if it is present, the UA and SA
-MUST interact with it as defined below.
-
-A UA MUST be able to [U1] issue SrvRqst messages and [U2] interpret
-SrvRply messages.  These messages are transported via either [U3]
-unicast requests to DAs if one is available (in the desired Scope) using
-UDP or [U4] multicast requests if no DA is available (in the desired
-Scope).  A UA MUST [U5] perform DA discovery initially, then either
-periodically or passively if no DA is known, interpreting DAAdvert
-messages.  A UA MUST also [U6] be configurable with a Scope list and DA
-locations.
-
-A SA MUST be able to [S1] advertise a set of services, [S2] receive and
-process unicast and multicast SrvRqsts.  A SA MUST process Search
-Filters unless it only ever advertises services without Attributes.  A
-[S3] SrvRply message is sent in reply to all SrvRqst messages, except a
-[S4] SAAdvert is returned for requests for the SA Service Type.  A SA
-MUST perform [S5] active DA discovery initially, then either
-periodically or passively, interpreting DAAdvert messages.  A SA MUST
-[S6] register all currently advertised services with DAs as they are
-discovered, then periodically if appropriate, before they expire.  A SA
-MUST be [S7] be configurable with a Scope List and DA locations.
-
-A DA MUST receive and process unicast requests [D1] SrvRqst, [D2]
-SrvTypeRqst and [D3] AttrRqst, for which they MUST send replies [D4]
-SrvRply, [D5] SrvTypeRply and [D6] AttrRply, respectively.  The only
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 16]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-exception is a SrvRqst for the DA Service Type, to which the DA responds
-with a [D7] DAAdvert.  These same DAAdverts are [D8] multicast initially
-and periodically.  A DA MUST [D9] process SrvReg messages and cache
-service advertisements registered, [D10] expire cached services when
-lifetimes expire and [D11] process SrvDereg messages to remove specified
-cached services.  A DA MUST be [D12] configurable with a Scope List.
-
-5.1 Transport of SLP Messages
-
-SLP messages MUST be sent using one of four different transport
-algorithms:
-
-(1) Multicast requests soliciting unicast replies
-(2) Unicast UDP requests soliciting unicast UDP replies
-(3) TCP requests soliciting TCP replies
-(4) Multicast unsolicited announcements
-
-The reserved listening port for SLP is 427, for both UDP and TCP.  This
-is the destination port for all SLP messages.  SLP messages MAY be
-transmitted on an ephemeral port by UAs.  DAs and SAs MUST send replies
-and acknowledgement messages from port 427 to the port from which the
-request was issued.
-
-The PR List SHOULD be used to provide a very limited form of reliable
-multicast.  By default, the PR List is empty.
-
-Retransmitted requests use the same XID. This allows a DA or SA to
-briefly cache the reply to the original request and then send the cached
-reply again, should a duplicate request arrive.  XIDs SHOULD be randomly
-chosen to avoid duplicate XIDs in requests if UAs restart frequently.
-
-5.1.1 UDP Message Transmission
-
-Requests sent using UDP MUST NOT exceed the maximum transmission unit.
-The default maximum transmission unit for UDP messages is 1400 bytes
-excluding UDP and other headers. If a SLP reply message does not fit
-into a UDP datagram it MUST be truncated to fit, and the OVERFLOW flag
-is set in the reply message.
-
-A UA receiving a truncated message MAY open a TCP connection (see
-section 5.1.3) with the DA or SA and retransmit the request, using the
-same XID.  The UA MAY also attempt to make use of the truncated reply or
-it MAY reformulate a more restrictive request which will result in a
-smaller reply.
-
-UDP requests to a DA or SA SHOULD be retransmitted until either a
-response (which might be an error) has been obtained, or for
-CONFIG_RETRY_MAX seconds.  The initial retransmission MUST occur after a
-CONFIG_RETRY wait period.  Retransmissions MUST occur after
-exponentially increasing wait intervals; that is, by doubling the wait
-each time, or the range of a uniformly distributed random wait interval.
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 17]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-5.1.1.1 Multicast UDP Transmission
-
-SLP messages are multicast to the administratively scoped SLP multicast
-[RFC 2365] address, which is 239.255.255.253.  The default TTL to use
-for multicast is 255.  In isolated networks, broadcasts MAY be used on
-the all hosts broadcast address, 255.255.255.255, in place of multicast.
-To that end, SAs SHOULD and DAs MUST listen for broadcast SLP messages
-at port 427.
-
-5.1.1.2 Multicast Requests
-
-Multicast requests MUST set the RQST Flag in the SLP header.
-
-Multicast requests are used in three cases:
-
- - Active DA Discovery (UAs and SAs MUST support this).
- - Active SA Discovery (UAs MAY support this).
- - Multicast Requests (UAs MUST be able to multicast SrvRqst messages to
-   SAs, who MUST be prepared to receive and process them.)
-
-One or more replies MAY be returned via unicast UDP.  Errors MUST NOT be
-returned in response to multicast messages, only non-error, non-zero
-results.  The one exception to this is a multicast AttrRqst for a
-service registered without any Attributes.  A multicast AttrRqst for
-such a service MUST result in a unicast AttrRply with a zero length
-Attribute List.
-
-SAs MUST accept both multicast requests and unicast requests, although
-UAs SHOULD use multicast when contacting SAs directly.  The SA can
-distinguish between multicast and unicast requests by whether the
-REQUEST MCAST flag is set in the SLP message header.  DAs MUST accept
-multicast requests as part of DA discovery (see Section 9); otherwise,
-DAs MUST ignore multicast requests.
-
-Multicast requests SHOULD be reissued over CONFIG_MC_MAX seconds until a
-result has been obtained.  Retransmission is not required if the
-requesting agent is prepared to use the first reply instead of as many
-replies as possible within a bounded time interval.  An initial
-retransmission MUST occur after a CONFIG_RETRY wait period.
-Retransmissions MUST be made with exponentially increasing wait
-intervals; that is,(doubling the wait each time, or the range of the
-uniformly distributed random wait interval.
-
-The message SHOULD be retransmitted until no further responses are
-elicited (see Section 4.3.1) or until CONFIG_MC_MAX seconds elapse.
-
-5.1.1.3 Unicast UDP Requests
-
-Unicast requests to a DA or SA SHOULD be retransmitted until either a
-response (which might be an error) has been obtained, or for
-CONFIG_RETRY_MAX seconds.  An initial retransmission MUST occur after a
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 18]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-CONFIG_RETRY wait period.  Retransmissions MUST be made with
-exponentially increasing wait intervals, doubling the wait each time.
-
-5.1.2 TCP Requests
-
-If a SrvReg or SrvDeReg is too large to fit into a datagram, a TCP
-connection MUST be established by the SA to transmit the message.  In
-addition, a UA MAY initiate a TCP connection with a DA or SA to send an
-initial request which is too large for a datagram or to resend a request
-if the return to a UDP or multicast transmitted request has the OVERFLOW
-flag set in the SLP header.
-
-DAs MUST be able to respond to UDP and TCP requests, as well as
-multicast DA Discovery SrvRqsts.  SAs MUST be able to respond to TCP
-unless the SA will NEVER receive a request or send a reply which will
-exceed a datagram in size (e.g., some embedded systems).
-
-A TCP connection MAY be used for a single SLP transaction, or for
-multiple transactions.  Since there are length fields in the message
-headers, SLP Agents can send multiple requests along a connection and
-read the return stream for acknowledgments and replies.
-
-The initiating agent SHOULD close the TCP connection.  The DA SHOULD
-wait at least CONFIG_CLOSE_CONN seconds before closing an idle
-connection.  DAs and SAs SHOULD close an idle TCP connection after
-CONFIG_CLOSE_CONN seconds to ensure robust operation, even when the
-initiating agent neglects to close it.  See Section 13 for timing rules.
-
-To avoid the need to implement TCP in UAs and SAs, their implementations
-and deployment MUST be constrained such that:
-
- - UAs never issue requests larger than the Path MTU, so SAs never have
-   to receive TCP requests longer than the path MTU.
-
- - UAs can accept replies with the 'OVERFLOW' flag set, and make use of
-   the first result included, or reformulate the request for a smaller
-   reply.
-
- - The SA can send all SrvRply, SrvReg, and SrvDeReg messages in a
-   single datagram.  This means limiting the size of URLs, and the
-   length of Attribute Lists and Scope Lists transmitted.
-
-5.1.3 Multicast Announcement
-
-Unsolicited DAAdvert messages are sent initially and periodically sent
-by DAs via multicast to announce DA availability.  The XID is set to 0.
-See Section 9.1.4.
-
-
-
-
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 19]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-6. Required Messages
-
-6.1 Service Request
-
-This is the primary request message in SLP.
-
-      0                   1                   2                   3
-      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |       Service Location header (function = SrvRqst = 1)        |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |      length of <PRList>       |  <PRList> (Section 4.3.1)     \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |   length of <service-type>    | <service-type> (Section 4.3.2)\
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |    length of <scope-list>     |  <scope-list> (Section 4.3.3) \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |   length of <filter> string   |   <filter> (Section 4.3.7)    \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |            BC-1               |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-   Length of PRList, PRList String
-      The PRList SHOULD be included. See Section 4.3 if the PRList is
-      omitted.
-
-   Length of Service Type, Service Type String
-      A Service Type String MUST be included.
-
-   Length of Scope List, Scope List String
-      A Scope List MUST be included, unless the Service Type String is
-      either the DA or SA Service Type.  In this case the Scope List MAY
-      be omitted (see Section 4.3).
-
-   Length of Filter, Filter String
-      A Filter string is OPTIONAL (see Section 4.3 on omitted strings).
-
-   Response messages differ depending on the Service Type field.  If the
-   Service Type field is set to DA Service Type, DAs MUST respond to the
-   SrvRqst with a DAAdvert  (see Section 9.2.1).  If the Service Type
-   field is set to the SA Service Type, SAs MUST respond with a SAAdvert
-   (see Section 10).  All other SrvRqst messages elicit a SrvRply (see
-   Section 6.2).
-
-   Requests that elicit a SrvRply are processed as follows.  The Service
-   Type field, Scope List field, and Language Tag field of the header
-   MUST establish the base set of service advertisements over which the
-   Filter is applied. If the Filter field is absent, the request MUST
-   match all service advertisements having the indicated Service Type,
-   Scopes, and language locale. If the Filter field is present, the
-   Filter MUST be compared to each registered service, such that the
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 20]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   Language Tag of the request matches the the language locale of the
-   advertised service.  See Sections 4.2.6 and 4.2.7 for how to apply
-   the Filter and Section 14 for how to apply Language Tags.  Matching
-   services are returned in the SrvRply message.
-
-   Requests that elicit a DAAdvert response are processed as described
-   in Section 9.2.1.  Requests that elicit a SAAdvert response are
-   processed as described in Section 10.
-
-   Possible error results returned in SrvRply or DAAdvert, in addition
-   to those listed in Section 4.1 with a '*' are:
-
-   LANGUAGE_NOT_SUPPORTED
-      Returned when the Service Type field and at least one Scope from
-      the Scope List field match, the Filter field is not absent, but no
-      services are advertised in the language specified in the Language
-      Tag field of the header, though there are service advertisements
-      registered under the default language locale, namely 'en'. MUST
-      NOT be returned if there are no service advertisements for the
-      Service Type advertised under the default language locale.
-   MSG_NOT_SUPPORTED
-      Returned when an SA that only accepts simple service queries
-      receives a unicast SrvRqst including a complex search query.
-
-6.2 Service Reply
-
-      0                   1                   2                   3
-      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |        Service Location header (function = SrvRply = 2)       |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |        Error Code             |        URL Entry count        |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |       <URL Entry 1>          ...       <URL Entry N>          \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-   Error Code
-      Status Code of the message (see Section 4.1 and 6.1).
-
-   URL Entry Count
-      The number of URL entry blocks following.  MAY be zero.
-
-   URL Entry 1 ... URL Entry N
-      The URL Entry blocks.  MUST be absent if URL Entry Count is 0.
-
-   The SrvRply contains zero or more URL Entries (see Section 4.4).  A
-   SrvRply with zero URL entries MUST be returned in response to a
-   unicast Service Reply if no matching service advertisements are
-   present.
-
-   If a SrvRply is sent by UDP, a URL Entry MUST NOT be included unless
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 21]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   it fits entirely without truncation.  If the reply overflows a
-   datagram and the 'O' flag in the header is set, the UA MAY simply use
-   the URL entries in the list.
-
-   A URL obtained by SLP MUST NOT be cached longer than the number of
-   seconds in the Lifetime field of the URL Entry.
-
-6.3 Service Registration
-
-      0                   1                   2                   3
-      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |         Service Location header (function = SrvReg = 3)       |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |                  <URL-Entry> (Section 4.3.4)                  \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     | length of service type string | <service-type> (Section 4.3.1)\
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |     length of <scope-list>    | <scope-list> (Section 4.3.2)  \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |  length of attr-list string   | <attr-list> (Section 4.3.4)   \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |      BC-2     |
-     +-+-+-+-+-+-+-+-+
-
-   URL-Entry
-      A URL Entry corresponding to the service advertisement MUST be
-      present.
-
-   Length of Service Type, Service Type String
-      The Service Type of the service advertisement MUST be present.
-
-   Length of Scope List, Scope List
-      The Scope List of the service advertisement MUST be present.
-
-   Length of Attribute List, Attribute List
-      The Attribute List of the service advertisement MAY be omitted.
-      See Section 4.3 concerning omitted strings.
-
-      The Lifetime field of the URL Entry defines how long a DA can
-      cache the registration.  SAs SHOULD reregister before this
-      lifetime expires but SHOULD NOT reregister more often than once
-      per second or more often than the maximum reregistration interval
-      advertised by the DA (see Section 9.3).  The lifetime MAY be set
-      to any value between 0 and 0xffff (maximum, around 18 hours).
-      Long-lived registrations remain stale longer if the service fails
-      and the SA does not deregister the service.
-
-      The Service Type defines the service type of the URL to be
-      registered, regardless of the scheme of the URL. The Scope List
-      MUST contain the names of all Scopes configured for the SA.  If
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 22]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-      the same URL is registered under different Service Types and/or
-      with different Language Tags, the Scope List MUST be identical for
-      all registrations so that deregistration functions properly, see
-      Section 7.6; otherwise, if the Scope List differs from a prior
-      registration for the same URL, a SCOPE_NOT_SUPPORTED error is
-      returned.
-
-      The Attribute List, if present, specifies the Attributes and
-      values to be associated with the URL in the service advertisement.
-
-      The header FRESH flag MUST be set on all registrations.  A new
-      registration received for an existing service advertisement in
-      which the header Language Tag, URL, and Service Type, all match
-      MUST replace the previous advertisement.
-
-6.4 Service Acknowledgment
-
-      0                   1                   2                   3
-      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |          Service Location header (function = SrvAck = 5)      |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |          Error Code           |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-   Error Code
-      Status code of the message.
-
-   A DA MUST return a SrvAck to an SA after a SrvReg or SrvDereg.  The
-   SrvAck carries only a two byte Error Code.
-
-   In addition to the errors listed in Section 4.1 with a '*', the
-   following error codes apply to SrvReg and SrvDereg messages:
-
-   REFRESH_REJECTED
-      If the header FRESH flag is not set, or if the SrvReg lifetime is
-      less than the DA's advertised minimum refresh interval (see
-      Section 9.3), the DA MAY reject the advertisement. If a SrvDereg
-      includes an Attribute tag list, the DA SHOULD reject it.
-   INVALID_REGISTRATION
-      Returned if the SrvReg has problems with a non-string parameter,
-      like a zero URL Entry Lifetime field,, or if a SrvDereg was sent
-      for a nonexisting service advertisement, or an attempt was made to
-      delete a service advertisement and the SrvDereg Scope List
-      contains only a partial list of the Scopes in which the
-      advertisement is registered.
-
-6.5 DA Advertisement
-
-   The DAAdvert is used for DA Discovery (see Section 9).
-
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 23]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-      0                   1                   2                   3
-      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |        Service Location header (function = DAAdvert = 8)      |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |          Error Code           |  DA Stateless Boot Timestamp  |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |DA Stateless Boot Time, contd. |         Length of URL         |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |                              URL                              \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |     Length of <scope-list>    |  <scope-list> (Section 4.3.2) \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |     Length of <attr-list>     |  <attr-list> (Section 4.3.4)  \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |           BC-3                |      BC-4       |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-   Error Code
-      Status code of the message.  See Section 4.1 and 6.1 for values.
-      The Error Code is set to 0 when the DAAdvert is multicast.
-
-   DA Stateless Boot Timestamp
-      Indicates DA boot time and state.  See Section 9.2 for details.
-
-   Length of URL, URL
-      The DA URL MUST NOT be omitted.
-
-   Length of Scope List, Scope List
-      The Scope List string.  MUST NOT be absent.  This list contains
-      the Scope List of the DA, though it MAY include only the Scope
-      List present in the SrvRqst which solicited the DAAdvert.  If
-      multicast, the Scope List MUST be the DA's entire configured Scope
-      List.
-
-   Length of Attribute List, Attribute List
-      The DA Attribute List string MAY be omitted.  See Section 9.2 for
-      possible DA Attributes.
-
-   The returned URL is "service:directory-agent://"<addr> of the DA,
-   where <addr> is the dotted decimal numeric IP address of the DA.
-
-6.6. SA Advertisement
-
-   The SAAdvert is used by UAs to accumulate information about SAs, see
-   Section 10. Since the SAAdvert is only returned in response to a
-   multicast request, it contains no error code field because errors on
-   multicast requests are silently dropped.
-
-      0                   1                   2                   3
-      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 24]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |        Service Location header (function = SAAdvert = 11)     |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |         Length of URL         |              URL              \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |     Length of <scope-list>    |         <scope-list>          \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |     Length of <attr-list>     |          <attr-list>          \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |     BC-5      |
-     +-+-+-+-+-+-+-+-+
-
-   Length of URL, URL
-      The SA's URL MUST NOT be omitted.
-
-   Length of Scope List, Scope List
-      The SA's Scope List MUST NOT be omitted.
-
-   Length of Attribute List, Attribute List
-      The Attribute List MAY be omitted only if the SA advertises no
-      services (see Section 10).  On omitted strings, see Section 4.3.
-
-   The SA responds only to multicast SA discovery requests which:
-    - have an empty <scope-list> or the <scope-list> includes one of the
-      SA's Scopes,
-    - have <service-type> set to "service:service-agent".
-    - if a <filter> is included in the request, the SA MUST match the
-      Filter against the SA's Attributes.
-
-   The SAAdvert MUST include a list of Attributes the SA supports.  This
-   Attribute List SHOULD be kept short so that the SAAdvert will not
-   exceed the path MTU in size.  The Attribute 'service-type' MUST be
-   included in the Attribute List.  The value of this Attribute is a
-   list of string values, each value of which is a Service Type the SA
-   is advertising (not including "service:service-agent").
-
-   The URL is "service:service-agent://"<addr> of the SA, where <addr>
-   is the dotted decimal numeric address of the SA.
-
-7. Optional Features
-
-   A UA or SA can be fully compliant without implementing any features
-   from this section.  A SA SHOULD, however, support responding to
-   AttrRqst unless the SA will never be used to advertise services with
-   Attributes (see Appendix B).
-
-7.1 SLP Extensions
-
-   SLP extensions provide growth capability to the basic set of SLP
-   messages.
-
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 25]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-      0                   1                   2                   3
-      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |         Extension ID          |       Next Extension Offset   |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     | Offset, contd.|                Extension Data                 \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-   Extension ID
-      The extension identifier.
-
-   Next Extension Offset
-      Number of bytes to the next extension as an offset from the
-      beginning of the SLP message. If the Next Extension Offset field
-      is zero, there are no extensions following the current extension,
-      and the length of the current extension MUST be calculated by
-      subtracting the offset of the current extension from the total
-      length of the SLP message as given in the header.
-
-   Extension Data
-      The contents of the extension.
-
-   If an extension offset is specified, and an extension is not included
-   in the request, the receiver MUST respond with a PARSE_ERROR, if the
-   request was unicast.
-
-   Extension IDs are assigned in the following way:
-
-   0x0000-0x3FFF   Standardized:    Optional to implement.
-      Ignore if unrecognized.
-   0x4000-0x7FFF   Standardized:    Mandatory to implement.
-      A UA or SA which receives this option in a reply and does not
-      understand it MUST silently discard the reply.  A DA or SA which
-      receives this option in a request and does not understand it MUST
-      return an OPTION_NOT_UNDERSTOOD error.
-   0x8000-0x8FFF  For private use:  Optional to implement.
-      Ignore if unrecognized.
-   0x9000-0xFFFF  Reserved:         Do not use.
-
-   Section 13 defines procedures for specifying new SLP extensions.
-
-7.2 Service Type Request
-
-   The Service Type Request (SrvTypeRqst) allows a UA to discover all
-   types of services on a network.
-
-      0                   1                   2                   3
-      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |      Service Location header (function = SrvTypeRqst = 9)     |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 26]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-     |        length of PRList       |    <PRList> (Section 4.3.1)   \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |   length of Naming Authority  |      <na> (Section 4.3.2)     \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |     length of <scope-list>    |  <scope-list> (Section 4.3.3) \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-   Length of PRList, PRList
-      The PRList MAY be omitted.  See Section 4.3.3 and 4.3.
-
-   Length of Naming Authority, Naming Authority
-      The naming authority string MAY be zero length, in which case
-      service types in the default naming authority (IANA) are returned.
-
-      WARNING! SPECIAL CASE: If the length field is set to 0xFFFF: (1)
-      the naming authority string is zero length, (2) all service types
-      in all naming authorities are returned.  THIS FIELD IS AN
-      EXCEPTION TO HOW STRING LENGTHS ARE ENCODED IN SLP!
-
-      Otherwise, if a naming authority string is included, only service
-      types in that naming authority are returned.
-
-   Length of Scope List, Scope List
-      Only Service Types advertised in a Scope included in the Scope
-      List are returned.
-
-   The Naming Authority string determines which Service Types will be
-   returned in the reply, as described above.
-
-   Possible error returns, aside from those in Section 4.1 with a '*':
-
-   MSG_NOT_SUPPORTED
-      An SA that does not support SrvTypeRqst returns this error if a it
-      receives a unicast SrvTypeRqst.
-
-7.3 Service Type Reply
-
-   The return message for SrvTypeRqst is the SrvTypeRply.
-
-      0                   1                   2                   3
-      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |      Service Location header (function = SrvTypeRply = 10)    |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |           Error Code          |    length of <srvtype> List   |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |                 <srvtype> List (Section 4.3.2)                \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-   Error Code
-      Status code of the messages.  See section 4.1 and 7.3.
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 27]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   Length of Service Type List, Service Type List
-      The list of Service Types.  The Service Type names MUST include
-      the naming authority string, if any.  This string MUST be absent
-      if the Service Type List result is zero (see Section 4.3).
-
-7.4 Attribute Request
-
-   The Attribute Request (AttrRqst) allows a UA to discover Attributes
-   of a given service by supplying its URL.  This information is also
-   available by using the Attrlist Extension to the SrvRqst [RFC 3059].
-
-      0                   1                   2                   3
-      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |       Service Location header (function = AttrRqst = 6)       |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |       length of PRList        |        <PRList> String        \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |         length of URL         |              URL              \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |    length of <scope-list>     |  <scope-list> (Section 4.3.3) \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |  length of <tag-list> string  |    <tag-list> (Section 4.5)   \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |             BC-6              |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-   Length of PRList, PRList
-      The PRList MAY be omitted.  See Section 4.3.3 and 4.3.
-
-   Length of URL, URL
-      The URL of the service whose Attributes are being requested.  MUST
-      NOT be absent.
-
-   Length of Scope List, Scope List
-      The Scope List of the service whose Attributes are being
-      requested.  MUST NOT be absent.
-
-   Length of Attribute Tag List, Attribute Tag List
-      This string MAY be omitted, see Section 4.3.  If present, only
-      those Attributes whose tags are present in the list are returned
-      in the AttrRply.
-
-   The <tag-list> indicates the Attributes to return in the AttrRply.
-   Wild card values in <tag-list> match Attributes any part of whose tag
-   matches the <attr-val> part of the wild card.
-
-   Possible error returns when the request is unicast, aside from those
-   in Section 4.1 with a '*', are:
-
-   LANGUAGE_NOT_SUPPORTED
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 28]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-      Returned when the URL field and at least one Scope from the Scope
-      List field match, but no services are advertised in the language
-      specified in the Language Tag field of the header, though there is
-      a service advertisements for the URL registered under the default
-      language locale, namely 'en'. MUST NOT be returned if there is no
-      service advertisement for the URL advertised under the default
-      language locale.
-
-   MSG_NOT_SUPPORTED
-      Returned when a SA that does not support AttrRqst receives a
-      unicast AttrRqst.
-
-   INVALID_REGISTRATION
-      The URL in the AttrRqst does not correspond to a service that the
-      SA or DA is advertising.
-
-7.5 Attribute Reply
-
-      0                   1                   2                   3
-      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |       Service Location header (function = AttrRply = 7)       |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |         Error Code            |      length of <attr-list>    |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |                  <attr-list> (Section 4.3.4)                  \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |     BC-7      |
-     +-+-+-+-+-+-+-+-+
-
-   Error Code
-      Status code of the message.  See section 4.1 and 7.5.
-
-   Length of Attribute List, Attribute List
-      The requested Attribute List.  These field is omitted if the
-      status code of the result is not 0 or the service advertisement
-      has no Attributes associated with it.
-
-   WARNING! SPECIAL CASE: A SA that supports AttrRqst MUST return an
-      AttrRply in response to a multicast AttrRqst that matches a
-      service advertisement with no Attributes.  THIS IS UNLIKE
-      SrvTypeRply AND SrvRply WHERE ONLY NONZERO RESULTS ARE RETURNED IN
-      RESPONSE TO MULTICAST QUERIES.
-
-      Attribute replies SHOULD be returned with the original case of
-      registered string tags and values intact, in case they must be
-      displayed to users.
-
-      Only one copy of each Attribute tag or String value SHOULD be
-      returned, arbitrarily choosing one version with respect to upper
-      and lower case and white space internal to the strings.  Duplicate
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 29]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-      Attributes and values SHOULD be removed.  An arbitrary version of
-      the string value and tag name is chosen for the merge.  For
-      example: "(A=a a,b)" merged with "(a=A A,B)" may yield "(a=a
-      a,B)".
-
-7.6 Service Deregistration
-
-      A DA deletes a service registration when its lifetime expires.
-      Services SHOULD be deregistered when they are no longer available,
-      rather than leaving the registrations to time out.
-
-      0                   1                   2                   3
-      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |         Service Location header (function = SrvDeReg = 4)     |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |    Length of <scope-list>     |  <scope-list> (Section 4.3.2) \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |                   URL Entry (Section 4.4)                     \
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     |   Length of <tag-list> = 0    |
-     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-   Length of Scope List, Scope List
-      MUST NOT be omitted.
-
-   URL Entry
-      The URL of the service to deregister.  The URL in the entry MUST
-      NOT be omitted.  The lifetime in the URL Entry is ignored.
-
-   Length of Attribute Tag List
-      This field MUST be 0.  See Section 4.3 on omitted strings.
-
-   The URL indicates which service advertisement to deregister.   The
-   deregistration MUST remove all service advertisements associated with
-   the URL, for all Scopes, language locales, and Service Types under
-   which service advertisements for the URL were registered.
-
-   The SA MUST issue the SrvDeReg with the same Scope List used to
-   register the service. If this is not done, the DA MUST return a
-   SCOPE_NOT_SUPPORTED error.
-
-   The DA acknowledges a SrvDereg with a SrvAck.  Once the SA receives
-   an acknowledgment indicating success, the service is no longer
-   advertised by the DA.
-
-   Possible error codes beyond those in Section 4.1 marked with a '*':
-
-   INVALID_REGISTRATION
-      A DA sends this error if the SrvDeReg seeks to deregister a
-      service that has not been registered with the DA.
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 30]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   INVALID_UPDATE
-      A DA sends this error in response to a non-zero Attribute Tag List
-      Length.
-
-8. Scope List Configuration
-
-   The default Scope List configuration for any agent is the string
-   "DEFAULT".  The chart below contains a prioritized list of options
-   for Scope List configuration. Higher priority options override lower
-   priority options.  For example, if a static Scope List exists, DHCP
-   option 79 is ignored. All SLP Agents MUST support static
-   configuration of a Scope List.  Other mechanisms are optional.
-
-   Preference   Mechanism                           Requirement level
-   (1)          Static configuration of Scope List  MUST
-   (2)          Static configuration of DAs *       MUST
-   (3)          DHCP SLP Scope configuration        SHOULD
-   (4)          DHCP SLP DA configuration *         SHOULD
-   (5)          Dynamic discovery (DAAdverts) **    MAY
-   (6)          Dynamic discovery (SAAdverts) **    MAY
-   (7)          Use of the Scope "DEFAULT"          MUST
-
-   (2) A SA or UA with a static configured list of DAs will unicast DA
-   Discovery messages (see Section 9) to the DAs on the list and create
-   a list of all Scopes those DAs support.  This forms the agent's Scope
-   List.
-
-   (3) DHCP option 79 can explicitly configure a UA or SA's Scope list.
-   [RFC 2610]
-
-   (4) DHCP option 78 can supply a list of DA locations.  The UA or SA
-   acquires their Scope List, as per (2), above.  [RFC 2610]
-
-   (5) A UA or SA can use active and passive DA Discovery (see Section
-   9) to acquire a list of DAs.  The combined list of their Scopes forms
-   the agent's Scope List.
-
-   (6) A UA can use active SA discovery (see Section 10) to obtain
-   SAAdverts from SAs on the network.  The combined list becomes the
-   UA's Scope List.
-
-   UAs can issue requests with any subset of Scopes with which they are
-   configured.  It is left up to the implementor whether to allow UAs to
-   synthesize Scope Lists by using DA and SA discovery or only to
-   support static and DHCP discovery.
-
-9. DA Discovery
-
-   UAs and SAs MUST attempt to discover DAs unless specifically
-   configured not to do so.  UAs and SAs MUST perform active DA
-   discovery initially, upon initialization.  SAs MUST and UAs SHOULD
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 31]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   perform passive DA discovery (UAs MAY instead periodically perform
-   active DA discovery, for example, before requests are made, after
-   [CONFIG_DA_FIND] seconds).
-
-9.1 Active DA discovery
-
-   DAs are discovered by sending a SrvRqst with the Service Type set to
-   the DA Service Type.  If a Filter is included in the SrvRqst, the DA
-   SHOULD respond only if the Filter matches the DA's Attributes.
-
-   If the requesting UA or SA is configured with a Scope List, the
-   request MUST contain all configured scopes in the list.  If the UA or
-   SA is not configured with a Scope List, however, the <scope-list>
-   field of the SrvRqst used in active DA discovery MAY be empty.  This
-   allows the UA or SA to derive a Scope List from DAAdverts it
-   receives.
-
-9.2 Passive DA discovery
-
-   A DA MUST multicast (or broadcast) an unsolicited DAAdvert every
-   CONFIG_DA_BEAT seconds.  CONFIG_DA_BEAT SHOULD be specified to
-   prevent DAAdverts from using more than 1% of the available network
-   bandwidth.  An unsolicited DAAdvert has an XID of 0.
-
-   All UAs and SAs that receive the unsolicited DAAdvert SHOULD examine
-   the DAAdvert DA Stateless Boot Timestamp.  If the Stateless Boot
-   Timestamp is zero, the DA is going down and no further messages
-   should be sent to it.
-
-   If a SA detects a DAAdvert with a nonzero DA Stateless Boot Timestamp
-   but the SA has never encountered the DA before, the SA MUST send
-   SrvRegs for all its advertised services if examination of the
-   DAAdvert indicates that the SA must register.  The SA MUST examine
-   the DAAdvert's timestamp to determine if the DA has had a stateless
-   reboot since the SA last registered with it.  If so, and if the DA
-   supports some set of Scopes with which the SA is configured, the SA
-   registers with the DA. SAs MUST wait a random interval between 0 and
-   CONFIG_REG_PASSIVE before beginning DA registration.
-
-   If a UA with a configured scope list receives a DAAdvert that
-   supports any Scope on its configured Scope List, it adds this DA to
-   its list of DAs.
-
-9.3 DA Attributes
-
-   DAs MAY advertise Attributes.  One Attribute is defined by SLPv2, the
-   'min-refresh-interval' attribute.
-
-   A potential scaling problem occurs in SLPv2 if SAs choose too low a
-   lifetime.  In this case, an onerous amount of reregistration occurs
-   as more services are deployed.  SLPv2 allows DAs to control the
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 32]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   frequency of registration by advertising the "min-refresh-interval"
-   attribute.  A DA MAY reissue a DAAdvert with a new set of Attributes
-   at any time, to change the reregistration behavior of SAs.  These
-   apply only to subsequent registrations; existing service
-   registrations with the DA retain their registered lifetimes.
-
-   If the DAAdvert includes the Attribute 'min-refresh-interval' it MUST
-   be set to a single Integer value indicating a number of seconds.  If
-   this Attribute is present SAs MUST NOT issue registrations with
-   lifetimes less than this value or refresh any particular service
-   advertisement more frequently than this value.  If SrvReg or SrvDereg
-   for a particular service is received more frequently than or with the
-   lifetime less than the DA's advertised 'min-refresh-interval'
-   attribute the DA SHOULD reject the message and return a
-   REFRESH_REJECTED error in the SrvAck.
-
-10. SA Discovery
-
-   A UA MAY, in the absence of knowledge of DAs, and other Scope list
-   configuration, obtain SAAdverts from SAs on the network.  This allows
-   the UA to synthesize a Scope List it can use to issue requests.
-
-   A SA MAY be configured with Attributes, and MUST support the
-   Attribute 'service-type' whose value is all the Service Types of
-   services represented by the SA.  Further, SAs which support only
-   simple Search Filters MUST include the Attribute definition "simple-
-   query-only=true" in their Attribute List. A query for this Attribute
-   can be included in the Filter to exclude SAs that do not accept
-   simple queries.
-
-   SAs MUST NOT respond if the SrvRqst Filter is not satisfied.  For
-   example, only SAs advertising 'nfs' services MUST respond with a
-   SAAdvert to a SrvRqst for Service Type "service:service-agent" that
-   includes a Filter "(service-type=nfs)".
-
-11. Protocol Timing Defaults
-
-Interval name        Section  Default Value   Meaning
--------------------  -------  -------------   ------------------------
-CONFIG_MC_MAX        6.3      15 seconds      Max time to wait for a
-                                              complete multicast query
-                                              response (all values.)
-CONFIG_START_WAIT    12.2.1   3 seconds       Wait to perform DA
-                                              discovery on reboot.
-CONFIG_RETRY         12.3     2 seconds       Wait interval before
-                                              initial retransmission
-                                              of multicast or unicast
-                                              requests.
-CONFIG_RETRY_MAX     12.3     15 seconds      Give up on unicast
-                                              request retransmission.
-CONFIG_DA_BEAT       12.2.2   3 hours         DA Heartbeat, so that SAs
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 33]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-                                              passively detect new DAs.
-CONFIG_DA_FIND       12.3     900 seconds     Minimum interval to wait
-                                              before repeating Active
-                                              DA discovery.
-CONFIG_REG_PASSIVE   12.2     1-3 seconds     Wait to register services
-                                              on passive DA discovery.
-CONFIG_REG_ACTIVE    8.3      1-3 seconds     Wait to register services
-                                              on active DA discovery.
-CONFIG_CLOSE_CONN    6.2      5 minutes       DAs and SAs close idle
-                                              connections.
-
-12. Optional Configuration
-
-   Broadcast Only
-      Any SLP agent SHOULD be configurable to use broadcast only.
-   Predefined DA
-      A UA or SA SHOULD be configurable to use a predefined DA.
-   No DA Discovery
-      The UA or SA SHOULD be configurable to ONLY use predefined and
-      DHCP-configured DAs and perform no active or passive DA discovery.
-   Multicast TTL
-      The default multicast TTL is 255.  Agents SHOULD be configurable
-      to use other values.  A lower value may result in UAs obtaining
-      different results for the identical requests depending on where
-      they are connected to the network.
-   Timing Values
-      Time values in Section 11 MAY be configurable.
-   Scopes
-      The Scope List string MUST be configurable.
-   DHCP Configuration
-      DHCP options 78 and 79 MAY be used to configure SLP. [RFC 2610]
-   Service Templates
-      Service Template UAs and SAs MAY be configured by using Service
-      Templates.  These allow language translation, setting default
-      values and API error checking.
-
-13. IANA Considerations
-
-   SLP includes four sets of identifiers which may be registered with
-   IANA. The policies for these registrations (See [RFC 2434]) are noted
-   in each case.
-
-   New SLP Extensions with types in the range 2-65535 may be registered
-   following review by a Designated Expert.
-
-   New error numbers in the range 15-65535 are assigned on the basis of
-   a Standards Action.
-
-   Protocol elements used with Service Location Protocol may also
-   require IANA registration actions.  SLP is used in conjunction with
-   "service:" URLs and Service Templates [RFC 2609].  These are
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 34]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   standardized by review of a Designated Expert and a mailing list (See
-   [RFC 2609].)
-
-14. Internationalization Considerations
-
-   SLP supports service advertisements in multiple languages by
-   providing a Language Tag field in the SLP message header (see Section
-   8).
-
-   Services MAY be registered under multiple Language Tags.  This
-   provides Attributes so that users with different language skills can
-   select services interactively.  Services SHOULD be registered under
-   the Language Tag 'en', the default Language Tag (English), to provide
-   for a fallback in case the services are not registered under any
-   another Language Tag.  When processing requests, the Language Tag in
-   the request MUST be compared using case insensitive equality to the
-   Language Tag of the service advertisement. If the service
-   advertisement's Language Tag doesn't match that in the request, the
-   two MUST NOT match; otherwise, the two MUST match.
-
-   A URL that is registered with multiple Language Tags may be queried
-   under all Language Tags for which it is registered.  The Language Tag
-   of the SrvRqst or AttrRqst is used to perform the match.  If the
-   requested language is not supported, a LANGUAGE_NOT_SUPPORTED error
-   MUST be returned for a SrvRqst if there are any service
-   advertisements registered under the default Language Tag, or for an
-   AttrRqst if there is an advertisement for the URL under the default
-   Language Tag.  If there is no advertisement registered under the
-   default language tag, the LANGUAGE_NOT_SUPPORTED error MUST NOT be
-   returned, and the request MUST be considered to have yielded no
-   matches. SrvRply and AttrRply messages MUST contain the same Language
-   Tag as that of the request.
-
-   RFC 2609 [RFC 2609] provides more information about how language tags
-   can be used in Service Templates.
-
-15. Security Considerations
-
-   The threats posed to clients using SLP to locate services and to
-   services that use SLP to advertise themselves are threefold.
-
-   First, a UA may be prevented from discovering a service that is
-   present and should, in fact, be discoverable.  This is a denial of
-   service attack. SLP is vulnerable to denial of service attacks by (a)
-   an attacker posing as a DA that withholds normally available service
-   information, (b) an attacker actively deregistering services with DAs
-   that should otherwise be available at the DAs.
-
-   Second, a UA may discover a service that is not 'trustworthy'
-   according to some policy of trust in an administered network.  This
-   is a masquerading attack.  A user could be fooled into revealing
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 35]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   confidential information in interactions with a service registered by
-   an attacker.
-
-   Third, by observing and issuing SLP queries, an attacker could use
-   SLP to catalogue either clients or services on a network.  The threat
-   here is breach of confidentiality.  An attacker can learn what
-   services the user prefers and what services are present on the
-   network.  This information could be useful to an attacker, for
-   example, to inform how to launch future attacks.
-
-   Previous versions of SLP provided for authentication of service URLs
-   and Attribute Lists [SLPv2AS].  This scheme was not adopted, as it
-   required SLP-specific key management, and it has been deprecated in
-   this version of SLP.  Instead, SLP agents use IPsec security
-   associations [IPSEC] for unicast messages to protect against the
-   above threats. Multicast requests are considered to be insecure and
-   SHOULD NOT be used if the above attacks are considered likely.
-
-   The following policies protect unicast SLP traffic:
-
-1.  Messages unicast from port 427 by SAs and DAs  SHOULD initiate an
-    IKE establishment of a security association [IKE] when:
-    - An SA or DA responds to a UA request
-    - An SA registers or deregisters with a DA
-
-2.  Those hosts which receive unicast SLP messages from port 427 SHOULD
-    have a policy requiring the initiation of a IPsec security
-    association when:
-    - A UA receives a reply from a DA or SA
-    - A SA receives a SrvAck from a DA
-    - A DA receives a SrvReg or SrvDereg from a SA
-
-3.  IKE security association establishment MUST be
-    predicated on possession of a certificate indicating that a host
-    is a legitimate source of SLP messages.  This requires
-    distribution of certificates to all SLP agents, signed by a
-    certificate authority operated by a trusted administration.
-    During IKE security association establishment, certificates are
-    verified versus the certificate authority's public key.  If
-    verified, the security association can be established and
-    messages transmitted are
-    be protected against the attacks listed above.
-
-4.  SLP messages that cannot be validated against an IPsec
-    Authentication Header [AH] SHOULD be silently discarded.
-
-5.  For environments where confidentiality is desired, SLP messages
-    MAY be protected by an IPsec Encapsulating Security Payload [ESP].
-
-   The security provided by the above policy is no replacement for
-   application level security.  That is, even if SLP is protected
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 36]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   against the above list of threats, it is not a substitute for client-
-   server protocol security appropriate to satisfy the application's own
-   security requirements.
-
-   SLP is useful as a bootstrap protocol.  It may be used in
-   environments in which no preconfiguration is possible.  In such
-   situations, a certain amount of "blind faith" is required:  Without
-   any prior configuration it is impossible to secure SLP.
-
-Appendix A:  Changes to SLPv2 compared to RFC 2608
-
-   [SLPv2AS] presents the details and backward compatibility issues
-   concerning this specification compared to previous versions of SLP.
-
-Appendix B:  SA support for Attributes
-
-   Some special purpose SAs which will only ever advertise services
-   without Attributes need not implement SrvRqst Search Filters or
-   respond to AttrRqst with an AttrRply.  All other SAs need to.  This
-   is the meaning of the statement SAs SHOULD reply to AttrRqst
-   messages.
-
-Normative References
-
-   [AH] Kent, S., and Atkinson, R., "IP Authentication Header," RFC
-      2402, November, 1998.
-
-   [ESP] Kent, S., and Atkinson, R., "IP Encapsulating Security Payload
-      (ESP)," RFC 2406, November, 1998.
-
-   [IANA] http://www.iana.org/numbers.html
-
-   [IPSEC] Kent, S., and Atkinson, R., "Security Architecture for the
-      Internet Protocol," RFC 2401, November, 1998.
-
-   [RFC 2119] Bradner, S., "Key words for use in RFCs to Indicate
-      Requirement Levels", BCP 14, RFC 2119, March 1997.
-
-   [RFC 2131] Droms, R., "Dynamic Host Configuration Protocol", RFC
-      2131, March 1997.
-
-   [RFC 2234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
-      Specifications: ABNF", RFC 2234, November 1997.
-
-   [RFC 2252] Wahl, M., et. al., "Lightweight Directory Access Protocol
-      (v3): Attribute Syntax Definitions", RFC 2252, December 1997.
-
-   [RFC 2254] Howes, T., "The String Representation of LDAP Search
-      Filters", RFC 2254, December 1997.
-
-   [RFC 2279] Yergeau, F., "UTF-8, a transformation format of unicode
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 37]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-      and ISO 10646", RFC 2279, October 1998.
-
-   [RFC 2365]  Meyer, D., "Administratively Scoped IP Multicast", RFC
-      2365, July 1998.
-
-   [RFC 2396]  Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform
-      Resource Identifiers (URI): Generic Syntax", RFC 2396, August
-      1998.
-
-   [RFC 2434] Narten, T. and H. Alvestrand, "Guidelines for Writing an
-      IANA Considerations Section in RFCs, BCP 26, RFC 2434, October
-      1998.
-
-   [RFC 2608] E. Guttman, C. Perkins, J. Veizades, and M. Day, "Service
-      Location Protocol version 2", RFC 2608, July 1999.
-
-   [RFC 2609]  Guttman, E., Perkins, C. and J. Kempf, "Service Templates
-      and service: Schemes", RFC 2609, June 1999.
-
-   [RFC 2610] Guttman, E., "DHCP Options for Service Location", draft-
-      guttman-svrloc-rfc2610bis-01.txt, September 2001.  A work in
-      progress.
-
-   [RFC 3066] Alvestrand, H., "Tags for the Identification of
-      Languages", RFC 1766, March 1995.
-
-   [SLPv2AS] Guttman, E., "Applicability Statement for Service Location
-      Protocol, Version 2," draft-guttman-svrloc-as-00.txt, a work in
-      progress.
-
-   [vendorext] Guttman, E., "Vendor Extensions for Service Location
-      Protocol, Version 2", draft-guttman-svrloc-vendor-ext-04.txt, a
-      work in progress.
-
-Editors' Contact Information
-
-   Erik Guttman                   James Kempf
-   Sun Microsystems, Inc.         Docomo Labs, USA
-   Phone: +49 172 865 5497        Phone: +1 408 451 4711
-   Email: Erik.Guttman@Sun.Com    Email: kempf@docomolabs-usa.com
-
-Full Copyright Statement
-
-   Copyright (C) The Internet Society (2001).  All Rights Reserved.
-   This document and translations of it may be copied and furnished to
-   others, and derivative works that comment on or otherwise explain it or
-   assist in its implementation may be prepared, copied, published and
-   distributed, in whole or in part, without restriction of any kind,
-   provided that the above copyright notice and this paragraph are included
-   on all such copies and derivative works.  However, this document itself
-   may not be modified in any way, such as by removing the copyright notice
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 38]
-\f
-Internet Draft               SLPv2 Revision                  August 2002
-
-
-   or references to the Internet Society or other Internet organizations,
-   except as needed for the purpose of developing Internet standards in
-   which case the procedures for copyrights defined in the Internet
-   Standards process must be followed, or as required to translate it into
-   languages other than English.  The limited permissions granted above are
-   perpetual and will not be revoked by the Internet Society or its
-   successors or assigns.  This document and the information contained
-   herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE
-   INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR
-   IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
-   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
-   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE."
-
-Table of Contents
-
-     Abstract . . . . . . . . . . .  1    6.2 Service Reply  . . . . . . 21
-     Acknowledgements . . . . . . .  1    6.3 Service Registration . . . 22
-     1. Introduction  . . . . . . .  1    6.4 Service Acknowledgment . . 23
-     2. Terminology and Conventions  2    6.5 DA Advertisement . . . . . 23
-     3. Protocol Overview . . . . .  3    6.6 SA Advertisement  . . . .  24
-     3.1 SLP Message Types  . . . .  5    7. Optional Features . . . . . 25
-     4. Protocol Elements . . . . .  6    7.1 SLP Extensions . . . . . . 25
-     4.1 SLP Message Header . . . .  6    7.2 Service Type Request . . . 26
-     4.2 Error Codes  . . . . . . .  7    7.3 Service Type Reply . . . . 27
-     4.3 Strings  . . . . . . . . .  9    7.4 Attribute Request  . . . . 28
-     4.3.1 General String Comparison 9    7.5 Attribute Reply  . . . . . 29
-     4.3.2 Lists  . . . . . . . . .  9    7.6 Service Deregistration . . 30
-     4.3.3 Previous Responder List   9    8. Scope List Configuration  . 31
-     4.3.4 Service Type String  . . 10    9. DA Discovery  . . . . . . . 31
-     4.3.5 Scope List . . . . . . . 11    9.1 Active Discovery . . . . . 32
-     4.3.6 Attribute List . . . . . 11    9.2 Passive Discovery  . . . . 32
-     4.3.7 Search Filter  . . . . . 14    9.3 DA Attributes  . . . . . . 32
-     4.3.8 Attribute Tag List . . . 15    10. SA Discovery . . . . . .   33
-     4.3.9 SLP SPI  . . . . . . . . 15    11. Protocol Timing Defaults . 33
-     4.4 URL Entry  . . . . . . . . 15    12. Optional Configuration . . 34
-     4.5 Required and Backward            13. IANA Considerations  . . . 34
-         Compatibility  . . . . . . 16    14. Internationalization
-     5. Required Features . . . . . 16        Considerations . . . . . . 35
-     5.1 Transport of SLP Messages  17    15. Security Considerations  . 35
-     5.1.1 UDP Message Transmission 17    Appendix A:  Changes to SLPv2
-     5.1.1.1 Multicast Transmission 18        compared to RFC 2608 . . . 37
-     5.1.1.2 Multicast Requests . . 18    Appendix B:  SA support for
-     5.1.1.3 Unicast Requests . . . 18        Attributes . . . . . . . . 37
-     5.1.2 TCP Requests . . . . . . 19    Normative References . . . . . 37
-     5.1.3 Multicast Announcement . 19    Editors' Contact Information . 38
-     6. Required Messages . . . . . 20    Full Copyright Statement . . . 38
-     6.1 Service Request  . . . . . 20
-
-
-
-
-
-
-Guttman & Kempf         Expires: 3 February 2003               [Page 39]
diff --git a/src/Unsupported/slp_client/scripts/sa_sample b/src/Unsupported/slp_client/scripts/sa_sample
deleted file mode 100644 (file)
index 61cb179..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/bin/bash
-
-#/*****************************************************************************
-# *  Description: sample shell script to run SA in daemon mode
-# *
-# *  Originated: May 16, 2003
-# *    Original Author: Mike Day md@soft-hackle.net
-# *                       mdday@us.ibm.com
-# *
-# *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/scripts/Attic/sa_sample,v 1.1 2003/05/21 15:14:10 mday Exp $                                                                     
-# *                                                                        
-# *  Copyright (c) 2003  IBM                                          
-# *  Copyright (c) 2003 Michael Day                                    
-# *                                                                           
-# *  Permission is hereby granted, free of charge, to any person obtaining a  
-# *  copy of this software and associated documentation files (the "Software"),
-# *  to deal in the Software without restriction, including without limitation 
-# *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
-# *  and/or sell copies of the Software, and to permit persons to whom the     
-# *  Software is furnished to do so, subject to the following conditions:       
-# * 
-# *  The above copyright notice and this permission notice shall be included in 
-# *  all copies or substantial portions of the Software.
-# * 
-# * 
-# *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-# *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-# *  DEALINGS IN THE SOFTWARE.
-# *
-# *****************************************************************************/
-
-
-
-## command line syntax for sa_srvreg
-#
-# slp_srvreg -- transmit an SLP Service Registration and print the results.
-# -------------------------------------------------------------------------
-# slp_srvreg  --type=service-type-string
-#            --url=url-string
-#             --attributes=attribute-string
-#            [--address=target-IP]
-#            [--port=target-port]
-#            [--scopes=scope-string]
-#            [--lifetime=seconds]
-#            [--interface=host-IP]
-#            [--daemon=true]
-#            [--use_da=true]
-#            [--test]
-#            [--spi=security-parameters-index] (not used)
-
-# All parameters must be a single string containing no spaces.
-# Always use the format of <parameter>=<value>.
-# Parameters enclosed in brackets are not optional.
-
-
-# number of urls we construct - translates into number of service adverts
-num_urls=0   
-
-# array to hold each service:url 
-urls[1]=""
-
-# service type string 
-service="service:nothing:"
-
-# protocol part of the url
-protocol_part="//"
-
-# path part of the url 
-path_part="/etc/nothing;version=1"
-
-# attribute string 
-attributes="(version=1)"
-
-# collect all the ip interfaces on this host
-# rely on formatting of the linux ifconfig command. 
-# this is a dirty hack
-IP_ADDRS=`/sbin/ifconfig | awk '/addr:/ {print $2}' | sed 's/addr://g'`
-
-
-# if slp_srvreg is already running in daemon mode, kill it
-killall slp_srvreg
-
-# loop on each ip address and use it to construct a service:url 
-for arg in $IP_ADDRS ; do 
-       let num_urls="$num_urls + 1"
-       urls[$num_urls]=$service
-       temp_string=${urls[$num_urls]}${protocol_part}
-       urls[$num_urls]=${temp_string}${arg}${path_part}
-       echo ${urls[$num_urls]}
-
-       if [ "$num_urls" -eq "1" ]
-       then 
-           slp_srvreg --type="$service" \
-                       --url=${urls[$num_urls]} \
-                       --attributes="$attributes" \
-                        --daemon=true \
-                        --address="127.0.0.1" &
-       else 
-           slp_srvreg --type="$service" \
-                       --url=${urls[$num_urls]} \
-                       --attributes="(version=2),(vendor=IBM)" \
-                       --address="127.0.0.1"
-
-       fi
-
-done 
diff --git a/src/Unsupported/slp_client/scripts/test_query b/src/Unsupported/slp_client/scripts/test_query
deleted file mode 100755 (executable)
index 43d11f1..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/bin/bash
-
-#/*****************************************************************************
-# *  Description: scripting shell for slp_client - generates an slp QUERY 
-# *
-# *  Originated: May 16, 2003
-# *    Original Author: Mike Day md@soft-hackle.net
-# *                       mdday@us.ibm.com
-# *
-# *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/scripts/Attic/test_query,v 1.1 2003/05/21 15:14:10 mday Exp $                                                                    
-# *                                                                        
-# *  Copyright (c) 2003  IBM                                          
-# *  Copyright (c) 2003 Michael Day                                    
-# *                                                                           
-# *  Permission is hereby granted, free of charge, to any person obtaining a  
-# *  copy of this software and associated documentation files (the "Software"),
-# *  to deal in the Software without restriction, including without limitation 
-# *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
-# *  and/or sell copies of the Software, and to permit persons to whom the     
-# *  Software is furnished to do so, subject to the following conditions:       
-# * 
-# *  The above copyright notice and this permission notice shall be included in 
-# *  all copies or substantial portions of the Software.
-# * 
-# * 
-# *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-# *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-# *  DEALINGS IN THE SOFTWARE.
-# *
-# *****************************************************************************/
-
-
-###########################################################################
-# This script shows how to use the slp_query command and tests the parameters
-# of a service request. Use it to verify your parameters are correct. To 
-# do an actual slp query, omit the --test command line option from the 
-# slp_query command below. 
-#
-# Usage: 
-# 
-# test_query -t <type> [-p <predicate>] [-s <scopes>]
-#            
-#            type: a valid service type string. Service type strings
-#                  may contain wildcards. e.g., -t"*" will match any
-#                  service type. "*" and "?" are valid wildcards. 
-#            
-#            predicate: an optional LDAP filter string. See 
-#                  ftp://ftp.rfc-editor.org/in-notes/rfc2254.txt
-#
-#            scopes: an optional SLP list string. It must be in the form
-#            "scope1[, scope2[, scope n] ]. e.g., "admin, eng, account"
-#
-###########################################################################
-
-PREDICATE=""
-SCOPE=""
-TYPE=""
-while getopts ":t:p:s:" opt; do
-    case $opt in 
-       t  ) TYPE=$OPTARG ;;
-       p  ) PREDICATE=$OPTARG ;;
-       s  ) SCOPE=$OPTARG ;; 
-       \? ) echo 'usage: test_query -t<type> -p<predicate> -s<scope> '
-            exit 1
-    esac
-done
-    shift $(($OPTIND - 1))
-
-echo "Testing a Service Request: "
-echo "   Type: " "$TYPE"
-echo "   Predicate: " "$PREDICATE"
-echo "   Scopes: " "$SCOPE" 
-
-slp_query --type="$TYPE" --predicate="$PREDICATE" --scopes="$SCOPES" --test
-
-case $? in
-    0 ) echo "Service Request is valid" 
-       exit 0;;
-    1)  echo "Service Type string (and possibly other strings) is invalid" 
-       exit 1;;
-    2)  echo "Predicate string (and possibly the scope string) is invalid" 
-       exit 1;;
-    3)  echo "Scope string is invalid"
-       exit 1;;
-esac
-
-
diff --git a/src/Unsupported/slp_client/scripts/test_reg b/src/Unsupported/slp_client/scripts/test_reg
deleted file mode 100755 (executable)
index 36214be..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/bash
-
-#/*****************************************************************************
-# *  Description: scripting shell for slp_client - generates an SLP SRVREG
-# *
-# *  Originated: May 20, 2003
-# *    Original Author: Mike Day md@soft-hackle.net
-# *                       mdday@us.ibm.com
-# *
-# *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/scripts/Attic/test_reg,v 1.1 2003/05/21 15:14:10 mday Exp $                                                              
-# *                                                                        
-# *  Copyright (c) 2003  IBM                                          
-# *  Copyright (c) 2003 Michael Day                                    
-# *                                                                           
-# *  Permission is hereby granted, free of charge, to any person obtaining a  
-# *  copy of this software and associated documentation files (the "Software"),
-# *  to deal in the Software without restriction, including without limitation 
-# *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
-# *  and/or sell copies of the Software, and to permit persons to whom the     
-# *  Software is furnished to do so, subject to the following conditions:       
-# * 
-# *  The above copyright notice and this permission notice shall be included in 
-# *  all copies or substantial portions of the Software.
-# * 
-# * 
-# *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-# *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-# *  DEALINGS IN THE SOFTWARE.
-# *
-# *****************************************************************************/
-
-
-###########################################################################
-# This script shows how to use the slp_srvreg command and tests the parameters
-# of a service registration. Use it to verify your parameters are correct. To 
-# do an actual slp registration, omit the --test command line option from the 
-# slp_srvreg command below. 
-#
-# Usage: 
-# 
-# test_reg -t<type> -u<url> -a<attributes> [-s<scopes>]
-#            
-#            type: a valid service type string. See 
-#                  ftp://ftp.rfc-editor.org/in-notes/rfc2609.txt
-#            
-#            url: a valid service url. See 
-#                 ftp://ftp.rfc-editor.org/in-notes/rfc2609.txt
-#
-#            attribute: an SLP attriute string. See
-#                       ftp://ftp.rfc-editor.org/in-notes/rfc2608.txt
-#
-#            scopes: an optional SLP list string. It must be in the form
-#            "scope1[, scope2[, scope n] ]. e.g., "admin, eng, account"
-#
-###########################################################################
-
-TYPE=""
-URL=""
-ATTRS=""
-SCOPE=""
-
-while getopts ":t:u:a:s:" opt; do
-    case $opt in 
-       t ) TYPE=$OPTARG ;;
-       u ) URL=$OPTARG ;;
-       a ) ATTRS=$OPTARG ;;
-       s ) SCOPE=$OPTARG ;; 
-       \? ) echo 'test_reg -t<type> -u<url> -a<attributes> [-s<scopes>]'
-            exit 1
-    esac
-done
-    shift $(($OPTIND - 1))
-
-echo "Testing a Service Registration: "
-echo "   Type: " "$TYPE"
-echo "   URL: " "$URL"
-echo "   Attributes: " "$ATTRS"
-echo "   Scopes: " "$SCOPE" 
-
-slp_srvreg --type="$TYPE" --url="$URL" --attributes="$ATTRS" --scopes="$SCOPES" --test
-
-case $? in
-    0) echo "Service Registration is valid"
-       exit 0;;
-    1)  echo "Service Type string (and possibly other strings) is invalid" 
-       exit 1;;
-    2)  echo "Url string (and possibly other strings) is invalid" 
-       exit 1;;
-    3)  echo "Attribute string (and possibly the scope string) is invalid"
-       exit 1;;
-    4) echo "Scope string is invalid"
-       exit 1;;
-esac
-
-
diff --git a/src/Unsupported/slp_client/src/Makefile b/src/Unsupported/slp_client/src/Makefile
deleted file mode 100644 (file)
index f79333c..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#//%2005////////////////////////////////////////////////////////////////////////
-#//
-#// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-#// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-#// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation, The Open Group.
-#// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; VERITAS Software Corporation; The Open Group.
-#//
-#// Permission is hereby granted, free of charge, to any person obtaining a copy
-#// of this software and associated documentation files (the "Software"), to
-#// deal in the Software without restriction, including without limitation the
-#// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-#// sell copies of the Software, and to permit persons to whom the Software is
-#// furnished to do so, subject to the following conditions:
-#// 
-#// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-#// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-#// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-#// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-#// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-#// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-#// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#//
-#//==============================================================================
-COMPONENTS = all
-CLIENT = client
-CLEAN = clean
-INSTALL = install 
-REMOVE = remove
-
-DIRS =         $(SRC_DIR)/kernel \
-       $(SRC_DIR)/cmd-utils
-
-all: $(COMPONENTS)
-.PHONY: all 
-
-client: $(CLIENT)
-.PHONY: client
-
-clean: $(CLEAN)
-.PHONY: clean
-
-install: $(INSTALL)
-.PHONY: install
-
-REMOVE: $(REMOVE)
-.PHONY: remove
-
-
-$(COMPONENTS) $(INSTALL) $(REMOVE):
-       $(foreach dir, $(DIRS), cd $(dir) && $(MAKE) $@;)
-$(CLEAN):
-       $(foreach dir, $(DIRS), cd $(dir) && $(MAKE) -k $@;)
-$(CLIENT):
-       cd $(SRC_DIR)/cmd-utils && $(MAKE)  
diff --git a/src/Unsupported/slp_client/src/Makefile.nt b/src/Unsupported/slp_client/src/Makefile.nt
deleted file mode 100644 (file)
index 2952b48..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#//%2005////////////////////////////////////////////////////////////////////////
-#//
-#// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-#// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-#// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation, The Open Group.
-#// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; VERITAS Software Corporation; The Open Group.
-#//
-#// Permission is hereby granted, free of charge, to any person obtaining a copy
-#// of this software and associated documentation files (the "Software"), to
-#// deal in the Software without restriction, including without limitation the
-#// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-#// sell copies of the Software, and to permit persons to whom the Software is
-#// furnished to do so, subject to the following conditions:
-#// 
-#// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-#// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-#// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-#// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-#// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-#// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-#// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#//
-#//==============================================================================
-
-DIRS = cmd-utils
-
-all clean:
-       $(foreach dir, $(DIRS), cd $(dir) && $(MAKE) -f Makefile.nt $@;)
\ No newline at end of file
diff --git a/src/Unsupported/slp_client/src/cmd-utils/Makefile b/src/Unsupported/slp_client/src/cmd-utils/Makefile
deleted file mode 100644 (file)
index 3477d8f..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#//%2005////////////////////////////////////////////////////////////////////////
-#//
-#// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-#// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-#// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation, The Open Group.
-#// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; VERITAS Software Corporation; The Open Group.
-#//
-#// Permission is hereby granted, free of charge, to any person obtaining a copy
-#// of this software and associated documentation files (the "Software"), to
-#// deal in the Software without restriction, including without limitation the
-#// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-#// sell copies of the Software, and to permit persons to whom the Software is
-#// furnished to do so, subject to the following conditions:
-#// 
-#// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-#// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-#// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-#// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-#// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-#// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-#// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#//
-#//==============================================================================
-#/*****************************************************************************
-# *
-# *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/Attic/Makefile,v 1.2 2005/05/12 15:33:31 martin Exp $                                                              
-# *                                                                        
-# *  Copyright (c) 2001 - 2003  IBM                                          
-# *  Copyright (c) 2000 - 2003 Michael Day                                    
-# *                                                                           
-# *  Permission is hereby granted, free of charge, to any person obtaining a  
-# *  copy of this software and associated documentation files (the "Software"),
-# *  to deal in the Software without restriction, including without limitation 
-# *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
-# *  and/or sell copies of the Software, and to permit persons to whom the     
-# *  Software is furnished to do so, subject to the following conditions:       
-# * 
-# *  The above copyright notice and this permission notice shall be included in 
-# *  all copies or substantial portions of the Software.
-# * 
-# * 
-# *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-# *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-# *  DEALINGS IN THE SOFTWARE.
-# *
-# *****************************************************************************/
-
-
-
-
-
-
-PROJECT = cmd-utils
-SRC_DIR := $(shell pwd)
-
-export OBJ_DIR := $(OBJ_DIR_CLIENT)
-COMPONENTS = all
-CLEAN = clean
-INSTALL = install
-
-export SRC_CMD_UTILS := $(SRC_DIR) 
-export SRC_CLIENT := $(SRC_DIR)/slp_client
-export SRC_SRVREG := $(SRC_DIR)/slp_srvreg
-export SRC_QUERY := $(SRC_DIR)/slp_query
-
-
-SRC_DIRS := $(SRC_CLIENT) $(SRC_SRVREG) $(SRC_QUERY) 
-
-all: $(COMPONENTS)
-.PHONY: all
-
-clean: $(CLEAN)
-.PHONY: clean
-
-install: $(INSTALL)
-.PHONY: install
-
-$(COMPONENTS) $(INSTALL):
-       $(foreach dir, $(SRC_DIRS),cd $(dir) && $(MAKE) $@;)
-
-$(CLEAN) :
-       $(IGNORE)$(LIBTOOL) $(RM) $(RM_FLAGS) *.o
-       $(IGNORE)$(LIBTOOL) $(RM) $(RM_FLAGS) *.lo
-       $(foreach dir, $(SRC_DIRS),cd $(dir) && $(MAKE) -k $@;) 
diff --git a/src/Unsupported/slp_client/src/cmd-utils/Makefile.nt b/src/Unsupported/slp_client/src/cmd-utils/Makefile.nt
deleted file mode 100644 (file)
index e424490..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#//%2005////////////////////////////////////////////////////////////////////////
-#//
-#// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-#// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-#// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation, The Open Group.
-#// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; VERITAS Software Corporation; The Open Group.
-#//
-#// Permission is hereby granted, free of charge, to any person obtaining a copy
-#// of this software and associated documentation files (the "Software"), to
-#// deal in the Software without restriction, including without limitation the
-#// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-#// sell copies of the Software, and to permit persons to whom the Software is
-#// furnished to do so, subject to the following conditions:
-#// 
-#// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-#// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-#// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-#// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-#// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-#// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-#// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#//
-#//==============================================================================
-#
-# Need to run vcvars32.bat and make sure bison 1.35 is in your path
-#
-# c:\progra~1\MICROS~1.NET\Vc7\bin\vcvars32
-# set path=%path%;C:\Program Files\GnuWin32\bin
-
-SRC_CLIENT=slp_client
-SRC_SRVREG=../slp_srvreg
-SRC_QUERY=../slp_query
-
-
-SRC_DIRS := $(SRC_CLIENT) $(SRC_SRVREG) $(SRC_QUERY) 
-
-all clean:
-       $(foreach dir, $(SRC_DIRS),cd $(dir) && $(MAKE) -f Makefile.nt $@;)
diff --git a/src/Unsupported/slp_client/src/cmd-utils/endian.h b/src/Unsupported/slp_client/src/cmd-utils/endian.h
deleted file mode 100644 (file)
index a2e3968..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-//%2005////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation, The Open Group.
-// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-// EMC Corporation; VERITAS Software Corporation; The Open Group.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-// 
-// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-//==============================================================================
-/*****************************************************************************
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/Attic/endian.h,v 1.5 2005/02/05 23:01:30 karl Exp $                                                                 
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-
-#define        __LITTLE_ENDIAN__       1234
-#define        __BIG_ENDIAN__  4321
-#define        __PDP_ENDIAN__  3412
-
-#ifdef NUCLEUS
-   #define __BYTE_ORDER__ __BIG_ENDIAN__
-#else
-   #ifdef WORDS_BIGENDIAN
-      #define __BYTE_ORDER__ __BIG_ENDIAN__
-   #else 
-      #define __BYTE_ORDER__ __LITTLE_ENDIAN__
-   #endif 
-#endif
diff --git a/src/Unsupported/slp_client/src/cmd-utils/lslp-common-defs.h b/src/Unsupported/slp_client/src/cmd-utils/lslp-common-defs.h
deleted file mode 100755 (executable)
index 07a13c9..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-//%2005////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation, The Open Group.
-// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-// EMC Corporation; VERITAS Software Corporation; The Open Group.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-// 
-// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-//==============================================================================
-/*****************************************************************************
- *  Description:   
- *
- *  Originated: December 20, 2001
- *     Original Author: Mike Day md@soft-hackle.net
- *                                mdd@us.ibm.com
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/Attic/lslp-common-defs.h,v 1.5 2005/02/05 23:01:30 karl Exp $                                                               
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-
-#ifndef _LSLP_COMMON_INCLUDE_
-#define _LSLP_COMMON_INCLUDE_
-
-/* platform compatibility includes */
-#include "../../config.h"
-#include OS_PORT_INCLUDE
-
-#endif /* _LSLP_COMMON_INCLUDE_ */
diff --git a/src/Unsupported/slp_client/src/cmd-utils/lslp-linux.c b/src/Unsupported/slp_client/src/cmd-utils/lslp-linux.c
deleted file mode 100644 (file)
index 005d742..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*****************************************************************************
- *  Description:   
- *
- *  Originated: December 20, 2001
- *     Original Author: Mike Day md@soft-hackle.net
- *                                mdd@us.ibm.com
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/Attic/lslp-linux.c,v 1.1 2003/05/21 15:14:08 mday Exp $                                                                     
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <assert.h>
-#include "lslp-linux.h"
-
-void  num_to_ascii(uint32 val, int8 *buf, int32 radix, BOOL is_neg)
-{
-  int8 *p;
-  int8 *firstdig;
-  int8 temp;
-  uint32 digval;
-
-  assert(buf != NULL);
-  p = buf;
-  /* safeguard against a div by zero fault ! */
-  if(val == 0){
-    *p++ = '0';
-    *p = 0x00;
-    return;
-  }
-
-  /* default to a decimal radix */
-  if (radix <= 0)
-    radix = 10;
-
-  /* negate two's complement, print a minus sign */
-  if (is_neg == TRUE){
-    *p++ = '-';
-    val = (uint32)(-(int32)val);
-  }
-
-  firstdig = p;
-
-  do {
-    digval = (uint32) (val % radix);
-    val /= radix;
-    if(digval > 9)
-      *p++ = (int8)(digval - 10 + 'a');
-    else
-      *p++ = (int8)(digval + '0');
-  } while (val > 0);
-
-  /* by getting the mod value before the div value, the digits are */
-  /* reversed in the buffer */
-  /* terminate the string */
-  *p-- = '\0';
-  do {
-    temp = *p;
-    *p = *firstdig;
-    *firstdig = temp;
-    --p;
-    ++firstdig;
-  }while(firstdig < p);
-  return;  
-}
-
-
-void  hug_num_to_ascii(uint64 val, int8 *buf, int32 radix, BOOL is_neg)
-{
-  int8 *p;
-  int8 *firstdig;
-  int8 temp;
-  uint64 digval;
-
-  assert(buf != NULL);
-  p = buf;
-  /* safeguard against a div by zero fault ! */
-  if(val == 0){
-    *p++ = '0';
-    *p = 0x00;
-    return;
-  }
-
-  /* default to a decimal radix */
-  if (radix <= 0)
-    radix = 10;
-
-  /* negate two's complement, print a minus sign */
-  if (is_neg == TRUE){
-    *p++ = '-';
-    val = (uint64)(-(int64)val);
-  }
-
-  firstdig = p;
-
-  do {
-    digval = (uint64)(val % radix);
-    val /= radix;
-    if(digval > 9)
-      *p++ = (int8)(digval - 10 + 'a');
-    else
-      *p++ = (int8)(digval + '0');
-  } while (val > 0);
-
-  /* by getting the mod value before the div value, the digits are */
-  /* reversed in the buffer */
-  /* terminate the string */
-  *p-- = '\0';
-  do {
-    temp = *p;
-    *p = *firstdig;
-    *firstdig = temp;
-    --p;
-    ++firstdig;
-  }while(firstdig < p);
-  return;  
-}
-
-
-/* signal handler */
-void _lslp_term(int sig) 
-{
-  static int dieNow;
-  
-  if(dieNow)
-    raise(sig);  /* recurse into oblivion */
-  dieNow = 1; 
-  /* kill threads */
-  signal(sig, SIG_DFL);
-  raise(sig);
-}
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/lslp-linux.h b/src/Unsupported/slp_client/src/cmd-utils/lslp-linux.h
deleted file mode 100644 (file)
index fcd0a97..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-//%2005////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation, The Open Group.
-// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-// EMC Corporation; VERITAS Software Corporation; The Open Group.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-// 
-// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-//==============================================================================
-/*****************************************************************************
- *  Description:   
- *
- *  Originated: March 15, 2000
- *     Original Author: Mike Day md@soft-hackle.net
- *                                mdd@us.ibm.com
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/Attic/lslp-linux.h,v 1.7 2005/11/27 03:11:39 jim.wunderlich Exp $                                                                   
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-
-#ifndef _LSLP_LINUX_INCLUDE_
-#define _LSLP_LINUX_INCLUDE_
-
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <unistd.h> 
-#include <time.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <pthread.h>
-#include <semaphore.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <errno.h>
-#include <Pegasus/Common/PegasusAssert.h>
-#include <memory.h>
-#include <string.h>
-#include <ctype.h>
-#include <net/if.h>
-typedef char int8;
-typedef        unsigned char uint8;
-typedef uint8 byte;
-typedef short int16;
-typedef unsigned short uint16;
-typedef int int32;
-typedef unsigned int uint32;
-typedef long long int64;
-typedef unsigned long long uint64;
-typedef uint32 BOOL;
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void _lslp_term(int sig) ;
-void  num_to_ascii(uint32 val, int8 *buf, int32 radix, BOOL is_neg);
-void  hug_num_to_ascii(uint64 val, int8 *buf, int32 radix, BOOL is_neg);
-
-  typedef int SOCKETD;
-  
-
-#define LSLP_DEFAULT_WAIT 100
-#define LSLP_EXTRA_WAIT 250
-#define _LSLP_CREATE_MUTEX(h) ((sem_init((sem_t *)&(h), 0, 1)) ? -1 : 0)
-#define CREATE_MUTEX(h) _LSLP_CREATE_MUTEX((h))
-#define _LSLP_WAIT_MUTEX(h, i, c)  lslp_linux_wait_mutex(((sem_t *)&(h)), (i), (c))
-#define WAIT_MUTEX(h, i, c) _LSLP_WAIT_MUTEX((h), (i), (c))
-#define _LSLP_CLOSE_MUTEX(h) sem_destroy((sem_t *)&(h))
-#define CLOSE_MUTEX(h) _LSLP_CLOSE_MUTEX((h))
-
-#define _LSLP_RELEASE_MUTEX(h) sem_post((sem_t *)&(h))
-#define RELEASE_MUTEX(h) _LSLP_RELEASE_MUTEX((h))
-#define _LSLP_DUP_MUTEX(h) ((sem_t *)&(h))
-
-#define _LSLP_CREATE_SEM(h, i) ((sem_init((sem_t *)&(h), 0, (i))) ? -1 : 0)
-#define _LSLP_WAIT_SEM _LSLP_WAIT_MUTEX
-#define _LSLP_SIGNAL_SEM _LSLP_RELEASE_MUTEX
-#define _LSLP_CLOSE_SEM _LSLP_CLOSE_MUTEX
-
-#define LSLP_WAIT_FAILED 0xffffffff
-#define WAIT_FAILED LSLP_WAIT_FAILED
-#define LSLP_WAIT_OK  0x00000000
-#define LSLP_WAIT_TIMEOUT 0xffffffff
-#define WAIT_TIMEOUT LSLP_WAIT_TIMEOUT
-#define LSLP_WAIT_ABANDONDED 0xffffffff
-
-#define _LSLP_SLEEP(m) \
-  { if(m) { \
-      struct timespec wait_time , actual_time; \
-      wait_time.tv_sec = (m / 1000); ; wait_time.tv_nsec = (((m % 1000) * 1000) * 1000);  \
-      nanosleep(&wait_time, &actual_time); \
-  } }
-  
-
-#define INVALID_SOCKET -1
-#define SOCKET_ERROR -1
-#define SD_BOTH SHUT_RDWR
-
-#define FAR
-
-#define LSLP_SEM_T sem_t
-#define LSLP_THREAD_T pthread_t
-
-/** void *(*start)(void *), ustacksize, void *arg                   **/
-#define _LSLP_BEGINTHREAD(start, stacksize, arg) \
-          lslp_linux_begin_thread((start),(stacksize),(arg))
-
-#define _LSLP_STRTOK(n, d, s) strtok_r((n), (d), (s))
-
-#define _LSLP_ENDTHREAD(handle, code)  pthread_exit((handle))
-#define _LSLP_SIG_ACTION() _lslp_sig_action()
-#define _LSLP_SIG_ACTION_THREAD() _lslp_thread_sig_action()
-#define _LSLP_PUSH_HANDLER(a, b) pthread_cleanup_push((a), (b))
-#define _LSLP_POP_HANDLER(a) pthread_cleanup_pop((a))
-
-
-#define LSLP_MAXPATH FILENAME_MAX
-#define LSLP_NEWLINE \r
-
-#define SOCKADDR_IN struct sockaddr_in
-#define SOCKADDR struct sockaddr
-#define SOCKET int
-
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#define _ultoa(v, b, r) num_to_ascii((uint32)(v), (b), (r), FALSE)
-#define _itoa(v, b, r) num_to_ascii((uint32)(v), (b), (r), (((r) == 10) && ((v) < 0)))
-#define _ltoa(v, b, r) num_to_ascii((uint32)(v), (b), (r), (((r) == 10) && ((v) < 0)))
-#define _ul64toa(v, b, r) huge_num_to_ascii((uint64)(v), (b), (r), FALSE)
-#define _i64toa(v, b, r) huge_num_to_ascii((uint64)(v), (b), (r), (((r) == 10) && ((v) < 0)))
-
-
-
-#define LSLP_HEXDUMP(c) ((((c) > 31) && ((c) < 128)) ? (c) : '.')
-#define LSLP_MSG_STRINGS               4
-#define LSLP_STRINGS_HEXDUMP   1
-#define LSLP_STRINGS_WORKDUMP   2
-#define LSLP_STRINGS_NADUMP     3
-
-
-#define _LSLP_CLOSESOCKET close
-#define _LSLP_SOCKET(a, b, c) socket((int)(a), (int)(b), (int)(c))
-#define _LSLP_BIND(a, b, c) bind((int)(a), (const struct sockaddr *)(b), (socklen_t)(c))
-#define _LSLP_CONNECT(a, b, c) connect((int)(a), (const struct sockaddr *)(b), (socklen_t)(c))
-#define _LSLP_LISTEN(a, b) listen((int)(a), (int)(b))
-#define _LSLP_ACCEPT(a, b, c) accept((int)(a), (struct sockaddr *)(b), (socklen_t *)(c))
-#define _LSLP_SEND(a, b, c, d) send((int)(a), (const void *)(b), (size_t)(c), (int)(d))
-#define _LSLP_SENDTO(a, b, c, d, e, f) \
-           sendto((int)(a), (const void *)(b), (size_t)(c), (int)(d), \
-                  (const struct sockaddr *)(e), (socklen_t)(f)) 
-#define _LSLP_RECV(a, b, c, d) recv((int)(a), (void *)(b), (size_t)(c), (int)(d))
-#define _LSLP_RECV_FROM(a, b, c, d, e, f) \
-           recvfrom((int)(a), (void *)(b), (size_t)(c), (int)(d), \
-                    (struct sockaddr *)(e), (socklen_t *)(f))
-#define _LSLP_GETHOSTBYNAME(a) gethostbyname((const char *)(a))
-#define _LSLP_GETHOSTBYADDR(a, b, c) gethostbyaddr( (const void *)(a), (socklen_t)(b), (int)(c))
-#define _LSLP_SETSOCKOPT(a, b, c, d, e) \
-           setsockopt((int)(a), (int)(b), (int)(c), (const void *)(d), (socklen_t)(e))
-#define _LSLP_GETSOCKOPT(a, b, c, d, e) \
-           getsockopt((int)(a), (int)(b), (int)(c), (void *)(d), (socklen_t)(e))
-#define _LSLP_SET_TTL(s, t)  setsockopt((s), IPPROTO_IP, IP_MULTICAST_TTL, (const char *)&(t), sizeof((t))) 
-
-#define _LSLP_ABORT(a) { shutdown((int)(a), SHUT_RDWR) ; close((int)(a)); }
-#define LSLP_FD_SET fd_set
-
-#define _LSLP_SELECT(a, b, c, d, e) \
-           select((int)(a), (fd_set *)(b), (fd_set *)(c), (fd_set *)(d), (struct timeval *)(e))
-#define _LSLP_FD_ISSET(a, b) FD_ISSET((int)(a), (fd_set *)(b))
-#define _LSLP_FD_SET(a, b) FD_SET((int)(a), (fd_set *)(b))
-#define _LSLP_FD_ZERO(a) FD_ZERO((fd_set *)(a))
-#define _LSLP_FD_CLR(a, b) FD_CLEAR((int)(a), (fd_set *)(b))
-
-#define _LSLP_IOCTLSOCKET ioctl
-#define _LSLP_GETLASTERROR() errno
-
-#define _LSLP_DEINIT_NETWORK()
-
-#define _LSLP_INIT_NETWORK()
-#define _LSLP_DEINIT_NETWORK()
-
-#define LSLP_MTU 1500
-
-/* ascii and char tests and conversions */
-
-#define _LSLP_ISASCII(a) isascii(a)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _LSLP_LINUX_INCLUDE_ */
diff --git a/src/Unsupported/slp_client/src/cmd-utils/lslp-nucleus.c b/src/Unsupported/slp_client/src/cmd-utils/lslp-nucleus.c
deleted file mode 100644 (file)
index 52da931..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*****************************************************************************
- *  Description:   portability routines for nucleus RTOS
- *
- *  Originated: December 19, 2001 
- *     Original Author: Mike Day md@soft-hackle.net
- *                                mdday@us.ibm.com
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/Attic/lslp-nucleus.c,v 1.1 2003/05/21 15:14:08 mday Exp $                                                                   
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-
-#include "lslp-nucleus.h"
-
-unsigned int errno;
-
-
-NU_HOSTENT * nucleus_gethostbyname(const char *name)         //jeb
-{
-  static NU_HOSTENT name_host_entry;
-  
-  if (NU_SUCCESS == NU_Get_Host_By_Name((char*)name, &name_host_entry))   //jeb
-    return &name_host_entry;
-  return NULL;
-}
-
-NU_HOSTENT * nucleus_gethostbyaddr(const void *addr, int len, int type)   //jeb
-{
-  static NU_HOSTENT addr_host_entry;
-
-  if ( type != NU_FAMILY_IP || len != 4 )
-    return NULL;
-  if(NU_SUCCESS == NU_Get_Host_By_Addr((char *)addr, len, type, &addr_host_entry))
-    return &addr_host_entry;
-  return NULL;
-}
-            
-
-/************************************************************************
-*                                                                       
-*   FUNCTION                                                              
-*
-*       inet_ntoa                                      
-*
-*   DESCRIPTION
-*
-*       This function transforms a UINT32 IP address into a string of
-*       the form xxx.xxx.xxx.xxx.
-*                                                                       
-*   INPUTS                                                                
-*
-*       in      The data structure containing the UINT32 IP address.
-*                                                                       
-*   OUTPUTS                                                               
-*
-*       A pointer to the new string.
-*                                                                       
-*************************************************************************/
-char *inet_ntoa(struct in_addr in)
-{
-    static      char    b[18];
-    register    unsigned char   *p;
-    CHAR        temp[3];
-    INT         i, j;
-    
-    memset(b, 0, 18);
-    p = (UINT8 *)&in;
-
-    for (i = 0; i <= 3; i++)
-    {
-        if (p[i] == 0)
-        {
-            for (j = 0; j < 3; j++)
-                strcat(b, (CHAR*)(NU_ITOA((INT)(p[j]), temp, 10)));
-        }
-        else    
-            strcat(b, (CHAR*)(NU_ITOA((INT)(p[i]), temp, 10)));
-
-        if (i != 3)
-            strcat(b, ".");
-    }
-
-    return (b);
-}
-
-/************************************************************************
-*                                                                       
-*   FUNCTION                                                              
-*
-*       assert                                      
-*                                                                       
-*************************************************************************/
-//#ifdef SLPDBG
-//void assert(int expr)
-//{
-//  if (!expr)
-//       _system_info(TRUE,"ASSERT:%s/%d", __FILE__, __LINE__);
-////_system_info(TRUE,"ASSERT:%s/%d\n", __FILE__, __LINE__); HALT;}
-//}
-//#endif
diff --git a/src/Unsupported/slp_client/src/cmd-utils/lslp-nucleus.h b/src/Unsupported/slp_client/src/cmd-utils/lslp-nucleus.h
deleted file mode 100644 (file)
index e3cf9b4..0000000
+++ /dev/null
@@ -1,390 +0,0 @@
-//%2005////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation, The Open Group.
-// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-// EMC Corporation; VERITAS Software Corporation; The Open Group.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-// 
-// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-//==============================================================================
-/*****************************************************************************
- *  Description:   portability routines for nucleus RTOS
- *
- *  Originated: December 17, 2001 
- *     Original Author: Mike Day md@soft-hackle.net
- *                                mdday@us.ibm.com 
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/Attic/lslp-nucleus.h,v 1.6 2005/11/27 03:11:39 jim.wunderlich Exp $                                                                 
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-
-
-#ifndef _LSLP_NUCLEUS_INCL_
-#define LSLP_NUCLEUS_INCL_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#include "time.h"
-
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "sp_cmn.hc"
-#include "tcpsprt.h" //define for net version
-#include "net\target.h"
-#include "net\inc\nu_net.h"
-#include "net\inc\arp.h"
-#include "net\inc\socketd.h"
-#include "net\inc\sockdefs.h"
-//#include "tcpst.hc"
-UINT32  tcpst_inet_addr(char *);
-
-  /* DELETE these lines after you are ready to proceed ! */
-//jeb#error "Remember to define the correct BYTE ORDER in the file endian.h"
-//jeb#error "Check to ensure there is a nucleus implementation of inet_addr(char *) - I can write one if you need it"
-//jeb#error "Check to ensure there is a nucleus implementation of htons(short int) - I can write one if you need it"
-//jeb#error "Check to ensure there is a nucleus implementation of inet_ntoa(unsigned int) - I can write one if you need it"
-//jeb#error "Need a gethostname function (returns a string holding the hostname of the management module)"
-//jeb#error "prototype is int gethostname(char *buffer, int buffer_size) ; return zero upon success "
-//jeb#error "need to define _LSLP_STRTOK( char *string, char *delimitors, char **state), which is a thread-safe version of strtok"
-/* #error "errno is a global variable holding the code for the most recent failure" */
-
-/*** nucleus include files ***/
-
-/** below are posix include files that may or may not be appropriate to Nucleus ***/
-/*** modify to include the correct files for the nucleus runtimes ***/
-//jeb#include <signal.h>
-//jeb#include <stdio.h>
-//jeb#include <stdlib.h>
-//jeb#include <stdarg.h>
-//jeb#include <unistd.h> 
-//jeb#include <time.h>
-//jeb#include <sys/types.h>
-//jeb#include <sys/time.h>
-//jeb#include <netinet/in.h>
-//jeb#include <arpa/inet.h>
-//jeb#include <sys/ioctl.h>
-//jeb#include <sys/socket.h>
-//jeb#include <sys/select.h>
-//jeb#include <netdb.h>
-//jeb#include <Pegasus/Common/PegasusAssert.h>
-//jeb#include <memory.h>
-//jeb#include <string.h>
-//jeb#include <ctype.h>
-  
-  
-  /*** typedefs ***/
-  typedef char int8;
-  typedef CHAR int8;
-  typedef INT8 int8;
-  
-
-  typedef unsigned char uint8;
-  typedef unsigned char byte;
-  typedef UINT8 uint8;
-
-  typedef short int16;
-  typedef INT16 int16;
-  
-  typedef unsigned short uint16;
-  typedef UINT16 uint16;
-
-  typedef int int32;
-  typedef unsigned long uint32;
-
-//jeb chg  typedef int INT;
-  typedef int SOCKETD;
-  typedef int SOCKET;
-  
-  
-/* ATTN << Thu Dec 20 11:35:36 2001 mdd >> */
-
-#ifdef BOOL   //jeb 
-#undef BOOL
-  typedef uint32 BOOL;
-#endif  
-  
-  
-  /* ATTN << Tue Dec 18 09:40:43 2001 mdd >> */
-  /* this is a variable structure that probably has an option
-     id and then a variable sized buffer to hold the results */
-/*   typedef unsigned int SCK_IOCTL_OPTION ; */
-  
-  /* probably don't need long longs  */
-  /**  typedef __int64 int64; **/
-  /**  typedef unsigned __int64 uint64; **/  //jeb fix
-  
-  typedef int STATUS;
-  
-  struct in_addr 
-  {
-    uint32 s_addr;
-  };
-  
-  typedef struct sockaddr
-  {
-    uint8 sa_len;
-    uint8 sa_family;
-    char sa_data[14];
-  } SOCKADDR ;
-  
-                 
-  typedef struct sockaddr_in     
-  {
-//jeb    uint8 sin_len;
-    int16 sin_family;
-    uint16 sin_port;
-    struct in_addr sin_addr;
-    char   *sin_zero;
-//    char sin_zero[8];
-  } SOCKADDR_IN ;
-  
-  struct hostent
-  {
-    char *h_name;
-    char **h_alias;
-    INT16 h_addrtype;
-    INT16 h_length;
-//    char *h_addr;               //jeb
-    char       **h_addr_list;
-  };
-  
-//jeb  extern NU_Host_Ent * nucleus_gethostbyname(const char *name);
-//jeb   extern NU_Host_Ent * nucleus_gethostbyaddr( const void *addr, int len, int type);
-  extern NU_HOSTENT * nucleus_gethostbyname(const char *name);
-  extern NU_HOSTENT * nucleus_gethostbyaddr( const void *addr, int len, int type);
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#define SOCK_DGRAM NU_TYPE_DGRAM
-#define SOCK_STREAM NU_TYPE_STREAM
-#define UNUSED_NU_PARM 0
-
-#define INVALID_SOCKET NU_INVALID_SOCKET 
-#define SOCKET_ERROR NU_INVALID_SOCKET  
-//jeb strt add
-#define AF_INET SK_FAM_IP 
-#define INADDR_NONE 0 
-#define INADDR_ANY INADDR_NONE 
-//jeb end add
-
-/* ATTN need to define these error constants for nucleus << Tue Dec 18 16:22:28 2001 mdd >> */
-
-#define EINTR     /* call was interrupted */
-#define ENOTSOCK INVALID_SOCKET
-#define EADDRNOTAVAIL 
-#define EAFNOSUPPORT 
-#define EISCONN 
-#define ETIMEDOUT 
-#define ECONNREFUSED 
-#define ENETUNREACH 
-#define EADDRINUSE 
-#define EINPROGRESS 
-#define EALREADY 
-#define EWOULDBLOCK 
-
-
-    /*** function macros ***/
-
-  /*** << Mon Dec 17 17:28:24 2001 mdd >> 
-
-       NOTE: Many of these calls require unused or null values for parameters. 
-       I've substituted (hardcoded) these parameters where I could find them. 
-       This is not very portable nor maintainable; perhaps you will find a better solution !
-
-  ***/
-
-#define _LSLP_CLOSESOCKET(a)  NU_Close_Socket((int)(a)) 
-#define _LSLP_SOCKET(a, b, c) NU_Socket( NU_FAMILY_IP, ((INT16)(b)), NU_NONE )
-//jeb
-#define _LSLP_BIND(a, b, c) \
-           NU_Bind ((INT)(a),((struct addr_struct *)(b)),UNUSED_NU_PARM )
-#define _LSLP_CONNECT(a, b, c ) \
-           NU_Connect ((INT)(a), \
-              ((struct addr_struct *)(b)), \
-                    UNUSED_NU_PARM)
-#define _LSLP_LISTEN(a, b) NU_Listen ((INT)(a), (UINT16)(b))
-#define _LSLP_ACCEPT(a, b, c) \
-           NU_Accept ((INT)(a), \
-                     ((struct addr_struct *)(b)), \
-                      UNUSED_NU_PARM )
-#define _LSLP_SEND(a, b, c, d) NU_Send ((INT)(a), (CHAR *)(b), (UINT16)(c), UNUSED_NU_PARM)
-#define _LSLP_SENDTO(a, b, c, d, e, f) \
-             NU_Send_To ((INT)(a), (char *)(b), (UINT16)(c), (UNUSED_NU_PARM), \
-                         ((struct addr_struct *)(e)), \
-                         UNUSED_NU_PARM )
-#define _LSLP_RECV(a, b, c, d)  NU_Recv ((INT)(a), (char *)(b), (UINT16)(c), UNUSED_NU_PARM )
-#define _LSLP_RECV_FROM(a, b, c, d, e, f) \
-             NU_Recv_From ((INT)(a), (char *)(b), (INT16)(c), (UNUSED_NU_PARM), \
-             ((struct addr_struct *)(e)), \
-             UNUSED_NU_PARM)
-
-/* << Tue Dec 18 07:53:12 2001 mdd >> ATTN need to redefine these gethost functions   */
-/* for all platforms  */
-
-#define _LSLP_GETHOSTBYNAME(a) \
-         (struct hostent *) nucleus_gethostbyname((const char *)(a))
-#define _LSLP_GETHOSTBYADDR(a, b, c ) \
-           (struct hostent *) nucleus_gethostbyaddr( (const void *)(a), (int)(b), (int)(c))
-
-#define _LSLP_SETSOCKOPT(a, b, c, d, e) \
-             NU_Setsockopt(((INT)(a)), ((INT)(b)), ((INT)(c)), ((void *)(d)), ((INT)(e))) 
-#define _LSLP_GETSOCKOPT(a, b, c, d, e) \
-             NU_Getsockopt(((INT)(a)), ((INT)(b)), ((INT)(c)), ((void *)(d)), ((INT *)(e)))
-
-#define _LSLP_SET_TTL(s, t)  NU_Setsockopt((s), IPPROTO_IP, IP_MULTICAST_TTL, (void *)&(t), sizeof((t)))      //jeb
-
-/* << Tue Dec 18 08:16:59 2001 mdd >> ATTN need to redefine abort to be shutdown & close */
-#define _LSLP_ABORT(a) NU_Abort(((INT)(a))) 
-
-#define _LSLP_SLEEP(a) _sleep((int)(a))
-
-//jeb strtok
-#define _LSLP_STRTOK(s, d, x) strtok(((char*)(s)),((const char *)(d)))  
-//jeb assert
-
-#define SLPDBG
-//#ifdef SLPDBG
-//void PEGASUS_ASSERT(int);
-#define assert(a) _system_info((!(a)),"ASSERT:%s/%d", __FILE__, __LINE__)
-//#else
-//#define assert(a) ((void)0)
-//#endif
-
-#define htons(x)       INTSWAP((unsigned short)(x))
-#define ntohs(x)    INTSWAP((unsigned short)(x))
-#define ntohl(x)       LONGSWAP((unsigned long)(x))
-#define inet_addr(x) tcpst_inet_addr((char *)(x))
-
-#define _itoa(a,b,c) itoa(((int)(a)),((char*)(b)),((int)(c)))
-//end jeb
-
-/* << Tue Dec 18 09:54:25 2001 mdd >> ATTN the final parameter is a pointer on windows */
-/* and unix, but is an integer on Nucleus that specifies timer ticks */
-
-  struct _lslp_timeval 
-  {
-    uint32 tv_sec;
-    uint32 tv_usec;
-  } ;
-//jeb 
-  struct timeval 
-  {
-    uint32 tv_sec;
-    uint32 tv_usec;
-  } ;
-//jeb 
-
-//jeb  typedef TIMEVAL timeval;
-  
-#ifdef PLUS
-#define _LSLP_SELECT(a, b, c, d, e ) \
-             NU_Select(((INT)(a)), ((FD_SET *)(b)), ((FD_SET *)(c)), ((FD_SET *)(d)), \
-                       ((UNSIGNED)(((struct _lslp_timeval *)(e))->tv_usec)))
-#else 
-#define _LSLP_SELECT(a, b, c, d, e ) \
-             NU_Select(((INT)(a)), ((FD_SET *)(b)), ((FD_SET *)(c)), ((FD_SET *)(d)), \ 
-                      (sint)((((struct _lslp_timeval *)(e))->tv_usec) & 0x7fffffff  ) )
-#endif 
-#define LSLP_FD_SET FD_SET
-#define _LSLP_FD_ISSET(a, b) NU_FD_Check(((INT)(a)), ((FD_SET *)(b)))
-#define _LSLP_FD_SET(a, b)  NU_FD_Set(((INT)(a)), ((FD_SET *)(b)))
-#define _LSLP_FD_ZERO(a) NU_FD_Init(((FD_SET *)(a)))
-#define _LSLP_FD_CLR(a, b)  NU_FD_Reset(((INT)(a)), ((FD_SET *)(b)))
-
-       
-/* ATTN << Tue Dec 18 10:42:19 2001 mdd >> */
-
-//jeb #define _LSLP_IOCTLSOCKET(a, b, c) #error "See Nucleus NET Reference Manual for limitations on usage of ioctl\n"
-
-/* ATTN << Tue Dec 18 12:54:40 2001 mdd >> */
-#define _LSLP_GETLASTERROR() 
-
-
-  /***** 
-
-  We probably don't need these to be defined << Tue Dec 18 16:21:23 2001 mdd >> 
-
-  STATUS NU_Send_To_Raw(INT socketd, char *buff, UINT16 nbytes, INT16 flags,
-  struct addr_struct *to, INT16 addrlen);
-  
-  INT16  NU_Get_IPRaw_PCB(INT socketd, struct sock_struct *);
-  
-  jeb start add
-  STATUS NU_Recv_From_No_Suspend (INT16, char *, INT16, INT16, struct addr_struct *, INT16 *);
-  STATUS NU_Find_Open_Sckts_For_Dev (UINT8 sck_type, INT skt, DV_DEVICE_ENTRY *dev_ptr);
-  jeb end add
-  
-  STATUS NU_Recv_From_Raw (INT, char *, INT16, INT16, struct addr_struct *, INT16 *);
-  
-  STATUS NU_Push (INT);
-  STATUS NU_Is_Connected (INT);
-  INT16  NU_GetPnum (struct sock_struct *);
-  INT16  NU_Get_UDP_Pnum (struct sock_struct *);
-  STATUS NU_Fcntl (INT socketd, INT16 command, INT16 arguement);
-  STATUS NU_Get_Peer_Name(INT, struct sockaddr_struct *, INT16 *);
-    
-  *****/
-
-//prototypes  //jeb
-char *inet_ntoa(struct in_addr in);
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* nucleus include */
diff --git a/src/Unsupported/slp_client/src/cmd-utils/lslp-windows.c b/src/Unsupported/slp_client/src/cmd-utils/lslp-windows.c
deleted file mode 100755 (executable)
index e8ae91e..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*****************************************************************************
- *  Description:   portability routines for WINDOZE
- *
- *  Originated: December 17, 2001 
- *     Original Author: Mike Day md@soft-hackle.net
- *                                mdday@us.ibm.com 
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/Attic/lslp-windows.c,v 1.1 2003/05/21 15:14:08 mday Exp $                                                                   
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-#include "lslp-windows.h"
-
-void WindowsStartNetwork(void)
-{
-       WSADATA wsData;
-       WSAStartup (  0x0002,   &wsData );
-}      
-
-
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/lslp-windows.h b/src/Unsupported/slp_client/src/cmd-utils/lslp-windows.h
deleted file mode 100755 (executable)
index 0a3b5cf..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-//%2005////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation, The Open Group.
-// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-// EMC Corporation; VERITAS Software Corporation; The Open Group.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-// 
-// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-//==============================================================================
-/*****************************************************************************
- *  Description:   portability routines for WINDOZE
- *
- *  Originated: December 31, 1999 
- *     Original Author: Mike Day md@soft-hackle.net
- *                                mdday@us.ibm.com 
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/Attic/lslp-windows.h,v 1.7 2005/11/27 03:11:39 jim.wunderlich Exp $                                                                 
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-
-#ifndef _LSLP_WINDOWS_INCL_
-#define _LSLP_WINDOWS_INCL_
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef _WIN32 
-#ifndef _MT
-#define _MT
-#endif
-
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <process.h>    /* _beginthread, _endthread */
-#include <winbase.h>
-#include <tchar.h>
-#include <sys/types.h> 
-#include <sys/timeb.h> 
-#include <Pegasus/Common/PegasusAssert.h>
-#include <errno.h>
-
-typedef char int8;
-typedef        unsigned char uint8;
-typedef uint8 byte;
-typedef short int16;
-typedef unsigned short uint16;
-typedef int int32;
-typedef unsigned int uint32;
-typedef __int64 int64;
-typedef unsigned __int64 uint64;
-typedef SOCKET SOCKETD;
-  
-typedef struct socket_address {
-  struct sockaddr_in *address;
-  int address_len;
-} socket_addr ;
-
-typedef struct socket_address_list {
-  int count;
-  socket_addr *list;
-} socket_addr_list; 
-
-void WindowsStartNetwork(void);
-int32 gettimeofday(struct timeval *tv, struct timezone *tz);
-
-/* WIN 32 macros for mutex semaphore */
-#define _LSLP_CREATE_MUTEX(h) \
-       (((h) = CreateMutex(NULL, FALSE, NULL)) ? 0 : -1)
-#define _LSLP_CLOSE_MUTEX(h) \
-       if((h) != 0){ReleaseMutex((HANDLE)(h));CloseHandle((HANDLE)(h)); (h) = 0;}
-#define LSLP_DEFAULT_WAIT 100
-#define LSLP_EXTRA_WAIT   250
-/* h = handle, m = milliseconds, c = pointer to completion code */
-#define _LSLP_WAIT_MUTEX(h, m, c) \
-       if((h) != 0){(*(c)) = WaitForSingleObject((HANDLE)(h), (m));}
-#define _LSLP_RELEASE_MUTEX(h) \
-       if((h) != 0) {ReleaseMutex((HANDLE)(h));}
-#define _LSLP_DUP_MUTEX(h, n) \
-       if ((h) != 0)            \
-       {DuplicateHandle(GetCurrentProcess(), (h), GetCurrentProcess(), (n),  \
-               0, TRUE, DUPLICATE_SAME_ACCESS | MUTEX_ALL_ACCESS | SYNCHRONIZE);}
-#define        _LSLP_CREATE_SEM(h, i) \
-       (((h) = (uint32)CreateSemaphore(NULL, (i), 0x0000ffff, NULL)) ? 0 : -1)
-/* h = handle, m = milliseconds, c = pointer to completion code */
-#define _LSLP_WAIT_SEM(h, m, c) \
-       if((h) != 0){(*(c)) = WaitForSingleObject((HANDLE)(h), (m));}
-#define _LSLP_SIGNAL_SEM(h)  \
-       ReleaseSemaphore((HANDLE)(h), 1, NULL)
-#define _LSLP_CLOSE_SEM(h) \
-       {if((h) != 0){ReleaseSemaphore((HANDLE)(h), 0x0000fff0, NULL); CloseHandle((HANDLE)(h)); (h) = 0;}}
-
-#define LSLP_SEM_T HANDLE
-#define LSLP_THREAD_T HANDLE
-#define LSLP_WAIT_FAILED       WAIT_FAILED
-#define LSLP_WAIT_OK           WAIT_OBJECT_0
-#define LSLP_WAIT_TIMEOUT   WAIT_TIMEOUT
-#define LSLP_WAIT_ABANDONDED WAIT_ABANDONED
-
-/* void SLEEP(int32 milliseconds) */
-#define _LSLP_SLEEP Sleep
-#define _LSLP_SET_TTL(s, t)  setsockopt((s), IPPROTO_IP, IP_MULTICAST_TTL, (const char *)&(t), sizeof((t))) 
-
-/* void *(*start)(void *), ustacksize, void *arg           */
-#define _LSLP_BEGINTHREAD(start, stacksize, arg) _beginthread((start), (stacksize), (arg)) 
-#define _LSLP_ENDTHREAD  _endthread 
-
-#define _LSLP_STRTOK(n, d, s) strtok((n), (d) )
-#define _LSLP_SIG_ACTION()
-#define _LSLP_SIG_ACTION_THREAD()
-#define _LSLP_PUSH_HANDLER(a, b)
-#define _LSLP_POP_HANDLER(a, b)
-
-#define strncasecmp strnicmp
-
-/* maximum path length */
-#define LSLP_MAXPATH _MAX_PATH
-#define LSLP_NEWLINE \r\n
-#endif  /* WIN 32 */
-
-
-#define ENOTSOCK WSAENOTSOCK
-#define EADDRNOTAVAIL WSAEADDRNOTAVAIL 
-#define EAFNOSUPPORT WSAEAFNOSUPPORT 
-#define EISCONN WSAEISCONN 
-#define ETIMEDOUT WSAETIMEDOUT
-#define ECONNREFUSED WSAECONNREFUSED
-#define ENETUNREACH WSAENETUNREACH
-#define EADDRINUSE WSAEADDRINUSE
-#define EINPROGRESS WSAEINPROGRESS 
-#define EALREADY WSAEALREADY 
-#define EWOULDBLOCK WSAEWOULDBLOCK
-
-#define _LSLP_GETLASTERROR() WSAGetLastError()
-
-#define _LSLP_INIT_NETWORK WindowsStartNetwork
-#define _LSLP_DEINIT_NETWORK WSACleanup
-
-#define _LSLP_SOCKET(a, b, c) socket(((int)(a)), ((int)(b)), ((int)(c)))
-#define _LSLP_CLOSESOCKET closesocket
-#define _LSLP_BIND(a, b, c) bind(((SOCKET)(a)), ((const struct sockaddr *)(b)), ((int)(c)))
-#define _LSLP_CONNECT(a, b, c) connect(((SOCKET)(a)), ((const struct sockaddr *)(b)), ((int)(c)))
-#define _LSLP_LISTEN(a, b) listen(((SOCKET)(a)), ((int)(b)))
-#define _LSLP_ACCEPT(a, b, c) accept(((SOCKET)(a)), ((struct sockaddr *)(b)), ((int *)(c)))
-#define _LSLP_SEND(a, b, c, d) send(((SOCKET)(a)), ((const char *)(b)), ((int)(c)), ((int)(d)))
-#define _LSLP_SENDTO(a, b, c, d, e, f) \
-           sendto(((SOCKET)(a)), ((const char *)(b)), ((int)(c)), ((int)(d)), \
-                  ((const struct sockaddr *)(e)), ((int)(f)))
-#define _LSLP_RECV(a, b, c, d) recv(((SOCKET)(a)), ((const char *)(b)), ((int)(c)), ((int)(d)))
-#define _LSLP_RECV_FROM(a, b, c, d, e, f) \
-           recvfrom(((SOCKET)(a)), ((char *)(b)), ((int)(c)), ((int)(d)), \
-                    ((struct sockaddr *)(e)), ((int *)(f)))
-
-#define _LSLP_GETHOSTBYNAME(a, b) /* ATTN << Tue Dec 18 13:26:09 2001 mdd >> */
-#define _LSLP_GETHOSTBYADDR(a, b, c, d) /* ATTN << Tue Dec 18 13:26:49 2001 mdd >> */
-
-#define _LSLP_SETSOCKOPT(a, b, c, d, e) \
-           setsockopt(((SOCKET)(a)), ((int)(b)), ((int)(c)), ((const char *)(d)), ((int)(e)))
-#define _LSLP_GETSOCKOPT(a, b, c, d, e) \
-           getsockopt(((SOCKET)(a)), ((int)(b)), ((int)(c)), ((char *)(d)), ((int *)(e)))
-#define _LSLP_ABORT(a) { shutdown(((SOCKET)(a)), SD_BOTH ) ; closesocket((SOCKET)(a)) }
-#define _LSLP_SELECT(a, b, c, d, e) \
-           select(((int)(a)), ((fd_set *)(b)), ((fd_set *)(c)), \
-           ((fd_set *)(d)), ((const struct timeval *)(e)))
-#define _LSLP_FD_ISSET(a, b)  FD_ISSET(((SOCKET)(a)), ((fd_set *)(b)))
-#define _LSLP_FD_SET(a, b) FD_SET(((SOCKET)(a)), ((fd_set *)(b)))
-#define _LSLP_FD_ZERO(a) FD_ZERO((fd_set *)(a))
-#define _LSLP_FD_CLR(a, b) FD_CLR(((SOCKET)(a)), ((fd_set *)(b)))
-
-#define _LSLP_IOCTLSOCKET ioctlsocket
-#define LSLP_MTU 1400
-
-#define LSLP_FD_SET fd_set
-#define strcasecmp _stricmp
-
-
-/* ascii and char tests and conversions */
-
-#define _LSLP_ISASCII(a) __isascii(a)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*_LSLP_WINDOWS_INCL_*/
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/lslp.h b/src/Unsupported/slp_client/src/cmd-utils/lslp.h
deleted file mode 100644 (file)
index a8a9bfc..0000000
+++ /dev/null
@@ -1,424 +0,0 @@
-//%2005////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation, The Open Group.
-// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-// EMC Corporation; VERITAS Software Corporation; The Open Group.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-// 
-// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-//==============================================================================
-/*****************************************************************************
- *  Description:   
- *
- *  Originated: December 20, 2001
- *     Original Author: Mike Day md@soft-hackle.net
- *                                mdd@us.ibm.com
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/Attic/lslp.h,v 1.5 2005/02/05 23:01:30 karl Exp $                                                                   
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-
-#ifndef _LSLPDEFS_INCLUDE
-#define _LSLPDEFS_INCLUDE
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef NUCLEUS   //jeb
-#ifndef __linux__
-#pragma pack( push, lslp_defs )
-#pragma pack(1)
-#endif
-#endif
-#include "../../config.h"
-#include "endian.h"
-
-
-
-  /******************** circular list macros *********************/
-
-  /*---------------------------------------------------------------------**
-  ** structures used with these macros MUST have the following elements: **
-  ** struct type-name {                                                  **
-  **   struct type-name *next;                                          **
-  **   struct type-name *prev;                                          **
-  **   BOOL isHead;                                                     **
-  **      int count;                                                     **
-  **   }                                                                **
-  **---------------------------------------------------------------------*/
-
-  /*  is node x the head of the list? */
-  /* BOOL IS_HEAD(node *x); */
-#define _LSLP_IS_HEAD(x) ((x)->isHead )
-
-  /* where h is the head of the list */
-  /* BOOL _LSLP_IS_EMPTY(head);          */
-#define _LSLP_IS_EMPTY(h) \
-       ((((h)->next == (h)) && ((h)->prev == (h)) ) ? TRUE : FALSE)
-
-  /* where n is the new node, insert it immediately after node x */
-  /* x can be the head of the list                               */
-  /* void _LSLP_INSERT(new, after);                                  */
-#define _LSLP_INSERT(n, x)     \
-       {(n)->prev = (x);               \
-       (n)->next = (x)->next;  \
-       (x)->next->prev = (n);  \
-       (x)->next = (n); }              
-
-#define _LSLP_INSERT_AFTER _LSLP_INSERT
-#define _LSLP_INSERT_BEFORE(n, x)   \
-       {(n)->next = (x);                                       \
-       (n)->prev = (x)->prev;                          \
-       (x)->prev->next = (n);                          \
-       (x)->prev = (n); }
-
-#define _LSLP_INSERT_WORKNODE_LAST(n, x)    \
-        {gettimeofday(&((n)->timer));  \
-       (n)->next = (x);               \
-       (n)->prev = (x)->prev;         \
-       (x)->prev->next = (n);         \
-       (x)->prev = (n); }
-
-#define _LSLP_INSERT_WORKNODE_FIRST(n, x)    \
-        {gettimeofday(&((n)->timer));  \
-       (n)->prev = (x);               \
-       (n)->next = (x)->next;         \
-       (x)->next->prev = (n);         \
-       (x)->next = (n); }              
-
-  /* delete node x  - harmless if list is empty */
-  /* void _LSLP_DELETE_(x);                        */
-#define _LSLP_UNLINK(x)                                \
-       {(x)->prev->next = (x)->next;   \
-       (x)->next->prev = (x)->prev;}   
-
-  /* given the head of the list h, determine if node x is the last node */
-  /* BOOL _LSLP_IS_LAST(head, x);                                           */
-#define _LSLP_IS_LAST(h, x) \
-        (((x)->next == (h) && (h)->prev == (x)) ? TRUE : FALSE)
-
-  /* given the head of the list h, determine if node x is the first node */
-  /* BOOL _LSLP_IS_FIRST(head, x);                                           */
-#define _LSLP_IS_FIRST(h, x) \
-       (((x)->prev == (h) && (h)->next == (x)) ? TRUE : FALSE)
-
-  /* given the head of the list h, determine if node x is the only node */
-  /* BOOL _LSLP_IS_ONLY(head, x);                                           */
-#define _LSLP_IS_ONLY(h, x) \
-       (((x)->next == (h) && (h)->prev == (x)) ? TRUE : FALSE)
-
-  /* void _LSLP_LINK_HEAD(dest, src); */
-#define _LSLP_LINK_HEAD(d, s) \
-       {(d)->next = (s)->next;  \
-       (d)->prev = (s)->prev;  \
-       (s)->next->prev = (d);  \
-       (s)->prev->next = (d); \
-        (s)->prev = (s)->next = (s) ; }
-
-  /************* bit-set macros *********************************/
-  /* how many dwords do we need to allocate to hold b bits ? */
-#define _LSLP_SIZEOF_BITARRAY(b) (((b) >> 5) + 1)
-  /*  operating on an array of dwords */
-#define _LSLP_IS_BIT_SET(b, a) (*((a) + ((b) >> 5))    & (1 << (((b)%32) - 1)))
-#define _LSLP_SET_BIT(b, a) (*((a) + ((b) >> 5)) |= (1 << (((b)%32) - 1)))
-#define _LSLP_CLEAR_BIT(b, a) (*((a) + ((b) >> 5)) ^= (1 << (((b)%32) - 1)))
-
-  /* the usual */
-#define _LSLP_MIN(a, b) ((a) < (b) ? (a) : (b))
-#define _LSLP_MAX(a, b) ((a) > (b) ? (a) : (b))
-
-  /********************** SLP V2 MACROS *************************/
-  /**************************************************************/
-#define LSLP_PROTO_VER 2
-#define LSLP_PORT 427
-#define _LSLP_LOCAL_BCAST inet_addr("255.255.255.255")
-#define _LSLP_MCAST       inet_addr("239.255.255.253")
-  /* derive an address for a directed broadcast */
-  /* a = uint32 addr, m = uint32 mask */
-#define _LSLP_DIR_BCAST(a, m) {(a) &= (m); (a) |= ~(m);}
-//jeb #define LSLP_EN_US "EN"
-#define LSLP_EN_US "en"
-#define LSLP_EN_US_LEN 2
-  /* the absolute minimum hdr size */
-#define LSLP_MIN_HDR  14
-
-  /* slp v2 message types */
-#define LSLP_SRVRQST            1
-#define LSLP_SRVRPLY            2
-#define LSLP_SRVREG             3
-#define LSLP_SRVDEREG           4
-#define LSLP_SRVACK             5
-#define LSLP_ATTRREQ            6
-#define LSLP_ATTRRPLY           7
-#define LSLP_DAADVERT           8
-#define LSLP_SRVTYPERQST        9
-#define LSLP_SRVTYPERPLY        10
-#define LSLP_SAADVERT          11
-
-  /* slp error codes */
-#define LSLP_LANGUAGE_NOT_SUPPORTED     1
-#define LSLP_PARSE_ERROR                2
-#define LSLP_INVALID_REGISTRATION       3
-#define LSLP_SCOPE_NOT_SUPPORTED        4
-#define LSLP_AUTHENTICATION_UNKNOWN     5
-#define LSLP_AUTHENTICATION_ABSENT       6
-#define LSLP_AUTHENTICATION_FAILED       7
-#define LSLP_VERSION_NOT_SUPPORTED       9
-#define LSLP_INTERNAL_ERROR            10
-#define LSLP_DA_BUSY                   11  
-#define LSLP_OPTION_NOT_UNDERSTOOD      12
-#define LSLP_INVALID_UPDATE            13
-#define LSLP_MSG_NOT_SUPPORTED                 14
-#define LSLP_REFRESH_REJECTED          15
-
-  /* stream  SLP error codes */
-#define LSLP_OK                                0x00000000
-#define LSLPERR_BASE                   0x00002000
-#define LSLPERR_INVALID_SEM            LSLPERR_BASE +  0x00000001
-#define LSLP_NOT_INITIALIZED            LSLPERR_BASE +         0x00000002      
-#define LSLP_TIMEOUT                   LSLPERR_BASE +  0x00000003
-#define LSLP_MALLOC_ERROR              LSLPERR_BASE +  0x00000004
-
-
-  /* offsets into the SLPv2 header */
-#define LSLP_VERSION    0
-#define LSLP_FUNCTION   1
-#define LSLP_LENGTH     2
-#define LSLP_FLAGS              5
-#define LSLP_NEXT_EX    7
-#define LSLP_XID               10
-#define LSLP_LAN_LEN   12
-#define LSLP_LAN               14
-
-
-  /* macros to gain access to SLP header fields */
-  /* h = (uint8 *)slpHeader */
-  /* o = int32 offset */
-  /* i = int32 value */
-
-#if __BYTE_ORDER__ == __LITTLE_ENDIAN__ 
-#define _LSLP_GETBYTE(h, o)  (0x00ff  & *(uint8 *) &((h)[(o)]))
-#define _LSLP_GETSHORT(h, o) ((0xff00 & _LSLP_GETBYTE((h), (o)) << 8) + \
-                                (0x00ff & _LSLP_GETBYTE((h), (o) + 1)) ) 
-#define _LSLP_SETBYTE(h, i, o) ((h)[(o)] = (uint8)i)
-#define _LSLP_SETSHORT(h, i, o) { _LSLP_SETBYTE((h), (0xff & ((i) >> 8)), (o)); \
-                                    _LSLP_SETBYTE((h), (0xff & (i)), (o) + 1); }
-#define _LSLP_GETLONG(h, o) ( (0xffff0000 & _LSLP_GETSHORT((h), (o)) << 16) + \
-                                 (0x0000ffff & _LSLP_GETSHORT((h), (o) + 2)) )
-#define _LSLP_SETLONG(h, i, o)         { _LSLP_SETSHORT((h), (0xffff & ((i) >> 16)), (o) ); \
-                                 _LSLP_SETSHORT((h), (0xffff & (i)), (o) + 2); }
-  /* length is a 3-byte value */
-#define _LSLP_GETLENGTH(h) ((0xff0000 & (*(uint8 *) &((h)[LSLP_LENGTH]) << 16)) + \
-                       (0x00ff00 & (*(uint8 *) &((h)[LSLP_LENGTH + 1]) << 8)) + \
-                       (0x0000ff & (*(uint8 *) &((h)[LSLP_LENGTH + 2]))))
-#define _LSLP_SETLENGTH(h, i) {_LSLP_SETSHORT( (h), (((i) & 0xffff00) >> 8), LSLP_LENGTH ); \
-                         _LSLP_SETBYTE((h), ((i) & 0x0000ff), LSLP_LENGTH + 2);}
-  /* next option offset is a 3-byte value */
-#define _LSLP_GETNEXTEXT(h) ((0xff0000 & (*(uint8 *) &((h)[LSLP_NEXT_EX]) << 16)) + \
-                       (0x00ff00 & (*(uint8 *) &((h)[LSLP_NEXT_EX + 1]) << 8)) + \
-                               (0x0000ff & (*(uint8 *) &((h)[LSLP_NEXT_EX + 2]))))
-#define _LSLP_SETNEXTEXT(h, i) {_LSLP_SETSHORT((h), (((i) & 0xffff00) >> 8), LSLP_NEXT_EX ); \
-                         _LSLP_SETBYTE((h), ((i) & 0x0000ff), LSLP_NEXT_EX + 2);}
-#define _LSLP_SET3BYTES(h, i, o) {_LSLP_SETSHORT( (h), (((i) & 0xffff00) >> 8), (o) ); \
-                         _LSLP_SETBYTE((h), ((i) & 0x0000ff), (o) + 2);}
-#define _LSLP_GET3BYTES(h, o) ((0xff0000 & (*(uint8 *) &((h)[(o)]) << 16)) + \
-                       (0x00ff00 & (*(uint8 *) &((h)[(o) + 1]) << 8)) + \
-                       (0x0000ff & (*(uint8 *) &((h)[(o) + 2]))))
-
-#else  /* BIG ENDIAN */
-
-#ifdef NUCLEUS   //nucleus use some existing functions
-#define _LSLP_GETBYTE(h, o) GET8(h, o) 
-#define _LSLP_GETSHORT(h, o) GET16(h, o)
-#define _LSLP_SETBYTE(h, i, o) PUT8(h, o, i)   //buf,offset,value
-#define _LSLP_SETSHORT(h, i, o) PUT16(h, o, i) //buf,offset,value
-#define _LSLP_GETLONG(h, o)  GET32(h, o)
-#define _LSLP_SETLONG(h, i, o)         PUT32(h, o, i) //buf,offset,value
-
-
-#define _LSLP_GETLENGTH(h) ((0xff0000 & (GET8(h, LSLP_LENGTH) << 16)) + \
-                                        (0x00ff00 & (GET8(h, LSLP_LENGTH+1) << 8)) + \
-                                         (0x0000ff & (GET8(h, LSLP_LENGTH+2))) )
-  /***********************
-#define _LSLP_SETLENGTH(h, i)  ((PUT8((h), (LSLP_LENGTH), ((uint8)(((i)) >> 16)) )) + \
-                 (PUT8((h), (LSLP_LENGTH + 1), ((uint8)(((i)) >> 8)) )) + \ 
-                  (PUT8((h), (LSLP_LENGTH + 2), ((uint8)(i)) )))       
-  *****************************/   
-#define _LSLP_SETLENGTH(h, i)  ((PUT8((h), (LSLP_LENGTH), ((uint8)(((i)) >> 16)))) + (PUT8((h), (LSLP_LENGTH + 1), ((uint8)(((i)) >> 8)) )) + (PUT8((h), (LSLP_LENGTH + 2), ((uint8)(i)) )))          
-
-#define _LSLP_GETNEXTEXT(h) ((0xff0000 & (GET8(h, LSLP_NEXT_EX) << 16)) + \
-                       (0x00ff00 & (GET8(h, (LSLP_NEXT_EX + 1)) << 8)) + \
-                        (0x0000ff & (GET8(h, (LSLP_NEXT_EX + 2)))))
-#define _LSLP_SETNEXTEXT(h, i)  ((PUT8(h, (LSLP_NEXT_EX), ((uint8)((i) >> 16)))) + (PUT8(h, (LSLP_NEXT_EX + 1), ((uint8)((i) >> 8)))) + (PUT8(h, (LSLP_NEXT_EX + 2), ((uint8)(i)))))     
-  /*********************************
-#define _LSLP_SETNEXTEXT(h, i)  ((PUT8((h), (LSLP_NEXT_EX), ((uint8)((i) >> 16)))) + \
-                 (PUT8((h), (LSLP_NEXT_EX + 1), ((uint8)((i) >> 8)))) + \ 
-                  (PUT8((h), (LSLP_NEXT_EX + 2), ((uint8)(i)))))     
-  ************************/
-
-#define _LSLP_GET3BYTES(h, o) ((0xff0000 & (GET8(h, o) << 16)) + \
-                       (0x00ff00 & (GET8(h, ((o) + 1)) << 8)) + \
-                        (0x0000ff & (GET8(h, ((o) + 2)))))
-
-
-//#define _LSLP_SET3BYTES(h, i, o) (PUT16((h),(o),(i))); (PUT8((h),((o)+2),(i))) 
-#define _LSLP_SET3BYTES(h, i, o)  ((PUT8((h), (o), ((uint8)((i) >> 16)))) + (PUT8((h), ((o) + 1), ((uint8)((i) >> 8)))) + (PUT8((h), ((o) + 2), ((uint8)(i)))))          
-
-
-
-#else //big endian - not nucleus
-#define _LSLP_GETBYTE(h, o)  (0x00ff  & *((uint8 *) &((h)[(o)])))
-#define _LSLP_GETSHORT(h, o) ((0xff00 & _LSLP_GETBYTE((h), (o))) + \
-                               (0x00ff & _LSLP_GETBYTE((h), (o) + 1)))
-
-#define _LSLP_SETBYTE(h, i, o) ((h)[(o)] = (uint8)(i))
-#define _LSLP_SETSHORT(h, i, o) { _LSLP_SETBYTE((h), (0xff00 & (i)), (o)); \
-                                  _LSLP_SETBYTE((h), (0x00ff & (i)), (o) + 1); }
-
-#define _LSLP_GETLONG(h, o)   ((0xffff0000 & _LSLP_GETSHORT((h), (o))) + \
-                               (0x0000ffff & _LSLP_GETSHORT((h), (o) + 2)))
-
-#define _LSLP_SETLONG(h, i, o) { _LSLP_SETSHORT((h), (0xffff0000 & (i)), (o)); \
-                                 _LSLP_SETSHORT((h), (0x0000ffff & (i)), (o) + 2); }
-
-  /* length is a 3-byte value */
-
-#define _LSLP_GET3BYTES(h, o) ((0xff0000 & (_LSLP_GETBYTE((h), (o)) << 16)) + \
-                               (0x00ff00 & (_LSLP_GETBYTE((h), ((o) + 1)) << 8)) + \
-                               (0x0000ff & (_LSLP_GETBYTE((h), ((o) + 2)))))
-
-#define _LSLP_SET3BYTES(h, i, o) ((_LSLP_SETBYTE((h), (0xff & ((uint8)((i) >> 16))), (o)) + \
-                                  (_LSLP_SETBYTE((h), (0xff & ((uint8)((i) >> 8))), ((o) + 1))) + \
-                                  (_LSLP_SETBYTE((h), (0xff & ((uint8)((i)))), ((o) + 2)))
-
-#define _LSLP_GETLENGTH(h) _LSLP_GET3BYTES((h), LSLP_LENGTH)
-#define _LSLP_SETLENGTH(h, i) _LSLP_SET3BYTES((h), (i), LSLP_LENGTH)
-
-#define _LSLP_GETFIRSTEXT(h) _LSLP_GET3BYTES((h), LSLP_NEXT_EX)
-#define _LSLP_SETFIRSTEXT(h, i) _LSLP_SET3BYTES((h), (i), LSLP_NEXT_EX)
-
-#define _LSLP_GETNEXTEXT _LSLP_GET3BYTES
-#define _LSLP_SETNEXTEXT _LSLP_SET3BYTES
-
-#endif //#ifdef nucleus
-#endif  /* ENDIAN definitions */
-
-  /* macros to get and set header fields */
-#define _LSLP_GETVERSION(h) _LSLP_GETBYTE((h), LSLP_VERSION)
-#define _LSLP_SETVERSION(h, i) _LSLP_SETBYTE((h), (i), LSLP_VERSION)
-#define _LSLP_GETFUNCTION(h) _LSLP_GETBYTE((h), LSLP_FUNCTION)
-#define _LSLP_SETFUNCTION(h, i) _LSLP_SETBYTE((h), (i), LSLP_FUNCTION)
-#define _LSLP_GETFLAGS(h) _LSLP_GETBYTE((h), LSLP_FLAGS)
-#define _LSLP_SETFLAGS(h, i) _LSLP_SETBYTE((h), (i), LSLP_FLAGS)
-#define _LSLP_GETLANLEN(h) _LSLP_GETSHORT((h), LSLP_LAN_LEN)
-#define _LSLP_SETLANLEN(h, i) _LSLP_SETSHORT((h), (i), LSLP_LAN_LEN)
-#define _LSLP_SETLAN(h, s, l) \
-{ _LSLP_SETSHORT((h), (l), LSLP_LAN_LEN) ; \
-  memcpy( &((h)[LSLP_LAN]), (s), (l)) ; }
-
-/* #define _LSLP_SETLAN(h, s) {_LSLP_SETSHORT((h),(_LSLP_MIN( (strlen((s)) + 2), 17)), LSLP_LAN_LEN); \ */
-/*                 memcpy(&(h)[LSLP_LAN],(s),(_LSLP_MIN( (strlen((s)) + 2) , 17)));} */
-#define _LSLP_GETXID(h) _LSLP_GETSHORT((h), LSLP_XID) 
-#define _LSLP_SETXID(h, i) _LSLP_SETSHORT((h), (i), LSLP_XID)
-#define _LSLP_HDRLEN(h) (14 + _LSLP_GETLANLEN((h))) 
-  /* give (work *), how big is the msg header ? */
-#define _LSLP_HDRLEN_WORK(work) (14 + (work)->hdr.langLen ) 
-  /* given (work *), how big is the data field ? */
-#define _LSLP_DATALEN_WORK(work) (((work)->hdr.len) - _LSLP_HDRLEN_WORK((work)))
-
-#define LSLP_FLAGS_OVERFLOW 0x80
-#define LSLP_FLAGS_FRESH    0x40
-#define LSLP_FLAGS_MCAST    0x20
-
-  /* URL entry definitions */
-#define LSLP_URL_LIFE    1
-#define LSLP_URL_LEN    3
-#define _LSLP_GETURLLIFE(h) _LSLP_GETSHORT((h), LSLP_URL_LIFE)
-#define _LSLP_SETURLLIFE(h, i) _LSLP_SETSHORT((h), (i), LSLP_URL_LIFE)
-#define _LSLP_GETURLLEN(h) _LSLP_GETSHORT((h), LSLP_URL_LEN)
-#define _LSLP_SETURLLEN(h, i) _LSLP_SETSHORT((h), (i), LSLP_URL_LEN)
-
-
-  /* simplified API definitions */
-
-#define LSLP_API_HDR_VERSION 1
-#define LSLP_API_SIGNATURE "legato slp stream interface\0"
-#define LSLP_API_SIGNATURE_SIZE 28
-#define LSLP_API_HDR_SIZE 38
-
-#define _LSLP_PERROR(a, b) fprintf(stderr, "%s: Error %s (%s).\n", (a), (b), strerror(errno))
-
-struct api_hdr {
-  int32 version;
-  int8 signature[28];
-  int16 msgLen; /* including header */
-  int16 errCode;
-  int16 function_id;
-};
-
-#define LSLP_API_ACK                           0x2000 /* with err code in first three bits */
-#define LSLP_SIMPLE_SRVREQ                     0x1001
-#define LSLP_SIMPLE_SRVRPLY                    0x1002
-#define LSLP_SIMPLE_SRVREG                     0x1003
-#define LSLP_SIMPLE_SRVDEREG                   0x1004
-
-#define _LSLP_FREE_DEINIT(a) if((a) != NULL) { free(a); a = NULL; }
-
-#ifdef NUCLEUS
-#define LSLP_MTU ETHERNT_MTU //jeb
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-#ifndef NUCLEUS  //jeb
-#ifndef __linux__
-#pragma pack( pop, lslp_defs )
-#endif
-#endif
-#endif /* _LSLPDEFS_INCLUDE */
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/-v.h b/src/Unsupported/slp_client/src/cmd-utils/slp_client/-v.h
deleted file mode 100644 (file)
index 6ad4891..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-//%2005////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation, The Open Group.
-// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-// EMC Corporation; VERITAS Software Corporation; The Open Group.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-// 
-// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-//==============================================================================
-#ifndef BISON__V_H
-# define BISON__V_H
-
-#ifndef YYSTYPE
-typedef union {
-       int32 _i;
-       int8 *_s;
-       lslpAttrList *_atl;
-} yystype;
-# define YYSTYPE yystype
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-# define       _TRUE   257
-# define       _FALSE  258
-# define       _MULTIVAL       259
-# define       _INT    260
-# define       _ESCAPED        261
-# define       _TAG    262
-# define       _STRING 263
-# define       _OPAQUE 264
-
-
-extern YYSTYPE attrlval;
-
-#endif /* not BISON__V_H */
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/Makefile b/src/Unsupported/slp_client/src/cmd-utils/slp_client/Makefile
deleted file mode 100644 (file)
index 4c8b69c..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-#//%2005////////////////////////////////////////////////////////////////////////
-#//
-#// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-#// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-#// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation, The Open Group.
-#// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; VERITAS Software Corporation; The Open Group.
-#//
-#// Permission is hereby granted, free of charge, to any person obtaining a copy
-#// of this software and associated documentation files (the "Software"), to
-#// deal in the Software without restriction, including without limitation the
-#// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-#// sell copies of the Software, and to permit persons to whom the Software is
-#// furnished to do so, subject to the following conditions:
-#// 
-#// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-#// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-#// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-#// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-#// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-#// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-#// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#//
-#//==============================================================================
-PROJECT = slp_client
-LFLAGS += -o$@ 
-YFLAGS += -o$@ 
-
-SOURCES = slp_client.c \
-       $(SRC_DIR)/$(OS_PORT_SRC) \
-       y_attr.c \
-       l_attr.c \
-       y_url.c \
-       l_url.c \
-       y_filter.c \
-       l_filter.c      
-
-OBJS = slp_client$(OBJ) \
-       $(SRC_DIR)/$(OS_PORT_OBJ) \
-       y_attr$(OBJ) \
-       l_attr$(OBJ) \
-       y_url$(OBJ) \
-       l_url$(OBJ) \
-       y_filter$(OBJ) \
-       l_filter$(OBJ) 
-
-VERSION = 1:0:0
-
-all: lib$(PROJECT).la
-.PHONY: all
-
-clean: $(CLEAN) clean.txt
-.PHONY: clean
-
-
-install: $(INSTALL) install.txt
-.PHONY: install
-
-remove: $(REMOVE) remove.txt
-.PHONY: remove
-
-lib$(PROJECT).la: $(OBJS)
-       $(LIBTOOL) $(CC) $(LIB_PATH) /usr/local/lib -version-info $(VERSION) $(LDFLAGS) $(DLL_LIB_FLAG) $(OBJ_OUT) $@ $(OBJS) $(LIBS)
-
-%$(OBJ) : %.c
-       $(LIBTOOL) $(CC) $(NO_LINK_FLAG) $(CFLAGS) $(DEFS) $< 
-
-$(SRC_DIR)/$(OS_PORT_OBJ) : $(SRC_DIR)/$(OS_PORT_SRC) 
-       $(LIBTOOL) $(CC) $(NO_LINK_FLAG) $(CFLAGS) $(DEFS) $(OBJ_OUT) $@ $< 
-
-l_attr.c : attr.l
-       $(LEX) -p -v -o$@ -P$(basename $<) $<
-y_attr.c : attr.y 
-       $(YACC) -o$@ -p$(basename $<) -v -d $<
-l_url.c : url.l
-       $(LEX) -p -v -o$@ -P$(basename $<) $<
-y_url.c : url.y
-       $(YACC) -o$@ -p$(basename $<) -v -d $<
-l_filter.c : filter.l 
-       $(LEX) -p -v -o$@ -P$(basename $<) $<
-y_filter.c : filter.y
-       $(YACC) -o$@ -p$(basename $<) -v -d $<
-
-clean.txt :
-       $(IGNORE)$(LIBTOOL) $(RM) $(RM_FLAGS) .libs/*
-       $(IGNORE)$(LIBTOOL) $(RM) $(RM_FLAGS) *.o
-       $(IGNORE)$(LIBTOOL) $(RM) $(RM_FLAGS) l_*.c 
-       $(IGNORE)$(LIBTOOL) $(RM) $(RM_FLAGS) y_*.c 
-       $(IGNORE)$(LIBTOOL) $(RM) $(RM_FLAGS) *.lo
-install.txt: 
-       $(LIBTOOL)  $(CP) $(CP_FLAGS) libslp_client.* /usr/local/lib
-
-remove.txt: 
-       $(LIBTOOL) $(RM) $(RM_FLAGS) /usr/local/lib/libslp_client.*
-
-
-
-
-
-
-
-
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/Makefile.nt b/src/Unsupported/slp_client/src/cmd-utils/slp_client/Makefile.nt
deleted file mode 100644 (file)
index 3fabda9..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-#//%2005////////////////////////////////////////////////////////////////////////
-#//
-#// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-#// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-#// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation, The Open Group.
-#// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; VERITAS Software Corporation; The Open Group.
-#//
-#// Permission is hereby granted, free of charge, to any person obtaining a copy
-#// of this software and associated documentation files (the "Software"), to
-#// deal in the Software without restriction, including without limitation the
-#// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-#// sell copies of the Software, and to permit persons to whom the Software is
-#// furnished to do so, subject to the following conditions:
-#// 
-#// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-#// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-#// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-#// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-#// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-#// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-#// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#//
-#//==============================================================================
-##############################################################
-# Requires GNU Bison 1.35 and bison.simple
-##############################################################
-export BISON_SIMPLE := bison.simple
-CC=cl.exe
-LINKER=link
-
-ifdef DEBUG
-CFLAGS=/nologo /Od /D "WIN32" /D "_DEBUG" /Gm /EHsc /RTC1 /MDd /W3 /c /Zi /TC
-LDFLAGS=/nologo /dll /debug
-else
-CFLAGS=/nologo /O2 /D "WIN32" /EHsc /MD /W3 /c /TC
-LDFLAGS=/nologo /dll
-endif
-
-LIBS=Ws2_32.lib
-LEX=flex
-YACC=bison
-
-all: slp_client.dll
-
-OBJECTS=slp_client.obj lslp-windows.obj l_attr.obj  y_attr.obj l_url.obj y_url.obj l_filter.obj y_filter.obj
-
-##############################################################
-# 1. slp_client.c
-##############################################################
-slp_client.obj : slp_client.c
-       $(CC) $(CFLAGS) $<
-
-##############################################################
-# 2. lslp-windows.c
-##############################################################
-lslp-windows.obj : ../lslp-windows.c
-       $(CC) $(CFLAGS) $<
-
-##############################################################
-# 3. bison -oy_attr.c -pattr -v -d attr.y
-##############################################################
-y_attr.c : attr.y 
-       $(YACC) -o$@ -p$(basename $<) -v -d $<
-
-##############################################################
-# 4. y_attr.c
-##############################################################
-y_attr.obj : y_attr.c
-       $(CC) $(CFLAGS) $<
-
-##############################################################
-# 5. flex -p -v -ol_attr.c -Pattr attr.l
-##############################################################
-l_attr.c : attr.l
-       $(LEX) -p -v -o$@ -P$(basename $<) $<
-
-##############################################################
-# 6. l_attr.c
-##############################################################
-l_attr.obj : l_attr.c
-       $(CC) $(CFLAGS) $<
-
-##############################################################
-# 7. bison -oy_url.c -purl -v -d url.y
-##############################################################
-y_url.c : url.y
-       $(YACC) -o$@ -p$(basename $<) -v -d $<
-
-##############################################################
-# 8. y_url.c
-##############################################################
-y_url.obj : y_url.c
-       $(CC) $(CFLAGS) $<
-
-##############################################################
-# 9. flex -p -v -ol_url.c -Pattr url.l
-##############################################################
-l_url.c : url.l
-       $(LEX) -p -v -o$@ -P$(basename $<) $<
-
-##############################################################
-# 10. l_url.c
-##############################################################
-l_url.obj : l_url.c
-       $(CC) $(CFLAGS) $<
-
-##############################################################
-# 11. bison -ol_filter.c -pfilter -v -d l_filter.y
-##############################################################
-y_filter.c : filter.y
-       $(YACC) -o$@ -p$(basename $<) -v -d $<
-
-##############################################################
-# 12. l_filter.c
-##############################################################
-y_filter.obj : y_filter.c
-       $(CC) $(CFLAGS) $<
-
-##############################################################
-# 13. flex -p -v -ol_filter.c -Pfilter filter.l
-##############################################################
-l_filter.c : filter.l
-       $(LEX) -p -v -o$@ -P$(basename $<) $<
-
-##############################################################
-# 14. l_filter.c
-##############################################################
-l_filter.obj : l_filter.c
-       $(CC) $(CFLAGS) $<
-
-##############################################################
-# 15. Link the library
-##############################################################
-slp_client.dll : $(OBJECTS)
-       $(LINKER) $(LDFLAGS) -out:$@ $(OBJECTS) $(LIBS)
-
-clean:
-       $(RM) l_attr.c y_attr.c l_url.c y_url.c l_filter.c y_filter.c *.dll $(OBJECTS) *.pdb *.idb *.ilk *.exp *.lib
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/attr.l b/src/Unsupported/slp_client/src/cmd-utils/slp_client/attr.l
deleted file mode 100644 (file)
index b699bb4..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-/*****************************************************************************
- *  Description: encode/decode attribute lists
- *
- *  Originated: March 6, 2000
- *     Original Author: Mike Day md@soft-hackle.net
- *                                mdd@us.ibm.com
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/slp_client/Attic/attr.l,v 1.1 2003/05/21 15:14:08 mday Exp $                                                                
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-
-%{
-
-#undef YYLMAX
-#define YYLMAX 2048
-#define YY_NEVER_INTERACTIVE 1
-#undef YY_INPUT
-#define YY_INPUT(b, r, m) abort()
-#define exit(i) abort()
-#define fread(a, b, c, d) abort()
-#undef ECHO
-#define ECHO  attrerror(yytext)
-#include "slp_client.h"
-#include "y_attr.h"
-
-static int16 heapIndex;
-static int8 heap[2052];
-static int8 buf[2052];
-static int8 *_lslp_strdup(int8 *s);
-void attrerror(int8 *, ...);
-int32 attrwrap(void);
-int32 attrlex(void);
-void attr_close_lexer(uint32 handle);
-uint32 attr_init_lexer(int8 *s);
-
-%}
-
-/* {}  */
-digit                  [0-9]
-hexdigit               [0-9a-fA-F]
-escaped                        (\\([a-fA-F0-9]{2}))
-reserved               [(),\\!<=>~\x00-\x1f]
-res_tag                        [(),\\!<>~\x00-\x1f*_\r\n\t]
-res_val                        [*_\r\n\t]
-tag                    [^(), \\!<=>~\x00-\x1f]
-val                    (("\\"([a-fA-F0-9]{2}))|[^(),!<=>~\x00-\x1f])
-
- /* 
-       this lexer cycles through three states. in the initial state, 
-       it is looking strictly for attribute tags. If, in the initial 
-       state it finds a '(' it anticipates an attribute-value pair 
-       and changes to ATTRIBUTE state .
-
-       in the ATTRIBUTE state is is looking for either a closing ')'
-       or a '='. If it sees a closing ')' it changes to the initial state. 
-       if it sees an '=' it changes to the VALUE state and looks for 
-       the attribute value. After seeing the attribute value, it looks
-       for a either a ')' or a ','. If it sees a ')' it closes the attribute
-       and returns to the initial state. 
-
-       if, during the VALUE state the lexer sees a ',' it decides it is 
-       looking at a multi-valued attribute and returns a special _MULTIVAL
-       token to the parser. The parser uses this to construct additional
-       attribute-value pairs for each value in the multi-val statement. 
- */ 
-%option noyywrap prefix="attr"
-
-%x ATTR
-%x VALUE
-%%
-
-[ \t\v\f]*              { ; }
-
-","                    { attrlval._i = *attrtext; return(attrlval._i); }
-"("                    { BEGIN ATTR; attrlval._i = *attrtext; return(attrlval._i); }
-{tag}+                 {   
-                          if (attrleng > 0) {
-                             if(NULL != (attrlval._s = _lslp_strdup(attrtext)))
-                                 return(_TAG);
-                              else
-                                 return(0L);
-                           }
-                        }
-
- /* anything else in the initial state is an error */
-.                              {attrerror("error in lexer - initial state\n");}
-
-<ATTR>[ \t\v\f]*        { ; }
-<ATTR>"="              {BEGIN VALUE; attrlval._i = *attrtext; return(attrlval._i);}
-<ATTR>{tag}+           {   
-                          if (attrleng > 0 ) {
-                             if(NULL != (attrlval._s = _lslp_strdup(attrtext)))
-                                return(_TAG);
-                             else
-                                return(0L);
-                           }
-                        }
-
- /* make it legal to have just an attr tag enclosed in parens */
-<ATTR>")"              {BEGIN INITIAL; attrlval._i = *attrtext; return(attrlval._i); }
-
- /* anything else in the attribute state is an error */
-<ATTR>.                        {attrerror("error in lexer - attribute state\n");}
-
-<VALUE>[ \t\v\f]*       { ; }
-<VALUE>","             {attrlval._i = *attrtext; return(_MULTIVAL);}
-
-<VALUE>[-+][0-9]+             |
-<VALUE>[-+]"0"[xX]{hexdigit}+ { attrlval._i = strtol(attrtext, (char **) 0, 0); return _INT ;};
-
-<VALUE>[0-9]+                 |
-<VALUE>"0"[xX]{hexdigit}+     { attrlval._i = strtoul(attrtext, (char **)0, 0); return _INT; };
-
-
-<VALUE>[tT][rR][uU][eE] {return(_TRUE);}
-<VALUE>[fF][aA][lL][sS][eE]  {return(_FALSE);}
-<VALUE>{val}+          {       
-                           if (attrleng > 0) {
-                              if(NULL != (attrlval._s = _lslp_strdup(attrtext)))
-                                 return(_STRING);
-                              else
-                                 return(0L);
-                           }
-                        }              
-
-<VALUE>")"             {BEGIN INITIAL; attrlval._i = *attrtext; return(attrlval._i);}
-
- /* anything else in the value state is an error */
-<VALUE>.               {BEGIN INITIAL;}
-
-%%
-
-static int8 *_lslp_strdup(int8 *s)
-{
-  int8 *p = &heap[heapIndex];
-  do { heap[heapIndex++] = *s; } while ((*s != 0x00) && (heapIndex < 2049) && (++s));
-  return(p);
-}
-
-void attr_close_lexer(uint32 handle)
-{
-  assert(handle != 0);
-  attr_delete_buffer((YY_BUFFER_STATE)handle);
-}
-
-uint32 attr_init_lexer(int8 *s)
-{
-  memset(&buf[0], 0x00, 2052);
-  memset(&heap[0], 0x00, 2052);
-  heapIndex = 0;
-  strncpy(&buf[0], s, 2052);
-  return((uint32)attr_scan_buffer(&buf[0], strlen(s) + 2));
-}
-
-
-void attrerror(int8 *s, ...)
-{
-       
- /* (va, s);
-       printf(s, va);
-       return;
-*/
-}      
-
-/*
-int main(int argc, char *argv[])
-{
-
-}      
-
-*/
-
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/attr.tab.c b/src/Unsupported/slp_client/src/cmd-utils/slp_client/attr.tab.c
deleted file mode 100644 (file)
index 15a3c97..0000000
+++ /dev/null
@@ -1,1415 +0,0 @@
-/* A Bison parser, made from attr.y
-   by GNU bison 1.35.  */
-
-#define YYBISON 1  /* Identify Bison output.  */
-
-#define yyparse attrparse
-#define yylex attrlex
-#define yyerror attrerror
-#define yylval attrlval
-#define yychar attrchar
-#define yydebug attrdebug
-#define yynerrs attrnerrs
-# define       _TRUE   257
-# define       _FALSE  258
-# define       _MULTIVAL       259
-# define       _INT    260
-# define       _ESCAPED        261
-# define       _TAG    262
-# define       _STRING 263
-# define       _OPAQUE 264
-
-#line 35 "attr.y"
-
-#include "slp_client.h"
-void attrerror(int8 *, ...);
-int32 attrwrap(void);
-int32 attrlex(void);   
-int32 attrparse(void);
-BOOL bt = TRUE, bf = FALSE;
-void attr_close_lexer(uint32 handle);
-uint32 attr_init_lexer(int8 *s);
-
-lslpAttrList attrHead = 
-{
-       &attrHead, &attrHead, TRUE
-};
-
-lslpAttrList inProcessAttr = 
-{
-       &inProcessAttr, &inProcessAttr, TRUE
-};
-
-lslpAttrList inProcessTag = 
-{
-       &inProcessTag, &inProcessTag, TRUE
-};
-
-
-
-#line 66 "attr.y"
-#ifndef YYSTYPE
-typedef union {
-       int32 _i;
-       int8 *_s;
-       lslpAttrList *_atl;
-} yystype;
-# define YYSTYPE yystype
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-
-
-#define        YYFINAL         22
-#define        YYFLAG          -32768
-#define        YYNTBASE        15
-
-/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
-#define YYTRANSLATE(x) ((unsigned)(x) <= 264 ? yytranslate[x] : 19)
-
-/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
-static const char yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      12,    13,     2,     2,    11,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    14,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     3,     4,     5,
-       6,     7,     8,     9,    10
-};
-
-#if YYDEBUG
-static const short yyprhs[] =
-{
-       0,     0,     2,     6,     8,    12,    17,    23,    25,    29,
-      31,    33,    35,    37
-};
-static const short yyrhs[] =
-{
-      16,     0,    15,    11,    16,     0,     8,     0,    12,     8,
-      13,     0,    12,     8,    14,    13,     0,    12,     8,    14,
-      17,    13,     0,    18,     0,    17,     5,    18,     0,     3,
-       0,     4,     0,     7,     0,     9,     0,     6,     0
-};
-
-#endif
-
-#if YYDEBUG
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const short yyrline[] =
-{
-       0,    82,    92,   104,   111,   118,   126,   138,   145,   152,
-     155,   158,   161,   175
-};
-#endif
-
-
-#if (YYDEBUG) || defined YYERROR_VERBOSE
-
-/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
-static const char *const yytname[] =
-{
-  "$", "error", "$undefined.", "_TRUE", "_FALSE", "_MULTIVAL", "_INT", 
-  "_ESCAPED", "_TAG", "_STRING", "_OPAQUE", "','", "'('", "')'", "'='", 
-  "attr_list", "attr", "attr_val_list", "attr_val", 0
-};
-#endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const short yyr1[] =
-{
-       0,    15,    15,    16,    16,    16,    16,    17,    17,    18,
-      18,    18,    18,    18
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const short yyr2[] =
-{
-       0,     1,     3,     1,     3,     4,     5,     1,     3,     1,
-       1,     1,     1,     1
-};
-
-/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
-   doesn't specify something else to do.  Zero means the default is an
-   error. */
-static const short yydefact[] =
-{
-       0,     3,     0,     0,     1,     0,     0,     4,     0,     2,
-       9,    10,    13,    11,    12,     5,     0,     7,     0,     6,
-       8,     0,     0
-};
-
-static const short yydefgoto[] =
-{
-       3,     4,    16,    17
-};
-
-static const short yypact[] =
-{
-      12,-32768,     2,     0,-32768,     8,    12,-32768,    -1,-32768,
-  -32768,-32768,-32768,-32768,-32768,-32768,    -4,-32768,    10,-32768,
-  -32768,     4,-32768
-};
-
-static const short yypgoto[] =
-{
-  -32768,     1,-32768,    -3
-};
-
-
-#define        YYLAST          24
-
-
-static const short yytable[] =
-{
-      21,    18,    10,    11,    22,    12,    13,     9,    14,    19,
-       5,     6,    15,    10,    11,    20,    12,    13,     0,    14,
-       1,     7,     8,     0,     2
-};
-
-static const short yycheck[] =
-{
-       0,     5,     3,     4,     0,     6,     7,     6,     9,    13,
-       8,    11,    13,     3,     4,    18,     6,     7,    -1,     9,
-       8,    13,    14,    -1,    12
-};
-/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/share/bison/bison.simple"
-
-/* Skeleton output parser for bison,
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software
-   Foundation, Inc.
-
-   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, 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.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-/* This is the parser code that is written into each bison parser when
-   the %semantic_parser declaration is not specified in the grammar.
-   It was written by Richard Stallman by simplifying the hairy parser
-   used when %semantic_parser is specified.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# if YYSTACK_USE_ALLOCA
-#  define YYSTACK_ALLOC alloca
-# else
-#  ifndef YYSTACK_USE_ALLOCA
-#   if defined (alloca) || defined (_ALLOCA_H)
-#    define YYSTACK_ALLOC alloca
-#   else
-#    ifdef __GNUC__
-#     define YYSTACK_ALLOC __builtin_alloca
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning. */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
-# else
-#  if defined (__STDC__) || defined (__cplusplus)
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   define YYSIZE_T size_t
-#  endif
-#  define YYSTACK_ALLOC malloc
-#  define YYSTACK_FREE free
-# endif
-#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
-
-
-#if (! defined (yyoverflow) \
-     && (! defined (__cplusplus) \
-        || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  short yyss;
-  YYSTYPE yyvs;
-# if YYLSP_NEEDED
-  YYLTYPE yyls;
-# endif
-};
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# if YYLSP_NEEDED
-#  define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE))     \
-      + 2 * YYSTACK_GAP_MAX)
-# else
-#  define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (short) + sizeof (YYSTYPE))                                \
-      + YYSTACK_GAP_MAX)
-# endif
-
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)             \
-      do                                       \
-       {                                       \
-         register YYSIZE_T yyi;                \
-         for (yyi = 0; yyi < (Count); yyi++)   \
-           (To)[yyi] = (From)[yyi];            \
-       }                                       \
-      while (0)
-#  endif
-# endif
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack)                                       \
-    do                                                                 \
-      {                                                                        \
-       YYSIZE_T yynewbytes;                                            \
-       YYCOPY (&yyptr->Stack, Stack, yysize);                          \
-       Stack = &yyptr->Stack;                                          \
-       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX;   \
-       yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                        \
-    while (0)
-
-#endif
-
-
-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
-# define YYSIZE_T __SIZE_TYPE__
-#endif
-#if ! defined (YYSIZE_T) && defined (size_t)
-# define YYSIZE_T size_t
-#endif
-#if ! defined (YYSIZE_T)
-# if defined (__STDC__) || defined (__cplusplus)
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# endif
-#endif
-#if ! defined (YYSIZE_T)
-# define YYSIZE_T unsigned int
-#endif
-
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                -2
-#define YYEOF          0
-#define YYACCEPT       goto yyacceptlab
-#define YYABORT        goto yyabortlab
-#define YYERROR                goto yyerrlab1
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
-#define YYFAIL         goto yyerrlab
-#define YYRECOVERING()  (!!yyerrstatus)
-#define YYBACKUP(Token, Value)                                 \
-do                                                             \
-  if (yychar == YYEMPTY && yylen == 1)                         \
-    {                                                          \
-      yychar = (Token);                                                \
-      yylval = (Value);                                                \
-      yychar1 = YYTRANSLATE (yychar);                          \
-      YYPOPSTACK;                                              \
-      goto yybackup;                                           \
-    }                                                          \
-  else                                                         \
-    {                                                          \
-      yyerror ("syntax error: cannot back up");                        \
-      YYERROR;                                                 \
-    }                                                          \
-while (0)
-
-#define YYTERROR       1
-#define YYERRCODE      256
-
-
-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
-   are run).
-
-   When YYLLOC_DEFAULT is run, CURRENT is set the location of the
-   first token.  By default, to implement support for ranges, extend
-   its range to the last symbol.  */
-
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)               \
-   Current.last_line   = Rhs[N].last_line;     \
-   Current.last_column = Rhs[N].last_column;
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#if YYPURE
-# if YYLSP_NEEDED
-#  ifdef YYLEX_PARAM
-#   define YYLEX               yylex (&yylval, &yylloc, YYLEX_PARAM)
-#  else
-#   define YYLEX               yylex (&yylval, &yylloc)
-#  endif
-# else /* !YYLSP_NEEDED */
-#  ifdef YYLEX_PARAM
-#   define YYLEX               yylex (&yylval, YYLEX_PARAM)
-#  else
-#   define YYLEX               yylex (&yylval)
-#  endif
-# endif /* !YYLSP_NEEDED */
-#else /* !YYPURE */
-# define YYLEX                 yylex ()
-#endif /* !YYPURE */
-
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)                       \
-do {                                           \
-  if (yydebug)                                 \
-    YYFPRINTF Args;                            \
-} while (0)
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-#endif /* !YYDEBUG */
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef        YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
-
-   Do not make this value too large; the results are undefined if
-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#if YYMAXDEPTH == 0
-# undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-\f
-#ifdef YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined (__GLIBC__) && defined (_STRING_H)
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-static YYSIZE_T
-#   if defined (__STDC__) || defined (__cplusplus)
-yystrlen (const char *yystr)
-#   else
-yystrlen (yystr)
-     const char *yystr;
-#   endif
-{
-  register const char *yys = yystr;
-
-  while (*yys++ != '\0')
-    continue;
-
-  return yys - yystr - 1;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-static char *
-#   if defined (__STDC__) || defined (__cplusplus)
-yystpcpy (char *yydest, const char *yysrc)
-#   else
-yystpcpy (yydest, yysrc)
-     char *yydest;
-     const char *yysrc;
-#   endif
-{
-  register char *yyd = yydest;
-  register const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-#endif
-\f
-#line 315 "/usr/share/bison/bison.simple"
-
-
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
-   into yyparse.  The argument should have type void *.
-   It should actually point to an object.
-   Grammar actions can access the variable by casting it
-   to the proper pointer type.  */
-
-#ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
-#  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
-#  define YYPARSE_PARAM_DECL
-# else
-#  define YYPARSE_PARAM_ARG YYPARSE_PARAM
-#  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-# endif
-#else /* !YYPARSE_PARAM */
-# define YYPARSE_PARAM_ARG
-# define YYPARSE_PARAM_DECL
-#endif /* !YYPARSE_PARAM */
-
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-# ifdef YYPARSE_PARAM
-int yyparse (void *);
-# else
-int yyparse (void);
-# endif
-#endif
-
-/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
-   variables are global, or local to YYPARSE.  */
-
-#define YY_DECL_NON_LSP_VARIABLES                      \
-/* The lookahead symbol.  */                           \
-int yychar;                                            \
-                                                       \
-/* The semantic value of the lookahead symbol. */      \
-YYSTYPE yylval;                                                \
-                                                       \
-/* Number of parse errors so far.  */                  \
-int yynerrs;
-
-#if YYLSP_NEEDED
-# define YY_DECL_VARIABLES                     \
-YY_DECL_NON_LSP_VARIABLES                      \
-                                               \
-/* Location data for the lookahead symbol.  */ \
-YYLTYPE yylloc;
-#else
-# define YY_DECL_VARIABLES                     \
-YY_DECL_NON_LSP_VARIABLES
-#endif
-
-
-/* If nonreentrant, generate the variables here. */
-
-#if !YYPURE
-YY_DECL_VARIABLES
-#endif  /* !YYPURE */
-
-int
-yyparse (YYPARSE_PARAM_ARG)
-     YYPARSE_PARAM_DECL
-{
-  /* If reentrant, generate the variables here. */
-#if YYPURE
-  YY_DECL_VARIABLES
-#endif  /* !YYPURE */
-
-  register int yystate;
-  register int yyn;
-  int yyresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yyerrstatus;
-  /* Lookahead token as an internal (translated) token number.  */
-  int yychar1 = 0;
-
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
-
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
-
-  /* The state stack. */
-  short        yyssa[YYINITDEPTH];
-  short *yyss = yyssa;
-  register short *yyssp;
-
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  register YYSTYPE *yyvsp;
-
-#if YYLSP_NEEDED
-  /* The location stack.  */
-  YYLTYPE yylsa[YYINITDEPTH];
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;
-#endif
-
-#if YYLSP_NEEDED
-# define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
-#else
-# define YYPOPSTACK   (yyvsp--, yyssp--)
-#endif
-
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
-
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-#if YYLSP_NEEDED
-  YYLTYPE yyloc;
-#endif
-
-  /* When reducing, the number of symbols on the RHS of the reduced
-     rule. */
-  int yylen;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY;            /* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-
-  yyssp = yyss;
-  yyvsp = yyvs;
-#if YYLSP_NEEDED
-  yylsp = yyls;
-#endif
-  goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed. so pushing a state here evens the stacks.
-     */
-  yyssp++;
-
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyssp >= yyss + yystacksize - 1)
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      {
-       /* Give user a chance to reallocate the stack. Use copies of
-          these so that the &'s don't force the real ones into
-          memory.  */
-       YYSTYPE *yyvs1 = yyvs;
-       short *yyss1 = yyss;
-
-       /* Each stack pointer address is followed by the size of the
-          data in use in that stack, in bytes.  */
-# if YYLSP_NEEDED
-       YYLTYPE *yyls1 = yyls;
-       /* This used to be a conditional around just the two extra args,
-          but that might be undefined if yyoverflow is a macro.  */
-       yyoverflow ("parser stack overflow",
-                   &yyss1, yysize * sizeof (*yyssp),
-                   &yyvs1, yysize * sizeof (*yyvsp),
-                   &yyls1, yysize * sizeof (*yylsp),
-                   &yystacksize);
-       yyls = yyls1;
-# else
-       yyoverflow ("parser stack overflow",
-                   &yyss1, yysize * sizeof (*yyssp),
-                   &yyvs1, yysize * sizeof (*yyvsp),
-                   &yystacksize);
-# endif
-       yyss = yyss1;
-       yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyoverflowlab;
-# else
-      /* Extend the stack our own way.  */
-      if (yystacksize >= YYMAXDEPTH)
-       goto yyoverflowlab;
-      yystacksize *= 2;
-      if (yystacksize > YYMAXDEPTH)
-       yystacksize = YYMAXDEPTH;
-
-      {
-       short *yyss1 = yyss;
-       union yyalloc *yyptr =
-         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-       if (! yyptr)
-         goto yyoverflowlab;
-       YYSTACK_RELOCATE (yyss);
-       YYSTACK_RELOCATE (yyvs);
-# if YYLSP_NEEDED
-       YYSTACK_RELOCATE (yyls);
-# endif
-# undef YYSTACK_RELOCATE
-       if (yyss1 != yyssa)
-         YYSTACK_FREE (yyss1);
-      }
-# endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-#if YYLSP_NEEDED
-      yylsp = yyls + yysize - 1;
-#endif
-
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                 (unsigned long int) yystacksize));
-
-      if (yyssp >= yyss + yystacksize - 1)
-       YYABORT;
-    }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
-  goto yybackup;
-
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-/* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
-/* yyresume: */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* yychar is either YYEMPTY or YYEOF
-     or a valid token in external form.  */
-
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
-    }
-
-  /* Convert token to internal form (in yychar1) for indexing tables with */
-
-  if (yychar <= 0)             /* This means end of input. */
-    {
-      yychar1 = 0;
-      yychar = YYEOF;          /* Don't call YYLEX any more */
-
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yychar1 = YYTRANSLATE (yychar);
-
-#if YYDEBUG
-     /* We have to keep this `#if YYDEBUG', since we use variables
-       which are defined only if `YYDEBUG' is set.  */
-      if (yydebug)
-       {
-         YYFPRINTF (stderr, "Next token is %d (%s",
-                    yychar, yytname[yychar1]);
-         /* Give the individual parser a way to print the precise
-            meaning of a token, for further debugging info.  */
-# ifdef YYPRINT
-         YYPRINT (stderr, yychar, yylval);
-# endif
-         YYFPRINTF (stderr, ")\n");
-       }
-#endif
-    }
-
-  yyn += yychar1;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
-    goto yydefault;
-
-  yyn = yytable[yyn];
-
-  /* yyn is what to do for this token type in this state.
-     Negative => reduce, -yyn is rule number.
-     Positive => shift, yyn is new state.
-       New state is final state => don't bother to shift,
-       just return success.
-     0, or most negative number => error.  */
-
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrlab;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Shift the lookahead token.  */
-  YYDPRINTF ((stderr, "Shifting token %d (%s), ",
-             yychar, yytname[yychar1]));
-
-  /* Discard the token being shifted unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
-
-  *++yyvsp = yylval;
-#if YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to the semantic value of
-     the lookahead token.  This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-#if YYLSP_NEEDED
-  /* Similarly for the default location.  Let the user run additional
-     commands if for instance locations are ranges.  */
-  yyloc = yylsp[1-yylen];
-  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
-#endif
-
-#if YYDEBUG
-  /* We have to keep this `#if YYDEBUG', since we use variables which
-     are defined only if `YYDEBUG' is set.  */
-  if (yydebug)
-    {
-      int yyi;
-
-      YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
-                yyn, yyrline[yyn]);
-
-      /* Print the symbols being reduced, and their result.  */
-      for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
-       YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
-      YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
-    }
-#endif
-
-  switch (yyn) {
-
-case 1:
-#line 82 "attr.y"
-{
-                       while (! _LSLP_IS_HEAD(inProcessAttr.next))
-                       {
-                               yyval._atl = inProcessAttr.next;
-                               _LSLP_UNLINK(yyval._atl);
-                               _LSLP_INSERT_BEFORE(yyval._atl, &attrHead);
-                       }
-               /* all we really want to do here is link each attribute */
-               /* to the global list head. */
-               ;
-    break;}
-case 2:
-#line 92 "attr.y"
-{
-               /* both of these non-terminals are really lists */
-               /* ignore the first non-terminal */
-                       while (! _LSLP_IS_HEAD(inProcessAttr.next))
-                       {
-                               yyval._atl = inProcessAttr.next;
-                               _LSLP_UNLINK(yyval._atl);
-                               _LSLP_INSERT_BEFORE(yyval._atl, &attrHead);
-                       }
-               ;
-    break;}
-case 3:
-#line 104 "attr.y"
-{
-                       yyval._atl =  lslpAllocAttr(yyvsp[0]._s, tag, NULL, 0);
-                       if (NULL != yyval._atl)
-                       {
-                               _LSLP_INSERT_BEFORE(yyval._atl, &inProcessAttr);
-                       }
-               ;
-    break;}
-case 4:
-#line 111 "attr.y"
-{
-                       yyval._atl =  lslpAllocAttr(yyvsp[-1]._s, tag, NULL, 0);
-                       if (NULL != yyval._atl)
-                       {
-                               _LSLP_INSERT_BEFORE(yyval._atl, &inProcessAttr);
-                       }
-               ;
-    break;}
-case 5:
-#line 118 "attr.y"
-{
-                       yyval._atl =  lslpAllocAttr(yyvsp[-2]._s, tag, NULL, 0);
-                       if (NULL != yyval._atl)
-                       {
-                               _LSLP_INSERT_BEFORE(yyval._atl, &inProcessAttr);
-                       }
-               ;
-    break;}
-case 6:
-#line 126 "attr.y"
-{
-                       yyval._atl = inProcessTag.next;
-                       while (! _LSLP_IS_HEAD(yyval._atl))
-                       {
-                               yyval._atl->name = strdup(yyvsp[-3]._s); 
-                               _LSLP_UNLINK(yyval._atl);
-                               _LSLP_INSERT_BEFORE(yyval._atl, &inProcessAttr);
-                               yyval._atl = inProcessTag.next;
-                       }
-               ;
-    break;}
-case 7:
-#line 138 "attr.y"
-{
-
-                       if(NULL != yyvsp[0]._atl)
-                       {
-                               _LSLP_INSERT(yyvsp[0]._atl, &inProcessTag);
-                       }
-               ;
-    break;}
-case 8:
-#line 145 "attr.y"
-{
-                       if (NULL != yyvsp[0]._atl)
-                       {
-                               _LSLP_INSERT_BEFORE(yyvsp[0]._atl, &inProcessTag);
-                       }
-               ;
-    break;}
-case 9:
-#line 152 "attr.y"
-{
-                       yyval._atl = lslpAllocAttr(NULL, bool_type,  &bt, sizeof(BOOL));
-               ;
-    break;}
-case 10:
-#line 155 "attr.y"
-{
-                       yyval._atl = lslpAllocAttr(NULL, bool_type,  &bf, sizeof(BOOL));
-               ;
-    break;}
-case 11:
-#line 158 "attr.y"
-{
-                       yyval._atl = lslpAllocAttr(NULL, opaque, yyvsp[0]._s, (int16)(strlen(yyvsp[0]._s) + 1));
-               ;
-    break;}
-case 12:
-#line 161 "attr.y"
-{
-                            if(strlen(yyvsp[0]._s) > 5 ) {
-                               if( *(yyvsp[0]._s) == '\\' && ((*(yyvsp[0]._s + 1) == 'f') || (*(yyvsp[0]._s + 1) == 'F')) &&  ((*(yyvsp[0]._s + 2) == 'f') || (*(yyvsp[0]._s + 2) == 'F'))) {
-                                      yyval._atl = lslpAllocAttr(NULL, opaque, yyvsp[0]._s, (int16)(strlen(yyvsp[0]._s) + 1));
-                                     } else {
-                                      yyval._atl = lslpAllocAttr(NULL, string, yyvsp[0]._s, (int16)(strlen(yyvsp[0]._s) + 1));
-                                    }
-                                  }
-                            else {
-                              
-                              yyval._atl = lslpAllocAttr(NULL, string, yyvsp[0]._s, (int16)(strlen(yyvsp[0]._s) + 1));
-                            }
-               ;
-    break;}
-case 13:
-#line 175 "attr.y"
-{
-                       yyval._atl = lslpAllocAttr(NULL, integer, &(yyvsp[0]._i), sizeof(int32));
-               ;
-    break;}
-}
-
-#line 705 "/usr/share/bison/bison.simple"
-
-\f
-  yyvsp -= yylen;
-  yyssp -= yylen;
-#if YYLSP_NEEDED
-  yylsp -= yylen;
-#endif
-
-#if YYDEBUG
-  if (yydebug)
-    {
-      short *yyssp1 = yyss - 1;
-      YYFPRINTF (stderr, "state stack now");
-      while (yyssp1 != yyssp)
-       YYFPRINTF (stderr, " %d", *++yyssp1);
-      YYFPRINTF (stderr, "\n");
-    }
-#endif
-
-  *++yyvsp = yyval;
-#if YYLSP_NEEDED
-  *++yylsp = yyloc;
-#endif
-
-  /* Now `shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
-  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTBASE];
-
-  goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-
-#ifdef YYERROR_VERBOSE
-      yyn = yypact[yystate];
-
-      if (yyn > YYFLAG && yyn < YYLAST)
-       {
-         YYSIZE_T yysize = 0;
-         char *yymsg;
-         int yyx, yycount;
-
-         yycount = 0;
-         /* Start YYX at -YYN if negative to avoid negative indexes in
-            YYCHECK.  */
-         for (yyx = yyn < 0 ? -yyn : 0;
-              yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
-           if (yycheck[yyx + yyn] == yyx)
-             yysize += yystrlen (yytname[yyx]) + 15, yycount++;
-         yysize += yystrlen ("parse error, unexpected ") + 1;
-         yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
-         yymsg = (char *) YYSTACK_ALLOC (yysize);
-         if (yymsg != 0)
-           {
-             char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
-             yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
-
-             if (yycount < 5)
-               {
-                 yycount = 0;
-                 for (yyx = yyn < 0 ? -yyn : 0;
-                      yyx < (int) (sizeof (yytname) / sizeof (char *));
-                      yyx++)
-                   if (yycheck[yyx + yyn] == yyx)
-                     {
-                       const char *yyq = ! yycount ? ", expecting " : " or ";
-                       yyp = yystpcpy (yyp, yyq);
-                       yyp = yystpcpy (yyp, yytname[yyx]);
-                       yycount++;
-                     }
-               }
-             yyerror (yymsg);
-             YYSTACK_FREE (yymsg);
-           }
-         else
-           yyerror ("parse error; also virtual memory exhausted");
-       }
-      else
-#endif /* defined (YYERROR_VERBOSE) */
-       yyerror ("parse error");
-    }
-  goto yyerrlab1;
-
-
-/*--------------------------------------------------.
-| yyerrlab1 -- error raised explicitly by an action |
-`--------------------------------------------------*/
-yyerrlab1:
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse lookahead token after an
-        error, discard it.  */
-
-      /* return failure if at end of input */
-      if (yychar == YYEOF)
-       YYABORT;
-      YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
-                 yychar, yytname[yychar1]));
-      yychar = YYEMPTY;
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-
-  yyerrstatus = 3;             /* Each real token shifted decrements this */
-
-  goto yyerrhandle;
-
-
-/*-------------------------------------------------------------------.
-| yyerrdefault -- current state does not do anything special for the |
-| error token.                                                       |
-`-------------------------------------------------------------------*/
-yyerrdefault:
-#if 0
-  /* This is wrong; only states that explicitly want error tokens
-     should shift them.  */
-
-  /* If its default is to accept any token, ok.  Otherwise pop it.  */
-  yyn = yydefact[yystate];
-  if (yyn)
-    goto yydefault;
-#endif
-
-
-/*---------------------------------------------------------------.
-| yyerrpop -- pop the current state because it cannot handle the |
-| error token                                                    |
-`---------------------------------------------------------------*/
-yyerrpop:
-  if (yyssp == yyss)
-    YYABORT;
-  yyvsp--;
-  yystate = *--yyssp;
-#if YYLSP_NEEDED
-  yylsp--;
-#endif
-
-#if YYDEBUG
-  if (yydebug)
-    {
-      short *yyssp1 = yyss - 1;
-      YYFPRINTF (stderr, "Error: state stack now");
-      while (yyssp1 != yyssp)
-       YYFPRINTF (stderr, " %d", *++yyssp1);
-      YYFPRINTF (stderr, "\n");
-    }
-#endif
-
-/*--------------.
-| yyerrhandle.  |
-`--------------*/
-yyerrhandle:
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yyerrdefault;
-
-  yyn += YYTERROR;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
-    goto yyerrdefault;
-
-  yyn = yytable[yyn];
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrpop;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrpop;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  YYDPRINTF ((stderr, "Shifting error token, "));
-
-  *++yyvsp = yylval;
-#if YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-/*---------------------------------------------.
-| yyoverflowab -- parser overflow comes here.  |
-`---------------------------------------------*/
-yyoverflowlab:
-  yyerror ("parser stack overflow");
-  yyresult = 2;
-  /* Fall through.  */
-
-yyreturn:
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-  return yyresult;
-}
-#line 180 "attr.y"
-
-
-void _lslpInitInternalAttrList(void)
-{
-       attrHead.next = attrHead.prev = &attrHead;
-       attrHead.isHead = TRUE;
-       inProcessAttr.next =  inProcessAttr.prev = &inProcessAttr;
-       inProcessAttr.isHead = TRUE;
-       inProcessTag.next =  inProcessTag.prev = &inProcessTag;
-       inProcessTag.isHead = TRUE;
-       return;
-}      
-
-lslpAttrList *_lslpDecodeAttrString(int8 *s)
-{
-  uint32 lexer = 0;
-  lslpAttrList *temp = NULL;
-  assert(s != NULL);
-  _lslpInitInternalAttrList();
-  if (s != NULL) {
-    if(NULL != (temp = lslpAllocAttrList()))  {
-      if ((0 != (lexer = attr_init_lexer( s))) &&  attrparse()) {
-       lslpFreeAttrList(temp, TRUE);
-       while (! _LSLP_IS_HEAD(inProcessTag.next))  {
-         temp = inProcessTag.next;
-           _LSLP_UNLINK(temp);
-           lslpFreeAttr(temp);
-       }
-       while (! _LSLP_IS_HEAD(inProcessAttr.next))  {
-         temp = inProcessAttr.next;
-         _LSLP_UNLINK(temp);
-         lslpFreeAttr(temp);
-       }
-       while (! _LSLP_IS_HEAD(attrHead.next))  {
-         temp = attrHead.next;
-         _LSLP_UNLINK(temp);
-         lslpFreeAttr(temp);
-       }
-       attr_close_lexer(lexer);
-       return(NULL);
-      }
-      
-      if (! _LSLP_IS_EMPTY(&attrHead)) {
-       temp->attr_string_len = strlen(s);
-       temp->attr_string = (int8 *)malloc(temp->attr_string_len + 1);
-       if(temp->attr_string != NULL) {
-         memcpy(temp->attr_string, s, temp->attr_string_len);
-         temp->attr_string[temp->attr_string_len] = 0x00;
-       }
-       _LSLP_LINK_HEAD(temp, &attrHead);
-      }
-      if(lexer != 0) 
-       attr_close_lexer(lexer);
-    }
-  }
-  
-  return(temp);
-}      
-
-
-lslpAttrList *lslpAllocAttr(int8 *name, int8 type, void *val, int16 len)
-{      
-  lslpAttrList *attr;
-  if (NULL != (attr = (lslpAttrList *)calloc(1, sizeof(lslpAttrList))))
-    {
-      if (name != NULL)
-       {
-         if (NULL == (attr->name = strdup(name)))
-           {
-             free(attr);
-             return(NULL);
-           }
-       }
-      attr->type = type;
-      if (type == head)        /* listhead */
-       return(attr);
-      if (val != NULL)
-       {
-         attr->attr_len = len;
-         switch (type)     {
-           case string:
-             if ( NULL != (attr->val.stringVal = strdup((int8 *)val)))
-               return(attr);
-             break;
-           case integer:
-             attr->val.intVal = *(uint32 *)val;
-             break;
-           case bool_type:
-             attr->val.boolVal = *(BOOL *)val;
-             break;
-           case opaque:
-             if ( NULL != (attr->val.opaqueVal = strdup((int8 *)val)))
-               return(attr);
-             break;
-           default:
-             break;
-           }
-       }
-    }
-  return(attr);
-}      
-
-lslpAttrList *lslpAllocAttrList(void)
-{
-  lslpAttrList *temp;
-  if (NULL != (temp = lslpAllocAttr(NULL, head, NULL, 0)))
-    {
-      temp->next = temp->prev = temp;
-      temp->isHead = TRUE;     
-    }
-  return(temp);
-}      
-
-/* attr MUST be unlinked from its list ! */
-void lslpFreeAttr(lslpAttrList *attr)
-{
-  assert(attr != NULL);
-  if (attr->name != NULL)
-    free(attr->name);
-  if(attr->attr_string != NULL)
-    free(attr->attr_string);
-  if (attr->type == string && attr->val.stringVal != NULL)
-    free(attr->val.stringVal);
-  else if (attr->type == opaque && attr->val.opaqueVal != NULL)
-    free(attr->val.opaqueVal);
-  free(attr);
-}      
-
-void lslpFreeAttrList(lslpAttrList *list, BOOL staticFlag)
-{
-  lslpAttrList *temp;
-
-  assert(list != NULL);
-  assert(_LSLP_IS_HEAD(list));
-  while(! (_LSLP_IS_EMPTY(list)))
-    {
-      temp = list->next;
-      _LSLP_UNLINK(temp);
-      lslpFreeAttr(temp);
-    }
-  if(staticFlag == TRUE)
-    lslpFreeAttr(list);
-  return;
-       
-}      
-
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/attr.tab.h b/src/Unsupported/slp_client/src/cmd-utils/slp_client/attr.tab.h
deleted file mode 100644 (file)
index 62cf427..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-//%2005////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation, The Open Group.
-// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-// EMC Corporation; VERITAS Software Corporation; The Open Group.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-// 
-// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-//==============================================================================
-#ifndef BISON_ATTR_TAB_H
-# define BISON_ATTR_TAB_H
-
-#ifndef YYSTYPE
-typedef union {
-       int32 _i;
-       int8 *_s;
-       lslpAttrList *_atl;
-} yystype;
-# define YYSTYPE yystype
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-# define       _TRUE   257
-# define       _FALSE  258
-# define       _MULTIVAL       259
-# define       _INT    260
-# define       _ESCAPED        261
-# define       _TAG    262
-# define       _STRING 263
-# define       _OPAQUE 264
-
-
-extern YYSTYPE attrlval;
-
-#endif /* not BISON_ATTR_TAB_H */
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/attr.y b/src/Unsupported/slp_client/src/cmd-utils/slp_client/attr.y
deleted file mode 100644 (file)
index 074da29..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-/*****************************************************************************
- *  Description:   encode/decode attribute lists 
- *
- *  Originated: March 06, 2000
- *     Original Author: Mike Day md@soft-hackle.net
- *                                mdd@us.ibm.com
-
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/slp_client/Attic/attr.y,v 1.1 2003/05/21 15:14:08 mday Exp $                                                                
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-%{
-#include "slp_client.h"
-void attrerror(int8 *, ...);
-int32 attrwrap(void);
-int32 attrlex(void);   
-int32 attrparse(void);
-BOOL bt = TRUE, bf = FALSE;
-void attr_close_lexer(uint32 handle);
-uint32 attr_init_lexer(int8 *s);
-
-lslpAttrList attrHead = 
-{
-       &attrHead, &attrHead, TRUE
-};
-
-lslpAttrList inProcessAttr = 
-{
-       &inProcessAttr, &inProcessAttr, TRUE
-};
-
-lslpAttrList inProcessTag = 
-{
-       &inProcessTag, &inProcessTag, TRUE
-};
-
-
-%}
-
-/* definitions for ytab.h */
-%name-prefix="attr"
-
-%union {
-       int32 _i;
-       int8 *_s;
-       lslpAttrList *_atl;
-}
-
-%token<_i> _TRUE _FALSE _MULTIVAL _INT 
-%token<_s> _ESCAPED _TAG _STRING _OPAQUE
-
-/* typecast the non-terminals */
-
-/* %type <_i> */
-%type <_atl> attr_list attr attr_val_list attr_val
-
-%%
-
-attr_list: attr {
-                       while (! _LSLP_IS_HEAD(inProcessAttr.next))
-                       {
-                               $$ = inProcessAttr.next;
-                               _LSLP_UNLINK($$);
-                               _LSLP_INSERT_BEFORE($$, &attrHead);
-                       }
-               /* all we really want to do here is link each attribute */
-               /* to the global list head. */
-               }
-       | attr_list ',' attr {
-               /* both of these non-terminals are really lists */
-               /* ignore the first non-terminal */
-                       while (! _LSLP_IS_HEAD(inProcessAttr.next))
-                       {
-                               $$ = inProcessAttr.next;
-                               _LSLP_UNLINK($$);
-                               _LSLP_INSERT_BEFORE($$, &attrHead);
-                       }
-               }
-       ;
-
-attr: _TAG     {
-                       $$ =  lslpAllocAttr($1, tag, NULL, 0);
-                       if (NULL != $$)
-                       {
-                               _LSLP_INSERT_BEFORE($$, &inProcessAttr);
-                       }
-               }
-       | '(' _TAG ')'  {
-                       $$ =  lslpAllocAttr($2, tag, NULL, 0);
-                       if (NULL != $$)
-                       {
-                               _LSLP_INSERT_BEFORE($$, &inProcessAttr);
-                       }
-               }
-        | '(' _TAG '=' ')' {
-                       $$ =  lslpAllocAttr($2, tag, NULL, 0);
-                       if (NULL != $$)
-                       {
-                               _LSLP_INSERT_BEFORE($$, &inProcessAttr);
-                       }
-               }
-
-       | '(' _TAG '=' attr_val_list ')' {
-                       $$ = inProcessTag.next;
-                       while (! _LSLP_IS_HEAD($$))
-                       {
-                               $$->name = strdup($2); 
-                               _LSLP_UNLINK($$);
-                               _LSLP_INSERT_BEFORE($$, &inProcessAttr);
-                               $$ = inProcessTag.next;
-                       }
-               }
-       ;
-
-attr_val_list: attr_val {
-
-                       if(NULL != $1)
-                       {
-                               _LSLP_INSERT($1, &inProcessTag);
-                       }
-               }
-       | attr_val_list _MULTIVAL attr_val {
-                       if (NULL != $3)
-                       {
-                               _LSLP_INSERT_BEFORE($3, &inProcessTag);
-                       }
-               }
-       ;
-attr_val: _TRUE {
-                       $$ = lslpAllocAttr(NULL, bool_type,  &bt, sizeof(BOOL));
-               }
-       |     _FALSE {
-                       $$ = lslpAllocAttr(NULL, bool_type,  &bf, sizeof(BOOL));
-               }
-       |     _ESCAPED {
-                       $$ = lslpAllocAttr(NULL, opaque, $1, (int16)(strlen($1) + 1));
-               }
-       |         _STRING {
-                            if(strlen($1) > 5 ) {
-                               if( *($1) == '\\' && ((*($1 + 1) == 'f') || (*($1 + 1) == 'F')) &&  ((*($1 + 2) == 'f') || (*($1 + 2) == 'F'))) {
-                                      $$ = lslpAllocAttr(NULL, opaque, $1, (int16)(strlen($1) + 1));
-                                     } else {
-                                      $$ = lslpAllocAttr(NULL, string, $1, (int16)(strlen($1) + 1));
-                                    }
-                                  }
-                            else {
-                              
-                              $$ = lslpAllocAttr(NULL, string, $1, (int16)(strlen($1) + 1));
-                            }
-               } 
-
-       |     _INT {
-                       $$ = lslpAllocAttr(NULL, integer, &($1), sizeof(int32));
-               }
-       ;
-       
-%%
-
-void _lslpInitInternalAttrList(void)
-{
-       attrHead.next = attrHead.prev = &attrHead;
-       attrHead.isHead = TRUE;
-       inProcessAttr.next =  inProcessAttr.prev = &inProcessAttr;
-       inProcessAttr.isHead = TRUE;
-       inProcessTag.next =  inProcessTag.prev = &inProcessTag;
-       inProcessTag.isHead = TRUE;
-       return;
-}      
-
-lslpAttrList *_lslpDecodeAttrString(int8 *s)
-{
-  uint32 lexer = 0;
-  lslpAttrList *temp = NULL;
-  assert(s != NULL);
-  _lslpInitInternalAttrList();
-  if (s != NULL) {
-    if(NULL != (temp = lslpAllocAttrList()))  {
-      if ((0 != (lexer = attr_init_lexer( s))) &&  attrparse()) {
-       lslpFreeAttrList(temp, TRUE);
-       while (! _LSLP_IS_HEAD(inProcessTag.next))  {
-         temp = inProcessTag.next;
-           _LSLP_UNLINK(temp);
-           lslpFreeAttr(temp);
-       }
-       while (! _LSLP_IS_HEAD(inProcessAttr.next))  {
-         temp = inProcessAttr.next;
-         _LSLP_UNLINK(temp);
-         lslpFreeAttr(temp);
-       }
-       while (! _LSLP_IS_HEAD(attrHead.next))  {
-         temp = attrHead.next;
-         _LSLP_UNLINK(temp);
-         lslpFreeAttr(temp);
-       }
-       attr_close_lexer(lexer);
-       return(NULL);
-      }
-      
-      if (! _LSLP_IS_EMPTY(&attrHead)) {
-       temp->attr_string_len = strlen(s);
-       temp->attr_string = (int8 *)malloc(temp->attr_string_len + 1);
-       if(temp->attr_string != NULL) {
-         memcpy(temp->attr_string, s, temp->attr_string_len);
-         temp->attr_string[temp->attr_string_len] = 0x00;
-       }
-       _LSLP_LINK_HEAD(temp, &attrHead);
-      }
-      if(lexer != 0) 
-       attr_close_lexer(lexer);
-    }
-  }
-  
-  return(temp);
-}      
-
-
-lslpAttrList *lslpAllocAttr(int8 *name, int8 type, void *val, int16 len)
-{      
-  lslpAttrList *attr;
-  if (NULL != (attr = (lslpAttrList *)calloc(1, sizeof(lslpAttrList))))
-    {
-      if (name != NULL)
-       {
-         if (NULL == (attr->name = strdup(name)))
-           {
-             free(attr);
-             return(NULL);
-           }
-       }
-      attr->type = type;
-      if (type == head)        /* listhead */
-       return(attr);
-      if (val != NULL)
-       {
-         attr->attr_len = len;
-         switch (type)     {
-           case string:
-             if ( NULL != (attr->val.stringVal = strdup((int8 *)val)))
-               return(attr);
-             break;
-           case integer:
-             attr->val.intVal = *(uint32 *)val;
-             break;
-           case bool_type:
-             attr->val.boolVal = *(BOOL *)val;
-             break;
-           case opaque:
-             if ( NULL != (attr->val.opaqueVal = strdup((int8 *)val)))
-               return(attr);
-             break;
-           default:
-             break;
-           }
-       }
-    }
-  return(attr);
-}      
-
-lslpAttrList *lslpAllocAttrList(void)
-{
-  lslpAttrList *temp;
-  if (NULL != (temp = lslpAllocAttr(NULL, head, NULL, 0)))
-    {
-      temp->next = temp->prev = temp;
-      temp->isHead = TRUE;     
-    }
-  return(temp);
-}      
-
-/* attr MUST be unlinked from its list ! */
-void lslpFreeAttr(lslpAttrList *attr)
-{
-  assert(attr != NULL);
-  if (attr->name != NULL)
-    free(attr->name);
-  if(attr->attr_string != NULL)
-    free(attr->attr_string);
-  if (attr->type == string && attr->val.stringVal != NULL)
-    free(attr->val.stringVal);
-  else if (attr->type == opaque && attr->val.opaqueVal != NULL)
-    free(attr->val.opaqueVal);
-  free(attr);
-}      
-
-void lslpFreeAttrList(lslpAttrList *list, BOOL staticFlag)
-{
-  lslpAttrList *temp;
-
-  assert(list != NULL);
-  assert(_LSLP_IS_HEAD(list));
-  while(! (_LSLP_IS_EMPTY(list)))
-    {
-      temp = list->next;
-      _LSLP_UNLINK(temp);
-      lslpFreeAttr(temp);
-    }
-  if(staticFlag == TRUE)
-    lslpFreeAttr(list);
-  return;
-       
-}      
-
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/bison.simple b/src/Unsupported/slp_client/src/cmd-utils/slp_client/bison.simple
deleted file mode 100644 (file)
index e8bd7c0..0000000
+++ /dev/null
@@ -1,933 +0,0 @@
-/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line
-/* Skeleton output parser for bison,
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software
-   Foundation, Inc.
-
-   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, 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.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-/* This is the parser code that is written into each bison parser when
-   the %semantic_parser declaration is not specified in the grammar.
-   It was written by Richard Stallman by simplifying the hairy parser
-   used when %semantic_parser is specified.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# if YYSTACK_USE_ALLOCA
-#  define YYSTACK_ALLOC alloca
-# else
-#  ifndef YYSTACK_USE_ALLOCA
-#   if defined (alloca) || defined (_ALLOCA_H)
-#    define YYSTACK_ALLOC alloca
-#   else
-#    ifdef __GNUC__
-#     define YYSTACK_ALLOC __builtin_alloca
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning. */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
-# else
-#  if defined (__STDC__) || defined (__cplusplus)
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   define YYSIZE_T size_t
-#  endif
-#  define YYSTACK_ALLOC malloc
-#  define YYSTACK_FREE free
-# endif
-#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
-
-
-#if (! defined (yyoverflow) \
-     && (! defined (__cplusplus) \
-        || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  short yyss;
-  YYSTYPE yyvs;
-# if YYLSP_NEEDED
-  YYLTYPE yyls;
-# endif
-};
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# if YYLSP_NEEDED
-#  define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE))     \
-      + 2 * YYSTACK_GAP_MAX)
-# else
-#  define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (short) + sizeof (YYSTYPE))                                \
-      + YYSTACK_GAP_MAX)
-# endif
-
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)             \
-      do                                       \
-       {                                       \
-         register YYSIZE_T yyi;                \
-         for (yyi = 0; yyi < (Count); yyi++)   \
-           (To)[yyi] = (From)[yyi];            \
-       }                                       \
-      while (0)
-#  endif
-# endif
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack)                                       \
-    do                                                                 \
-      {                                                                        \
-       YYSIZE_T yynewbytes;                                            \
-       YYCOPY (&yyptr->Stack, Stack, yysize);                          \
-       Stack = &yyptr->Stack;                                          \
-       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX;   \
-       yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                        \
-    while (0)
-
-#endif
-
-
-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
-# define YYSIZE_T __SIZE_TYPE__
-#endif
-#if ! defined (YYSIZE_T) && defined (size_t)
-# define YYSIZE_T size_t
-#endif
-#if ! defined (YYSIZE_T)
-# if defined (__STDC__) || defined (__cplusplus)
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# endif
-#endif
-#if ! defined (YYSIZE_T)
-# define YYSIZE_T unsigned int
-#endif
-
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                -2
-#define YYEOF          0
-#define YYACCEPT       goto yyacceptlab
-#define YYABORT        goto yyabortlab
-#define YYERROR                goto yyerrlab1
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
-#define YYFAIL         goto yyerrlab
-#define YYRECOVERING()  (!!yyerrstatus)
-#define YYBACKUP(Token, Value)                                 \
-do                                                             \
-  if (yychar == YYEMPTY && yylen == 1)                         \
-    {                                                          \
-      yychar = (Token);                                                \
-      yylval = (Value);                                                \
-      yychar1 = YYTRANSLATE (yychar);                          \
-      YYPOPSTACK;                                              \
-      goto yybackup;                                           \
-    }                                                          \
-  else                                                         \
-    {                                                          \
-      yyerror ("syntax error: cannot back up");                        \
-      YYERROR;                                                 \
-    }                                                          \
-while (0)
-
-#define YYTERROR       1
-#define YYERRCODE      256
-
-
-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
-   are run).
-
-   When YYLLOC_DEFAULT is run, CURRENT is set the location of the
-   first token.  By default, to implement support for ranges, extend
-   its range to the last symbol.  */
-
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)               \
-   Current.last_line   = Rhs[N].last_line;     \
-   Current.last_column = Rhs[N].last_column;
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#if YYPURE
-# if YYLSP_NEEDED
-#  ifdef YYLEX_PARAM
-#   define YYLEX               yylex (&yylval, &yylloc, YYLEX_PARAM)
-#  else
-#   define YYLEX               yylex (&yylval, &yylloc)
-#  endif
-# else /* !YYLSP_NEEDED */
-#  ifdef YYLEX_PARAM
-#   define YYLEX               yylex (&yylval, YYLEX_PARAM)
-#  else
-#   define YYLEX               yylex (&yylval)
-#  endif
-# endif /* !YYLSP_NEEDED */
-#else /* !YYPURE */
-# define YYLEX                 yylex ()
-#endif /* !YYPURE */
-
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)                       \
-do {                                           \
-  if (yydebug)                                 \
-    YYFPRINTF Args;                            \
-} while (0)
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-#endif /* !YYDEBUG */
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef        YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
-
-   Do not make this value too large; the results are undefined if
-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#if YYMAXDEPTH == 0
-# undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-\f
-#ifdef YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined (__GLIBC__) && defined (_STRING_H)
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-static YYSIZE_T
-#   if defined (__STDC__) || defined (__cplusplus)
-yystrlen (const char *yystr)
-#   else
-yystrlen (yystr)
-     const char *yystr;
-#   endif
-{
-  register const char *yys = yystr;
-
-  while (*yys++ != '\0')
-    continue;
-
-  return yys - yystr - 1;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-static char *
-#   if defined (__STDC__) || defined (__cplusplus)
-yystpcpy (char *yydest, const char *yysrc)
-#   else
-yystpcpy (yydest, yysrc)
-     char *yydest;
-     const char *yysrc;
-#   endif
-{
-  register char *yyd = yydest;
-  register const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-#endif
-\f
-#line
-
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
-   into yyparse.  The argument should have type void *.
-   It should actually point to an object.
-   Grammar actions can access the variable by casting it
-   to the proper pointer type.  */
-
-#ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
-#  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
-#  define YYPARSE_PARAM_DECL
-# else
-#  define YYPARSE_PARAM_ARG YYPARSE_PARAM
-#  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-# endif
-#else /* !YYPARSE_PARAM */
-# define YYPARSE_PARAM_ARG
-# define YYPARSE_PARAM_DECL
-#endif /* !YYPARSE_PARAM */
-
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-# ifdef YYPARSE_PARAM
-int yyparse (void *);
-# else
-int yyparse (void);
-# endif
-#endif
-
-/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
-   variables are global, or local to YYPARSE.  */
-
-#define YY_DECL_NON_LSP_VARIABLES                      \
-/* The lookahead symbol.  */                           \
-int yychar;                                            \
-                                                       \
-/* The semantic value of the lookahead symbol. */      \
-YYSTYPE yylval;                                                \
-                                                       \
-/* Number of parse errors so far.  */                  \
-int yynerrs;
-
-#if YYLSP_NEEDED
-# define YY_DECL_VARIABLES                     \
-YY_DECL_NON_LSP_VARIABLES                      \
-                                               \
-/* Location data for the lookahead symbol.  */ \
-YYLTYPE yylloc;
-#else
-# define YY_DECL_VARIABLES                     \
-YY_DECL_NON_LSP_VARIABLES
-#endif
-
-
-/* If nonreentrant, generate the variables here. */
-
-#if !YYPURE
-YY_DECL_VARIABLES
-#endif  /* !YYPURE */
-
-int
-yyparse (YYPARSE_PARAM_ARG)
-     YYPARSE_PARAM_DECL
-{
-  /* If reentrant, generate the variables here. */
-#if YYPURE
-  YY_DECL_VARIABLES
-#endif  /* !YYPURE */
-
-  register int yystate;
-  register int yyn;
-  int yyresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yyerrstatus;
-  /* Lookahead token as an internal (translated) token number.  */
-  int yychar1 = 0;
-
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
-
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
-
-  /* The state stack. */
-  short        yyssa[YYINITDEPTH];
-  short *yyss = yyssa;
-  register short *yyssp;
-
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  register YYSTYPE *yyvsp;
-
-#if YYLSP_NEEDED
-  /* The location stack.  */
-  YYLTYPE yylsa[YYINITDEPTH];
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;
-#endif
-
-#if YYLSP_NEEDED
-# define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
-#else
-# define YYPOPSTACK   (yyvsp--, yyssp--)
-#endif
-
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
-
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-#if YYLSP_NEEDED
-  YYLTYPE yyloc;
-#endif
-
-  /* When reducing, the number of symbols on the RHS of the reduced
-     rule. */
-  int yylen;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY;            /* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-
-  yyssp = yyss;
-  yyvsp = yyvs;
-#if YYLSP_NEEDED
-  yylsp = yyls;
-#endif
-  goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed. so pushing a state here evens the stacks.
-     */
-  yyssp++;
-
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyssp >= yyss + yystacksize - 1)
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      {
-       /* Give user a chance to reallocate the stack. Use copies of
-          these so that the &'s don't force the real ones into
-          memory.  */
-       YYSTYPE *yyvs1 = yyvs;
-       short *yyss1 = yyss;
-
-       /* Each stack pointer address is followed by the size of the
-          data in use in that stack, in bytes.  */
-# if YYLSP_NEEDED
-       YYLTYPE *yyls1 = yyls;
-       /* This used to be a conditional around just the two extra args,
-          but that might be undefined if yyoverflow is a macro.  */
-       yyoverflow ("parser stack overflow",
-                   &yyss1, yysize * sizeof (*yyssp),
-                   &yyvs1, yysize * sizeof (*yyvsp),
-                   &yyls1, yysize * sizeof (*yylsp),
-                   &yystacksize);
-       yyls = yyls1;
-# else
-       yyoverflow ("parser stack overflow",
-                   &yyss1, yysize * sizeof (*yyssp),
-                   &yyvs1, yysize * sizeof (*yyvsp),
-                   &yystacksize);
-# endif
-       yyss = yyss1;
-       yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyoverflowlab;
-# else
-      /* Extend the stack our own way.  */
-      if (yystacksize >= YYMAXDEPTH)
-       goto yyoverflowlab;
-      yystacksize *= 2;
-      if (yystacksize > YYMAXDEPTH)
-       yystacksize = YYMAXDEPTH;
-
-      {
-       short *yyss1 = yyss;
-       union yyalloc *yyptr =
-         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-       if (! yyptr)
-         goto yyoverflowlab;
-       YYSTACK_RELOCATE (yyss);
-       YYSTACK_RELOCATE (yyvs);
-# if YYLSP_NEEDED
-       YYSTACK_RELOCATE (yyls);
-# endif
-# undef YYSTACK_RELOCATE
-       if (yyss1 != yyssa)
-         YYSTACK_FREE (yyss1);
-      }
-# endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-#if YYLSP_NEEDED
-      yylsp = yyls + yysize - 1;
-#endif
-
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                 (unsigned long int) yystacksize));
-
-      if (yyssp >= yyss + yystacksize - 1)
-       YYABORT;
-    }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
-  goto yybackup;
-
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-/* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
-/* yyresume: */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* yychar is either YYEMPTY or YYEOF
-     or a valid token in external form.  */
-
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
-    }
-
-  /* Convert token to internal form (in yychar1) for indexing tables with */
-
-  if (yychar <= 0)             /* This means end of input. */
-    {
-      yychar1 = 0;
-      yychar = YYEOF;          /* Don't call YYLEX any more */
-
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yychar1 = YYTRANSLATE (yychar);
-
-#if YYDEBUG
-     /* We have to keep this `#if YYDEBUG', since we use variables
-       which are defined only if `YYDEBUG' is set.  */
-      if (yydebug)
-       {
-         YYFPRINTF (stderr, "Next token is %d (%s",
-                    yychar, yytname[yychar1]);
-         /* Give the individual parser a way to print the precise
-            meaning of a token, for further debugging info.  */
-# ifdef YYPRINT
-         YYPRINT (stderr, yychar, yylval);
-# endif
-         YYFPRINTF (stderr, ")\n");
-       }
-#endif
-    }
-
-  yyn += yychar1;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
-    goto yydefault;
-
-  yyn = yytable[yyn];
-
-  /* yyn is what to do for this token type in this state.
-     Negative => reduce, -yyn is rule number.
-     Positive => shift, yyn is new state.
-       New state is final state => don't bother to shift,
-       just return success.
-     0, or most negative number => error.  */
-
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrlab;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Shift the lookahead token.  */
-  YYDPRINTF ((stderr, "Shifting token %d (%s), ",
-             yychar, yytname[yychar1]));
-
-  /* Discard the token being shifted unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
-
-  *++yyvsp = yylval;
-#if YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to the semantic value of
-     the lookahead token.  This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-#if YYLSP_NEEDED
-  /* Similarly for the default location.  Let the user run additional
-     commands if for instance locations are ranges.  */
-  yyloc = yylsp[1-yylen];
-  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
-#endif
-
-#if YYDEBUG
-  /* We have to keep this `#if YYDEBUG', since we use variables which
-     are defined only if `YYDEBUG' is set.  */
-  if (yydebug)
-    {
-      int yyi;
-
-      YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
-                yyn, yyrline[yyn]);
-
-      /* Print the symbols being reduced, and their result.  */
-      for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
-       YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
-      YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
-    }
-#endif
-%% actions /* The action file replaces this line. */
-#line
-\f
-  yyvsp -= yylen;
-  yyssp -= yylen;
-#if YYLSP_NEEDED
-  yylsp -= yylen;
-#endif
-
-#if YYDEBUG
-  if (yydebug)
-    {
-      short *yyssp1 = yyss - 1;
-      YYFPRINTF (stderr, "state stack now");
-      while (yyssp1 != yyssp)
-       YYFPRINTF (stderr, " %d", *++yyssp1);
-      YYFPRINTF (stderr, "\n");
-    }
-#endif
-
-  *++yyvsp = yyval;
-#if YYLSP_NEEDED
-  *++yylsp = yyloc;
-#endif
-
-  /* Now `shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
-  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTBASE];
-
-  goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-
-#ifdef YYERROR_VERBOSE
-      yyn = yypact[yystate];
-
-      if (yyn > YYFLAG && yyn < YYLAST)
-       {
-         YYSIZE_T yysize = 0;
-         char *yymsg;
-         int yyx, yycount;
-
-         yycount = 0;
-         /* Start YYX at -YYN if negative to avoid negative indexes in
-            YYCHECK.  */
-         for (yyx = yyn < 0 ? -yyn : 0;
-              yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
-           if (yycheck[yyx + yyn] == yyx)
-             yysize += yystrlen (yytname[yyx]) + 15, yycount++;
-         yysize += yystrlen ("parse error, unexpected ") + 1;
-         yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
-         yymsg = (char *) YYSTACK_ALLOC (yysize);
-         if (yymsg != 0)
-           {
-             char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
-             yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
-
-             if (yycount < 5)
-               {
-                 yycount = 0;
-                 for (yyx = yyn < 0 ? -yyn : 0;
-                      yyx < (int) (sizeof (yytname) / sizeof (char *));
-                      yyx++)
-                   if (yycheck[yyx + yyn] == yyx)
-                     {
-                       const char *yyq = ! yycount ? ", expecting " : " or ";
-                       yyp = yystpcpy (yyp, yyq);
-                       yyp = yystpcpy (yyp, yytname[yyx]);
-                       yycount++;
-                     }
-               }
-             yyerror (yymsg);
-             YYSTACK_FREE (yymsg);
-           }
-         else
-           yyerror ("parse error; also virtual memory exhausted");
-       }
-      else
-#endif /* defined (YYERROR_VERBOSE) */
-       yyerror ("parse error");
-    }
-  goto yyerrlab1;
-
-
-/*--------------------------------------------------.
-| yyerrlab1 -- error raised explicitly by an action |
-`--------------------------------------------------*/
-yyerrlab1:
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse lookahead token after an
-        error, discard it.  */
-
-      /* return failure if at end of input */
-      if (yychar == YYEOF)
-       YYABORT;
-      YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
-                 yychar, yytname[yychar1]));
-      yychar = YYEMPTY;
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-
-  yyerrstatus = 3;             /* Each real token shifted decrements this */
-
-  goto yyerrhandle;
-
-
-/*-------------------------------------------------------------------.
-| yyerrdefault -- current state does not do anything special for the |
-| error token.                                                       |
-`-------------------------------------------------------------------*/
-yyerrdefault:
-#if 0
-  /* This is wrong; only states that explicitly want error tokens
-     should shift them.  */
-
-  /* If its default is to accept any token, ok.  Otherwise pop it.  */
-  yyn = yydefact[yystate];
-  if (yyn)
-    goto yydefault;
-#endif
-
-
-/*---------------------------------------------------------------.
-| yyerrpop -- pop the current state because it cannot handle the |
-| error token                                                    |
-`---------------------------------------------------------------*/
-yyerrpop:
-  if (yyssp == yyss)
-    YYABORT;
-  yyvsp--;
-  yystate = *--yyssp;
-#if YYLSP_NEEDED
-  yylsp--;
-#endif
-
-#if YYDEBUG
-  if (yydebug)
-    {
-      short *yyssp1 = yyss - 1;
-      YYFPRINTF (stderr, "Error: state stack now");
-      while (yyssp1 != yyssp)
-       YYFPRINTF (stderr, " %d", *++yyssp1);
-      YYFPRINTF (stderr, "\n");
-    }
-#endif
-
-/*--------------.
-| yyerrhandle.  |
-`--------------*/
-yyerrhandle:
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yyerrdefault;
-
-  yyn += YYTERROR;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
-    goto yyerrdefault;
-
-  yyn = yytable[yyn];
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrpop;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrpop;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  YYDPRINTF ((stderr, "Shifting error token, "));
-
-  *++yyvsp = yylval;
-#if YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-/*---------------------------------------------.
-| yyoverflowab -- parser overflow comes here.  |
-`---------------------------------------------*/
-yyoverflowlab:
-  yyerror ("parser stack overflow");
-  yyresult = 2;
-  /* Fall through.  */
-
-yyreturn:
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-  return yyresult;
-}
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/filter.l b/src/Unsupported/slp_client/src/cmd-utils/slp_client/filter.l
deleted file mode 100644 (file)
index 56e2159..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/*****************************************************************************
- *  Description: encode/decode/eval LDAP Filters
- *
- *  Originated: April 04, 2002
- *     Original Author: Mike Day md@soft-hackle.net
- *                                mdd@us.ibm.com
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/slp_client/Attic/filter.l,v 1.1 2003/05/21 15:14:08 mday Exp $                                                              
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-%{
-
-#undef YYLMAX
-#define YYLMAX 2048
-#define YY_NEVER_INTERACTIVE 1
-#undef YY_INPUT
-#define YY_INPUT(b, r, m) abort()
-#undef ECHO
-#define ECHO  filtererror(yytext)
-#define exit(i) abort()
-#include "slp_client.h"
-#include "y_filter.h"
-#include <stdarg.h>
-
-#define filterless yyless
-void filtererror(int8 *, ...);
-
-/*
-extern char *lslp_logPath;
-
-#define yyerror(s)     _lslpMsgOut(lslp_logPath, lslpPrintSem, LSLP_LOG_ERRORS, NULL, 0, (s), __FILE__, __LINE__);
-*/
-static int16 heapIndex;
-static int8 heap[2052];
-static int8 buf[2052];
-
-static int8 *_lslp_strdup(int8 *s);
-void filter_close_lexer(uint32 handle);
-uint32 filter_init_lexer(int8 *s);
-
-
-%}
-
-/* regex macros for the lexer */
-hexdigit               [0-9a-fA-F]
-reserved                [()\&|!=<>~\n] /* newline in reserved set for convinience */
-not_reserved            [^()\&|!=<>~\n] 
-
-
-/* special lexer states */
-%x QUOTED_STRING
-
-/* table size directives */
-
-%option noyywrap prefix="filter"
-%%
-
-"\""                          { BEGIN QUOTED_STRING; filterless(0); }
-<QUOTED_STRING>[^()\&|!=<>~\n]+  {
-                                 BEGIN INITIAL; 
-                                 if(NULL != (filterlval.filter_string =  _lslp_strdup(filtertext)))
-                                    return(OPERAND) ; 
-                                 else 
-                                    return(0L) ;
-                              }
-
-
-[ \t\v\f]*                    { ; }
-"("                           { filterlval.filter_int = L_PAREN; return L_PAREN ; }
-")"                           { filterlval.filter_int = R_PAREN; return R_PAREN ; }
-"&"                           { filterlval.filter_int = OP_AND; return OP_AND ; }
-"|"                           { filterlval.filter_int = OP_OR; return OP_OR ; }
-"!"                           { filterlval.filter_int = OP_NOT; return OP_NOT ; }
-"="                           { filterlval.filter_int = OP_EQU; return OP_EQU ; }
-">="                          { filterlval.filter_int = OP_GT; return OP_GT ; }
-"<="                          { filterlval.filter_int = OP_LT; return OP_LT ; }
-"=*"                          { filterlval.filter_int = OP_PRESENT; return OP_PRESENT ; }
-"~="                          { filterlval.filter_int = OP_APPROX; return OP_APPROX ;  }
-
-
-[-+][0-9]+                  |
-[-+]"0"[xX]{hexdigit}+      { 
-                              filterlval.filter_int = strtol(filtertext, (char **) 0, 0) ;
-                              return VAL_INT;
-                            }
-
-[0-9]+                      |
-"0"[xX]{hexdigit}+          { 
-                              filterlval.filter_int = strtoul(filtertext, (char **) 0, 0);
-                              return VAL_INT;
-                            }
-
-[tT][rR][uU][eE]            { 
-                               filterlval.filter_int = 1; return VAL_BOOL; 
-                            }
-
-
-[fF][aA][lL][sS][eE]        { 
-                               filterlval.filter_int = 0; return VAL_BOOL; 
-                            }
-
-
-[^()\&|!=<>~ \t\v\f]+       {
-                                 if(NULL != (filterlval.filter_string =  _lslp_strdup(filtertext)))
-                                    return(OPERAND) ; 
-                                 else 
-                                    return(0L) ;
-                            }
-
-
-%%
-
-void filter_close_lexer(uint32 handle)
-{
-  assert(handle != 0);
-  filter_delete_buffer((YY_BUFFER_STATE)handle);
-}
-
-
-uint32 filter_init_lexer(int8 *s)
-{
-  memset(&buf[0], 0x00, 2052);
-  memset(&heap[0], 0x00, 2052);
-  heapIndex = 0;
-  strncpy(&buf[0], s, 2048);
-  return((uint32)filter_scan_buffer(&buf[0], strlen(s) + 2));
-}
-
-
-static int8 *_lslp_strdup(int8 *s)
-{
-  int8 *p = &heap[heapIndex];
-  do { heap[heapIndex++] = *s; } while ((*s != 0x00) && (heapIndex < 2049) && (++s));
-  return(p);
-}
-
-/*****
-static int8 *_lslp_strdup_strip_quotes(int8 *s)
-{
-  int8 *p = &heap[heapIndex];
-  do { if(*s != '"') heap[heapIndex++] = *s; } while ((*s != 0x00) && (heapIndex < 2049) && (++s));
-  return(p);
-}
-
-******/
-
-void filtererror(int8 *s, ...)
-{
-       return;
-}      
-
-/*
-int main(int argc, char *argv[])
-{
-
-}      
-
-*/
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/filter.y b/src/Unsupported/slp_client/src/cmd-utils/slp_client/filter.y
deleted file mode 100644 (file)
index 4d728a8..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-/*****************************************************************************
- *  Description: encode/decode/eval LDAP Filters
- *
- *  Originated: April 04, 2002
- *     Original Author: Mike Day md@soft-hackle.net
- *                                mdd@us.ibm.com
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/slp_client/Attic/filter.y,v 1.2 2003/05/21 19:05:50 mday Exp $                                                              
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-%{
-
-#include "slp_client.h"
-
-/* prototypes and globals go here */
-  void filtererror(int8 *, ...);
-  
-  int32 filterlex(void);
-  
-int32 filterparse(void);
-void filter_close_lexer(uint32 handle);
-uint32 filter_init_lexer(int8 *s);
-
-/* have a place to put attributes and the filter while the parser is working */
-/* on them makes it easier to recover from parser errors - all the memory we  */
-/* need to free is available from the list heads below.  */
-
-/* listhead for reduced filters until the parser is finished */
- filterHead reducedFilters = { &reducedFilters, &reducedFilters, TRUE } ;
- int nesting_level;
-
-%}
-
-%name-prefix="filter" 
-/* definitions for ytab.h */
-
-%union {
-  int32 filter_int;
-  int8 *filter_string;
-  lslpLDAPFilter *filter_filter;
-}
-
-
-%token<filter_int> L_PAREN R_PAREN OP_AND OP_OR OP_NOT OP_EQU OP_GT OP_LT OP_PRESENT OP_APPROX
-%token<filter_int> VAL_INT VAL_BOOL 
-%token<filter_string> OPERAND 
-
-/* typecast the non-terminals */
-
-%type <filter_filter> filter filter_list expression
-%type <filter_int> exp_operator filter_op filter_open filter_close
-%%
-
-/* grammar */
-
-filter_list: filter 
-         | filter_list filter 
-         ;
-
-filter: filter_open filter_op filter_list filter_close { 
-            if(NULL != ($$ = lslpAllocFilter($2))) {
-             $$->nestingLevel = nesting_level;
-             if(! _LSLP_IS_EMPTY(&reducedFilters) ) { 
-               lslpLDAPFilter *temp = (lslpLDAPFilter *)reducedFilters.next;
-               while(! _LSLP_IS_HEAD(temp)) {
-                 if(temp->nestingLevel == nesting_level + 1) {
-                   lslpLDAPFilter *nest = temp;
-                   temp = temp->next;
-                   _LSLP_UNLINK(nest);
-                   _LSLP_INSERT_BEFORE(nest, (lslpLDAPFilter *)&($$->children)) ;
-                 } else {temp = temp->next; }
-               }
-               _LSLP_INSERT_BEFORE( (filterHead *)$$, &reducedFilters);
-             } else { lslpFreeFilter($$) ; $$ = NULL ; }
-            }
-         }
-       
-         | filter_open expression filter_close { 
-          $$ = $2;
-          if($2 != NULL) {
-            $2->nestingLevel = nesting_level;
-            _LSLP_INSERT_BEFORE((filterHead *)$2, &reducedFilters) ; 
-          }
-        }
-         ;
-
-filter_open: L_PAREN { nesting_level++; } 
-         ;
-
-filter_close: R_PAREN { nesting_level--; }
-         ;
-
-filter_op: OP_AND
-         | OP_OR
-         | OP_NOT
-         { $$ = filterlval.filter_int; }
-
-         ;
-
-expression: OPERAND OP_PRESENT {      /* presence test binds to single operand */
-             if(NULL != ($$ = lslpAllocFilter(expr_present))) {
-              lslpAttrList *attr = lslpAllocAttr($1, string, "*", (int16)strlen("*") + 1);
-              if(attr != NULL) {
-                _LSLP_INSERT(attr, &($$->attrs));
-              } else { lslpFreeFilter($$); $$ = NULL; }
-            }
-         }     
-
-         | OPERAND exp_operator VAL_INT  {  /* must be an int or a bool */
-          /* remember to touch up the token values to match the enum in lslp.h */
-          if(NULL != ($$ = lslpAllocFilter($2))) {
-            lslpAttrList *attr = lslpAllocAttr($1, integer, &($3), sizeof($3));
-            if(attr != NULL) {
-              _LSLP_INSERT(attr, &($$->attrs));
-            } else { lslpFreeFilter($$); $$ = NULL ; } 
-          }
-        }
-
-         | OPERAND exp_operator VAL_BOOL  {  /* must be an int or a bool */
-          /* remember to touch up the token values to match the enum in lslp.h */
-          if(NULL != ($$ = lslpAllocFilter($2))) {
-            lslpAttrList *attr = lslpAllocAttr($1, bool_type, &($3), sizeof($3));
-            if(attr != NULL) {
-              _LSLP_INSERT(attr, &($$->attrs));
-            } else { lslpFreeFilter($$); $$ = NULL ; } 
-          }
-        }
-
-         | OPERAND exp_operator OPERAND  {   /* both operands are strings */
-          if(NULL != ($$ = lslpAllocFilter($2))) {
-            lslpAttrList *attr = lslpAllocAttr($1, string, $3, (int16)strlen($3) + 1 );
-            if(attr != NULL) {
-              _LSLP_INSERT(attr, &($$->attrs));
-            } else { lslpFreeFilter($$); $$ = NULL ; } 
-          }
-        }
-
-         ;
-
-exp_operator: OP_EQU
-         | OP_GT
-         | OP_LT
-         | OP_APPROX
-         { $$ = filterlval.filter_int; }
-         ;
-
-%% 
-
-
-lslpLDAPFilter *lslpAllocFilter(int operator)
-{
-  lslpLDAPFilter *filter = (lslpLDAPFilter *)calloc(1, sizeof(lslpLDAPFilter));
-  if(filter  != NULL) {
-    filter->next = filter->prev = filter;
-    if(operator == head) {
-      filter->isHead = TRUE;
-    } else {
-      filter->children.next = filter->children.prev = &(filter->children);
-      filter->children.isHead = 1;
-      filter->attrs.next = filter->attrs.prev = &(filter->attrs);
-      filter->attrs.isHead = 1;
-      filter->_operator = operator;
-    }
-  }
-  return(filter);
-}
-
-
-void lslpFreeFilter(lslpLDAPFilter *filter)
-{
-  if(filter->children.next != NULL) {
-    while(! (_LSLP_IS_EMPTY((lslpLDAPFilter *)&(filter->children)))) {
-      lslpLDAPFilter *child = (lslpLDAPFilter *)filter->children.next;
-      _LSLP_UNLINK(child);
-      lslpFreeFilter(child);
-    }
-  }
-  if(filter->attrs.next != NULL) {
-    while(! (_LSLP_IS_EMPTY(&(filter->attrs)))) {
-      lslpAttrList *attrs = filter->attrs.next;
-      _LSLP_UNLINK(attrs);
-      lslpFreeAttr(attrs);
-    }
-  }
-}
-
-void lslpFreeFilterList(lslpLDAPFilter *head, BOOL static_flag)
-{
-  assert((head != NULL) && (_LSLP_IS_HEAD(head)));
-  while(! (_LSLP_IS_EMPTY(head))) {
-    lslpLDAPFilter *temp = head->next;
-    _LSLP_UNLINK(temp);
-    lslpFreeFilter(temp);
-  }
-  
-  if( static_flag == TRUE)
-    lslpFreeFilter(head);
-  return;
-}
-
-void lslpInitFilterList(void )
-{
-  reducedFilters.next = reducedFilters.prev = &reducedFilters;
-  reducedFilters.isHead = TRUE;
-  return;
-}
-
-void lslpCleanUpFilterList(void)
-{
-  lslpFreeFilterList( (lslpLDAPFilter *)&reducedFilters, FALSE);
-}
-
-lslpLDAPFilter *_lslpDecodeLDAPFilter(int8 *filter)
-{
-
-  lslpLDAPFilter *temp = NULL;
-  uint32 lexer = 0;
-  assert(filter != NULL && strlen(filter));
-  lslpInitFilterList();
-  nesting_level = 1;
-  if(0 != (lexer = filter_init_lexer(filter))) {
-    if(filterparse()) { lslpCleanUpFilterList(); }
-    filter_close_lexer(lexer);
-  }
-  if (! _LSLP_IS_EMPTY(&reducedFilters)) {
-    if(NULL != (temp  = lslpAllocFilter(ldap_and))) {
-      _LSLP_LINK_HEAD(&(temp->children), &reducedFilters);
-    }
-  }
-  lslpCleanUpFilterList();
-  
-  return(temp);        
-}
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/libslp_client.la b/src/Unsupported/slp_client/src/cmd-utils/slp_client/libslp_client.la
deleted file mode 100644 (file)
index 67e884e..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-# libslp_client.la - a libtool library file
-# Generated by ltmain.sh - GNU libtool 1.4.2 (1.922.2.54 2001/09/11 03:33:37)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname='libslp_client.so.1'
-
-# Names of this library.
-library_names='libslp_client.so.1.0.0 libslp_client.so.1 libslp_client.so'
-
-# The name of the static archive.
-old_library='libslp_client.a'
-
-# Libraries that this one depends upon.
-dependency_libs=''
-
-# Version information for libslp_client.
-current=1
-age=0
-revision=0
-
-# Is this an already installed library?
-installed=no
-
-# Files to dlopen/dlpreopen
-dlopen=''
-dlpreopen=''
-
-# Directory that this library needs to be installed in:
-libdir='/usr/local/lib'
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/slp_client.c b/src/Unsupported/slp_client/src/cmd-utils/slp_client/slp_client.c
deleted file mode 100644 (file)
index 2e2dfd3..0000000
+++ /dev/null
@@ -1,4244 +0,0 @@
-/*****************************************************************************
- *  Description:   
- *
- *  Originated: December 20, 2001
- *     Original Author: Mike Day md@soft-hackle.net
- *                                mdday@us.ibm.com
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/slp_client/Attic/slp_client.c,v 1.4 2003/11/17 21:37:27 tony Exp $                                                                  
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-
-/* make pattern matching work with a length parameter, like strncmp(a,b) */
-/* <<< Wed Aug  7 20:37:13 2002 mdd >>> */
-
-/* make all direct calls static (hidden), public calls to be exposed through client->() */
-/* << Mon Sep 16 14:00:36 2002 mdd >> */
-
-#include "slp_client.h"
-
-#ifdef _WIN32
- int _winsock_count = 0;
- WSADATA _wsa_data ;
-#include <time.h>
-#endif 
-
-struct da_list *alloc_da_node(BOOL head)
-{
-  struct da_list *node = (struct da_list *)calloc(1, sizeof(struct da_list));
-  if(node != NULL && head == TRUE){
-    node->isHead = TRUE;
-    node->next = node->prev = node;
-  }
-  return node;
-}
-
-struct da_list *da_node_exists(struct da_list *head, const void *key)
-{
-  
-  if(head != NULL && _LSLP_IS_HEAD(head) && key != NULL) {
-    struct da_list *temp = head->next;
-    while( ! _LSLP_IS_HEAD(temp)){
-      if(! strcmp(temp->url, (int8 *)key))
-       return temp;
-      temp = temp->next;
-    }
-  }
-  return NULL;
-}
-
-
-void free_da_list_members(struct da_list *da)
-{
-  assert( ! _LSLP_IS_HEAD(da));
-  if(da->url != NULL)
-    free(da->url);
-  if(da->scope != NULL)
-    free(da->scope);
-  if(da->attr != NULL)
-    free(da->attr);
-  if(da->spi != NULL)
-    free(da->spi);
-  if(da->auth != NULL)
-    free(da->auth);
-}
-
-void free_da_list_node(struct da_list *da)
-{
-  assert( ! _LSLP_IS_HEAD(da));
-  free_da_list_members(da);
-  free(da);
-}
-
-
-/* DOES NOT free the list head ! */
-void free_da_list(struct da_list *list)
-{
-  struct da_list *temp;
-  assert(_LSLP_IS_HEAD(list));
-  temp = list->next;
-  while( ! _LSLP_IS_HEAD(temp)) {
-    _LSLP_UNLINK(temp);
-    free_da_list_node(temp);
-    temp = list->next;
-  }
-}
-
-struct rply_list *alloc_rply_list(BOOL head)
-{
-  struct rply_list *node = (struct rply_list *)calloc(1, sizeof(struct rply_list));
-  if(node != NULL && head == TRUE){
-    node->isHead = TRUE;
-    node->next = node->prev = node;
-  }
-  return node;
-}
-
-
-struct rply_list *rpl_node_exists(struct rply_list *head, const void *key)
-{
-  if(head != NULL && _LSLP_IS_HEAD(head) && key != NULL){
-    struct rply_list *temp = head->next;
-    while( ! _LSLP_IS_HEAD(temp)){
-      if( ! strcmp(temp->url, (int8 *)key))
-       return temp;
-      temp = temp->next;
-    }
-  }
-  return NULL;
-}
-
-void free_rply_list_members(struct rply_list *rply)
-{
-  assert(! _LSLP_IS_HEAD(rply));
-  if(rply->url != NULL)
-    free(rply->url);
-  if(rply->auth != NULL)
-    free(rply->auth);
-}
-
-void free_rply_list_node(struct rply_list *rply)
-{
-  assert(! _LSLP_IS_HEAD(rply));
-  free_rply_list_members(rply);
-  free(rply);
-}
-
-/* DOES NOT free the list head ! */
-void free_rply_list(struct rply_list *list)
-{
-  struct rply_list *temp;
-  assert(_LSLP_IS_HEAD(list));
-  temp = list->next;
-  while( ! _LSLP_IS_HEAD(temp)){
-    _LSLP_UNLINK(temp);
-    free_rply_list_node(temp);
-    temp = list->next;
-  }
-}
-
-struct reg_list *alloc_reg_list(BOOL head)
-{
-  struct reg_list *node = (struct reg_list *)calloc(1, sizeof(struct reg_list));
-  if( node != NULL && head == TRUE){
-    node->isHead = TRUE;
-    node->next = node->prev = node;
-  }
-  return node;
-}
-
-struct reg_list *reg_node_exists(struct reg_list *head, const void *key)
-{
-  if(head != NULL && _LSLP_IS_HEAD(head) && key != NULL){
-    struct reg_list *temp = head->next;
-    while( ! _LSLP_IS_HEAD(temp)){
-      if( ! strcmp(temp->url, (int8 *)key))
-       return temp;
-      temp = temp->next;
-    }
-  }
-  return NULL;
-}
-
-void free_reg_list_members(struct reg_list *reg)
-{
-  assert(! _LSLP_IS_HEAD(reg));
-  if(reg->url != NULL)
-    free(reg->url);
-  if(reg->attributes != NULL)
-    free(reg->attributes);
-  if(reg->service_type != NULL)
-    free(reg->service_type);
-  if(reg->scopes != NULL)
-    free(reg->scopes);
-}
-
-void free_reg_list_node(struct reg_list *reg)
-{
-  assert(! _LSLP_IS_HEAD(reg));
-  free_reg_list_members(reg);
-  free(reg);
-}
-
-/* DOES NOT free the list head ! */
-void free_reg_list(struct reg_list *list)
-{
-  struct reg_list *temp;
-  assert( _LSLP_IS_HEAD(list));
-  temp = list->next;
-  while(! _LSLP_IS_HEAD(temp)) {
-    _LSLP_UNLINK(temp);
-    free_reg_list_node(temp);
-    temp = list->next;
-  }
-}
-
-struct url_entry *alloc_url_entry(BOOL head)
-{
-  struct url_entry *node = (struct url_entry *)calloc(1, sizeof(struct url_entry));
-  if(node != NULL && head == TRUE){
-    node->isHead = TRUE;
-    node->next = node->prev = node;
-  }
-  return node;
-}
-
-struct url_entry *url_node_exists(struct url_entry *head, const void *key)
-{
-  if(head != NULL && _LSLP_IS_HEAD(head) && key != NULL){
-    struct url_entry *temp = head->next;
-    while( ! _LSLP_IS_HEAD(temp)){
-      if( ! strcmp(temp->url, (int8 *)key))
-       return temp;
-      temp = temp->next;
-    }
-  }
-  return NULL;
-}
-
-void free_url_entry_members(struct url_entry *url)
-{
-  assert(! _LSLP_IS_HEAD(url));
-  if(url->url != NULL)
-    free(url->url);
-  if(url->auth_blocks != NULL)
-    free(url->auth_blocks);
-}
-
-void free_url_node(struct url_entry *node)
-{
-  assert(! _LSLP_IS_HEAD(node));
-  free_url_entry_members(node);
-  free(node);
-}
-
-/* DOES NOT free the list head ! */
-void free_url_list(struct url_entry *list)
-{
-  struct url_entry *temp;
-  assert( _LSLP_IS_HEAD(list));
-  temp = list->next;
-  while(! _LSLP_IS_HEAD(temp)) {
-    _LSLP_UNLINK(temp);
-    free_url_node(temp);
-    temp = list->next;
-  }
-}
-
-#if defined( _WIN32 ) 
- int gethostbyname_r(const char *name, 
-                   struct hostent *resultbuf, 
-                   char *buf, 
-                   size_t bufsize, 
-                   struct hostent **result, 
-                   int *errnop) 
-{
-  name = name;
-  resultbuf = resultbuf;
-  buf = buf;
-  bufsize = bufsize;
-  
-  if(NULL == (*result = gethostbyname(name))) {
-    *errnop = WSAGetLastError();
-    return(-1);
-  } 
-  return(0);
-}
-
-#endif
-
-#if defined( NUCLEUS )  //jeb
-
- int gethostbyname_r(const char *name, 
-                    struct hostent *resultbuf, 
-                    char *buf, 
-                    size_t bufsize, 
-                    struct hostent **result, 
-                    int *errnop) 
-{
-  name = name;
-  resultbuf = resultbuf;
-  buf = buf;
-  bufsize = bufsize;
-  
-  if(NULL == (*result = _LSLP_GETHOSTBYNAME(name))) {
-#ifdef NUCLEUS
-      *errnop = -2;
-#else
-      *errnop = h_errno;
-#endif
-    return(-1);
-  } 
-  return(0);
-}
-
-#endif
-
-char *slp_get_addr_string_from_url(const char *url, char *addr, int addr_len) 
-{
-  char name[255];
-  SOCKADDR_IN  a;
-
-  if(addr == NULL || addr_len < 1 )
-    return NULL;
-  
-  if( get_addr_from_url( url, &a, NULL) ) {
-#if defined ( _WIN32 )
-    _snprintf(name, 254, "%s:%d", inet_ntoa(a.sin_addr), ntohs(a.sin_port) );
-#elif defined (NUCLEUS)                                              //jeb
-    sprintf(name, "%s:%d", inet_ntoa(a.sin_addr), a.sin_port );  //jeb
-#else                                                                   //jeb
-    snprintf(name, 254, "%s:%d", inet_ntoa(a.sin_addr), ntohs(a.sin_port) );
-#endif
-    
-    memset(addr, 0x00, addr_len);
-    strncpy(addr, name, addr_len - 1 );
-    return addr;
-  }
-  return NULL;
-}
-
-char *slp_get_host_string_from_url(const char *url, char *host, int host_len) 
-{
-  char *s;
-  SOCKADDR_IN  addr;
-
-  if ( host == NULL || host_len < 1 )
-    return NULL;
-  
-  if (TRUE == get_addr_from_url(url, &addr, &s )) {
-    memset(host, 0x00, host_len);
-    strncpy(host, s, host_len - 1);
-    return host;
-  }
-  
-  return NULL;
-}
-
-BOOL  get_addr_from_url(const int8 *url, SOCKADDR_IN *addr, int8 **host)
-
-{
-  int8 *bptr, *url_dup;
-  BOOL ccode = FALSE;
-
-  // isolate the host field 
-  bptr = (url_dup = strdup(url));
-  if(bptr == NULL)
-    return( FALSE );
-
-  while( (*bptr != '/') && (*bptr != 0x00) )
-    bptr++;
-
-  if(*bptr == '/' && *(bptr + 1) == '/') {
-    int8 *endptr, *portptr;
-    endptr = bptr + 2;
-    while (*endptr != 0x00 && *endptr != '/' && *endptr != ';')
-      endptr++;
-    *endptr = 0x00;
-    portptr = (endptr - 1) ;
-
-    while( ( portptr > ( bptr + 2 ) ) && ( *portptr != ':' ) )
-      portptr--;
-
-    if( *portptr == ':') {
-      *portptr = 0x00;
-      portptr++;
-    } else { portptr = NULL; }
-    
-    // bptr points to the host name or address
-    // portptr points to the port or is null
-
-    bptr += 2;
-
-    if(host != NULL) {
-      *host = (int8 *)malloc(strlen(bptr) + strlen(portptr) + 3);
-      strcpy(*host, bptr);
-      strcat(*host, ":");
-      strcat(*host, portptr);
-    }
-    if (portptr != NULL)
-      addr->sin_port = htons( (int16)strtoul(portptr, NULL, 0) );
-    else
-      addr->sin_port = 0x0000;
-    addr->sin_family = AF_INET;
-    
-    addr->sin_addr.s_addr = inet_addr(bptr);
-    if(addr->sin_addr.s_addr == INADDR_NONE) {
-      struct hostent *host;
-      struct hostent hostbuf;
-      uint8 *temp ;
-      uint32 result, err;
-      size_t hostbuflen = 256;
-      
-      // hopefully a hostname because dotted decimal notation was invalid
-      // look for the user@hostname production
-      int8 *userptr;
-      userptr = bptr;
-      while( (*userptr != 0x00 ) && (*userptr != '@' ) )
-       userptr++;
-      if( *userptr == '@' )
-       bptr = userptr + 1;
-      
-      temp = (uint8 *)malloc(hostbuflen); 
-      if(temp != NULL) {
-       host = NULL;
-       while(temp != NULL && (result = gethostbyname_r(bptr, &hostbuf, 
-           (char *)temp, 
-           hostbuflen, 
-#ifdef NUCLEUS
-           &host, (int *)&err)) == -1){
-#else
-        &host, (int *)&err)) == ERANGE){   //
-#endif
-         hostbuflen *= 2;
-         temp = (uint8 *)realloc(temp, hostbuflen);
-       }
-       if(host != NULL) {
-         struct in_addr *ptr;
-         if (((ptr = (struct in_addr *)*(host->h_addr_list)) != NULL ) ) {
-           addr->sin_addr.s_addr = ptr->s_addr;
-           ccode = TRUE;
-         }
-       }
-       free(temp);
-      } /* we allocated the temp buffer for gethostbyname */
-    } else { 
-      ccode = TRUE ;
-    } /* host field is not in a valid dotted decimal form */
-  } /* isolated the host field in the url  */
-  return(ccode);
-}
-
-/*** effectively reallocates *list -- FREES MEMORY ***/
-int slp_get_local_interfaces(uint32 **list)
-{
-  SOCKETD sock;                         //jeb
-  int interfaces = 0;
-#if defined ( _WIN32 )
-  int buf_size = 256;
-#endif
-  if( list == NULL )
-    return 0;
-  if ( *list != NULL )
-    free( *list );
-  
-#if defined ( _WIN32 )
-
-  if ( INVALID_SOCKET != ( sock  = WSASocket(AF_INET,
-                                          SOCK_RAW, 0, NULL, 0, 0) ) ) {
-       int bytes_returned;
-    char *output_buf = (char *)malloc(buf_size);
-    if (output_buf == NULL)
-      return 0;
-    
-    if ( 0 == WSAIoctl( sock, SIO_ADDRESS_LIST_QUERY, NULL, 0, 
-                       output_buf, buf_size, &bytes_returned, NULL, NULL) ) {
-      socket_addr_list *addr_list;
-      socket_addr *addr;
-      uint32 *intp;
-      struct sockaddr_in *sin;
-                 addr_list = (socket_addr_list *)output_buf;
-      *list = (uint32 *) malloc(sizeof(socket_addr) * addr_list->count + 1) ;
-      addr = addr_list->list;
-      
-      for( interfaces = 0, intp = *list, sin = (struct sockaddr_in *)addr ; 
-          interfaces < addr_list->count; 
-          interfaces++ , intp++  ) {
-       *intp = sin->sin_addr.s_addr;
-       addr++;
-       sin = (struct sockaddr_in *)addr;
-      }
-      *intp = INADDR_ANY;
-    }
-    free(output_buf);
-    _LSLP_CLOSESOCKET(sock);
-  }
-
-
-#elif defined ( NUCLEUS )   //jeb 
-  /* only one interface do the following: */
-  *list = (uint32 *)malloc(sizeof(uint32));
-  
-  //get name of external ethernet
-  NU_IOCTL_OPTION option;
-  option.s_optval = (unsigned char *)ETHER0;
-
-  //get IP address
-  if (NU_Ioctl(IOCTL_GETIFADDR, &option, sizeof(option)) == NU_SUCCESS)
-  {                                                    
-     //get IP address
-     memcpy(*list, option.s_ret.s_ipaddr, 4); 
-     interfaces = 1;
-  }
-  else // no interfaces
-     interfaces = 0;
-
-  *list = (uint32 *)malloc(sizeof uint32);
-  *list[0] = inet_addr(" address of interface "); 
-  interfaces = 1;
-  
-#else
-  if( -1 < (sock = socket(AF_INET, SOCK_DGRAM, 0) ) ) {
-    struct ifconf conf;
-    uint32 *this_addr;
-    
-    conf.ifc_buf = (char *)malloc( 128 * sizeof(struct ifreq ) );
-    conf.ifc_len = 128 * sizeof( struct ifreq ) ;
-    if( -1 < ioctl(sock, SIOCGIFCONF, &conf ) ) {
-      // count the interfaces 
-
-      struct ifreq *r = conf.ifc_req;
-      SOCKADDR_IN *addr ;
-      addr = (SOCKADDR_IN *)&r->ifr_addr;
-      while(  addr->sin_addr.s_addr != 0 ) {
-       interfaces++;
-       r++;
-       addr = (SOCKADDR_IN *)&r->ifr_addr;
-      }
-
-      // now store the addresses
-
-      *list  = (uint32 *)malloc( sizeof(uint32) * interfaces + 1 );
-      this_addr = *list;
-      r = conf.ifc_req;
-      addr = (SOCKADDR_IN *)&r->ifr_addr;
-      while(  addr->sin_addr.s_addr != 0 ) {
-       *this_addr = addr->sin_addr.s_addr;
-       r++;
-       this_addr++;
-       addr = (SOCKADDR_IN *)&r->ifr_addr;
-      }
-      *this_addr = INADDR_ANY;
-    } // did the ioctl 
-    free(conf.ifc_buf);
-    _LSLP_CLOSESOCKET(sock);
-  } // opened the socket 
-
-#endif 
-  // failsafe if the ioctl doesn't work
-  if( interfaces == 0 ) {
-    *list = (uint32 *)malloc(sizeof(uint32)) ; 
-    *list[0] = INADDR_ANY; 
-  }
-
-  return(interfaces);
-}
-
-BOOL  slp_join_multicast(SOCKETD sock, uint32 addr)      //jeb
-{
-  
-#if defined(NUCLEUS )    //jeb
-  //don't support for now  
-  return(FALSE);         //jeb
-
-#else 
- struct ip_mreq mreq;
-  // don't join on the loopback interface
-  if (addr == inet_addr("127.0.0.1") )
-    return(FALSE);
-
-  mreq.imr_multiaddr.s_addr = inet_addr("239.255.255.253");
-  mreq.imr_interface.s_addr = addr;
-  
-  if(SOCKET_ERROR == setsockopt(sock,IPPROTO_IP, IP_ADD_MEMBERSHIP, (const char *)&mreq, sizeof(mreq))) 
-    return(FALSE);
-  
-  return(TRUE);    //jeb
-#endif
-}
-
-
-
-int slp_join_multicast_all(SOCKETD sock)
-{
-
-  uint32 *list = NULL , *lptr = NULL;
-  int num_interfaces = slp_get_local_interfaces(&list);
-  lptr = list;
-  while ( *lptr != INADDR_ANY ) {
-    slp_join_multicast(sock, *lptr) ;
-    lptr++;
-  }
-  free(list);
-  return(num_interfaces);
-}
-
-
-SOCKETD slp_open_listen_sock( void )       //jeb
-{
-  SOCKADDR_IN local;
-  SOCKETD sock  = _LSLP_SOCKET(AF_INET, SOCK_DGRAM, 0) ;   //jeb
-  int err = 1;
-  
-#ifndef NUCLEUS    //jeb not supported
-  _LSLP_SETSOCKOPT(sock, SOL_SOCKET, SO_REUSEADDR, (const char *)&err, sizeof(err));
-#endif
-  local.sin_family = AF_INET;
-  local.sin_port = htons(427);
-  local.sin_addr.s_addr  = INADDR_ANY;
-  if( 0 == _LSLP_BIND(sock, (struct sockaddr *)&local, sizeof(local)) )
-    slp_join_multicast_all(sock);
-  return(sock);
-}
-
-
-void prepare_pr_buf(struct slp_client *client, const int8 *address)
-{
-  if(address == NULL || client == NULL )
-    return;;
-  if(client->_pr_buf_len > 0) 
-    client->_pr_buf[client->_pr_buf_len - 1] = ',';
-  do {
-    client->_pr_buf[client->_pr_buf_len] = *address;
-    address++;
-    (client->_pr_buf_len)++;
-  }while((*address != 0x00) && (client->_pr_buf_len < LSLP_MTU - 1)); 
-  (client->_pr_buf_len)++;
-}
-
-/** attn need to role change to getflags line into nucleus **/
-void make_srv_ack(struct slp_client *client, SOCKADDR_IN *remote, int8 response, int16 code )
-{
-  int8 *bptr;
-  if(TRUE == ( ((_LSLP_GETFLAGS( client->_rcv_buf )) & (LSLP_FLAGS_MCAST) ) ? FALSE : TRUE   ) ) {
-    SOCKETD sock;  //jeb
-    
-    memset(client->_msg_buf, 0x00, LSLP_MTU);
-    bptr = client->_msg_buf;
-    _LSLP_SETVERSION(bptr, LSLP_PROTO_VER);
-    _LSLP_SETFUNCTION(bptr, response);
-
-    _LSLP_SETFLAGS(bptr, 0);
-    _LSLP_SETXID(bptr, _LSLP_GETXID(client->_rcv_buf));
-    _LSLP_SETLAN(bptr, LSLP_EN_US, LSLP_EN_US_LEN);
-    bptr += _LSLP_HDRLEN(bptr) ;
-    _LSLP_SETSHORT(bptr, code, 0 );
-    bptr += 2;
-    _LSLP_SETLENGTH(client->_msg_buf, bptr - client->_msg_buf);
-    if(INVALID_SOCKET != (sock = _LSLP_SOCKET(AF_INET, SOCK_DGRAM, 0))) {
-      SOCKADDR_IN local;
-      int err = 1;
-#ifndef NUCLEUS
-      _LSLP_SETSOCKOPT(sock, SOL_SOCKET, SO_REUSEADDR, (const char *)&err, sizeof(err) );
-#endif      
-      local.sin_family = AF_INET;
-      local.sin_port = client->_target_port ; 
-      local.sin_addr.s_addr = client->_local_addr;
-      if(SOCKET_ERROR != _LSLP_BIND(sock, &local, sizeof(local))) {
-       _LSLP_SENDTO(sock, client->_msg_buf, _LSLP_GETLENGTH(client->_msg_buf), 0, 
-                    remote, sizeof(SOCKADDR_IN )) ;
-      } // successfully bound this socket 
-      _LSLP_CLOSESOCKET(sock);
-    } // successfully opened this socket
-  }
-}
-
-
-BOOL prepare_query( struct slp_client *client, 
-                   uint16 xid,
-                   const int8 *service_type,
-                   const int8 *scopes, 
-                   const int8 *predicate  ) 
-{
-  int16 len, total_len, buf_len;
-  int8 *bptr, *bptrSave;
-  if(xid != client->_xid) {
-    /* this is a new request */
-    memset(client->_pr_buf, 0x00, LSLP_MTU);
-    client->_pr_buf_len = 0;
-    client->_xid = xid;
-  }
-  memset(client->_msg_buf, 0x00, LSLP_MTU);
-  bptr = client->_msg_buf;
-  _LSLP_SETVERSION(bptr, LSLP_PROTO_VER);
-  _LSLP_SETFUNCTION(bptr, LSLP_SRVRQST);
-  /* we don't know the length yet */
-  _LSLP_SETFLAGS(bptr, 0);
-  _LSLP_SETXID(bptr, xid);
-  _LSLP_SETLAN(bptr, LSLP_EN_US, LSLP_EN_US_LEN);
-  bptr += ( total_len = _LSLP_HDRLEN(bptr) ) ;
-  if(client->_pr_buf_len + total_len < LSLP_MTU) {
-    /* set the pr list length */
-    _LSLP_SETSHORT(bptr, (len = client->_pr_buf_len), 0);
-    if(len)
-      memcpy(bptr + 2, client->_pr_buf, len);
-    total_len += ( 2 + len );
-    bptr += (2 + len);
-    if(service_type == NULL)
-      len = DA_SRVTYPELEN;
-    else
-      len = (int16)strlen(service_type) ;
-    if(total_len + 2 + len < LSLP_MTU) {
-      /* set the service type string length */
-      _LSLP_SETSHORT(bptr, len, 0);
-      if(service_type != NULL)
-       memcpy(bptr + 2, service_type, len);
-      else
-       memcpy(bptr + 2, DA_SRVTYPE, len);
-                 
-      total_len += (2 + len);
-      bptr += (2 + len);
-      /* set the scope len and scope type, advance the buffer */
-         
-      if(scopes == NULL)
-       len = DA_SCOPELEN;
-      else
-       len = (int16)strlen(scopes);
-      if( total_len + 2 + len < LSLP_MTU) {
-       _LSLP_SETSHORT(bptr, len, 0);
-       if(scopes != NULL) 
-         memcpy(bptr + 2, scopes, len);
-       else
-         memcpy(bptr + 2, DA_SCOPE, DA_SCOPELEN);
-
-       total_len += ( 2 + len);
-       bptr += (2 + len);
-       /* stuff the predicate if there is one  */
-       if(predicate == NULL)
-         len = 0;
-       else
-         len = (int16)strlen(predicate) ;
-       if( total_len + 2 + len < LSLP_MTU) {
-         _LSLP_SETSHORT(bptr, len, 0);
-         if(predicate != NULL)
-           memcpy(bptr + 2, predicate, len);
-             
-         total_len += (2 + len);
-         bptrSave = (bptr += (2 + len));
-         /* stuff the spi */
-         buf_len = LSLP_MTU - total_len;
-         lslpStuffSPIList(&bptr, &buf_len, client->_spi);
-               
-         /* read back the length of the spi */
-         total_len += (2 + _LSLP_GETSHORT(bptrSave, 0));
-         assert(total_len == bptr - client->_msg_buf);
-         /*  always add an attr extension to an srvrq if there is room */
-         if(total_len + 9 <= LSLP_MTU ) {
-           _LSLP_SETNEXTEXT(client->_msg_buf, total_len);
-           _LSLP_SETSHORT(bptr, 0x0002, 0);
-           _LSLP_SET3BYTES(bptr, 0x00000000, 2);
-           _LSLP_SETSHORT(bptr, 0x0000, 5);
-           _LSLP_SETSHORT(bptr, 0x0000, 7);
-           _LSLP_SETBYTE(bptr, 0x00, 9);
-           total_len += 10;
-         }
-         /* now go back and set the length for the entire message */
-         _LSLP_SETLENGTH(client->_msg_buf, total_len );
-         return(TRUE);
-
-       } /*  room for predicate  */
-      } /* room for the scope  */
-    } /* room for the service type  */
-  } /* room for the pr list  */
-  return(FALSE);
-}
-
-
-lslpMsg *get_response( struct slp_client *client, lslpMsg *head)
-{
-  assert(head != NULL && _LSLP_IS_HEAD(head));
-  if( _LSLP_IS_EMPTY(&(client->replies)))
-    return NULL;
-  
-  _LSLP_LINK_HEAD(head, &(client->replies));
-  return(head);
-}
-
-
-int find_das(struct slp_client *client, 
-            const int8 *predicate, 
-            const int8 *scopes)
-{
-  converge_srv_req(client, NULL, predicate, scopes);
-  time(&(client->_last_da_cycle));
-  if( ! _LSLP_IS_EMPTY(&(client->das)))
-    client->_use_das = TRUE;
-  else
-    client->_use_das = FALSE;
-  return((int) client->_use_das );
-}
-
-
-/* smart interface to slp discovery. uses das if they are present,  */
-/* convergence otherwise. */
-/* periodically forces an active da discovery cycle  */
-
-void discovery_cycle ( struct slp_client *client, 
-                      const int8 *type, 
-                      const int8 *predicate, 
-                      const int8 *scopes) 
-{
-  // see if we have built a cache of directory agents 
-  if( _LSLP_IS_EMPTY(&(client->das)) ) {
-    // we don't know of any directory agents - see if we need to do active da discovery
-    if( ((time(NULL)) - client->_last_da_cycle ) > (60 * 5) )
-      find_das(client, NULL, scopes) ;
-  }
-
-  // if there are das, unicast a srvreq to each da
-
-  if( ! _LSLP_IS_EMPTY(&(client->das))) {
-    struct da_list *da = client->das.next;
-    SOCKADDR_IN addr;
-    while( ! _LSLP_IS_HEAD(da)  ) {
-      addr.sin_port = htons(427);
-      addr.sin_family = AF_INET;
-      addr.sin_addr.s_addr = inet_addr(da->remote);
-      unicast_srv_req(client, type, predicate, scopes, &addr);
-      da = da->next;
-    }
-  } else {
-    // do a convergence request because we don't have any das to use 
-    converge_srv_req(client, type, predicate, scopes );
-  }
-  return; 
-}
-
-/* this request MUST be retried <_convergence> times on EACH interface  */
-/* regardless of how many responses we have received  */
-/* it can be VERY time consuming but is the most thorough  */
-/* discovery method  */
-
-void converge_srv_req(struct slp_client *client,
-                     const int8 *type, 
-                     const int8 *predicate, 
-                     const int8 *scopes)
-{
-  uint32 old_local_addr;
-  uint32 *p_addr ;
-  uint16 convergence; 
-  uint32 loopback ;
-
-  
-  //  old_target_addr = client->_target_addr;
-  old_local_addr = client->_local_addr;
-  //  client->_target_addr = inet_addr( "239.255.255.253" ) ;
-  
-  p_addr = client->_local_addr_list;
-  loopback = inet_addr("127.0.0.1");
-
-  do {
-    if( *p_addr == loopback ) {
-      p_addr++;
-      continue; 
-    }
-    client->_local_addr = *p_addr;
-    convergence = client->_convergence;
-    if(convergence == 0)
-      convergence = 1;
-    
-    if(prepare_query( client, client->_xid + 1, type, scopes, predicate)) {
-       _LSLP_SETFLAGS(client->_msg_buf, LSLP_FLAGS_MCAST) ;
-       send_rcv_udp( client );
-      }
-
-    while(--convergence > 0) {
-      if(prepare_query( client, client->_xid, type, scopes, predicate)) {
-       _LSLP_SETFLAGS(client->_msg_buf, LSLP_FLAGS_MCAST) ;
-       send_rcv_udp( client );
-      }
-    }
-    p_addr++;
-  }   while( *p_addr != INADDR_ANY ) ;
-
-
-  // always try a local request 
-  local_srv_req(client, type, predicate, scopes); 
-    //  client->_target_addr = old_target_addr;
-  client->_local_addr = old_local_addr;
-  return ;
-}
-
-// this request will be retried MAX <_retries> times 
-// but will always end when the first response is received
-// This request is best when using a directory agent
-void unicast_srv_req( struct slp_client *client, 
-                     const int8 *type, 
-                     const int8 *predicate, 
-                     const int8 *scopes, 
-                     SOCKADDR_IN *addr )
-{
-
-  uint32 target_addr_save, local_addr_save;
-  uint16 target_port_save;
-  struct timeval tv_save;
-  int retries ;
-
-  target_addr_save = client->_target_addr;
-  local_addr_save = client->_local_addr;
-  target_port_save = client->_target_port;
-
-  tv_save.tv_sec = client->_tv.tv_sec;
-  client->_tv.tv_sec = 1;
-  
-  // let the host decide which interface to use 
-  client->_local_addr = INADDR_ANY; 
-  client->_target_addr = addr->sin_addr.s_addr;
-  client->_target_port = addr->sin_port;
-  
-  retries = client->_retries;
-  
-  srv_req(client, type, predicate, scopes, FALSE) ;
-
-  while( retries && _LSLP_IS_EMPTY(&(client->replies))) {
-    printf("retry\n");
-    
-    srv_req(client, type, predicate, scopes, FALSE);
-    retries--;
-  }
-  client->_target_addr = target_addr_save;
-  client->_local_addr = local_addr_save;
-  client->_target_port = target_port_save;
-  client->_tv.tv_sec = tv_save.tv_sec;
-  return;
-}
-
-// this request is targeted to the loopback interface, 
-// and has a tiny wait timer. It should be resolved quickly. 
-// It will never be retried.
-void local_srv_req( struct slp_client *client,
-                   const int8 *type, 
-                   const int8 *predicate, 
-                   const int8 *scopes )
-
-
-{
-
-  uint32 target_addr_save, local_addr_save;
-  uint16 target_port_save;
-  
-  struct timeval tv_save;
-  
-  target_addr_save = client->_target_addr;
-  target_port_save = client->_target_port;
-  local_addr_save = client->_local_addr;
-  
-  tv_save.tv_sec = client->_tv.tv_sec;
-  tv_save.tv_usec = client->_tv.tv_usec;
-  client->_tv.tv_sec = 0;
-#ifdef NUCLEUS     //jeb
-  client->_tv.tv_usec = 2*TICKS_PER_SECOND;  //socket call with timer UINT32
-#else
-  client->_tv.tv_usec = 10000;
-#endif  
-  // let the host decide which interface to use 
-  client->_local_addr = INADDR_ANY; 
-  client->_target_addr = inet_addr("127.0.0.1");
-  client->_target_port = htons(427);
-
-  srv_req(client, type, predicate, scopes, FALSE) ;
-
-  client->_target_addr = target_addr_save;
-  client->_target_port = target_port_save;
-  client->_local_addr = local_addr_save;
-  client->_tv.tv_sec = tv_save.tv_sec;
-  
-  client->_tv.tv_sec = tv_save.tv_sec;
-  client->_tv.tv_usec = tv_save.tv_usec;
-
-  return;
-}
-
-
-// workhorse request function
-void srv_req( struct slp_client *client, 
-             const int8 *type, 
-             const int8 *predicate, 
-             const int8 *scopes, 
-             BOOL retry )
-{
-  if ((TRUE == prepare_query(client, (retry == TRUE) ? client->_xid : client->_xid + 1, 
-                            type, 
-                            scopes, 
-                            predicate ))) {
-    send_rcv_udp( client ) ;
-  } /* prepared query  */
-  return ;
-}
-
-void decode_msg( struct slp_client *client, 
-                SOCKADDR_IN *remote )
-{
-  int8 function, response;
-  
-  if( client->_xid == _LSLP_GETXID( client->_rcv_buf ))
-    prepare_pr_buf( client, inet_ntoa(remote->sin_addr) );
-
-  function = _LSLP_GETFUNCTION( client->_rcv_buf );
-
-  // <<< Fri Dec 21 15:47:06 2001 mdd >>>
-  // increment the correct function counters 
-
-  switch(function) {
-  case LSLP_DAADVERT:
-    decode_daadvert( client, remote );
-    return;            
-  case LSLP_SRVRQST:
-    decode_srvreq( client, remote );
-    return;
-  case LSLP_SRVRPLY:
-    decode_srvrply( client, remote );
-    return;
-  case LSLP_SRVACK:
-    return;
-  case LSLP_ATTRREQ:
-    response = LSLP_ATTRRPLY;
-    break;
-  case LSLP_SRVTYPERQST:
-    response = LSLP_SRVTYPERPLY;
-    break;
-  case LSLP_SRVREG:
-    decode_srvreg(client, remote);
-    return;
-  case LSLP_SRVDEREG:
-  default:
-    response = LSLP_SRVACK;
-    break;
-  }
-  make_srv_ack(client, remote, response, LSLP_MSG_NOT_SUPPORTED);
-  return;
-}
-
-
-
-/* this is a hack. but it will be consistent with the changes I envision */ 
-/* for auth blocks and authenticated url entries */
-void decode_srvreg(struct slp_client *client, 
-                  SOCKADDR_IN *remote)
-{
-  int8 *bptr, *url_string, *attr_string, *type_string, *scopes;
-  uint16 lifetime ;
-  int32 total_len, purported_len;
-  BOOL mcast;
-  int16 str_len;
-  
-  mcast = ( ((_LSLP_GETFLAGS( client->_rcv_buf )) & (LSLP_FLAGS_MCAST) ) ? TRUE : FALSE   ) ;
-  bptr = client->_rcv_buf;
-  purported_len = _LSLP_GETLENGTH(bptr);
-  
-  bptr += (total_len = _LSLP_HDRLEN(bptr));
-  if(purported_len < LSLP_MTU && (total_len < purported_len)) {
-    lslpURL *decoded_url;
-    int16 diff, err;
-    diff = purported_len - total_len;
-    
-    /* decode the url entry */
-    if(NULL != (decoded_url = lslpUnstuffURL(&bptr, &diff, &err))) {
-      url_string = decoded_url->url;
-      lifetime = (uint16)decoded_url->lifetime;
-      
-      /* adjust pointers and size variables */
-      /* bptr already adjusted by call to lslpUnstuffURL */
-      total_len += ((purported_len - total_len) - diff);
-      
-      /* decode the service type string */
-      if((total_len + 2 + (str_len = _LSLP_GETSHORT(bptr, 0))) < purported_len) {
-       if(NULL != (type_string = (int8 *)malloc(str_len + 1))) {
-         memcpy(type_string, bptr + 2, str_len);
-         *(type_string + str_len) = 0x00;
-
-         /* adjust pointers and size variables */
-         bptr += (2 + str_len);
-         total_len += (2 + str_len);
-         
-         /* decode the scope list */
-         if((total_len + 2 + (str_len = _LSLP_GETSHORT(bptr, 0))) < purported_len) {
-           if(NULL != (scopes = (int8 *)malloc(str_len + 1))) {
-             memcpy(scopes, bptr + 2, str_len);
-             *(scopes + str_len) = 0x00;
-             
-             /* adjust pointers and size variables */
-             bptr += (2 + str_len);
-             total_len += (2 + str_len);
-             
-             /* decode the attr list */
-             if((total_len + 2 + (str_len = _LSLP_GETSHORT(bptr, 0))) < purported_len) {
-               if(NULL != (attr_string = (int8 *)malloc(str_len + 1))) {
-                 memcpy(attr_string, bptr + 2, str_len);
-                 *(attr_string + str_len) = 0x00;
-                 /* adjust pointers and size variables */
-                 bptr += (2 + str_len);
-                 total_len += (2 + str_len);
-                 
-                 /* decode the auth block list */
-                 /* lslpUnstuffAuthList( ) */
-                 __srv_reg_local(client, url_string, attr_string, type_string, scopes, lifetime);
-                 make_srv_ack(client, remote, LSLP_SRVACK, 0);
-                 free(attr_string);
-                 free(scopes);
-                 free(type_string);
-                 lslpFreeURL(decoded_url);
-                 return;
-               } /* malloced attr_string */
-             } /* attr string sanity check */
-             free(scopes);
-           } /* malloced scopes string */
-         } /* scope list sanity check */
-         free(type_string);
-       } /* malloced srv type string */
-      } /* srv type sanity check */
-      lslpFreeURL(decoded_url);
-      make_srv_ack(client, remote, LSLP_SRVACK, LSLP_INTERNAL_ERROR);
-      return;
-    } /* decoded the url entry */
-  } /* initial length sanity check OK */
-  make_srv_ack(client, remote, LSLP_SRVACK, LSLP_PARSE_ERROR);
-  return;
-}
-
-
-void decode_srvrply( struct slp_client *client,
-                    SOCKADDR_IN *remote )
-{
-  int8 *bptr, *xtptr, *xtn_limit;
-  lslpMsg *reply;
-  
-  int16 err, count, buf_len;
-  int32 total_len, purported_len;
-
-  bptr = client->_rcv_buf;
-  purported_len = _LSLP_GETLENGTH(bptr);
-
-  /* marshall the header data */
-  reply = alloc_slp_msg(FALSE);
-  if(reply == NULL) abort();
-  reply->hdr.ver = _LSLP_GETVERSION(bptr);
-  reply->type = reply->hdr.msgid = _LSLP_GETFUNCTION(bptr);
-  reply->hdr.len = purported_len;
-  reply->hdr.flags = _LSLP_GETFLAGS(bptr);
-  reply->hdr.nextExt = _LSLP_GETNEXTEXT(bptr);
-  reply->hdr.xid = _LSLP_GETXID(bptr);
-  
-  if((reply->hdr.nextExt != 0x00000000) && (reply->hdr.nextExt < reply->hdr.len )) {
-    xtptr = client->_rcv_buf + reply->hdr.nextExt;
-    xtn_limit = xtptr + reply->hdr.len;
-  }
-  else { xtptr = NULL; } 
-  
-  reply->hdr.langLen = _LSLP_GETLANLEN(bptr);
-  memcpy(reply->hdr.lang, bptr + LSLP_LAN_LEN + 2, (_LSLP_MIN(reply->hdr.langLen, 19)));
-  bptr += (total_len = _LSLP_HDRLEN(bptr));
-  if(total_len < purported_len) {
-    int32 next_ext = 0;
-    
-    /* process the srvrply */
-    reply->hdr.errCode = reply->msg.srvRply.errCode = _LSLP_GETSHORT(bptr, 0);
-    reply->msg.srvRply.urlCount = (count = _LSLP_GETSHORT(bptr, 2));
-    bptr += 4;
-    total_len += 4;
-    if( count ){
-      lslpURL *url;
-      if( NULL == (reply->msg.srvRply.urlList = lslpAllocURLList()))
-       abort();
-      if(NULL != xtptr) {
-       if( NULL == (reply->msg.srvRply.attr_list = lslpAllocAtomList())) 
-         abort();
-      }
-            
-      buf_len = LSLP_MTU - total_len;
-      /* get the urls */
-      while(count-- && buf_len > 0 ) {
-       url = lslpUnstuffURL(&bptr, &buf_len, &err);
-       if( NULL != url ){
-         reply->msg.srvRply.urlLen = url->len;
-         _LSLP_INSERT(url, reply->msg.srvRply.urlList);
-       }
-      }
-
-      /* get the attributes if they are present */
-
-/*        0                   1                   2                   3 */
-/*        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 */
-/*       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*       |      Extension ID = 0x0002    |     Next Extension Offset     | */
-/*       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*       | Offset, contd.|      Service URL Length       |  Service URL  / */
-/*       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*       |     Attribute List Length     |         Attribute List        / */
-/*       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*       |# of AttrAuths |(if present) Attribute Authentication Blocks.../ */
-/*       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-
-      while((NULL != xtptr) && (xtptr + 9 < xtn_limit )) {
-       next_ext = _LSLP_GET3BYTES(xtptr, 2);
-       if(0x0002 == _LSLP_GETSHORT(xtptr, 0)) {
-         
-         //BOOL lslp_pattern_match(const int8 *string, const int8 *pattern, BOOL case_sensitive)
-         /* find the correct url to associate this attribute extension. */
-         lslpURL *rply_url = reply->msg.srvRply.urlList;
-         if(rply_url != 0 && ! _LSLP_IS_HEAD(rply_url->next)){
-           int8 *url_buf;
-           int16 url_len = _LSLP_GETSHORT(xtptr, 5);
-           rply_url = rply_url->next;
-           url_buf = (int8 *)calloc(1, url_len + 1);
-           if(url_buf == 0 ) abort();
-           memcpy(url_buf, xtptr + 7, url_len);
-           while(! _LSLP_IS_HEAD(rply_url)) {
-             if(TRUE == lslp_pattern_match(url_buf, rply_url->url, FALSE)) {
-               /* this is the correct url to associate with the next attribute */
-               int16 attr_len;
-               int32 attr_offset = 7 + _LSLP_GETSHORT(xtptr, 5);
-               attr_len = _LSLP_GETSHORT(xtptr, attr_offset);
-               attr_offset += 2;
-               if( (xtptr + attr_offset + attr_len) < xtn_limit) {
-                 lslpAtomList *temp = lslpAllocAtom();
-                 if(temp != NULL){
-                   temp->str = (int8 *)malloc(attr_len + 1);
-                   if(temp->str != NULL) {
-                     memcpy(temp->str, xtptr + attr_offset, attr_len);
-                     temp->str[attr_len] = 0x00;
-                     /* allocate an attr list head */
-                     if(rply_url->attrs == NULL)
-                       rply_url->attrs = lslpAllocAtomList();
-                     if(rply_url->attrs != NULL){
-                       _LSLP_INSERT(temp, rply_url->attrs);
-                     }
-                   } else { lslpFreeAtom(temp); }
-                 } /* alloced atom */
-               } /* sanity check */
-             } /* if we found the right url */
-             else {
-             }
-             rply_url = rply_url->next;
-           } /* while traversing urls in the reply */
-           free(url_buf);
-         } /* if the reply contains urls */
-       } /* correct extension */
-       if( next_ext == 0 ) 
-         break;
-       xtptr = client->_rcv_buf + next_ext;
-      } /* traversing extensions */
-    }
-    /* link the response to the client */
-    _LSLP_INSERT(reply, &(client->replies));
-  }
-  return;
-}
-
-void decode_daadvert(struct slp_client *client, SOCKADDR_IN *remote)
-{
-  int8 *bptr;
-  int16 str_len;
-  int32 total_len, purported_len;
-
-  bptr = client->_rcv_buf;
-  purported_len = _LSLP_GETLENGTH(bptr);
-  bptr += (total_len = _LSLP_HDRLEN(bptr));
-  if(total_len < purported_len) {
-    struct da_list *adv = alloc_da_node(FALSE);
-    if(adv == NULL) abort();
-    adv->function = LSLP_DAADVERT;
-    adv->err = _LSLP_GETSHORT(bptr, 0);
-    adv->stateless_boot = _LSLP_GETLONG(bptr, 2);
-    total_len += (8 + (str_len = _LSLP_GETSHORT(bptr, 6)));
-    if(total_len < purported_len) {
-      /* decode and capture the url  - note: this is a string, not a url-entry structure */
-      if(NULL == (adv->url = (int8 *)malloc(str_len + 1)))
-       abort();
-      memcpy(adv->url, bptr + 8, str_len);
-      *((adv->url) + str_len) = 0x00;
-      /* advance the pointer past the url string */
-      bptr += (str_len + 8);
-      total_len += (2 + (str_len = _LSLP_GETSHORT(bptr, 0)));
-      if(total_len < purported_len) {
-       if(str_len > 0) {
-         if(NULL == (adv->scope = (int8 *)malloc(str_len + 1)))
-           abort();
-         memcpy(adv->scope, bptr + 2, str_len);
-         *((adv->scope) + str_len) = 0x00;
-       }
-       /* advance the pointer past the scope string  */
-       bptr += (str_len + 2);
-       total_len += (2 + (str_len = _LSLP_GETSHORT(bptr, 0)));
-       if(total_len < purported_len) {
-         if(str_len > 0) {
-           if(NULL == (adv->attr = (int8 *)malloc(str_len + 1)))
-             abort();
-           memcpy(adv->attr, bptr + 2, str_len);
-           *((adv->attr) + str_len) = 0x00;
-         }
-         /* advance the pointer past the attr string */
-         bptr += (str_len + 2);
-         total_len += (2 + (str_len = _LSLP_GETSHORT(bptr, 0)));
-         if(total_len < purported_len) {
-           struct da_list * exists;
-           
-           if(str_len > 0 ) {
-             if(NULL == (adv->spi = (int8 *)malloc(str_len + 1)))
-               abort();
-             memcpy(adv->spi, bptr + 2, str_len);
-             *((adv->spi) + str_len) = 0x00;
-           } /*  if there is an spi  */
-               
-           /* advance the pointer past the spi string  */
-           bptr += (str_len + 2);
-           adv->auth_blocks = _LSLP_GETBYTE(bptr, 0);
-           
-           // if we already know about this da, remove the existing
-           // entry from our cache and insert this new entry
-           // maybe the stateless boot field changed or the da
-           // supports new scopes, etc.
-           exists  = da_node_exists(&(client->das),  adv->url);
-           if(NULL != exists){
-             _LSLP_UNLINK(exists);
-             free_da_list_node(exists);
-           }
-           /* need code here to handle authenticated urls */
-           strcpy(&(adv->remote[0]), inet_ntoa(remote->sin_addr)) ;
-           _LSLP_INSERT(adv, &(client->das)) 
-           return;
-         } /*  spi length field is consistent with hdr */
-       } /* attr length field is consistent with hdr */
-      } /*  scope length field is consistent with hdr */
-    } 
-    free_da_list_node(adv);
-  }
-  return;
-}
-
-
-void decode_srvreq(struct slp_client *client, SOCKADDR_IN *remote )
-{
-  
-  int8 *bptr, *bptrSave;
-  int32 total_len, purported_len;
-  BOOL mcast;
-  struct lslp_srv_rply_out *rp_out = NULL;
-  struct lslp_srv_req *rq = NULL;
-  int16 str_len, buf_len, err = LSLP_PARSE_ERROR ;
-  
-  mcast = ( ((_LSLP_GETFLAGS( client->_rcv_buf )) & (LSLP_FLAGS_MCAST) ) ? TRUE : FALSE   ) ;
-  bptr = client->_rcv_buf;
-  purported_len = _LSLP_GETLENGTH(bptr);
-  
-  bptr += (total_len = _LSLP_HDRLEN(bptr));
-  if(purported_len < LSLP_MTU && (total_len < purported_len)) {
-    if( ! _LSLP_IS_EMPTY((lslpSrvRegList *)&(client->regs))) {
-      // advance past the slp v2 header
-      // get the previous responder list 
-      str_len = _LSLP_GETSHORT(bptr, 0);
-      if ((str_len + total_len + 2) < purported_len ) {
-       if( FALSE == slp_previous_responder( client, (str_len ? bptr + 2 : NULL ) )) {
-         rq = (struct lslp_srv_req *)calloc(1, sizeof(struct lslp_srv_req));
-         if( NULL != rq) {
-           bptr += 2 + str_len;
-           total_len += 2 + str_len;
-           // extract the service type string 
-           rq->srvcTypeLen = (str_len = _LSLP_GETSHORT(bptr, 0));
-           if(str_len && (str_len + total_len + 2 < purported_len )) {
-             rq->srvcType = (int8 *)malloc(str_len + 1);
-             if(rq->srvcType == NULL) {
-               free(rq);
-               return ;
-               }
-             memcpy(rq->srvcType, bptr + 2, str_len);
-             *(rq->srvcType + str_len) = 0x00;
-             bptr += 2 + str_len;
-             total_len += 2 + str_len;
-             
-             bptrSave = bptr;
-             buf_len = LSLP_MTU - total_len;
-             rq->scopeList = lslpUnstuffScopeList(&bptr, &buf_len, &err);
-             total_len += _LSLP_GETSHORT(bptrSave, 0);
-             if (TRUE == lslp_scope_intersection(client->_scopes, rq->scopeList) ) {
-               /* continue marshalling data */
-               
-               if(total_len < LSLP_MTU - 2){
-                 /* get the predicate */
-                 rq->predicateLen = (str_len = _LSLP_GETSHORT(bptr, 0));
-                 if( str_len && (str_len + total_len + 2) < LSLP_MTU ){
-                   rq->predicate = (int8 *)malloc(str_len + 1);
-                   if(rq->predicate != NULL){
-                     memcpy(rq->predicate, bptr + 2, str_len);
-                     *(rq->predicate + str_len) = 0x00;
-                   }
-                 } /* predicate */
-                 
-                 bptr += str_len + 2;
-                 total_len += str_len + 2;
-                 /* get the spi list */
-                 buf_len = LSLP_MTU - total_len ;
-                 rq->spiList = lslpUnstuffSPIList(&bptr, &buf_len, &err);
-
-                 /* check for an extension */
-                 rq->next_ext = lslp_get_next_ext(client->_rcv_buf);
-                 if(rq->next_ext) {
-                   /* derive the offset limit for the next extension and do a sanity check */
-                   rq->ext_limit = (int8 *)(purported_len + client->_rcv_buf);
-                   if(rq->ext_limit < rq->next_ext) {
-                     rq->next_ext = NULL;
-                   }
-                 }
-                 /* initialize the scratch buffer before processing the srvrq */
-                 /* that way we can know if there are extensions if the first 5 bytes changed */
-                 _LSLP_SETSHORT(client->_scratch, 0x0000, 0);
-                 _LSLP_SET3BYTES(client->_scratch, 0x00000000, 2);
-                 rp_out = _lslpProcessSrvReq(client, rq, 0);
-               } /* sanity check on remaining buffer */
-             } /* my scopes intersect */
-           } /* service type sanity check */
-         } /* allocated req struct */
-       } /* not a previous responder */
-      } /* pr list sanity check */
-    } /* we have regs */
-
-    if(mcast == FALSE || (rp_out != NULL && rp_out->urlCount > 0 )) {
-      SOCKETD sock; //jeb 
-      int8 *extptr, *next_extptr, *next_extptr_save;
-      int32 ext_offset;
-      
-      // we need to respond to this message
-      _LSLP_SETVERSION(client->_msg_buf, LSLP_PROTO_VER);
-      _LSLP_SETFUNCTION(client->_msg_buf, LSLP_SRVRPLY);
-      // skip the length for now
-      _LSLP_SETFLAGS(client->_msg_buf, 0);
-      
-      _LSLP_SETNEXTEXT(client->_msg_buf, 0);
-      _LSLP_SETXID( client->_msg_buf, ( _LSLP_GETXID(client->_rcv_buf)));
-      _LSLP_SETLAN(client->_msg_buf, LSLP_EN_US, LSLP_EN_US_LEN);
-      total_len = _LSLP_HDRLEN(client->_msg_buf);
-      bptr = client->_msg_buf + total_len;
-      if(rp_out != NULL) {
-       if( rp_out->urlLen < (LSLP_MTU - total_len)) {
-         memcpy(bptr, rp_out->urlList, rp_out->urlLen);
-         bptr += rp_out->urlLen;
-         total_len += rp_out->urlLen;
-       }
-       else {
-         _LSLP_SETSHORT( bptr, 0, 0 );
-         _LSLP_SETFLAGS(client->_msg_buf, LSLP_FLAGS_OVERFLOW);
-         total_len += 2;
-         bptr += 2;
-         /* clear the extension ptr, we don't have room for it. */
-         rq->next_ext = NULL;
-       }
-      } else {
-       /* set the error code */
-       _LSLP_SETSHORT(bptr, 0, 0);
-       /* set the url count */
-       _LSLP_SETSHORT(bptr, 0, 2);
-       bptr += 4;
-       total_len += 4;
-      }
-      extptr = client->_scratch;
-      next_extptr = client->_msg_buf + LSLP_NEXT_EX;
-      ext_offset = (int32)(bptr - client->_msg_buf);
-      
-      if ( 0x0002 == (_LSLP_GETSHORT(extptr, 0))) {
-       /* set the next extension field in the header */
-       _LSLP_SET3BYTES(next_extptr, ext_offset, 0);
-       while( 0x0002 == (_LSLP_GETSHORT(extptr, 0))) {
-         /* check see if it fits */
-         int16 ext_len = 5;
-         /* accumulate url len */
-         ext_len += (2 + _LSLP_GETSHORT(extptr, ext_len));
-         /* accumulate attr len */
-         ext_len += (2 + _LSLP_GETSHORT(extptr, ext_len));
-         /* add the auths byte */
-         ext_len++;
-         if((ext_len + total_len) < LSLP_MTU) {
-           /* set the next extension pointer to be the third byte of the first extension */
-           next_extptr = client->_msg_buf + ext_offset + 2;
-
-           /* copy the extension */
-           memcpy(client->_msg_buf + ext_offset, extptr, ext_len);
-           bptr += ext_len;
-           total_len += ext_len;
-
-           /* set the offset of the next extension */
-           _LSLP_SET3BYTES((next_extptr_save = next_extptr), ext_offset + ext_len, 0);
-           extptr += ext_len;
-
-           /* adjust the pointers */
-           ext_offset += ext_len;
-           next_extptr = client->_msg_buf + ext_offset + 2;
-           
-           /* minimum length of attr extension is 10 bytes - see if we should continue */
-           if(total_len + 10 >= LSLP_MTU) {
-             /* no room, set next ext field in this extension to zero */
-             _LSLP_SET3BYTES(next_extptr_save, 0x00000000, 0);
-             /* if there is another extension, set the truncated flag */
-             if ( 0x0002 == (_LSLP_GETSHORT(extptr, 0))) {
-               _LSLP_SETFLAGS(client->_msg_buf, LSLP_FLAGS_OVERFLOW);
-             }
-             break;
-           } /* no more room */
-         }  else  {
-           _LSLP_SET3BYTES(next_extptr_save, 0x00000000, 0); 
-         } 
-       } /* while there are extensions */
-       /* terminate the last extension */
-       _LSLP_SET3BYTES(next_extptr_save, 0x00000000, 0); 
-      } /* if there is at least one extension */
-       
-      // ok, now we can set the length
-      _LSLP_SETLENGTH(client->_msg_buf, total_len );
-      
-      _LSLP_SETSHORT(client->_scratch, 0x0000, 0);
-      _LSLP_SET3BYTES(client->_scratch, 0x00000000, 2);
-      // client->_msg_buf is stuffed with the service reply. now we need 
-      // to allocate a socket and send it back to the requesting node 
-
-      if(INVALID_SOCKET != (sock = _LSLP_SOCKET(AF_INET, SOCK_DGRAM, 0))) {
-       SOCKADDR_IN local;
-       int err = 1;
-#ifndef NUCLEUS
-       _LSLP_SETSOCKOPT(sock, SOL_SOCKET, SO_REUSEADDR, (const char *)&err, sizeof(err) );
-#endif 
-       local.sin_family = AF_INET;
-       local.sin_port = client->_target_port ; 
-       local.sin_addr.s_addr = client->_local_addr;
-       if(SOCKET_ERROR != _LSLP_BIND(sock, &local, sizeof(local))) {
-         if(mcast == TRUE ) {
-           _LSLP_SLEEP(rand() % 30 );
-         }
-         _LSLP_SENDTO(sock, client->_msg_buf, total_len , 0, 
-                      remote, sizeof(SOCKADDR_IN )) ;
-       } // successfully bound this socket 
-       _LSLP_CLOSESOCKET(sock);
-      } // successfully opened this socket
-    } // we must respond to this request 
-
-    /* free resources */
-    if(rq != NULL){
-      if(rq->prList != NULL)
-       free(rq->prList);
-      if(rq->srvcType != NULL)
-       free(rq->srvcType);
-      if(rq->scopeList != NULL)
-       lslpFreeScopeList(rq->scopeList);
-      if(rq->predicate != NULL)
-       free(rq->predicate);
-      if(rq->spiList != NULL)
-       lslpFreeSPIList(rq->spiList);
-      free(rq);
-    }
-    if(rp_out != NULL){
-      if(rp_out->urlList != NULL)
-       free(rp_out->urlList);
-      free(rp_out);
-    }
-  } /* header sanity check */
-}
-
-BOOL  srv_reg(struct slp_client *client,
-             const int8 *url,
-             const int8 *attributes,
-             const int8 *service_type,
-             const int8 *scopes,
-             int16 lifetime) 
-{
-  int32 len;
-  int16 str_len, buf_len;
-  int8 *bptr;
-  lslpURL *url_entry = NULL;
-  
-  /* this is always a new request */
-  memset( client->_pr_buf, 0x00, LSLP_MTU);
-  client->_pr_buf_len = 0;
-  client->_xid++ ;
-
-  memset(client->_msg_buf, 0x00, LSLP_MTU);
-  bptr = client->_msg_buf;
-  _LSLP_SETVERSION(bptr, LSLP_PROTO_VER);
-  _LSLP_SETFUNCTION(bptr, LSLP_SRVREG);
-  /* we don't know the length yet */
-  _LSLP_SETXID(bptr, client->_xid);
-  _LSLP_SETLAN(bptr, LSLP_EN_US, LSLP_EN_US_LEN);
-  bptr += (len =  _LSLP_HDRLEN(bptr) ) ;
-       
-  /* construct a url-entry  */
-
-  url_entry = (lslpURL *)calloc(1, sizeof(lslpURL));
-  if(url_entry == NULL)
-    return FALSE;
-  url_entry->lifetime = lifetime + time(NULL);
-  url_entry->len = (uint16)strlen(url);
-  url_entry->url = strdup(url);
-  url_entry->auths = 0;
-  buf_len = LSLP_MTU - len;
-  
-  if( TRUE == lslpStuffURL(&bptr, &buf_len, url_entry )) {
-    len = LSLP_MTU - buf_len ;
-    /* stuff the service type string */
-
-    /* stuff the service type  */
-    str_len = (int16)strlen(service_type) ;
-    if(len + 2 + str_len < LSLP_MTU) {
-      int retries;
-      _LSLP_SETSHORT(bptr, str_len, 0);
-      memcpy(bptr + 2, service_type, str_len);
-      bptr += (2 + str_len);
-      len += (2 + str_len);
-      /* stuff the scope list if there is one */
-      if(scopes == NULL)
-       str_len = 0;
-      else 
-       str_len = (int16)strlen(scopes);          
-      if(len + 2 + str_len < LSLP_MTU) {
-       _LSLP_SETSHORT(bptr, str_len, 0);
-       if(str_len) 
-         memcpy(bptr + 2, scopes, str_len);
-       len += (2 + str_len);
-       bptr += (2 + str_len);
-       /* stuff the attribute string if there is one */
-       if(attributes == NULL)
-         str_len = 0;
-       else
-         str_len = (int16)strlen(attributes);
-       if(len + 2 + str_len < LSLP_MTU) {
-         _LSLP_SETSHORT(bptr, str_len, 0);
-         if(str_len)
-           memcpy(bptr + 2, attributes, str_len);
-                 
-         len += ( 2 + str_len);
-         bptr += (2 + str_len);
-
-         /* no attribute auths for now */
-         if(len + 1 < LSLP_MTU) {
-           _LSLP_SETBYTE(bptr, 0x00, 0);
-         }
-         len += 1;
-         /* set the length field in the header */
-         _LSLP_SETLENGTH( client->_msg_buf, len );
-         
-         retries = client->_retries;
-         while( --retries ) {
-           if(TRUE == send_rcv_udp(client)) {
-             if(LSLP_SRVACK == _LSLP_GETFUNCTION( client->_rcv_buf )) {
-               if(0x0000 == _LSLP_GETSHORT( client->_rcv_buf, (_LSLP_HDRLEN( client->_rcv_buf )))) {
-                 memset(client->_msg_buf, 0x00, LSLP_MTU);
-                 if(url_entry != NULL)
-                   lslpFreeURL(url_entry);
-                 return(TRUE); 
-               }
-             }
-           } // received a response 
-         } // retrying the unicast 
-       } /* attribute string fits into buffer */
-      } /* scope string fits into buffer  */
-    } /* service type fits into buffer  */
-  } /* url fits into buffer  */
-  memset( client->_msg_buf, 0x00, LSLP_MTU);
-  if(url_entry != NULL)
-    lslpFreeURL(url_entry);
-  return(FALSE);
-}
-
-
-
-BOOL send_rcv_udp( struct slp_client *client )
-{
-  SOCKETD sock;               //jeb
-  SOCKADDR_IN target, local;
-  BOOL ccode = FALSE;
-  if(INVALID_SOCKET != (sock = _LSLP_SOCKET(AF_INET, SOCK_DGRAM, 0))) {
-    int err = 1;
-#ifndef NUCLEUS    //jeb
-    _LSLP_SETSOCKOPT(sock, SOL_SOCKET, SO_REUSEADDR, (const char *)&err, sizeof(err) );
-    local.sin_port = 0;
-#else
-      local.sin_port = 427;  for loopback to work the first time client inits
-#endif
-    local.sin_family = AF_INET;
-
-//jeb    
-    local.sin_addr.s_addr = client->_local_addr;
-    if(SOCKET_ERROR != _LSLP_BIND(sock, &local, sizeof(local))) {
-      int bcast = ( (_LSLP_GETFLAGS(client->_msg_buf)) & LSLP_FLAGS_MCAST) ? 1 : 0 ;
-      if(bcast) {
-       if( (SOCKET_ERROR ==  _LSLP_SET_TTL(sock, client->_ttl) )  ||  
-           (SOCKET_ERROR == _LSLP_SETSOCKOPT(sock, SOL_SOCKET, SO_BROADCAST, (const int8 *)&bcast, sizeof(bcast)))) {
-         _LSLP_CLOSESOCKET(sock);
-         return(FALSE);
-       }
-       if(client->_local_addr != INADDR_ANY ) {
-         SOCKADDR_IN ma;
-         memset(&ma, 0x00, sizeof(ma));
-         ma.sin_addr.s_addr = client->_local_addr;
-         if( (SOCKET_ERROR == _LSLP_SETSOCKOPT(sock, IPPROTO_IP, IP_MULTICAST_IF, (const char *)&ma, sizeof(SOCKADDR_IN))) ) {
-           _LSLP_CLOSESOCKET(sock);
-           return(FALSE);
-         }
-       }
-      }
-      target.sin_family = AF_INET;
-      target.sin_port = client->_target_port;
-      target.sin_addr.s_addr = client->_target_addr;
-
-
-      if(SOCKET_ERROR == (err = _LSLP_SENDTO(sock, 
-                                            client->_msg_buf, 
-                                            _LSLP_GETLENGTH(client->_msg_buf), 
-                                            0, 
-                                            &target, sizeof(target) ))) {
-       _LSLP_CLOSESOCKET(sock);
-       return(FALSE);
-      } /* oops - error sending data */
-
-      while ( 0 < __service_listener(client, sock ) ) { ccode = TRUE; }
-    } // bound the socket 
-    _LSLP_CLOSESOCKET(sock);
-  } /*  got the socket */
-  return(ccode);
-}
-     
-
-int32 service_listener_wait(struct slp_client *client, 
-                              time_t wait, 
-                              SOCKETD extra_sock, 
-                              BOOL one_only, 
-                              lslpMsg *list)
-{
-  int32 ccode = 0;
-  
-  if(list != NULL) {
-    list->isHead = TRUE;
-    list->prev = list->next = list;
-    ccode = __service_listener_wait(client, wait, extra_sock, one_only);
-    get_response(client, list);
-  }
-  return(ccode);
-}
-
-
-int32 __service_listener_wait(struct slp_client *client, time_t wait, SOCKETD extra_sock, BOOL one_only)       //jeb
-{
-  int32 rcv = 0;
-  time_t now;
-  time_t start = time(NULL);
-
-  while( time(&now) && ((now - wait ) <= start )  ) {
-    rcv += __service_listener(client, extra_sock);
-    if(rcv > 0)
-      if(one_only == TRUE)
-       return(rcv);
-
-    _LSLP_SLEEP(10);
-  }
-  rcv += __service_listener(client, extra_sock);
-  return(rcv);
-}
-
-
-int32 service_listener(struct slp_client *client, SOCKETD extra_sock, lslpMsg *list)
-{
-  int32 ccode = 0;
-  
-  if(list != NULL ) {
-    list->isHead = TRUE;
-    list->prev = list->next = list;
-    
-    ccode = __service_listener(client, extra_sock);
-    get_response(client, list);
-  }
-  return(ccode);
-}
-
-
-int32 __service_listener(struct slp_client *client, SOCKETD extra_sock )     //jeb
-{
-
-  struct timeval tv; 
-  int32 err;
-  LSLP_FD_SET fds;
-  _LSLP_FD_ZERO(&fds);
-  if(client->_rcv_sock != INVALID_SOCKET) {
-    _LSLP_FD_SET(client->_rcv_sock, &fds);
-  }
-  if(extra_sock)
-    _LSLP_FD_SET( extra_sock, &fds);
-
-#ifdef NUCLEUS
-    const char fun_name[] = "service_listener";
-    err = -1;
-    tv.tv_sec = client->_tv.tv_sec;
-    tv.tv_usec = client->_tv.tv_usec;
-    err = _LSLP_SELECT(((client->_rcv_sock != INVALID_SOCKET) && 
-                       (client->_rcv_sock > extra_sock)) ? 
-                      client->_rcv_sock + 1: extra_sock + 1, &fds, NULL, NULL, &tv);
-
-    // was there some data?
-    if (err == NU_SUCCESS)
-    {   //yes
-        SOCKADDR_IN remote;
-        int size = sizeof(SOCKADDR_IN);
-        
-        if (client->_rcv_sock != INVALID_SOCKET) 
-        {
-          if (_LSLP_FD_ISSET(client->_rcv_sock, &fds)) 
-          {
-           err = _LSLP_RECV_FROM(client->_rcv_sock, client->_rcv_buf, LSLP_MTU, 0, &remote, &size);
-          }
-        }
-        //did we receive data or invalid socket 
-        if (err > 0 ) 
-        {
-          //go decode the inbound message 
-          decode_msg( client, &remote );
-          return(err);
-        }
-        else //error on receive or invalid socket
-        {
-          _system_info(TRUE,"%s:Receive error=%d,skt=%d",fun_name, err, client->_rcv_sock);
-          //close our socket 
-          _LSLP_CLOSESOCKET(client->_rcv_sock );
-
-          //go check if the interface is still up
-          if ((slp_get_local_interfaces( &(client->_local_addr_list))) > 0  ) 
-          {
-             if(client->_rcv_sock != INVALID_SOCKET)
-               client->_rcv_sock = slp_open_listen_sock();
-          }
-
-          return(err);
-        }
-    }
-    //was it just no data yet 
-    else if (err == NU_NO_DATA) 
-    {
-      //This is OK just return to retry select again later
-      return(err);
-    }
-    //see if other than we time-out with no data 
-    else  
-    {
-      _system_info(TRUE,"%s:Select:sck error=%d,sck=%d",fun_name, err,client->_rcv_sock);
-      
-      // our interfaces could be disconnected or we could be a laptop that 
-      // just got pulled from the network, etc. 
-      //close our socket 
-      _LSLP_CLOSESOCKET(client->_rcv_sock );
-
-      //go check if the interface is still up
-      if ((slp_get_local_interfaces( &(client->_local_addr_list))) > 0  ) 
-      {
-         if(client->_rcv_sock != INVALID_SOCKET)
-           client->_rcv_sock = slp_open_listen_sock();
-      }
-    }
-
- return(err);
-
-#else //all other OS's
-
-   do { 
-     tv.tv_sec = client->_tv.tv_sec;
-     tv.tv_usec = client->_tv.tv_usec;
-     err = _LSLP_SELECT(((client->_rcv_sock != INVALID_SOCKET) && 
-                        (client->_rcv_sock > extra_sock)) ? 
-                       client->_rcv_sock + 1: extra_sock + 1, &fds, NULL, NULL, &tv); 
-   } while ( (err < 0 )&& (errno == EINTR)) ;
-  
-   
-   if( 0 < err ) {
-     SOCKADDR_IN remote;
-     int size = sizeof(SOCKADDR_IN);
-     if(client->_rcv_sock != INVALID_SOCKET) {
-       if(_LSLP_FD_ISSET(client->_rcv_sock, &fds)) {
-        err = _LSLP_RECV_FROM(client->_rcv_sock, client->_rcv_buf, LSLP_MTU, 0, &remote, &size); 
-        decode_msg( client, &remote ); 
-       }
-     }
-
-     if(extra_sock && _LSLP_FD_ISSET(extra_sock, &fds) ) {
-       err = _LSLP_RECV_FROM(extra_sock, client->_rcv_buf, LSLP_MTU, 0, &remote, &size);
-        decode_msg( client, &remote );
-     }
-   }
-
-   if (err == SOCKET_ERROR) {
-     // our interfaces could be disconnected or we could be a laptop that 
-     // just got pulled from the network, etc. 
-     _LSLP_CLOSESOCKET(client->_rcv_sock );
-     if( 0 < slp_get_local_interfaces( &(client->_local_addr_list) ) ) {
-       if(client->_rcv_sock != INVALID_SOCKET)
-        client->_rcv_sock = slp_open_listen_sock();
-     }
-   } 
-   return(err);
-#endif
-
-}
-
-int srv_reg_all( struct slp_client *client,
-                const int8 *url,
-                const int8 *attributes,
-                const int8 *service_type,
-                const int8 *scopes,
-                int16 lifetime)
-{
-  uint32 target_addr_save;
-  int convergence_save;
-  
-  // keep track of how many times we register
-  int registrations = 0;
-
-  assert(client != NULL && url != NULL && attributes != NULL && service_type != NULL && scopes != NULL);
-  if(client == NULL || url == NULL || attributes == NULL || service_type == NULL || scopes == NULL )
-    return(0);
-
-  // save target and convergence parameters 
-  target_addr_save = client->_target_addr;
-  convergence_save = client->_convergence;
-  client->_convergence = 0;
-  
-  if(  client->_use_das == TRUE ) {
-    find_das(client, NULL, scopes) ;
-    if( ! _LSLP_IS_EMPTY(&(client->das)) ) {
-      struct da_list *da = client->das.next;
-      while( ! _LSLP_IS_HEAD(da) ) {
-       client->_target_addr = inet_addr(da->remote);
-       if( TRUE == srv_reg( client, url, attributes, service_type, scopes, lifetime) )
-         registrations++;
-       da = da->next;;
-      }
-    }
-  }
-  // restore parameters 
-  client->_convergence = convergence_save;
-  client->_target_addr = target_addr_save;
-  /* do a unicast srvreg if we have the target set */
-  if(client->_target_addr != _LSLP_MCAST) {
-    if( TRUE == srv_reg( client, url, attributes, service_type, scopes, lifetime) )
-      registrations++;
-  } 
-  return(registrations);
-}
-
-int  srv_reg_local(struct slp_client *client, 
-                  const int8 *url,
-                  const int8 *attributes,
-                  const int8 *service_type,
-                  const int8 *scopes,
-                  uint16 lifetime)
-     
-{
-  int count = 0;
-    
-  uint32 target_addr_save;
-  int convergence_save;
-  assert(client != NULL && url != NULL && attributes != NULL && service_type != NULL && scopes != NULL);
-  if(client == NULL || url == NULL || attributes == NULL || service_type == NULL || scopes == NULL )
-    return 0;
-
-  target_addr_save = client->_target_addr;
-  convergence_save = client->_convergence;
-  client->_convergence = 0;
-  client->_target_addr = inet_addr("127.0.0.1");
-  if(TRUE == srv_reg(client, url, attributes, service_type, scopes, lifetime))
-    count = 1;
-  
-  client->_convergence = convergence_save;
-  client->_target_addr = target_addr_save;
-  return count;
-  
-}
-
-/* Note: this is how srv_reg_local will look with authentication support */
-
-/* void srv_reg_local(struct slp_client *client,  */
-/*                const int8 *url,  */
-/*                int url_auth_count, */
-/*                void *url_auth_blob, */
-/*                const int8 *attributes,  */
-/*                const int8 *service_type, */
-/*                const int8 *scopes, */
-/*                uint16 lifetime,  */
-/*                int attr_auth_count,  */
-/*                void *attr_auth_blob) */
-/* { */
-/* } */
-
-
-void __srv_reg_local ( struct slp_client *client, 
-                      const int8 *url,
-                      const int8 *attributes, 
-                      const int8 *service_type, 
-                      const int8 *scopes, 
-                      uint16 lifetime)   //jeb int16 to uint16  
-{
-
-  int8 *url_copy;
-  lslpSrvRegList *reg;
-  
-  assert(client != NULL && url != NULL && attributes != NULL && \
-        service_type != NULL && scopes != NULL);
-  
-  url_copy = strdup(url);
-  if(url_copy == NULL)
-    abort();
-  
-  /* update the attributes if an existing registration */
-  reg   = client->regs.next;
-  while(! _LSLP_IS_HEAD(reg)) { 
-    if ( 0 == lslp_string_compare(url_copy, reg->url->url)){ 
-      free(url_copy);
-      reg->directoryTime = lifetime + time(NULL);
-      reg->url->lifetime = lifetime + time(NULL); 
-      if(reg->attrList != NULL)
-       lslpFreeAttrList(reg->attrList, LSLP_DESTRUCTOR_DYNAMIC); 
-      reg->attrList = _lslpDecodeAttrString((int8 *)attributes); 
-      return; 
-    } 
-    reg = reg->next; 
-  }
-  reg = (lslpSrvRegList *)calloc(1, sizeof(lslpSrvRegList));
-  if(reg != NULL){
-    int16 len;
-    int8 *scope_copy = strdup(scopes);
-    if(scope_copy == NULL)
-      return;
-    if(NULL == (reg->url = lslpAllocURL()))
-      abort();
-    reg->directoryTime = lifetime + time(NULL);
-    reg->url->atomized = _lslpDecodeURLs(&url_copy, 1);
-    reg->url->url = url_copy;
-    reg->url->lifetime = lifetime + time(NULL);
-    reg->url->auths = 0;
-    reg->url->len = (uint16)strlen(url_copy);
-    reg->srvType = strdup(service_type);
-    len = (int16)strlen(scopes) + 1;
-    reg->scopeList  = lslpScopeStringToList(scope_copy, len);
-    len = (int16)strlen(attributes);
-    reg->attrList  = _lslpDecodeAttrString((int8 *)attributes);
-    _LSLP_INSERT(reg, (lslpSrvRegList *)&(client->regs));
-  }
-  return;
-}
-
-BOOL slp_previous_responder(struct slp_client *client, int8 *pr_list)
-{
-
-  int8 *a, *s = NULL;
-  uint32 addr, *list_addr;
-  if(pr_list == NULL || 0 == strlen(pr_list))
-    return(FALSE);
-
-  a = _LSLP_STRTOK(pr_list, ",", &s);
-  while(NULL != a ) {
-    if(INADDR_NONE != (addr = inet_addr(a))) {
-      list_addr = client->_local_addr_list;
-      while( INADDR_ANY != *list_addr ) {
-       if(*list_addr == addr)
-         return(TRUE);
-       list_addr++;
-      }
-    }
-    a = _LSLP_STRTOK(NULL, ",", &s);
-  }
-  return(FALSE);
-}
-
-struct slp_client *create_slp_client(const int8 *target_addr, 
-                                    const int8 *local_interface, 
-                                    uint16 target_port, 
-                                    const int8 *spi, 
-                                    const int8 *scopes,
-                                    BOOL should_listen, 
-                                    BOOL use_das)
-{
-  int16 len;
-  struct slp_client *client;
-  int8 *scope_copy;
-  
-  
-  if(spi == NULL || scopes == NULL )
-    return NULL;
-  
-  client = (struct slp_client *)calloc(1, sizeof(struct slp_client)); //jeb
-  if(client == NULL)
-    return NULL;
-  
-#ifdef _WIN32
-  WindowsStartNetwork();
-#endif
-
-  /* initialize the random number generator for randomizing the 
-     timing of multicast responses */
-  srand(time(NULL));
-  
-  client->_buf_len = LSLP_MTU;
-  client->_version = 1;
-  client->_xid = 1;
-  client->_target_port = htons(target_port);
-  if( target_addr == NULL)
-    client->_target_addr = inet_addr("239.255.255.253");
-  else
-    client->_target_addr = inet_addr(target_addr);
-  if(local_interface == NULL)
-    client->_local_addr = INADDR_ANY;
-  else
-    client->_local_addr = inet_addr(local_interface);
-  scope_copy = strdup(spi);
-  if(scope_copy == NULL){
-    free(client);
-    return NULL;
-  }
-  
-  len = (int16)strlen(scope_copy) + 1;
-  client->_spi = lslpScopeStringToList(scope_copy, len);
-  free(scope_copy);
-  scope_copy = strdup(scopes);
-  if(scope_copy == NULL){
-    free(client);
-    return NULL;
-  }
-  len = (int16)strlen(scope_copy) + 1;
-  client->_scopes = lslpScopeStringToList(scope_copy, len);
-  free(scope_copy);
-#ifdef NUCLEUS     //jeb
-  client->_tv.tv_usec = TICKS_PER_SECOND; //socket call with timer UINT32
-#else
-  client->_tv.tv_usec = 200000;     //.2 sec
-#endif 
-
-  client->_use_das = use_das;
-  client->_retries = 3;
-  client->_ttl = 255;
-  client->_convergence = 5;
-
-  client->das.isHead = TRUE;
-  client->das.next = client->das.prev = &(client->das);
-  
-  client->replies.isHead = TRUE;
-  client->replies.next = client->replies.prev = &(client->replies);
-  
-  client->regs.isHead = TRUE;
-  client->regs.next = client->regs.prev = (lslpSrvRegList *)&(client->regs);
-  
-  client->_local_addr_list = NULL;
-  slp_get_local_interfaces(&(client->_local_addr_list));
-
-  /* see if we can use a local DA. If not, open up the listen socket */
-  client->_rcv_sock = INVALID_SOCKET;
-  if(should_listen == TRUE ){
-    client->_rcv_sock = slp_open_listen_sock();
-  }
-  if(client->_use_das == TRUE) {
-    local_srv_req(client, NULL, NULL, "DEFAULT"); 
-    if( ! _LSLP_IS_EMPTY(&(client->das))) {
-      client->_rcv_sock = INVALID_SOCKET;
-      client->_use_das = TRUE;
-      client->_da_target_port = htons(427);
-      client->_da_target_addr = inet_addr("127.0.0.1");
-    }
-  }
-  
-  client->get_response = get_response;
-  client->find_das = find_das;
-  client->discovery_cycle = discovery_cycle;
-  client->converge_srv_req = converge_srv_req;
-  client->unicast_srv_req = unicast_srv_req;
-  client->local_srv_req = local_srv_req;
-  client->srv_req = srv_req;
-  client->srv_reg = srv_reg;
-  client->srv_reg_all = srv_reg_all;
-  client->srv_reg_local = srv_reg_local;
-  client->service_listener = service_listener;
-  client->prepare_pr_buf = prepare_pr_buf;
-  client->decode_msg = decode_msg;
-  client->decode_srvreq = decode_srvreq;
-  client->decode_srvrply = decode_srvrply;
-  client->decode_daadvert = decode_daadvert;
-  client->send_rcv_udp = send_rcv_udp;
-  client->service_listener_wait = service_listener_wait;
-  client->slp_previous_responder = slp_previous_responder;
-  
-  return client;
-}
-
-void destroy_slp_client(struct slp_client *client)
-{
-  
-  if(client == NULL)
-    return;
-  
-  _LSLP_CLOSESOCKET(client->_rcv_sock);
-  _LSLP_FREE_DEINIT(client->_local_addr_list);
-  lslpFreeScopeList((lslpScopeList *)(client->_spi));
-  lslpFreeScopeList(client->_scopes);
-  _LSLP_FREE_DEINIT(client->_crypto_context);
-  free(client);
-  return;
-}
-
-/* returns a length-preceded escaped string compliant with an slp opaque value */
-/* length is encoded as two-byte value at the beginning of the string */
-/* size of returned buffer will be ((3 * length) + 3 + 2) */
-int8 *encode_opaque(void *buffer, int16 length)
-{
-  static int8 transcode[16] = 
-    { 
-      '0', '1', '2', '3', '4', '5', '6', '7', 
-      '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
-    };
-  
-  int8 *bptr, *srcptr, *buf;
-  int32 encoded_length;
-  
-  if(buffer == NULL || length == 0)
-    return(NULL);
-  
-  encoded_length = (length * 3) + 5;
-  /* see if the encoded length will overflow the max size of an slp string */
-  if( 0xffff0000 & encoded_length )
-    return NULL;
-  
-  buf = malloc(encoded_length);
-  if(buf == NULL)
-    return NULL;
-  bptr = buf;
-  
-  /* encode the length */
-  _LSLP_SETSHORT(bptr, (int16)encoded_length, 0);
-  bptr += 2;
-  srcptr = (int8 *)buffer;
-  *bptr = 0x5c; *(bptr + 1) = 0x66; *(bptr + 2) = 0x66;
-  bptr += 3;
-  
-  while(length){
-    *bptr = 0x5c;
-    *(bptr + 1) = transcode[((*srcptr) & 0xf0) >> 4];
-    *(bptr + 2) = transcode[(*srcptr) & 0x0f];
-    bptr += 3;
-    srcptr++;
-    length--;
-  }
-  return buf;
-}
-
-/* returns an opaque buffer. size of opaque buffer will be */
-/* ((size of escaped opaque string - 2) / 3) - 1  */
-void *decode_opaque(int8 *buffer)
-{
-  
-  int16 encoded_length, alloc_length;
-  int8 *bptr, *srcptr, *retptr;
-
-  if(buffer == NULL)
-    return NULL;
-
-  srcptr = buffer;
-  retptr = bptr = NULL;
-  /* get the length */
-  encoded_length = _LSLP_GETSHORT(srcptr, 0);
-  if(0 == encoded_length || 0 > encoded_length)
-    return NULL;
-  alloc_length = (encoded_length / 3) - 1;
-  
-  srcptr += 2;
-  encoded_length -= 2; 
-  
-  /* check the header */
-  if( *srcptr == 0x5c ){
-    if( (*(srcptr + 1) == 0x46) || (*(srcptr + 1) == 0x66 ) ) {
-      if( (*(srcptr + 2) == 0x46) || (*(srcptr + 2) == 0x66 ) ) {
-       retptr = (bptr = malloc(alloc_length));
-       if(bptr == NULL)
-         return NULL;
-       /* adjust the encoded length to reflect that we consumed the header */
-       encoded_length -= 3;
-       srcptr += 3;
-       
-       while(encoded_length && alloc_length){
-         int8 accumulator = 0;
-         if(*srcptr == 0x5c){
-           /* encode the high nibble */
-           if( *(srcptr + 1) < 0x3a && *(srcptr + 1) > 0x2f){
-             /* asci decimal char */
-             accumulator = (*(srcptr + 1) - 0x30) * 0x10;
-           }
-           else if( *(srcptr + 1) < 0x47 && *(srcptr + 1) > 0x40){
-             accumulator = (*(srcptr + 1) - 0x37) * 0x10;
-           }
-           else if( *(srcptr + 1) < 0x67 && *(srcptr + 1) > 0x60){
-             accumulator = (*(srcptr + 1) - 0x57) * 0x10;
-           }
-           /* encode the low nibble */
-           if( *(srcptr + 2) < 0x3a && *(srcptr + 2) > 0x2f){
-             /* asci decimal char */
-             accumulator += *(srcptr + 2) - 0x30;
-           } 
-           else if( *(srcptr + 2) < 0x47 && *(srcptr + 2) > 0x40){
-             accumulator += *(srcptr + 2) - 0x37;
-           }
-           else if( *(srcptr + 2) < 0x67 && *(srcptr + 2) > 0x60){
-             accumulator += *(srcptr + 2) - 0x57;
-           }
-           /* store the byte */
-           *bptr = accumulator;
-         }
-         else
-           break;
-
-         /* update pointers and counters */
-         srcptr += 3;
-         bptr++;
-         encoded_length -= 3;
-         alloc_length--;
-       }
-       if( alloc_length || encoded_length) {
-         free(retptr);
-         retptr = NULL;
-       }
-      }
-    }
-  }
-  return (void *)retptr;
-}
-
-
-
-/* right now we don't support the attr request unless it specifies a complete url. */
-
-void decode_attrreq(struct slp_client *client, SOCKADDR_IN *remote)
-{
-  int8 *bptr;
-  lslpURL *url;
-  lslpScopeList *scopes;
-  lslpAttrList *attr_tags, *attr_return;
-  lslpSrvRegList *regs;
-  
-  int16 str_len, buf_len, err = LSLP_PARSE_ERROR;
-  int32 total_len, purported_len;
-  
-  /* read the length from the slp header */
-  bptr = client->_rcv_buf;
-  purported_len = _LSLP_GETLENGTH(bptr);
-  if(purported_len > LSLP_MTU )
-    return;
-  
-  bptr += (total_len = _LSLP_HDRLEN(bptr));
-  
-  /* use total_len as a running count of the msg length, ensure it is */
-  /* consistent with the purported length to protect against overflow */
-  if(total_len < purported_len){
-    /* get the length of the PR list and look at it */
-    str_len = _LSLP_GETSHORT(bptr, 0);
-    if( (str_len + total_len + 2) < purported_len) {
-      if(FALSE == slp_previous_responder(client, (str_len ? bptr + 2 : NULL))){
-       bptr += str_len + 2;
-       total_len += str_len + 2;
-
-       /* decode the url */
-       str_len = _LSLP_GETSHORT(bptr, 0);
-       if( (str_len + total_len + 2) < purported_len ) {
-         if(NULL != (url = lslpAllocURL())) {
-            if(NULL != (url->url = (int8 *)malloc(str_len + 1))) {
-              memcpy(url->url, bptr, str_len);
-              *(bptr + str_len) = 0x00;
-              url->atomized = _lslpDecodeURLs( (int8 **)&(url->url), 1);
-              bptr += str_len + 2;
-              total_len += str_len + 2;
-              buf_len = LSLP_MTU - total_len;
-              str_len = _LSLP_GETSHORT(bptr, 0);
-              scopes = lslpUnstuffScopeList(&bptr, &buf_len, &err);
-              total_len += str_len + 2;
-              /* see if we even support the scopes */
-              if( NULL != url->atomized && TRUE == lslp_scope_intersection(client->_scopes, scopes)) {
-                /* decode the attribute tags */
-                int8 *bptrSave;
-                SOCKETD sock;                      //jeb
-                str_len = _LSLP_GETSHORT(bptr, 0 );
-                attr_tags = lslpUnstuffAttr(&bptr, &buf_len, &err);
-                total_len += str_len + 2;
-                /* see if we have url match */
-
-                regs = client->regs.next;
-                attr_return = NULL;
-                
-                while(! _LSLP_IS_HEAD(regs) ){
-                  if( ! lslp_string_compare(regs->url->url, url->url)) {
-                    /* we have a hit on the url, see if the scopes intersect */
-                    if( TRUE == lslp_scope_intersection(regs->scopeList, scopes)){
-                      attr_return = regs->attrList;
-                      break;
-                    }
-                  }
-                  regs = regs->next;
-                }
-                
-                /* stuff the attribute reply */
-
-                _LSLP_SETVERSION(client->_msg_buf, LSLP_PROTO_VER);
-                _LSLP_SETFUNCTION(client->_msg_buf, LSLP_ATTRRPLY);
-                // skip the length for now
-                _LSLP_SETFLAGS(client->_msg_buf, 0);
-                _LSLP_SETNEXTEXT(client->_msg_buf, 0);
-                _LSLP_SETXID( client->_msg_buf, ( _LSLP_GETXID(client->_rcv_buf)));
-                _LSLP_SETLAN(client->_msg_buf, LSLP_EN_US, LSLP_EN_US_LEN);
-                total_len = _LSLP_HDRLEN(client->_msg_buf);
-
-                
-                bptr = client->_msg_buf + total_len;
-                _LSLP_SETSHORT(bptr, err, 0);
-                bptr += 2;
-                total_len += 2;
-                
-                buf_len = LSLP_MTU - (total_len + 1);
-                bptrSave = bptr;
-                
-                /* stuff the attr list */
-
-                if( FALSE == lslpStuffAttrList(&bptr, &buf_len, attr_return, attr_tags)){
-                  /* overflow, set the flag, stuff a zero attr list */
-                  _LSLP_SETFLAGS(client->_msg_buf,  LSLP_FLAGS_OVERFLOW);
-                  buf_len = LSLP_MTU - total_len;
-                  bptr = bptrSave;
-                  lslpStuffAttrList(&bptr, &buf_len, NULL, NULL);
-                }
-                /* for now don't support auth blocks */
-
-                _LSLP_SETBYTE(bptr, 0, 0);
-                
-                /* to calculate the length, re-read the attr list length */
-                total_len +=(2 + _LSLP_GETSHORT(bptrSave, 0));
-                /* add the length of the auth block (zero plus the number of auths) */
-                total_len += 1;
-                
-               // ok, now we can set the length
-               _LSLP_SETLENGTH(client->_msg_buf, total_len );
-               
-/*             client->_msg_buf is stuffed with the attr reply. now we need  */
-/*             to allocate a socket and send it back to the requesting node  */
-               
-               if(INVALID_SOCKET != (sock = _LSLP_SOCKET(AF_INET, SOCK_DGRAM, 0))) {
-                 SOCKADDR_IN local;
-                 int err = 1;
-#ifndef NUCLEUS
-                 _LSLP_SETSOCKOPT(sock, SOL_SOCKET, SO_REUSEADDR, (const char *)&err, sizeof(err) );
-#endif           
-                 local.sin_family = AF_INET;
-                 local.sin_port = client->_target_port ; 
-                 local.sin_addr.s_addr = client->_local_addr;
-                 if(SOCKET_ERROR != _LSLP_BIND(sock, &local, sizeof(local))) {
-                   _LSLP_SENDTO(sock, client->_msg_buf, total_len , 0, 
-                                (remote), sizeof(SOCKADDR_IN )) ;
-                 } /*  successfully bound this socket  */
-                 _LSLP_CLOSESOCKET(sock);
-               } /* successfully opened this socket */
-               if(attr_tags)
-                 lslpFreeAttrList(attr_tags, TRUE);
-              } /* scopes intersect */
-              if(scopes)
-                lslpFreeScopeList(scopes);
-              
-            } /* url string allocated */
-            if(url)
-              lslpFreeURL(url);
-         } /* url allocated */
-       }
-      } /* not on the pr list */
-    }
-  }
-}
-
-
-/* folds extra whitespace out of the string - in place */
-/* destroys parameter ! */
-int8 *lslp_foldString(int8 *s)
-  {
-  int8 *src, *dst;
-  assert(s != 0);
-  src = s;
-  while(isspace(*src))
-    src++;
-  if(*src == 0x00) {
-    /* return a string of exactly one space  */
-    *s = 0x20;
-    *(s + 1) = 0x00;
-    return(s);
-  }
-  dst = s;
-  while(*src != 0x00) {
-    *dst = *src;
-    dst++;
-    src++;
-    if(isspace(*src)) {
-      *dst = *src;
-      dst++; 
-      src++;
-      while(isspace(*src))
-       src++;
-    }
-  }
-  *dst = 0x00;
-  if(isspace(*(dst - 1)))
-    *(dst - 1) = 0x00;
-  return(s);
-}
-
-BOOL lslpStuffAttrList(int8 **buf, int16 *len, lslpAttrList *list, lslpAttrList *include)
-{
-               
-  lslpAttrList *attrs, *included;
-  int16 attrLen = 0, lenSave;
-  int8 *bptr;
-  BOOL ccode = FALSE, hit = TRUE;
-  assert(buf != NULL);
-  assert(len != NULL && *len > 3);
-/*   assert(list != NULL); */
-  if (buf == NULL || len == NULL || *len < 3 )
-    return(FALSE);
-  /* always return TRUE on an empty list so we can continue to build the */
-  /* msg buffer - an empty list is not an error! */
-  if (list == NULL || _LSLP_IS_EMPTY(list)) {
-    _LSLP_SETSHORT((*buf), 0, 0);  
-    (*buf) += 2;
-    (*len) -= 2;
-    return(TRUE);
-  }
-  /* attr list */
-  lenSave = *len;
-  attrs = list->next;
-  bptr = *buf;
-  memset(bptr, 0x00, *len);
-  (*buf) += 2;  /* reserve space for the attrlist length short */
-  (*len) -= 2;
-  while (! _LSLP_IS_HEAD(attrs) && attrLen + 1 < *len) {
-    assert(attrs->type != head);
-    if(include != NULL && _LSLP_IS_HEAD(include) && (! _LSLP_IS_EMPTY(include))) {
-      included = include->next;
-      hit = FALSE;
-      
-      while(! _LSLP_IS_HEAD(included)){
-       if( ! lslp_string_compare(attrs->name, included->name)){
-         hit = TRUE;
-         break;
-       }
-       included = included->next;
-      }
-    }
-    
-    if(hit == FALSE){
-      attrs = attrs->next;
-      continue;
-    }
-    
-    if (attrLen + (int16)strlen(attrs->name) + 3 < *len)
-      {
-       if (attrs->type != tag)
-         {
-           **buf = '(';  
-           (*buf)++; 
-           attrLen++;
-           (*len)--;
-         }
-       strcpy(*buf, attrs->name);
-       (*buf) += strlen(attrs->name); 
-       attrLen += (int16)strlen(attrs->name);
-       (*len) -= (int16)strlen(attrs->name);
-       if (attrs->type != tag)
-         {
-           **buf = '='; 
-           (*buf)++; 
-           attrLen++;
-           (*len)--;
-         }
-       switch (attrs->type)
-         {
-         case tag:
-           break;
-         case string:
-           if (attrLen + (int16)strlen(attrs->val.stringVal) + 2 < *len)
-             {
-               strcpy(*buf, (attrs->val.stringVal));
-               (*buf) += strlen(attrs->val.stringVal); 
-               attrLen +=  (int16)strlen(attrs->val.stringVal);
-               (*len) -= (int16)strlen(attrs->val.stringVal);
-               ccode = TRUE;
-             }
-           else
-             ccode = FALSE;
-           break;
-         case integer:
-           if (attrLen + 33 + 2 < *len)
-             {
-               _itoa( attrs->val.intVal, *buf, 10 );
-               attrLen += (int16)strlen(*buf);
-               (*buf) += strlen(*buf);
-               (*len) -= (int16)strlen(*buf);
-               ccode = TRUE;
-             }
-           else
-             ccode = FALSE;
-           break;
-         case bool_type:
-           if (attrLen + 6 + 2 < *len)
-             {
-               if (attrs->val.boolVal)
-                 strcpy(*buf, "TRUE");
-               else
-                 strcpy(*buf, "FALSE");
-               attrLen += (int16)strlen(*buf);
-               (*buf) += strlen(*buf);
-               (*len) -= (int16)strlen(*buf);
-               ccode = TRUE;
-             }
-           else
-             ccode = FALSE;
-           break;
-         case opaque:
-           {
-             int16 opLen;
-             opLen = (_LSLP_GETSHORT(((int8 *)attrs->val.opaqueVal), 0));
-             if (attrLen + opLen + 3 < *len)
-               {
-                 memcpy(*buf, (((int8 *)attrs->val.opaqueVal) + 2), opLen);
-                 (*buf) += opLen;
-                 attrLen += opLen;
-                 (*len) -= opLen;
-                 ccode = TRUE;
-               }
-             else
-               ccode = FALSE;
-             break;
-           }
-         default:
-           ccode = FALSE;
-           break;
-         }
-       if (ccode == TRUE && attrLen + 2 < *len && attrs->type != tag)
-         {
-           **buf = ')'; 
-           (*buf)++; 
-           attrLen++;
-           (*len)--;
-         }
-       if (ccode == TRUE && ! _LSLP_IS_HEAD(attrs->next) && attrLen + 1 < *len)
-         {
-           **buf = ','; 
-           (*buf)++; 
-           attrLen++;
-           (*len)--;
-         }
-      }  /* if room for the attr name */
-    else
-      {
-       ccode = FALSE;
-       break;
-      }
-    attrs = attrs->next;
-  } /* while we are traversing the attr list */
-  /* set the length short */
-  if (ccode == TRUE)
-    {
-      _LSLP_SETSHORT(bptr, attrLen, 0);
-    }
-  else
-    {
-      (*buf) = bptr; 
-      (*len) = lenSave;
-      memset(*buf, 0x00, *len);
-    }
-  return(ccode);
-}      
-
-
-lslpAttrList *lslpUnstuffAttr(int8 **buf, int16 *len, int16 *err)  
-{
-  int16 tempLen;
-  lslpAttrList *temp = NULL;
-  assert(buf != NULL && *buf != NULL);
-  assert(len != NULL);
-  assert(err != NULL);
-  *err = 0;
-  tempLen = _LSLP_GETSHORT(*buf, 0);
-  if(tempLen > 0) {
-    (*buf) += sizeof(int16);
-    (*len) -= sizeof(int16);
-    if(*len >= tempLen) {
-      if(NULL != (temp = _lslpDecodeAttrString(*buf))) {
-      (*buf) += tempLen;
-      (*len) -= tempLen;
-      } else {*err = LSLP_PARSE_ERROR; }
-    } else {*err = LSLP_INTERNAL_ERROR; }
-  }
-  return(temp);
-}
-
-
-
-lslpURL *lslpAllocURL(void)
-{
-  lslpURL *url = (lslpURL *)calloc(1, sizeof(lslpURL));
-
-  return(url);
-}      
-
-lslpURL *lslpAllocURLList(void)
-{
-  lslpURL *head;
-  if (NULL != (head = lslpAllocURL()))
-    {
-      head->next = head->prev = head;
-      head->isHead = TRUE;
-      return(head);
-    }
-  return(NULL);        
-}      
-
-/* url MUST be unlinked from list */
-void lslpFreeURL(lslpURL *url)
-{
-  assert(url != NULL);
-  if (url->url != NULL)
-    free(url->url);
-  if ( url->authBlocks != NULL)
-      lslpFreeAuthList(url->authBlocks);
-  if(url->atomized != NULL)
-    lslpFreeAtomizedURLList(url->atomized, TRUE);
-  if(url->attrs)
-    lslpFreeAtomList(url->attrs, LSLP_DESTRUCTOR_DYNAMIC);
-  free(url);
-  return;
-}      
-
-void lslpFreeURLList(lslpURL *list)
-{                                                              
-  lslpURL *temp;
-
-  assert(list != NULL);
-  assert(_LSLP_IS_HEAD(list));
-  while(! (_LSLP_IS_EMPTY(list)))
-    {
-      temp = list->next;
-      _LSLP_UNLINK(temp);
-      lslpFreeURL(temp);
-    }
-  lslpFreeURL(list);
-  return;
-}      
-
-
-/* for protected scopes, we need to change stuff URL so that it */
-/* only stuffs url auth blocks that match spis in the srv req */
-
-
-/* this routine may return FALSE AND alter the buffer and length */
-BOOL  lslpStuffURL(int8 **buf, int16 *len, lslpURL *url) 
-{
-  assert((buf != NULL) && (*buf != NULL));
-  assert((len != NULL) && (*len > 8));
-  assert((url != NULL) && (! _LSLP_IS_HEAD(url)));
-  if(_LSLP_IS_HEAD(url))
-    return(FALSE);
-  memset(*buf, 0x00, *len);
-  /* advanced past the reserved portion */
-  (*buf) += sizeof(int8);
-  _LSLP_SETSHORT(*buf, url->lifetime - time(NULL), 0);
-  (*buf) += sizeof(int16);
-  url->len = (uint16)strlen(url->url);
-  /* url->url is a null terminated string, but we only stuff the non-null bytes */
-  _LSLP_SETSHORT(*buf, url->len, 0);
-
-  (*buf) += sizeof(int16);
-  (*len) -= 5;
-  if(*len < url->len - 1)
-    return(FALSE);
-  memcpy(*buf, url->url, url->len);
-  (*buf) += url->len;
-  (*len) -= url->len;
-  return(lslpStuffAuthList(buf, len, url->authBlocks));
-}
-
-/* this routine may  return FALSE AND alter the buffer and length */
-BOOL lslpStuffURLList(int8 **buf, int16 *len, lslpURL *list) 
-{
-  BOOL ccode = TRUE;
-  assert((buf != NULL) && (*buf != NULL));
-  assert((len != NULL) && (*len > 8));
-  assert((list != NULL) && (_LSLP_IS_HEAD(list)));
-  if(! _LSLP_IS_HEAD(list))
-    return(FALSE);
-  while((ccode == TRUE) && (! _LSLP_IS_HEAD(list->next))) {
-    list = list->next;
-    ccode = lslpStuffURL(buf, len, list);
-  }
-  return(ccode);
-}
-
-lslpURL *lslpUnstuffURL(int8 **buf, int16 *len, int16 *err) 
-{
-
-  int8 *tempurl;
-  lslpURL *temp;
-  assert(buf != NULL && *buf != NULL);
-  assert(len != NULL && *len > 8);
-  assert(err != NULL);
-  *err = 0;
-  if(NULL != (temp = lslpAllocURL())) {
-    temp->lifetime = _LSLP_GETSHORT((*buf), 1);
-    temp->len = _LSLP_GETSHORT((*buf), 3);
-    (*buf) += 5;
-    (*len) -= 5;
-    if(*len >= temp->len) { 
-      if (NULL != (temp->url = (int8 *)calloc(1, temp->len + 1))) {
-       memcpy(temp->url, *buf, temp->len);
-       *((temp->url) + temp->len) = 0x00;
-       tempurl = temp->url;
-       temp->atomized = _lslpDecodeURLs((int8 **)&tempurl, 1);
-       (*buf) += temp->len;
-       (*len) -= temp->len;
-       if(temp->atomized != NULL)
-       temp->authBlocks = lslpUnstuffAuthList(buf, len, err);
-      } else {*err = LSLP_INTERNAL_ERROR;}
-    } else {*err = LSLP_PARSE_ERROR; }
-  } else {*err = LSLP_INTERNAL_ERROR;}
-  if(*err != 0 && temp != NULL) {
-    lslpFreeURL(temp);
-    temp = NULL;
-  }
-  return(temp);
-}
-
-
-void lslpFreeFilterTree(lslpLDAPFilter *root)
-{
-  assert(root != NULL);
-  if( ! _LSLP_IS_EMPTY( &(root->children) ) ) {
-    lslpFreeFilterTree((lslpLDAPFilter *)root->children.next);
-  }
-  if( ! (_LSLP_IS_HEAD(root->next)) && (! _LSLP_IS_EMPTY(root->next)) )
-    lslpFreeFilterTree(root->next);
-  
-  if(root->attrs.next != NULL) {
-    while(! (_LSLP_IS_EMPTY(&(root->attrs)))) {
-      lslpAttrList *attrs = root->attrs.next;
-      _LSLP_UNLINK(attrs);
-      lslpFreeAttr(attrs);
-    }
-  }
-}
-
-
-BOOL lslpEvaluateOperation(int compare_result, int operation)
-{
-  switch(operation) {
-  case expr_eq:
-    if(compare_result == 0)    /*  a == b */
-      return(TRUE);
-    break;
-  case expr_gt:
-    if(compare_result >= 0)    /*  a >= b  */
-      return(TRUE);
-    break;
-
-  case expr_lt:                        /* a <= b  */
-    if(compare_result <= 0)
-      return(TRUE);
-    break; 
-  case expr_present:
-  case expr_approx:
-  default:
-    return(TRUE);
-    break;
-  }
-  return(FALSE);
-}
-
-/* evaluates attr values, not names */
-BOOL lslpEvaluateAttributes(const lslpAttrList *filter, const lslpAttrList *registered, int op)
-{
-  assert(filter != NULL && registered != NULL && (! _LSLP_IS_HEAD(filter)) && (! _LSLP_IS_HEAD(registered))) ;
-  /* first ensure they are the same type  */
-  switch(filter->type) {
-  case opaque:
-  case string:
-    if(registered->type != string && registered->type != opaque)
-      return(FALSE);
-    
-    if( registered->type == opaque || filter->type == opaque) {
-      return(lslpEvaluateOperation(memcmp(registered->val.stringVal, 
-                                         filter->val.stringVal, 
-                                         _LSLP_MIN(registered->attr_len, 
-                                                   (int32)strlen(filter->val.stringVal))), op));
-    } else {
-      if( TRUE == lslp_pattern_match(registered->val.stringVal, 
-                                    filter->val.stringVal, 
-                                    FALSE)) {
-       return( lslpEvaluateOperation(0, op)) ;
-      } else {
-       return (lslpEvaluateOperation(1, op));
-      }
-    }
-    break;
-  case integer:
-    return( lslpEvaluateOperation( filter->val.intVal - registered->val.intVal, op));
-  case tag:                    /* equivalent to a presence test  */
-    return(TRUE);
-  case bool_type:
-    if((filter->val.boolVal != 0) && (registered->val.boolVal != 0))
-      return(TRUE);
-    if((filter->val.boolVal == 0) && (registered->val.boolVal == 0))
-      return(TRUE);
-    break;
-  default: 
-    break;
-  }
-  return(FALSE);
-}
-
-/* filter is a filter tree, attrs is ptr to an attr listhead */
-
-BOOL lslpEvaluateFilterTree(lslpLDAPFilter *filter, const lslpAttrList *attrs)
-{
-  assert(filter != NULL);
-  assert(attrs != NULL);
-  assert(! _LSLP_IS_HEAD(filter));
-  if(filter == NULL || (_LSLP_IS_HEAD(filter)) || attrs == NULL)
-    return FALSE;
-  
-  if(! _LSLP_IS_HEAD(filter->children.next) ) {
-    lslpEvaluateFilterTree((lslpLDAPFilter *)filter->children.next, attrs);
-  }
-  if( ! (_LSLP_IS_HEAD(filter->next)) && (! _LSLP_IS_EMPTY(filter->next)) ) {
-    lslpEvaluateFilterTree(filter->next, attrs);
-  }
-  if(filter->_operator == ldap_and || filter->_operator == ldap_or || filter->_operator == ldap_not) {
-    /* evaluate ldap logical _operators by evaluating filter->children as a list of filters */
-    lslpLDAPFilter *child_list = (lslpLDAPFilter *)filter->children.next;
-    /* initialize  the filter's logical value to TRUE */
-    if(filter->_operator == ldap_or)
-      filter->logical_value = FALSE;
-    else
-      filter->logical_value = TRUE;
-    while(! _LSLP_IS_HEAD(child_list)) {
-      if(child_list->logical_value == TRUE)  {
-       if(filter->_operator == ldap_or) {
-         filter->logical_value = TRUE;
-         break;
-       }
-       if(filter->_operator == ldap_not) {
-         filter->logical_value = FALSE;
-         break;
-       }
-       /* for an & _operator keep going  */
-      } else {
-       /* child is FALSE */
-       if(filter->_operator == ldap_and) {
-         filter->logical_value = FALSE;
-         break;
-       }
-      }
-      child_list = child_list->next;
-    }
-  } else  {
-    /* find the first matching attribute and set the logical value */
-    filter->logical_value = FALSE;
-    if(! _LSLP_IS_HEAD(filter->attrs.next) ) {
-      attrs = attrs->next;
-      while( (! _LSLP_IS_HEAD(attrs )) && 
-            ( FALSE  == lslp_pattern_match(filter->attrs.next->name, attrs->name, FALSE)) ) {
-       attrs = attrs->next ; 
-      }
-      /* either we have traversed the list or found the first matching attribute */
-      if( ! _LSLP_IS_HEAD(attrs) ) {
-       /* we found the first matching attribute, now do the comparison */
-       if (filter->_operator == expr_present || filter->_operator == expr_approx) 
-         filter->logical_value = TRUE;
-       else
-         filter->logical_value = lslpEvaluateAttributes(filter->attrs.next, attrs, filter->_operator );
-      }
-    }
-  }
-  return(filter->logical_value);
-}
-
-lslpScopeList *lslpScopeStringToList(int8 *s, int16 len) 
-{
-  int8 *p, *saveP, *t;
-  lslpScopeList *h, *temp;
-  if(s == NULL)
-    return(lslpAllocScopeList());
-  if(NULL != (h  = lslpAllocScopeList())) {
-    saveP = (p = (int8 *)malloc(len + 1));
-    if( p == NULL)
-      return NULL;
-    memcpy(p, s, len);
-    *(p + len) = 0x00;
-    
-    while(NULL != (t = strchr(p, ','))) {
-      *t = 0x00;
-      t++;
-      p = lslp_foldString(p);
-      if((lslp_islegal_scope(p)) && (NULL != (temp = lslpAllocScope()))) {
-       if(NULL != (temp->scope = strdup(p))) {
-         _LSLP_INSERT(temp, h);
-       }
-      }
-      p = t;
-    }
-    p = lslp_foldString(p);
-    if((lslp_islegal_scope(p)) && (NULL != (temp = lslpAllocScope()))) {
-      if(NULL != (temp->scope = strdup(p))) {
-       _LSLP_INSERT(temp, h);
-      }
-    }
-    free(saveP);
-  }
-  return(h);
-}
-
-BOOL lslpStuffScopeList(int8 **buf, int16 *len, lslpScopeList *list)
-{
-  lslpScopeList *scopes;
-  int16 scopeLen = 0, lenSave;
-  int8 *bptr;
-  BOOL ccode = FALSE;
-  assert(buf != NULL);
-  assert(len != NULL && *len > 3);
-  assert(list != NULL);
-  if (buf == NULL || len == NULL || *len < 3 || list == NULL)
-    return(FALSE);
-  /* always return TRUE on an empty list so we can continue to build the */
-  /* msg buffer - an empty list is not an error! */
-  if (_LSLP_IS_EMPTY(list))
-    return(TRUE);
-  /* scope list */
-  lenSave = *len;
-  scopes = list->next;
-  bptr = *buf;
-  memset(*buf, 0x00, *len);
-  (*buf) += 2;  /* reserve space for the scopelist length short */
-  (*len) -= 2;
-  while (! _LSLP_IS_HEAD(scopes) && scopeLen + 1 < *len)
-    { 
-      if (scopeLen + (int16)strlen(scopes->scope) < *len)
-       {
-         ccode = TRUE;
-         strcpy(*buf, scopes->scope);
-         (*buf) += strlen(scopes->scope); 
-         scopeLen += (int16)strlen(scopes->scope) ;
-         if (! _LSLP_IS_HEAD(scopes->next) )
-           {
-             **buf = ','; 
-             (*buf)++; 
-             scopeLen++;
-           }
-       }  /* if room for the attr name */
-      else
-       {
-         ccode = FALSE;
-         break;
-       }
-      scopes = scopes->next;
-    } /* while we are traversing the attr list */
-  /* set the length short */
-  if (ccode == TRUE)
-    {
-      //      **buf = 0x00;
-      //      (*buf)++;
-      //      scopeLen++;
-      //      << Thu May 30 16:18:57 2002 mdd >>
-      (*len) -= scopeLen;
-      _LSLP_SETSHORT(bptr, scopeLen, 0);
-    }
-  else
-    {
-      *len = lenSave;
-      *buf = bptr;
-      memset(*buf, 0x00, *len);
-    }
-  return(ccode);
-       
-}      
-
-
-lslpScopeList *lslpUnstuffScopeList(int8 **buf, int16 *len, int16 *err)
-{
-  int16 tempLen;
-  lslpScopeList *temp = NULL;
-  assert(buf != NULL && *buf != NULL);
-  assert(len != NULL);
-  assert(err != NULL);
-  *err = 0;
-  tempLen = _LSLP_GETSHORT(*buf, 0);
-  (*buf += 2);
-  (*len -= 2);  
-  if(tempLen != 0) {
-    if (tempLen <= *len ) {
-      if(NULL != (temp = lslpScopeStringToList(*buf, tempLen))) {
-       (*buf) += tempLen;
-       (*len) -= tempLen;
-      } else{*err = LSLP_INTERNAL_ERROR;}
-    } else {*err = LSLP_PARSE_ERROR;}
-  }
-  return(temp);
-}
-
-
-lslpSPIList *lslpUnstuffSPIList(int8 **buf, int16 *len, int16 *err)
-{
-  return((lslpSPIList *)lslpUnstuffScopeList(buf, len, err));
-}
-
-
-BOOL lslpStuffSPIList(int8 **buf, int16 *len, lslpSPIList *list)
-{
-  return(lslpStuffScopeList(buf, len, (lslpScopeList *)list));
-}
-
-
-BOOL lslp_scope_intersection(lslpScopeList *a, lslpScopeList *b) 
-{
-  if((a == NULL) || (b == NULL))
-    return(TRUE);
-
-  assert(_LSLP_IS_HEAD(a));
-  assert(_LSLP_IS_HEAD(b));
-  if((_LSLP_IS_EMPTY(a)) || (_LSLP_IS_EMPTY(b))) {
-    return(FALSE);
-  }
-  while(! (_LSLP_IS_HEAD(a->next))) {
-    a = a->next;
-    while(!(_LSLP_IS_HEAD(b->next))) {
-      b = b->next;
-      assert((a->scope != NULL) && (b->scope != NULL));
-      if(! strcasecmp(a->scope, b->scope)) {
-       return(TRUE);
-      }
-    }
-    /* reset b */
-    b = b->next;
-  }
-  return(FALSE);
-}
-
-/* caseless compare that folds whitespace */
-int lslp_string_compare(int8 *s1, int8 *s2)
-{
-  assert(s1 != NULL);
-  assert(s2 != NULL);
-  lslp_foldString(s1);
-  lslp_foldString(s2);
-  if( TRUE == lslp_pattern_match(s1, s2, FALSE))
-    return 0;
-  return -1;
-}
-
-/* return 1 if char is legal for scope value, 0 otherwise */
-int lslp_isscope(int c) 
-{  
-  int i;
-  static int8 scope_reserved[] = { '(', ')', ',', 0x5c, '!', '<', '=', '>', '~', ';', '*', '+', 0x7f };
-  
-  if(! _LSLP_ISASCII(c))
-    return 0;
-  
-  if(c < 0x20)
-    return(0);
-  for(i = 0; i < 13; i++) {
-    if(c == scope_reserved[i])
-      return(0);
-  }
-  return(1);
-}
-
-BOOL lslp_islegal_scope(int8 *s)
-{
-  int8 *temp;
-  assert(s != NULL);
-  if(! strlen(s)) {
-    return(FALSE);
-  }
-  temp = s;
-  while(*temp != 0x00) {
-    if(! lslp_isscope(*temp)) {
-      return(FALSE);
-    }
-    temp++;
-  }
-  return(TRUE);
-}
-
-BOOL lslp_srvtype_match(const int8 *s, int8 *r)
-{
-  int8 *sp;
-  assert(s != NULL);
-  assert(r != NULL);
-  /* check to see if search is for an abstract service type */
-  sp = (int8 *)r;
-  while(*sp != 0x00) { sp++; }
-  /* if this is a search for an abstract service type, use a wildcard */
-  /* to collect all concrete registrations under this type */
-  if(*(sp - 1) == ':') {*(sp - 1) = '*'; }
-  /* check for a dangling semicolon and kill it  */
-  else if ( *(sp - 1) == ';') { *(sp - 1) = 0x00 ; }
-
-  return(lslp_pattern_match(s, r, FALSE));
-}
-
-
-lslpScopeList *lslpAllocScope(void)
-{
-  return((lslpScopeList *)calloc(1, sizeof(lslpScopeList)));
-}
-
-lslpScopeList *lslpAllocScopeList(void)
-{
-  lslpScopeList *head;
-  if (NULL != (head = lslpAllocScope()))
-    {
-      head->next = head->prev = head;
-      head->isHead = TRUE;     
-    }
-  return(head);
-}      
-
-void lslpFreeScope(lslpScopeList *s)
-{
-  assert(s != NULL);
-  if (s->scope != NULL)
-    free(s->scope);
-  free(s);
-}      
-
-void lslpFreeScopeList(lslpScopeList *head)
-{
-  lslpScopeList *temp;
-  assert(head != NULL);
-  assert(_LSLP_IS_HEAD(head));
-  while (! (_LSLP_IS_EMPTY(head)))
-    {
-      temp = head->next;
-      _LSLP_UNLINK(temp);
-      lslpFreeScope(temp);
-    }
-  lslpFreeScope(head);
-  return;
-}      
-
-
-
-lslpSrvRegList *lslpAllocSrvReg(void)
-{
-  lslpSrvRegList *l;
-  if (NULL != (l = (lslpSrvRegList *)calloc(1, sizeof(lslpSrvRegList)))) {
-    if(NULL != (l->url = lslpAllocURL())) {
-      if ( NULL != (l->scopeList = lslpAllocScopeList())) {
-       if ( NULL != (l->attrList = lslpAllocAttrList())) {
-         if (NULL != (l->authList = lslpAllocAuthList())) {
-           return(l);
-         }
-         lslpFreeAttrList(l->attrList, TRUE);     
-       }
-       lslpFreeScopeList(l->scopeList);
-      }
-      lslpFreeURL(l->url); 
-    }
-    free(l);
-  }
-  return(NULL);
-}      
-
-lslpSrvRegHead *lslpAllocSrvRegList(void)
-{
-  lslpSrvRegHead *head;
-  if (NULL != (head = (lslpSrvRegHead *)calloc(1, sizeof(lslpSrvRegHead)))) {
-    head->next = head->prev = (struct lslp_srv_reg_instance *)head;
-    head->isHead = TRUE;
-    return(head);
-  }
-  return(NULL);
-}      
-
-void lslpFreeSrvReg(lslpSrvRegList *s)
-{
-  assert(s != NULL);
-  if(s->url != NULL)
-    lslpFreeURL(s->url);
-  if (s->srvType != NULL)
-    free(s->srvType);
-  if (s->scopeList != NULL)
-    lslpFreeScopeList(s->scopeList);
-  if (s->attrList != NULL)
-    lslpFreeAttrList(s->attrList, TRUE);
-  if(s->authList != NULL)
-    lslpFreeAuthList(s->authList);
-  free(s);
-}      
-
-void lslpFreeSrvRegList(lslpSrvRegHead *head)
-{
-  lslpSrvRegList *temp;
-  assert(head != NULL);
-  assert(_LSLP_IS_HEAD(head));
-  while (!  (_LSLP_IS_EMPTY((struct lslp_srv_reg_instance *)head)))
-    {
-      temp = head->next;
-      _LSLP_UNLINK(temp);
-      lslpFreeSrvReg(temp);
-    }
-  free(head);
-}      
-
-
-lslpAuthBlock *lslpAllocAuthBlock(void)
-{
-  return((lslpAuthBlock *)calloc(1, sizeof(lslpAuthBlock)));
-}      
-
-lslpAuthBlock *lslpAllocAuthList(void)
-{
-  lslpAuthBlock *head;
-  if (NULL != (head = lslpAllocAuthBlock()))
-    {
-      head->next = head->prev = head;
-      head->isHead = TRUE;
-      return(head);
-    }
-  return(NULL);
-}
-
-       
-/* NOTE: be CERTAIN block is not linked to a list !!! */
-void lslpFreeAuthBlock(lslpAuthBlock *auth)
-{
-  if (auth->spi != NULL)
-    free(auth->spi);
-  if (auth->block != NULL)
-    free(auth->block); 
-  free(auth);
-  return;              
-}      
-
-void lslpFreeAuthList(lslpAuthBlock *list)
-{                                                              
-  lslpAuthBlock *temp;
-
-  assert(list != NULL);
-  assert(_LSLP_IS_HEAD(list));
-  while(! (_LSLP_IS_EMPTY(list)))
-    {
-      temp = list->next;
-      _LSLP_UNLINK(temp);
-      lslpFreeAuthBlock(temp);
-    }
-  lslpFreeAuthBlock(list);
-  return;
-}      
-
-/* for protected scopes, we need to change this routine (or add another one) */
-/* that uses an SPI list as an input and stuffs only auth only stuffs  auth blocks*/
-/* that match spis in the input list */
-
-/* this routine will return FALSE AND alter the buffer and length */
-BOOL lslpStuffAuthList(int8 **buf, int16 *len, lslpAuthBlock *list)
-{
-  int8 *bptr;
-  int16 numAuths = 0;
-  lslpAuthBlock *auths;
-  BOOL ccode = TRUE;
-  assert(buf != NULL);
-  assert(len != NULL);
-  /*   assert(list != NULL); */
-  if (buf == NULL || *buf == NULL || len == NULL )
-    return(FALSE);
-  /* always return true on an empty list so we can continue to build the */
-  /* msg buffer - an empty list is not an error! */
-  bptr = *buf;
-  _LSLP_SETBYTE(bptr, numAuths, 0);
-
-  (*buf)+= 1;
-  (*len) -= 1;
-  if(list == NULL || _LSLP_IS_EMPTY(list))
-    return(TRUE);
-  /* auth list */
-  auths  = list->next;
-  memset(*buf, 0x00, *len);
-  while (! _LSLP_IS_HEAD(auths) && auths->len <= *len)
-    {
-      /* store the auth bsd */ 
-      _LSLP_SETSHORT(*buf, auths->descriptor, 0);
-      /* store the the bsd size */
-      _LSLP_SETSHORT(*buf, auths->len, 2);
-      /* store the timestamp */
-      _LSLP_SETLONG(*buf, auths->timestamp, 4);
-      /* store spi string length */
-      _LSLP_SETSHORT(*buf, auths->spiLen, 8);
-      assert(strlen(auths->spi) + 1 == auths->spiLen );
-      /* store the spi string */
-      strcpy((*buf) + 10, auths->spi);
-      /* store the authentication block */
-      if (auths->block != NULL && (auths->len - (auths->spiLen + 10) ) > 0 )
-       memcpy(((*buf) + 10 + auths->spiLen), auths->block, (auths->len - (auths->spiLen + 10)));
-      (*buf) += auths->len; 
-      (*len) -= auths->len;
-      numAuths++;
-      auths = auths->next;
-    } /* while we are traversing the attr list */
-  if (! _LSLP_IS_HEAD(auths))
-    {
-      /* we terminated the loop before copying all the auth blocks */
-      ccode = FALSE;
-    }
-  else
-    {
-      _LSLP_SETBYTE(bptr, numAuths, 0);
-    }
-  return(ccode);
-}      
-
-lslpAuthBlock *lslpUnstuffAuthList(int8 **buf, int16 *len, int16 *err)
-{
-  int16 tempLen;
-  lslpAuthBlock *list = NULL, *temp;
-  assert(buf != NULL && *buf != NULL);
-  assert(len != NULL);
-  assert(err != NULL);
-  *err = 0;
-  tempLen = _LSLP_GETBYTE(*buf, 0);        /* get the number of auth-blocks */
-  (*buf) += 1;                                /* advance to the auth blocks */
-  (*len) -= 1;
-  if((tempLen == 0) || (NULL != (list = lslpAllocAuthList()))) {
-    if(list != NULL) {
-      while((tempLen > 0) && (*len > 10) && (*err == 0)) {
-       if(NULL != (temp = lslpAllocAuthBlock())) {
-         temp->descriptor = _LSLP_GETSHORT(*buf, 0); /* get the block structure descriptor */
-         (*buf) += 2;                                  /* advance to the block length */
-         temp->len = _LSLP_GETSHORT(*buf, 0);        /* get the block length */
-         (*buf) += 2;                                  /* advance to the timestamp */
-         temp->timestamp = _LSLP_GETLONG(*buf, 0);   /* get the timestamp */
-         (*buf) += 4;                                  /* advance to the spi length */
-         temp->spiLen = _LSLP_GETSHORT(*buf, 0);     /* get the spi length */
-         (*buf) += 2;                                  /* advance to the spi */ 
-         *len -= 10;
-         if(*len >= (temp->spiLen)) {
-           if(NULL != (temp->spi = (uint8 *)calloc(temp->spiLen + 1, sizeof(uint8)))) {
-             memcpy(temp->spi, *buf, temp->spiLen);  /* copy the spi */
-             (*buf) += temp->spiLen;                   /* advance to the next block */
-             (*len) -= temp->spiLen;
-             if(*len >= (temp->len - (10 + temp->spiLen))) {
-               if (NULL != (temp->block = 
-                            (uint8 *)calloc((temp->len - (10 + temp->spiLen)) + 1, 
-                                            sizeof(uint8)))) {
-                 memcpy(temp->block, *buf, (temp->len - (10 + temp->spiLen)) );
-                 _LSLP_INSERT(temp, list);                /* insert the auth block into the list */ 
-                 (*buf) += (temp->len - (10 + temp->spiLen));
-                 (*len) -= (temp->len - (10 + temp->spiLen));
-                 temp = NULL;
-               } else {*err = LSLP_INTERNAL_ERROR; } /* if we alloced the auth block buffer */
-             } else { *err = LSLP_PARSE_ERROR;}
-           } else { *err = LSLP_INTERNAL_ERROR ;}/* if we alloced the spi buffer */
-         } else { *err = LSLP_PARSE_ERROR;} 
-       }else { *err = LSLP_INTERNAL_ERROR; } /* if we alloced the auth block */
-       tempLen--; /* decrement the number of auth blocks */
-      } /* while there is room and there are auth blocks to process */
-    } else {
-      if(tempLen == 0)
-       *err = 0;
-      else
-       *err = LSLP_INTERNAL_ERROR ; 
-    }
-  }
-  if(*err != 0 && list != NULL) {
-    lslpFreeAuthList(list);
-    list = NULL;
-  }
-  return(list);
-}
-
-
-uint32 lslpCheckSum(int8 *s, int16 l)
-{
-       uint32 c;
-       BOOL pad = 0;
-       uint16 a = 0, b = 0, *p;
-       assert(s != NULL);
-       if (l == 1)
-               return(0);
-       assert(l > 1);
-       if (l & 0x01)
-               pad = TRUE;
-       p = (uint16 *)s;
-       while (l > 1)
-       {
-               a += *p++;
-               b += a;
-               l -= 2;
-       }
-       /* "pad" the string with a zero word */
-       if (pad == TRUE)
-               b += a;
-       /* return the value as a dword with containing two shorts in */
-       /* network order -- ab */
-       _LSLP_SETSHORT((uint8 *)&c, a, 0 );
-       _LSLP_SETSHORT((uint8 *)&c, a, 2 );
-       return(c);
-}      
-
-
-lslpHdr * lslpAllocHdr(void)
-{
-  return((lslpHdr *)calloc(1, sizeof(lslpHdr)));
-}      
-
-void lslpFreeHdr(lslpHdr *hdr)
-{
-  assert(hdr != NULL);
-  if (hdr->data != NULL)
-    free(hdr->data);
-  free(hdr);
-}      
-
-void lslpDestroySrvReq(struct lslp_srv_req *r, int8 flag)
-{
-  assert(r != NULL);
-  if (r->prList != NULL)
-    free(r->prList);
-  if (r->srvcType != NULL)
-    free(r->srvcType);
-  if (r->scopeList != NULL)
-    lslpFreeScopeList(r->scopeList);
-  if (r->predicate != NULL)
-    free(r->predicate);
-  if(r->spiList != NULL)
-    lslpFreeSPIList(r->spiList);
-  if (flag == LSLP_DESTRUCTOR_DYNAMIC)
-    free(r);
-}      
-
-void lslpDestroySrvRply(struct lslp_srv_rply *r, int8 flag) 
-{
-  assert(r != NULL);
-  if (r->urlList != NULL)
-    lslpFreeURLList(r->urlList);
-  if(r->attr_list != NULL)
-    lslpFreeAtomList(r->attr_list, LSLP_DESTRUCTOR_DYNAMIC);
-  if (flag == LSLP_DESTRUCTOR_DYNAMIC)
-    free(r);
-}      
-
-void lslpDestroySrvReg(struct lslp_srv_reg *r, int8 flag)
-{
-  assert(r != NULL);
-  if (r->url != NULL)
-    lslpFreeURLList(r->url);
-  if (r->srvType != NULL)
-    free(r->srvType);
-  if (r->scopeList != NULL)
-    lslpFreeScopeList(r->scopeList);
-  if (r->attrList != NULL)
-    lslpFreeAttrList(r->attrList, TRUE);
-  if (r->attrAuthList != NULL)
-    lslpFreeAuthList(r->attrAuthList);
-  if (flag == LSLP_DESTRUCTOR_DYNAMIC)
-    free(r);
-}      
-
-void lslpDestroySrvAck(struct lslp_srv_ack *r, int8 flag)
-{
-  assert(r != NULL);
-  if (flag == LSLP_DESTRUCTOR_DYNAMIC)
-    free(r);
-}      
-
-void lslpDestroyDAAdvert(struct lslp_da_advert *r, int8 flag)
-{
-  assert(r != NULL);
-  if (r->url != NULL)
-    free(r->url);
-  if (r->scopeList != NULL)
-    free(r->scopeList);
-  if (r->attrList != NULL)
-    free(r->attrList);
-  if (r->spiList != NULL)
-    free(r->spiList);
-  if (r->authBlocks != NULL)
-    lslpFreeAuthList(r->authBlocks);
-  if (flag == LSLP_DESTRUCTOR_DYNAMIC)
-    free(r);
-}      
-
-void lslpDestroySAAdvert(struct lslp_sa_advert *r, int8 flag)
-{
-  assert(r != NULL);
-  if (r->url != NULL)
-    free(r->url);
-  if (r->scopeList != NULL)
-    free(r->scopeList);
-  if (r->attrList != NULL)
-    free(r->attrList);
-  if (r->authBlocks != NULL)
-    lslpFreeAuthList(r->authBlocks);
-  if (flag == LSLP_DESTRUCTOR_DYNAMIC)
-    free(r);
-}      
-
-void lslpDestroySrvTypeReq(struct lslp_srvtype_req *r, int8 flag)
-{
-  assert(r != NULL);
-  if (r->prList != NULL)
-    free(r->prList);
-  if (r->nameAuth != NULL)
-    free(r->nameAuth);
-  if (r->scopeList != NULL)
-    lslpFreeScopeList(r->scopeList);
-  if (flag == LSLP_DESTRUCTOR_DYNAMIC)
-    free(r);
-  return;
-}      
-
-void lslpDestroySrvTypeReply(struct lslp_srvtype_rep *r, int8 flag)
-{
-  assert(r != NULL);
-  if (r->srvTypeList != NULL)
-    free(r->srvTypeList);
-  if (flag == LSLP_DESTRUCTOR_DYNAMIC)
-    free(r);
-  return;      
-}      
-
-void lslpDestroyAttrReq(struct lslp_attr_req *r, int8 flag)
-{
-  assert(r != NULL);
-  if (r->prList != NULL)
-    free(r->prList);
-  if (r->url != NULL)
-    free(r->url);
-  if (r->scopeList != NULL)
-    free(r->scopeList);
-  if (r->tagList != NULL)
-    free(r->tagList);
-  if (r->spiList != NULL)
-    lslpFreeSPIList(r->spiList);                       
-  if (flag == LSLP_DESTRUCTOR_DYNAMIC)
-    free(r);
-  return;      
-}      
-
-void lslpDestroyAttrReply(struct lslp_attr_rep *r, int8 flag)
-{
-  assert(r != NULL);
-  if (r->attrList != NULL)
-    free(r->attrList);
-  if (r->authBlocks != NULL)
-    lslpFreeAuthList(r->authBlocks);
-  if (flag == LSLP_DESTRUCTOR_DYNAMIC)
-    free(r);
-  return;      
-       
-}      
-
-void lslpDestroySrvDeReg(struct lslp_srv_dereg *r, int8 flag)
-{
-  assert(r != NULL);
-  if (r->scopeList != NULL)
-    free(r->scopeList);
-  if (r->urlList != NULL)
-    lslpFreeURLList(r->urlList);
-  if (r->tagList != NULL)
-    free(r->tagList);
-  if (flag == LSLP_DESTRUCTOR_DYNAMIC)
-    free(r);
-  return;      
-}      
-
-
-lslpMsg *alloc_slp_msg(BOOL head)
-{
-  lslpMsg *ret = (lslpMsg *)calloc(1, sizeof(lslpMsg));
-  if(ret != NULL ) {
-    ret->dynamic = LSLP_DESTRUCTOR_DYNAMIC;
-    if( head == TRUE ){  
-      ret->next = ret->prev = ret;
-      ret->isHead = TRUE;
-    }
-  }
-  return ret;
-}
-
-
-void lslpDestroySLPMsg(lslpMsg *msg, int8 flag)
-{
-  assert(msg != NULL);
-  switch (msg->type)
-    {
-    case srvReq:
-      lslpDestroySrvReq(&(msg->msg.srvReq), LSLP_DESTRUCTOR_STATIC);
-      break;
-    case srvRply:
-      lslpDestroySrvRply(&(msg->msg.srvRply), LSLP_DESTRUCTOR_STATIC);
-      break;
-    case srvReg:
-      lslpDestroySrvReg(&(msg->msg.srvReg), LSLP_DESTRUCTOR_STATIC);
-      break;
-    case srvAck:
-      lslpDestroySrvAck(&(msg->msg.srvAck), LSLP_DESTRUCTOR_STATIC);
-      break;
-    case daAdvert:
-      lslpDestroyDAAdvert(&(msg->msg.daAdvert), LSLP_DESTRUCTOR_STATIC);
-      break;
-    case saAdvert:
-      lslpDestroySAAdvert(&(msg->msg.saAdvert), LSLP_DESTRUCTOR_STATIC);
-      break;
-    case srvTypeReq:
-      lslpDestroySrvTypeReq(&(msg->msg.srvTypeReq), LSLP_DESTRUCTOR_STATIC);
-      break;
-    case srvTypeRep:
-      lslpDestroySrvTypeReply(&(msg->msg.srvTypeRep), LSLP_DESTRUCTOR_STATIC);
-      break;
-    case attrReq:
-      lslpDestroyAttrReq(&(msg->msg.attrReq), LSLP_DESTRUCTOR_STATIC);
-      break;
-    case attrRep:
-      lslpDestroyAttrReply(&(msg->msg.attrRep), LSLP_DESTRUCTOR_STATIC);
-      break;
-    case srvDereg:
-      lslpDestroySrvDeReg(&(msg->msg.srvDereg), LSLP_DESTRUCTOR_STATIC);
-      break;
-    default:
-      break;
-    }
-  if (msg->dynamic == LSLP_DESTRUCTOR_DYNAMIC)
-    free(msg);
-  return;
-}      
-
-/* a is an attribute list, while b is a string representation of an ldap filter  */
-BOOL lslp_predicate_match(lslpAttrList *a, int8 *b)
-{
-  BOOL ccode;
-  lslpLDAPFilter *ftree;
-  if(a == NULL)
-    return FALSE;
-  assert(_LSLP_IS_HEAD(a));
-  if(b == NULL || ! strlen(b))
-    return(TRUE);              /*  no predicate - aways tests TRUE  */
-  if(NULL != (ftree = _lslpDecodeLDAPFilter(b))) {
-    ccode = lslpEvaluateFilterTree(ftree, a);
-    lslpFreeFilterTree(ftree);
-    return(ccode);
-  }
-  return(FALSE);
-}
-
-struct lslp_srv_rply_out *_lslpProcessSrvReq(struct slp_client *client, 
-                                            struct lslp_srv_req *msg, 
-                                            int16 errCode)
-{
-  int8 *buf;
-  int16 bufLen, avail;
-  lslpSrvRegList *reg;
-  int16 ext_offset;
-  int8 *extptr, *next_extptr;
-  BOOL pile_up_attrs = FALSE;
-
-  struct lslp_srv_rply_out *temp_rply = 
-    (struct lslp_srv_rply_out *)calloc(1, sizeof(struct lslp_srv_rply_out));
-  assert(msg != NULL);
-  if(msg != NULL && temp_rply != NULL) {
-    if((temp_rply->errCode = errCode) == 0) {
-      buf = (int8 *)calloc(LSLP_MTU, sizeof(int8));
-      if(buf != NULL) {
-       bufLen = LSLP_MTU;
-       temp_rply->urlList = buf;
-       buf += 4;
-       avail = LSLP_MTU - 4;
-
-       /* check for the attr list extension */
-       /* remember to subtract 5 bytes from the limit for each extension we traverse */
-       if(msg->next_ext != NULL) {
-         /* we are looking for extension ID 0x0002 */
-         extptr = msg->next_ext;
-         while(extptr && extptr < msg->ext_limit) {
-           if( 0x0002 == _LSLP_GETSHORT(extptr, 0)) {
-             /* make sure it doesn't overflow */
-             if (extptr + 9 > msg->ext_limit) {
-               break;
-             }
-             /* got our extension */
-             /* do a sanity check offset five should be 0x0000, */
-             /* offset 7 should be 0x0000*/
-             if( (0x0000 == _LSLP_GETSHORT(extptr, 5)) && 
-                 (0x0000 == _LSLP_GETSHORT(extptr, 7)) ) {
-               /* ok, accumulate attribute data */
-               pile_up_attrs = TRUE;
-             }
-             break;
-           }
-           /* see if there are any more extensions */
-           extptr += _LSLP_GET3BYTES(extptr, 2);
-         } /* while traversing extensions */ 
-       } /* if there is an extension */
-       
-
-       reg = client->regs.next;
-       extptr = client->_scratch;
-       next_extptr = extptr + 2;
-       ext_offset = 0;
-       while(! _LSLP_IS_HEAD(reg)) {
-         if(time(NULL) > reg->directoryTime) { 
-           /* the lifetime for this registration has expired */
-           /* unlink and free it */
-           lslpSrvRegList *temp_reg = reg;
-           reg = reg->next;
-           _LSLP_UNLINK(temp_reg);
-           lslpFreeSrvReg(temp_reg);
-           continue;
-         }
-         if(TRUE == lslp_srvtype_match(reg->srvType, msg->srvcType)) {
-           /* we need to check for the special case - of a srvreq with service type directory-agent */
-           /* - it is allowed to omit scopes */
-           if((msg->scopeList == NULL) ||  
-              (_LSLP_IS_EMPTY(msg->scopeList) && (! strncasecmp(msg->srvcType, DA_SRVTYPE, DA_SRVTYPELEN ))) || 
-              (TRUE == lslp_scope_intersection(reg->scopeList, msg->scopeList))) {
-             if(TRUE == lslp_predicate_match(reg->attrList, msg->predicate)) {
-               /* we have a match */
-               /* for protected scopes, we need to change stuff URL so that it */
-               /* only stuffs url auth blocks that match spis in the srv req */
-               if(TRUE == lslpStuffURL(&buf, &avail, reg->url)) {
-                 if(TRUE == pile_up_attrs && ((reg->url->len + ext_offset + 2) < LSLP_MTU)) {
-                   /* use the scratch buffer as temporary storage for the attribute extensions */
-                   /* go back and set the length of the next extension in prev extension */
-                   _LSLP_SET3BYTES(next_extptr, ext_offset, 0);
-                   next_extptr = extptr + 2;
-                   /* set the extension id */
-                   _LSLP_SETSHORT(extptr, 0x0002, 0);
-                   /* init the next ext to zero */
-                   _LSLP_SET3BYTES(next_extptr, 0x00000000, 0);
-                   /* length of url string */
-                   _LSLP_SETSHORT(extptr, reg->url->len, 5);
-                   memcpy(extptr + 7, reg->url->url, reg->url->len);
-                   ext_offset += (7 + reg->url->len);
-                   extptr += (7 + reg->url->len);
-                   /* attr list length */
-                   if( ext_offset + 2 + reg->attrList->attr_string_len < LSLP_MTU) {
-                     _LSLP_SETSHORT(extptr, reg->attrList->attr_string_len, 0);
-                     memcpy(extptr + 2, reg->attrList->attr_string, reg->attrList->attr_string_len);
-                     ext_offset += (2 + reg->attrList->attr_string_len);
-                     extptr += (2 + reg->attrList->attr_string_len);
-                     if( ext_offset + 1 < LSLP_MTU) {
-                       /* set the number of attr auths to zero */
-//jeb attrib set to 1??                        _LSLP_SETBYTE(extptr, 1, 0);
-                       _LSLP_SETBYTE(extptr, 0, 0);
-                       extptr += 1;
-                       ext_offset += 1;
-                     } else { pile_up_attrs = FALSE; _LSLP_SETSHORT(client->_scratch, 0x0000, 0);}
-                   } else { pile_up_attrs = FALSE; _LSLP_SETSHORT(client->_scratch, 0x0000, 0);}
-                 } else { pile_up_attrs = FALSE; _LSLP_SETSHORT(client->_scratch, 0x0000, 0);}
-                 temp_rply->urlCount++;
-               }else {
-                 temp_rply->errCode = LSLP_INTERNAL_ERROR;
-                 return(temp_rply);
-               }
-             } /* if we have a match */
-           } /* if we found a scope intersection */
-         } /* if the types match */
-         reg = reg->next;
-       } /* while we are traversing the reg list for this da */
-       /* stuff the error code and url count */
-       _LSLP_SETSHORT(temp_rply->urlList, temp_rply->errCode, 0);
-       _LSLP_SETSHORT(temp_rply->urlList, temp_rply->urlCount, 2);
-       /* resize to the actual size needed */
-       temp_rply->urlLen = (uint16)(buf - temp_rply->urlList) ;
-      } /* if we alloced our buffer */
-    } /* if we need to look for matches */
-    else {
-      if(NULL != (temp_rply->urlList = (int8 *)calloc(8, sizeof(int8)))) {  //jeb
-       _LSLP_SETSHORT(temp_rply->urlList, temp_rply->errCode, 0);
-      }
-    } /* error reply */
-    if(temp_rply->urlList == NULL) {
-      free(temp_rply);
-      temp_rply = NULL;
-    }
-  } /* if we alloced our reply structure */
-  return(temp_rply);
-}
-
-
-#define lslp_to_lower(c)  (((c) > 0x40 && (c) < 0x5b) ? ((c) + 0x20) : (c))
-/* based upon TclStringCaseMatch */
-#define MAX_RECURSION  10
-BOOL lslp_pattern_match(const int8 *string, const int8 *pattern, BOOL case_sensitive)
-{
-  
-  int8 s, p;
-  static int recursion_level;
-  if(recursion_level == MAX_RECURSION) {
-    return FALSE;
- }
-  recursion_level++;
-  
-  assert(string != NULL && pattern != NULL);
-
-  while(1) {
-    p = *pattern;
-    if( p == '\0' ) {
-      recursion_level--;
-      if (*string == '\0')  //jeb
-          return TRUE;
-      else
-          return FALSE;
-//jeb      return (*string == '\0');
-    }
-
-    if((*string == '\0') && (p != '*')) {
-      recursion_level--;
-      return FALSE;
-    }
-
-    if(p == '*') {
-      while(*(++pattern) == '*') { ; }
-      p = *pattern;
-      if( p == '\0') {
-       recursion_level--;
-       return TRUE;
-      }
-      while(1) {
-       if((p != '[') && (p != '?') && (p != '\\')) {
-         /* advance the string until there is a match */
-         while(*string) {
-           s = *string;
-           if(case_sensitive == FALSE) {
-             p = lslp_to_lower(p);
-             s = lslp_to_lower(s);
-           }
-           if(s == p)
-             break;
-           string++;
-         }
-       }
-       if(TRUE == lslp_pattern_match(string, pattern, case_sensitive)) {
-         recursion_level--;
-         return TRUE;
-       }
-       if(*string == '\0') {
-         recursion_level--;
-         return FALSE;
-       }
-       string++;
-      }
-    }
-    if(p == '?') {
-      pattern++;
-      string++;
-      continue;
-    }
-    
-    if(p == '[') {
-      int8 start, end;
-      pattern++;
-      s = *(string++);
-      if(case_sensitive == FALSE) {
-       s = lslp_to_lower(s);
-      }
-      while(1) {
-       if(*pattern == ']' || *pattern == '\0') {
-         recursion_level--;
-         return FALSE ;
-       }
-       start = *(pattern++);
-       if(case_sensitive == FALSE){
-         start = lslp_to_lower(start);
-       }
-       if(*pattern == '-') {
-         pattern++;
-         if(*pattern == '\0') {
-           recursion_level--;
-           return FALSE;
-         }
-         end = *(pattern++);
-         if(case_sensitive == FALSE) {
-           end = lslp_to_lower(end);
-         }
-         if(((start <= s) && (s <= end )) || ((end <= s) && (s <= start))) {
-           break;
-         }
-       } else if (start == s) {
-         
-         break;
-       }
-      }
-      while(*pattern != ']') {
-       if(*pattern == '\0') {
-         pattern--;
-         break;
-       }
-       pattern++;
-      }
-      pattern++;
-      continue;
-    }
-
-    if (p == '\\') {
-      pattern++;
-      if (*pattern == '\0') {
-       recursion_level--;
-       return FALSE;
-//jeb  return 0;
-      }
-    }
-    s = *(string++);
-    p = *(pattern++);
-    if(case_sensitive == FALSE) {
-      p = lslp_to_lower(p);
-      s = lslp_to_lower(s);
-    }
-    if(s == p) {
-      continue;
-    }
-    recursion_level--;
-    return FALSE;
-  }
-}
-
-
-int8 * lslp_get_next_ext(int8 *hdr_buf)
-{
-  int32 len;
-  assert(hdr_buf != NULL);
-  if( 0 != _LSLP_GETNEXTEXT(hdr_buf)) {
-    len = _LSLP_GETLENGTH(hdr_buf);
-    if(len > _LSLP_GETNEXTEXT(hdr_buf)) {
-      return( hdr_buf + _LSLP_GETNEXTEXT(hdr_buf));
-    }
-  }
-  return NULL;
-}
-
-
-/** uses a newline as the field separator, two consecutive newlines as the record separator **/
-void lslp_print_srv_rply(lslpMsg *srvrply)
-{
-  lslpURL *url_list;
-  if(srvrply != NULL && srvrply->type == srvRply) {
-    /* output errCode, urlCount, urlLen */
-    printf("%d\n%d\n%d\n", srvrply->msg.srvRply.errCode, 
-                           srvrply->msg.srvRply.urlCount, 
-                           srvrply->msg.srvRply.urlLen );
-    if((NULL != srvrply->msg.srvRply.urlList) && 
-       (! _LSLP_IS_EMPTY( srvrply->msg.srvRply.urlList))) {
-      
-      url_list = srvrply->msg.srvRply.urlList->next;
-      while( ! _LSLP_IS_HEAD(url_list)){
-       
-       if(NULL != url_list->url)
-         printf("URL: %s\n", url_list->url);
-       else
-         printf("URL: \n");
-       
-       /* see if there are attributes to print */
-       if(NULL != url_list->attrs && ! _LSLP_IS_HEAD(url_list->attrs->next)){
-         lslpAtomList *attrs = url_list->attrs->next;
-         while(! _LSLP_IS_HEAD(attrs)){
-           printf("ATTR: %s\n", attrs->str);
-           attrs = attrs->next;
-         } /* while traversing attr list */
-       } /* if attr list */
-       url_list = url_list->next;
-       
-      } /* while traversing url list */
-    } /* if there are urls to print */
-    /* print the record separator */
-    printf("\n\n");
-  }
-}
-
-/* string must not be null and must start with "service:" */
-SLP_STORAGE_DECL BOOL test_service_type(int8 *type)
-{
-  int8 * temp;
-  BOOL ccode;
-  temp = strdup(type);
-  if(type == NULL || ! strlen(type))
-    return FALSE;
-  if(temp == NULL) abort();
-  ccode = lslp_pattern_match( "service:*", temp, FALSE);
-  free(temp);
-    return ccode;
-}
-
-
-SLP_STORAGE_DECL BOOL test_service_type_reg(int8 *type)
-{
-  int8 * temp;
-  BOOL ccode;
-   
-  if(type == NULL || ! strlen(type))
-    return FALSE;
-  temp = strdup(type);
-  if(temp == NULL) abort();
-  ccode = lslp_pattern_match(temp, "service:*", FALSE);
-  free(temp);
-    return ccode;
-}
-
-
-SLP_STORAGE_DECL BOOL test_url(int8 *url)
-{
-
-  int8 *temp;
-  lslpAtomizedURL *aurl;
-  
-  if(url == NULL)
-    return FALSE;
-  temp = strdup(url);
-  if(temp == NULL) abort();
-  aurl = _lslpDecodeURLs(&temp, 1);
-  free(temp);
-  if(aurl != NULL){
-    lslpFreeAtomizedURLList(aurl, TRUE);
-    return TRUE;
-  }
-  return FALSE;
-}
-
-SLP_STORAGE_DECL BOOL test_attribute(int8 *attr)
-{
-  int8 *temp;
-  lslpAttrList *attr_list;
-  
-  if(attr == NULL)
-    return FALSE;
-  if(! strlen(attr))
-    return TRUE;
-  
-  temp = strdup(attr);
-  if(temp == NULL) abort();
-  
-  attr_list = _lslpDecodeAttrString(temp);
-  free(temp);
-  
-  if(attr_list != NULL){
-    lslpFreeAttrList(attr_list, TRUE);
-    return TRUE;
-  }
-  return FALSE;
-
-}
-
-SLP_STORAGE_DECL BOOL test_scopes(int8 *scopes)
-{
-  BOOL ccode;
-  int8 *temp;
-  
-  if(scopes == 0 ){
-    return FALSE;
-  }
-  
-  if(! strlen(scopes))
-    return TRUE;
-    
-  temp = strdup(scopes);
-  if(temp == 0 ) abort();
-  ccode = lslp_islegal_scope(temp);
-  free(temp);
-
-  
-  return ccode;
-}
-
-SLP_STORAGE_DECL BOOL test_predicate(int8 *predicate)
-{
-  int8 * temp;
-  lslpLDAPFilter *filter;
-  
-  if(predicate == 0)
-    return FALSE;
-  if(! strlen(predicate))
-    return TRUE;
-  
-  temp = strdup(predicate);
-  if(temp == 0) abort();
-  filter = _lslpDecodeLDAPFilter(temp);
-  free(temp);
-  if(filter != NULL) {
-    lslpFreeFilter(filter);
-    return TRUE;
-  }
-  return FALSE;
-}
-
-
-SLP_STORAGE_DECL uint32 test_srv_reg(int8 *type, 
-                                    int8 *url,   
-                                    int8 *attr, 
-                                    int8 *scopes)
-{
-
-  /* it is legal for the scope string and attribute list to be empty */
-  if(type == NULL || 0 == strlen(type) || FALSE == test_service_type_reg(type))
-    return 1;
-  if(url == NULL || 0 == strlen(url) || FALSE == test_url(url) )
-    return 2;
-  if(attr != NULL && FALSE == test_attribute(attr))
-    return 3;
-  if(scopes != NULL && FALSE == test_scopes(scopes))
-    return 4;
-  return 0;
-}
-
-
-
-SLP_STORAGE_DECL uint32 test_query(int8 *type,
-                                  int8 *predicate, 
-                                  int8 *scopes)
-{
-  /* it is legal for predicate and scopes to be empty */
-  
-  if(type == NULL || 0 == strlen(type) || FALSE == test_service_type(type))
-    return 1;
-
-  if(predicate != NULL && FALSE == test_predicate(predicate))
-    return 2;
-    
-  if(scopes != NULL && FALSE == test_scopes(scopes))
-    return 3;
-  return 0;
-}
-
-
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/slp_client.h b/src/Unsupported/slp_client/src/cmd-utils/slp_client/slp_client.h
deleted file mode 100644 (file)
index c3f1cef..0000000
+++ /dev/null
@@ -1,1033 +0,0 @@
-//%2005////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation, The Open Group.
-// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-// EMC Corporation; VERITAS Software Corporation; The Open Group.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-// 
-// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-//==============================================================================
-/*****************************************************************************
- *  Description:   
- *
- *  Originated: December 20, 2001
- *     Original Author: Mike Day md@soft-hackle.net
- *                       mdday@us.ibm.com
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/slp_client/Attic/slp_client.h,v 1.7 2005/02/05 23:01:30 karl Exp $                                                                  
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-#ifndef SLP_CLIENT_INC
-#define SLP_CLIENT_INC
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef NUCLEUS
-#include "../lslp-common-defs.h"
-#include "../lslp.h"
-#endif
-
-#define DA_SRVTYPE "service:directory-agent"
-#define DA_SRVTYPELEN 23
-#define DA_SCOPE "DEFAULT"
-#define DA_SCOPELEN 7
-
-#define SA_SRVTYPE "service:service-agent"
-#define SA_SRVTYPELEN 21
-#define SA_SCOPE "DEFAULT"
-#define SA_SCOPELEN 7
-
-#define TYPE_UNKKNOWN 0
-#define TYPE_DA_LIST 1
-#define TYPE_RPLY_LIST 2
-//#define LSLP_MTU ETHERNT_MTU //jeb
-#undef LSLP_WAIT_OK
-#define LSLP_WAIT_OK 0
-
-#define slp_safe_free(a)  if(a != NULL) {free(a);}
-
-#ifdef SLP_LIB_IMPORT
-#define SLP_STORAGE_DECL DLL_IMPORT
-#else
-#define SLP_STORAGE_DECL DLL_EXPORT
-#endif
-
-
-
-  typedef struct lslp_auth_block {
-    struct lslp_auth_block *next;
-    struct lslp_auth_block *prev;
-    BOOL isHead;
-    uint16 descriptor;
-    uint16 len;
-    time_t timestamp;
-    uint16 spiLen;
-    int8 *spi;
-    int8 *block;
-  }lslpAuthBlock;
-
-
-  typedef struct lslp_atom_list {
-    struct lslp_atom_list *next;
-    struct lslp_atom_list *prev;
-    BOOL isHead;
-    int8 *str;
-    uint32 hash;
-  }lslpAtomList;
-
-  typedef struct lslp_atomized_url {
-    struct lslp_atomized_url *next;
-    struct lslp_atomized_url *prev;
-    BOOL isHead;
-    int8 *url;
-    uint32 urlHash;
-    lslpAtomList srvcs;
-    lslpAtomList site;
-    lslpAtomList path;
-    lslpAtomList attrs;
-  }lslpAtomizedURL;
-
-
-  typedef struct lslp_url_entry {
-    struct lslp_url_entry *next;
-    struct lslp_url_entry *prev;
-    BOOL isHead;
-    time_t lifetime;
-    uint16 len;
-    int8 *url;
-    uint8 auths;
-    lslpAuthBlock *authBlocks;
-    lslpAtomizedURL *atomized;
-    lslpAtomList *attrs;
-    
-  }lslpURL ;
-
-  typedef struct lslp_ext {
-    uint16 id;
-    uint32 nextOffset;
-    void *data;
-  }lslpExt;
-
-  enum attrTypes {
-    head = -1,
-    string, 
-    integer, 
-    bool_type, 
-    opaque, 
-    tag
-  }lslpTypes;
-
-  /* opaque vals should always have the first four bytes */ 
-  /* contain the length of the value */
-  typedef union lslp_attr_value {
-    int8 *stringVal;
-    uint32 intVal;
-    int32 boolVal;
-    void *opaqueVal;
-  }lslpAttrVal;
-
-  typedef struct lslp_attr_list {
-    struct lslp_attr_list *next;
-    struct lslp_attr_list *prev;
-    BOOL isHead;
-    int16 attr_string_len;
-    int8 *attr_string;
-    int8 *name;
-    int8 type;
-    int32 attr_len;
-    lslpAttrVal val;
-  }lslpAttrList;
-
-  enum ldap_operator_types{
-    ldap_and = 259,    /* to match token values assigned in y_filter.h */ 
-    ldap_or, 
-    ldap_not, 
-    expr_eq,
-    expr_gt, 
-    expr_lt, 
-    expr_present, 
-    expr_approx
-  } ;
-
-  struct ldap_filter_struct ;
-  typedef struct ldap_filter_struct_head {
-    struct ldap_filter_struct_head  *next;
-    struct ldap_filter_struct_head  *prev;
-    BOOL isHead;
-    int _operator; 
-  } filterHead;
-
-  typedef struct ldap_filter_struct {
-    struct ldap_filter_struct *next;
-    struct ldap_filter_struct *prev;
-    BOOL isHead;
-    int _operator; 
-    int nestingLevel;
-    BOOL logical_value;
-    filterHead children ;
-    lslpAttrList attrs;
-  } lslpLDAPFilter ;
-
-  typedef struct lslp_scope_list {
-    struct lslp_scope_list *next;
-    struct lslp_scope_list *prev;
-    BOOL isHead;
-    BOOL isProtected;
-    int8 *scope;
-  }lslpScopeList;
-  
-  typedef lslpScopeList lslpSPIList;
-
-  typedef struct lslp_srv_reg_instance {
-    struct lslp_srv_reg_instance *next;
-    struct lslp_srv_reg_instance *prev;
-    BOOL isHead;
-    lslpURL *url;   /* includes url auth block */
-    int8 *srvType;
-    lslpScopeList *scopeList;
-    lslpAttrList *attrList;
-    lslpAuthBlock *authList;     /* signature(s) for attribute list  */
-    time_t directoryTime;
-  }lslpSrvRegList;
-  
-  typedef struct lslp_srv_reg_head {
-    struct lslp_srv_reg_instance *next;
-    struct lslp_srv_reg_instance *prev;
-    BOOL isHead;
-  }lslpSrvRegHead;                       /* holds the auth blocks for all attrs in the list */
-
-
-
-
-
-  /******** internal slp message definitions ********/
-
-  /* URL entry definitions */
-#define LSLP_URL_LIFE    1
-#define LSLP_URL_LEN    3
-#define _LSLP_GETURLLIFE(h) _LSLP_GETSHORT((h), LSLP_URL_LIFE)
-#define _LSLP_SETURLLIFE(h, i) _LSLP_SETSHORT((h), (i), LSLP_URL_LIFE)
-#define _LSLP_GETURLLEN(h) _LSLP_GETSHORT((h), LSLP_URL_LEN)
-#define _LSLP_SETURLLEN(h, i) _LSLP_SETSHORT((h), (i), LSLP_URL_LEN)
-
-/*       0                   1                   2                   3 */
-/*       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |       Service Location header (function = SrvRqst = 1)        | */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |      length of <PRList>       |        <PRList> String        \ */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |   length of <service-type>    |    <service-type> String      \ */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |    length of <scope-list>     |     <scope-list> String       \ */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |  length of predicate string   |  Service Request <predicate>  \ */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |  length of <SLP SPI> string   |       <SLP SPI> String        \ */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-
-  /* ----- service request ------ */
-  struct lslp_srv_req {
-    uint16 prListLen;
-    int8 *prList;
-    uint16 srvcTypeLen;
-    int8 *srvcType;
-    lslpScopeList *scopeList;
-    uint16 predicateLen;
-    int8 *predicate;
-    lslpSPIList *spiList;
-    int8 *next_ext;
-    int8 *ext_limit;
-  };
-
-  /* ----- service reply ------ */
-  struct lslp_srv_rply {
-    uint16 errCode;
-    uint16 urlCount;
-    uint16 urlLen;
-    lslpURL *urlList;
-    lslpAtomList *attr_list;
-  }; 
-
-
-/*    SLP messages all begin with the following header: */
-
-/*       0                   1                   2                   3 */
-/*       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |    Version    |  Function-ID  |            Length             | */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      | Length, contd.|O|F|R|       reserved          |Next Ext Offset| */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |  Next Extension Offset, contd.|              XID              | */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |      Language Tag Length      |         Language Tag          \ */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-
-/* 4.3. URL Entries */
-
-/*       0                   1                   2                   3 */
-/*       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |   Reserved    |          Lifetime             |   URL Length  | */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |URL len, contd.|            URL (variable length)              \ */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |# of URL auths |            Auth. blocks (if any)              \ */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-
-
-
-/* 8.2. Service Reply */
-
-/*       0                   1                   2                   3 */
-/*       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |        Service Location header (function = SrvRply = 2)       | */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |        Error Code             |        URL Entry count        | */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |       <URL Entry 1>          ...       <URL Entry N>          \ */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-
-  struct lslp_srv_rply_out 
-  {
-    uint16 errCode;
-    uint16 urlCount;
-    uint16 urlLen;
-    int8 *urlList;
-  };
-  
-
-/*    The format of the Attribute List Extension is as follows: */
-
-/*        0                   1                   2                   3 */
-/*        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 */
-/*       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*       |      Extension ID = 0x0002    |     Next Extension Offset     | */
-/*       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*       | Offset, contd.|      Service URL Length       |  Service URL  / */
-/*       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*       |     Attribute List Length     |         Attribute List        / */
-/*       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*       |# of AttrAuths |(if present) Attribute Authentication Blocks.../ */
-/*       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-
-
-/*       0                   1                   2                   3 */
-/*       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |         Service Location header (function = SrvReg = 3)       | */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |                          <URL-Entry>                          \ */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      | length of service type string |        <service-type>         \ */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |     length of <scope-list>    |         <scope-list>          \ */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |  length of attr-list string   |          <attr-list>          \ */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-/*      |# of AttrAuths |(if present) Attribute Authentication Blocks...\ */
-/*      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-
-
-  /* ----- service registration ------ */
-  struct lslp_srv_reg {
-    lslpURL *url;                              /* includes url auth block */
-    uint16 srvTypeLen;
-    int8 *srvType;
-    lslpScopeList *scopeList;
-    lslpAttrList *attrList;    
-    lslpAuthBlock *attrAuthList;
-  };
-
-  /* ----- service acknowledgement ----- */
-  struct lslp_srv_ack {
-    uint16 errCode;
-  };
-
-  /* ----- da advertisement ----- */
-  struct lslp_da_advert {
-    uint16 errCode;
-    uint32 statelessBootTimestamp;
-    uint16 urlLen;
-    int8 *url; /* not a url-entry - merely a url string */
-    uint16 scopeListLen;
-    int8 *scopeList;
-    uint16 attrListLen;
-    int8 *attrList;
-    uint16 spiListLen;
-    int8 *spiList;  /* comma separated values - see 6.4.1*/
-    uint8 auths;
-    lslpAuthBlock *authBlocks;
-  };
-
-  /* -----sa advertisement ----- */
-
-  struct lslp_sa_advert {
-    uint16 urlLen;
-    int8 *url; /* not a url-entry - merely a url string */
-    uint16 scopeListLen;
-    int8 *scopeList;
-    uint16 attrListLen;
-    int8 *attrList;
-    uint8 auths;
-    lslpAuthBlock *authBlocks;
-  };
-
-  /* ----- srv type request  ----- */  
-
-  struct lslp_srvtype_req {
-    uint16 prListLen;
-    int8 *prList;
-    uint16 nameAuthLen;
-    int8 *nameAuth;
-    lslpScopeList *scopeList;
-  };
-
-  /* ----- srv type reply ----- */
-  struct lslp_srvtype_rep {
-    uint16 errCode;
-    uint16 srvTypeListLen;
-    int8 *srvTypeList;  /* see 4.1 for srvtype-string; this is a string-list */
-  };
-
-  /* ----- attr request ----- */
-  struct lslp_attr_req {
-    uint16 prListLen;
-    int8 *prList;
-    uint16 urlLen;
-    int8 *url; /* not a url-entry - merely a url string */
-    lslpScopeList *scopeList;
-    uint16 tagListLen;
-    int8 *tagList;
-    lslpSPIList *spiList;
-  };
-
-  /* ----- attr reply ----- */
-  struct lslp_attr_rep {
-    uint16 errCode;
-    uint16 attrListLen;
-    int8 *attrList;
-    uint8 auths;
-    lslpAuthBlock *authBlocks;
-  };
-
-  /* ----- srv deregistration ----- */
-  struct lslp_srv_dereg {
-    uint16 scopeListLen;
-    int8 *scopeList;
-    lslpURL *urlList;
-    uint16 tagListLen;
-    int8 *tagList;
-  };   
-
-  /* general internal representation of all slp msgs */
-  union lslp_msg_u{
-    struct lslp_srv_req srvReq;
-    struct lslp_srv_rply srvRply;
-    struct lslp_srv_reg        srvReg;
-    struct lslp_srv_ack srvAck;
-    struct lslp_da_advert daAdvert;
-    struct lslp_sa_advert saAdvert;
-    struct lslp_srvtype_req srvTypeReq;
-    struct lslp_srvtype_rep srvTypeRep;
-    struct lslp_attr_req attrReq;
-    struct lslp_attr_rep attrRep;
-    struct lslp_srv_dereg srvDereg;
-  };
-
-  enum msg_types {
-    srvReq = 1,
-    srvRply,
-    srvReg,
-    srvDereg,
-    srvAck,
-    attrReq,
-    attrRep,
-    daAdvert,
-    srvTypeReq,
-    srvTypeRep,
-    saAdvert
-  };
-
-  typedef enum msg_types msgTypes;
-  
-  typedef struct lslp_hdr{
-    uint8 ver;
-    uint8 msgid;
-    uint32 len;
-    uint16 flags;
-    uint32 nextExt;
-    uint16 xid;
-    uint32 errCode;
-    uint16 langLen;
-    uint8 lang[19];    
-    void *data;
-  }lslpHdr;
-
-  typedef struct lslp_msg {
-    struct lslp_msg *next;
-    struct lslp_msg *prev;
-    BOOL isHead;
-    msgTypes type;
-    lslpHdr hdr;
-    int8 dynamic;
-    union lslp_msg_u msg;
-  }lslpMsg;
-  struct da_list
-  {
-    struct da_list *next;
-    struct da_list *prev;
-    BOOL isHead;
-    
-  
-    int8 function;
-    uint16 err;
-    uint32 stateless_boot;
-    int8 *url;
-    int8 *scope;
-    int8 *attr;
-    int8 *spi;
-    int8 auth_blocks;
-    int8 *auth;
-    int8 remote[16]; 
-  } ;
-
-  struct rply_list
-  {
-    struct rply_list *next;
-    struct rply_list *prev;
-    BOOL isHead;
-
-    int8 function;
-    uint16 err;
-    uint16 lifetime;
-    int8 *url;
-    int8 auth_blocks;
-    int8 *auth;
-    int8 remote[16];
-  } ;
-
-  struct  reg_list
-  {
-    struct reg_list *next;
-    struct reg_list *prev;
-    BOOL isHead;
-    
-    int8 *url;
-    int8 *attributes;
-    int8 *service_type;
-    int8 *scopes;
-    time_t lifetime;
-  } ;
-
-  struct  url_entry
-  {
-    struct url_entry *next;
-    struct url_entry *prev;
-    BOOL isHead;
-
-    uint16 lifetime;
-    int16 len;
-    int8 *url;
-    uint8 num_auths;
-    int8 *auth_blocks;
-  };
-
-  struct slp_client 
-  {
-    uint16 _pr_buf_len;
-    uint16 _buf_len;
-    int8 _version;
-    uint16 _xid;
-    uint16 _target_port;
-    uint32 _target_addr;
-    uint32 _local_addr;
-    uint32 *_local_addr_list;
-    uint32 _msg_counts[12];
-    lslpSPIList *_spi;
-    lslpScopeList *_scopes;
-    int8 _pr_buf[LSLP_MTU];
-    int8 _msg_buf[LSLP_MTU];
-    int8 _rcv_buf[LSLP_MTU];
-    int8 _scratch[LSLP_MTU];
-    int8 _err_buf[255];
-
-    BOOL _use_das;
-    uint16 _da_target_port;
-    uint32 _da_target_addr;
-    
-    time_t _last_da_cycle;
-    struct timeval _tv;
-    int _retries;
-    int _ttl;
-    int  _convergence;
-    void *_crypto_context;
-    SOCKETD _rcv_sock;    //jeb
-#ifdef _WIN32
-    int _winsock_count ;
-    WSADATA _wsa_data;
-#endif
-    struct da_list das;
-    lslpMsg replies;
-    lslpSrvRegHead regs;
-    lslpMsg *(*get_response) (struct slp_client *, 
-                                    lslpMsg *);
-    int (*find_das)(struct slp_client *, 
-                   const int8 *, 
-                   const int8 *);
-    void (*discovery_cycle) (struct slp_client *, 
-                            const int8 *, 
-                            const int8 *, 
-                            const int8 *);
-    void (*converge_srv_req)(struct slp_client *,
-                            const int8 *, 
-                            const int8 *, 
-                            const int8 *);
-    void (*unicast_srv_req)(struct slp_client *, 
-                           const int8 *, 
-                           const int8 *, 
-                           const int8 *, 
-                           SOCKADDR_IN *);
-    void (*local_srv_req)(struct slp_client *,
-                         const int8 *, 
-                         const int8 *, 
-                         const int8 *);
-    void (*srv_req)( struct slp_client *, 
-                    const int8 *, 
-                    const int8 *, 
-                    const int8 *, 
-                    BOOL);
-    BOOL (*srv_reg)(struct slp_client *,
-                   const int8 *,
-                   const int8 *,
-                   const int8 *,
-                   const int8 *,
-                   int16 );
-    int (*srv_reg_all)(struct slp_client *,
-                      const int8 *,
-                      const int8 *,
-                      const int8 *,
-                      const int8 *,
-                      int16 lifetime );
-    int (*srv_reg_local) (struct slp_client *, 
-                          const int8 *,
-                          const int8 *, 
-                          const int8 *, 
-                          const int8 *, 
-                          uint16 lifetime ); //jeb int16 to uint16
-
-    int32 (*service_listener)( struct slp_client *, 
-                              SOCKETD, lslpMsg * ) ;   //jeb
-  
-    void (*prepare_pr_buf)(struct slp_client *, 
-                          const int8 *);
-    BOOL (*prepare_query)( struct slp_client *, 
-                          uint16,
-                          const int8 *,
-                          const int8 *, 
-                          const int8 *);
-    void (*decode_msg)( struct slp_client *client, 
-                       SOCKADDR_IN *remote  );
-    void (*decode_srvreq)(struct slp_client *, 
-                         SOCKADDR_IN *);
-    void (*decode_srvrply)(struct slp_client *,
-                          SOCKADDR_IN *);
-    void (*decode_daadvert)( struct slp_client *,
-                            SOCKADDR_IN *);
-    BOOL (*send_rcv_udp)(struct slp_client *) ;
-    int32 (*service_listener_wait)(struct slp_client *, 
-                                  time_t, 
-                                  SOCKETD extra, 
-                                  BOOL, 
-                                      lslpMsg *) ;
-    BOOL (*slp_previous_responder)(struct slp_client *, 
-                                  int8 *);
-
-  };
-
-
-  /*----------------------------- prototypes -----------------------------------*/
-
-#define LSLP_DESTRUCTOR_DYNAMIC 1
-#define LSLP_DESTRUCTOR_STATIC  0
-struct da_list *alloc_da_node(BOOL head);
-struct da_list *da_node_exists(struct da_list *head, const void *key);
-void free_da_list_members(struct da_list *da);
-void free_da_list_node(struct da_list *da);
-void free_da_list(struct da_list *list);
-struct rply_list *alloc_rply_list(BOOL head);
-struct rply_list *rpl_node_exists(struct rply_list *head, const void *key);
-void free_rply_list_members(struct rply_list *rply);
-void free_rply_list_node(struct rply_list *rply);
-void free_rply_list(struct rply_list *list);
-struct reg_list *alloc_reg_list(BOOL head);
-struct reg_list *reg_node_exists(struct reg_list *head, const void *key);
-void free_reg_list_members(struct reg_list *reg);
-void free_reg_list_node(struct reg_list *reg);
-void free_reg_list(struct reg_list *list);
-struct url_entry *alloc_url_entry(BOOL head);
-struct url_entry *url_node_exists(struct url_entry *head, const void *key);
-void free_url_entry_members(struct url_entry *url);
-void free_url_node(struct url_entry *node);
-void free_url_list(struct url_entry *list);
-char *slp_get_host_name( char *buf, int buf_size  );
-#if defined( _WIN32 ) 
- int gethostbyname_r(const char *name, 
-                     struct hostent *resultbuf, 
-                     char *buf, 
-                     size_t bufsize, 
-                     struct hostent **result, 
-                     int *errnop) ;
-#endif
-
-
-#if defined( _NUCLEUS )
-
-  int gethostbyname_r(const char *name, 
-                     struct hostent *resultbuf, 
-                     char *buf, 
-                     size_t bufsize, 
-                     struct hostent **result, 
-                     int *errnop) ;
-#endif
- char *slp_get_addr_string_from_url(const char *url, char *addr, int addr_len) ;
- char *slp_get_host_string_from_url(const char *url, char *host, int host_len) ;
- BOOL  get_addr_from_url(const int8 *url, SOCKADDR_IN *addr, int8 **host);
- int slp_get_local_interfaces(uint32 **list);
- BOOL  slp_join_multicast(SOCKETD sock, uint32 addr) ;  //jeb
- int slp_join_multicast_all(SOCKETD sock);              //jeb
- SOCKETD slp_open_listen_sock( void );                  //jeb
- void make_srv_ack(struct slp_client *client, SOCKADDR_IN *remote, int8 response, int16 code );
- void prepare_pr_buf(struct slp_client *client, const int8 *address);
- BOOL  prepare_query( struct slp_client *client, 
-                      uint16 xid,
-                      const int8 *service_type,
-                      const int8 *scopes, 
-                      const int8 *predicate) ;
- lslpMsg *get_response( struct slp_client *client , lslpMsg *head);
- int find_das(struct slp_client *client, 
-              const int8 *predicate, 
-              const int8 *scopes);
- void discovery_cycle ( struct slp_client *client, 
-                        const int8 *type, 
-                        const int8 *predicate, 
-                        const int8 *scopes) ;
-
- void converge_srv_req(struct slp_client *client,
-                       const int8 *type, 
-                       const int8 *predicate, 
-                       const int8 *scopes);
- void unicast_srv_req( struct slp_client *client, 
-                       const int8 *type, 
-                       const int8 *predicate, 
-                       const int8 *scopes, 
-                       SOCKADDR_IN *addr );
- void local_srv_req( struct slp_client *client,
-                     const int8 *type, 
-                     const int8 *predicate, 
-                     const int8 *scopes );
- void srv_req( struct slp_client *client, 
-               const int8 *type, 
-               const int8 *predicate, 
-               const int8 *scopes, 
-               BOOL retry );
- void decode_srvreg(struct slp_client *client, SOCKADDR_IN *remote);
-  
- void decode_msg( struct slp_client *client, 
-                  SOCKADDR_IN *remote );
- void decode_srvrply( struct slp_client *client,
-                      SOCKADDR_IN *remote );
- void decode_daadvert(struct slp_client *client, 
-                      SOCKADDR_IN *remote);
- void decode_srvreq(struct slp_client *client, 
-                    SOCKADDR_IN *remote );
- BOOL srv_reg(struct slp_client *client,
-                   const int8 *url,
-                   const int8 *attributes,
-                   const int8 *service_type,
-                   const int8 *scopes,
-                   int16 lifetime) ;
- BOOL send_rcv_udp( struct slp_client *client );
-
- int32 __service_listener_wait(struct slp_client *client, 
-                             time_t wait, 
-                             SOCKETD extra_sock,  //jeb 
-                             BOOL one_only);
-
-
- int32 service_listener_wait(struct slp_client *client, 
-                             time_t wait, 
-                             SOCKETD extra_sock,  //jeb 
-                             BOOL one_only, 
-                             lslpMsg *);      
-
- int32  __service_listener(struct slp_client *client, 
-                        SOCKETD extra_sock );                //jeb
- int32 service_listener(struct slp_client *client, 
-                        SOCKETD extra_sock,
-                        lslpMsg *);                //jeb
-
- int srv_reg_all( struct slp_client *client,
-                  const int8 *url,
-                  const int8 *attributes,
-                  const int8 *service_type,
-                  const int8 *scopes,
-                  int16 lifetime);
-
- int srv_reg_local ( struct slp_client *client, 
-                      const int8 *url,
-                      const int8 *attributes, 
-                      const int8 *service_type, 
-                      const int8 *scopes, 
-                      uint16 lifetime);   //jeb int16 to uint16
- void __srv_reg_local ( struct slp_client *client, 
-                      const int8 *url,
-                      const int8 *attributes, 
-                      const int8 *service_type, 
-                      const int8 *scopes, 
-               uint16 lifetime);   //jeb int16 to uint16
-
- BOOL slp_previous_responder(struct slp_client *client, 
-                             int8 *pr_list);
-
-
-
-  /* attribute and attribute parser */
- lslpAttrList *_lslpDecodeAttrString(int8 *s);
- lslpAttrList *lslpAllocAttr(int8 *name, int8 type, void *val, int16 len);
- lslpAttrList *lslpAllocAttrList(void);
- void lslpFreeAttr(lslpAttrList *attr);
- void lslpFreeAttrList(lslpAttrList *list, BOOL staticFlag);
-
- BOOL lslpStuffAttrList(int8 **buf, int16 *len, lslpAttrList *list, lslpAttrList *include);
- lslpAttrList *lslpUnstuffAttr(int8 **buf, int16 *len, int16 *err) ;
-
-
-  /* url and url parser */
- lslpURL *lslpAllocURL(void);
- lslpURL *lslpAllocURLList(void);
- void lslpFreeURL(lslpURL *url);
- void lslpFreeURLList(lslpURL *list);
- BOOL  lslpStuffURL(int8 **buf, int16 *len, lslpURL *url) ;
- BOOL lslpStuffURLList(int8 **buf, int16 *len, lslpURL *list) ;
- lslpURL *lslpUnstuffURL(int8 **buf, int16 *len, int16 *err) ;
-
-
- lslpAtomList *lslpAllocAtom(void);
- lslpAtomList *lslpAllocAtomList(void);
- void lslpFreeAtom(lslpAtomList *l);
- void lslpFreeAtomList(lslpAtomList *l, int32 flag);
- lslpAtomizedURL *lslpAllocAtomizedURL(void);
- lslpAtomizedURL *lslpAllocAtomizedURLList(void);
- void lslpFreeAtomizedURL(lslpAtomizedURL *u);
- void lslpFreeAtomizedURLList(lslpAtomizedURL *l, int32 flag);
- void lslpInitAtomLists(void);
- void lslpInitURLList(void);
-
- lslpAtomizedURL *_lslpDecodeURLs(int8 *u[], int32 count);
-
-
-  /* ldap filter and parser */
-
- lslpLDAPFilter *lslpAllocFilter(int _operator);
- void lslpFreeFilter(lslpLDAPFilter *filter);
- void lslpFreeFilterList(lslpLDAPFilter *head, BOOL static_flag);
- void lslpInitFilterList(void );
- void lslpCleanUpFilterList(void);
- void lslpFreeFilterTree(lslpLDAPFilter *root);
-
-
- lslpLDAPFilter *_lslpDecodeLDAPFilter(int8 *filter) ;
- BOOL lslpEvaluateOperation(int compare_result, int operation);
- BOOL lslpEvaluateAttributes(const lslpAttrList *a, const lslpAttrList *b, int op);
- BOOL lslpEvaluateFilterTree(lslpLDAPFilter *filter, const lslpAttrList *attrs);
-
-  /* scope lists */
- lslpScopeList *lslpAllocScope(void);
- lslpScopeList *lslpAllocScopeList(void);
- void lslpFreeScope(lslpScopeList *s);
- void lslpFreeScopeList(lslpScopeList *head);
-  
-#define lslpFreeSPI(a) lslpFreeScope((lslpScopeList *)(a))
-#define lslpFreeSPIList(a) lslpFreeScopeList((lslpScopeList *)(a))
-
-  
- BOOL lslpStuffScopeList(int8 **buf, int16 *len, lslpScopeList *list);
- lslpScopeList *lslpUnstuffScopeList(int8 **buf, int16 *len, int16 *err);
- lslpSPIList *lslpUnstuffSPIList(int8 **buf, int16 *len, int16 *err);
- BOOL lslpStuffSPIList(int8 **buf, int16 *len, lslpSPIList *list);
-  
-
- lslpScopeList *lslpScopeStringToList(int8 *s, int16 len) ;
-  
-
- int8 *lslp_foldString(int8 *s);
-  
- BOOL lslp_scope_intersection(lslpScopeList *a, lslpScopeList *b) ;
-  /* caseless compare that folds whitespace */
- int lslp_string_compare(int8 *s1, int8 *s2);
- int lslp_isscope(int c) ;
- BOOL lslp_islegal_scope(int8 *s);
-  
-  /* service registrations */
- lslpSrvRegList *lslpAllocSrvReg(void);
- lslpSrvRegHead *lslpAllocSrvRegList(void);
- void lslpFreeSrvReg(lslpSrvRegList *s);
- void lslpFreeSrvRegList(lslpSrvRegHead *head);
-  
-
-
-  /* authorization blocks */
-
- lslpAuthBlock *lslpAllocAuthBlock(void);
- lslpAuthBlock *lslpAllocAuthList(void);
- void lslpFreeAuthBlock(lslpAuthBlock *auth);
- void lslpFreeAuthList(lslpAuthBlock *list);
- BOOL lslpStuffAuthList(int8 **buf, int16 *len, lslpAuthBlock *list);
- lslpAuthBlock *lslpUnstuffAuthList(int8 **buf, int16 *len, int16 *err);
-
- uint32 lslpCheckSum(int8 *s, int16 l);
- lslpHdr * lslpAllocHdr(void);
- void lslpFreeHdr(lslpHdr *hdr);
- void lslpDestroySrvReq(struct lslp_srv_req *r, int8 flag);
- void lslpDestroySrvRply(struct lslp_srv_rply *r, int8 flag) ;
- void lslpDestroySrvReg(struct lslp_srv_reg *r, int8 flag);
- void lslpDestroySrvAck(struct lslp_srv_ack *r, int8 flag);
- void lslpDestroyDAAdvert(struct lslp_da_advert *r, int8 flag);
- void lslpDestroySAAdvert(struct lslp_sa_advert *r, int8 flag);
- void lslpDestroySrvTypeReq(struct lslp_srvtype_req *r, int8 flag);
- void lslpDestroySrvTypeReply(struct lslp_srvtype_rep *r, int8 flag);
- void lslpDestroyAttrReq(struct lslp_attr_req *r, int8 flag);
- void lslpDestroyAttrReply(struct lslp_attr_rep *r, int8 flag);
- void lslpDestroySrvDeReg(struct lslp_srv_dereg *r, int8 flag);
-
- BOOL check_duplicate_resp(struct slp_client *client, lslpMsg *msg);
-   struct lslp_srv_rply_out *_lslpProcessSrvReq(struct slp_client *client, 
-                                                     struct lslp_srv_req *msg, 
-                                                     int16 errCode);
-  /* a is an attribute list, while b is a string representation of an ldap filter  */
- BOOL lslp_predicate_match(lslpAttrList *a, int8 *b);
- int8 * lslp_get_next_ext(int8 *hdr_buf);
-
-
-/***** Functions Exported by the library *****/
-
-SLP_STORAGE_DECL BOOL  lslp_pattern_match(const int8 *s, const int8 *p, BOOL case_sensitive);
-SLP_STORAGE_DECL struct slp_client *create_slp_client(const int8 *target_addr, 
-                                                            const int8 *local_interface, 
-                                                            uint16 target_port, 
-                                                            const int8 *spi, 
-                                                            const int8 *scopes,
-                                                            BOOL should_listen, 
-                                                            BOOL use_das);
-  
-SLP_STORAGE_DECL  void destroy_slp_client(struct slp_client *client);
-SLP_STORAGE_DECL  int8 *encode_opaque(void *buffer, int16 length);
-SLP_STORAGE_DECL  void *decode_opaque(int8 *buffer);
-SLP_STORAGE_DECL  lslpMsg *alloc_slp_msg(BOOL head);
-SLP_STORAGE_DECL  void lslpDestroySLPMsg(lslpMsg *msg, int8 flag);
-SLP_STORAGE_DECL  void lslp_print_srv_rply(lslpMsg *srvrply);
-
-
-/** test functions - use these to test the correctness of
-    slp strings. They will use the actual parsers to
-    try and parse the strings. The return code indicates
-    if the string is grammatically correct or not. 
-**/
-SLP_STORAGE_DECL BOOL test_service_type(int8 *type);
-SLP_STORAGE_DECL BOOL test_service_type_reg(int8 *type);
-SLP_STORAGE_DECL BOOL test_url(int8 *url);
-SLP_STORAGE_DECL BOOL test_attribute(int8 *attr);
-SLP_STORAGE_DECL BOOL test_scopes(int8 *scopes);
-SLP_STORAGE_DECL BOOL test_predicate(int8 *predicate);
-
-
-/*****************************************************************
- *  test_srv_reg
- *
- *  test the correctness of a service registration - 
- *  return codes: 
- *     0 == SUCCESS
- *     1 == type string failed parsing
- *     2 == url string failed parsing
- *     3 == attribute string failed parsing 
- *     4 == scope string failed parsing
- *
- *****************************************************************/
-SLP_STORAGE_DECL uint32 test_srv_reg(int8 *type, 
-                                    int8 *url,   
-                                    int8 *attr, 
-                                    int8 *scopes);
-  
-/*****************************************************************
- * test_query 
- *
- * test the correctness of a service request
- * 
- * return codes:
- *    0 == SUCCESS
- *    1 == type string failed parsing
- *    2 == predicate string failed parsing
- *    3 == scope string failed parsing
- *****************************************************************/
-
-SLP_STORAGE_DECL uint32 test_query(int8 *type,
-                                  int8 *predicate, 
-                                  int8 *scopes);
-
-
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SLP_CLIENT_INC */
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/url.l b/src/Unsupported/slp_client/src/cmd-utils/slp_client/url.l
deleted file mode 100644 (file)
index eb2b537..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-/*****************************************************************************
- *  Description: encode/decode attribute urls
- *
- *  Originated: February 25, 2000
- *     Original Author: Mike Day md@soft-hackle.net
- *                                mdd@us.ibm.com
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/slp_client/Attic/url.l,v 1.2 2003/06/05 20:39:29 mday Exp $                                                                 
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-%{
-
-#undef YYLMAX
-#define YYLMAX 2048
-#define YY_NEVER_INTERACTIVE 1
-#undef YY_INPUT
-#define YY_INPUT(b, r, m) abort()
-#define exit(i) abort()
-#undef ECHO
-#define ECHO  urlerror(yytext)
-#include "slp_client.h"
-#include "y_url.h"
-#include <stdarg.h>
-
-#define urlless yyless
-void urlerror(int8 *, ...);
-
-static int16 heapIndex;
-static int8 heap[2052];
-static int8 buf[2052];
-/* special counter to exit the appletalk state */
-int8 atalk_state = 0;
-
-static int8 *_lslp_strdup(int8 *s);
-void url_close_lexer(uint32 handle);
-uint32 url_init_lexer(int8 *s);
-
-%}
-
- /* {} */
-digit                  [0-9]
-upalpha                        [A-Z]
-lowalpha               [a-z]
-alpha                  [a-zA-Z]
-alphanum               [a-zA-Z0-9]
-hex                    [a-fA-F0-9]
-safe                   [-$_.~]
-escaped                        ("%"{hex}{2} | "\\"{hex}{2})
-mark                   [-_.!~*'()]
-unreserved             ({alphanum}|{mark})
-reserved               [;/?:@&=+$,]
-uric                   ({reserved} | {unreserved} | {escaped})
-
-%x IP_SITE
-%x AT_SITE
-%x ATTRIBUTE
-%p      9000
-%n    300 
-%e    700 
-%option noyywrap prefix="url"
-%%
-
- /* the ip user @ host syntax is a special state because some reserved */
- /* characters are valid - but user the string itself is optional so we can't */
- /* build it into a full-time rule */
-
-"//"                   {
-                          BEGIN IP_SITE;
-                         urlless(0);
-                       }
- /* return the slash as a token */
-<IP_SITE>"/"           {urllval._i = *urltext; return(urllval._i);}
-
- /* this next rule needs to kick in even if it matches a zero-length string */
- /* i.e., it needs to be guaranteed even if there is no user @ host production */
-<IP_SITE>[-_.!~*'()a-zA-Z0-9;+&=\%]* {
-                       BEGIN INITIAL;
-                       if (urlleng > 0)
-                       {
-                            if(NULL != (urllval._s = _lslp_strdup(urltext)))
-                                return(_RESNAME);
-                           else
-                               return(0L);
-                       }
-               }
-
- /* appletalk syntax includes three reserved characters - give the lexer a chance */
- /* to match an appletalk production before it starts returning reserved */
- /* chars as tokens. */
-
-"/"[aA]{1}[tT]{1}"/"   {
-                       BEGIN AT_SITE;
-                       if(NULL != (urllval._s  = _lslp_strdup(urltext)))
-                               return(_AT);
-                       else
-                               return(0L);
-                       }
-
-<AT_SITE>(([-a-zA-Z0-9$_.~])|("%"([a-fA-F0-9]{2,2}))){1,31} {
-                       atalk_state++;
-                       if (atalk_state == 3)
-                               {BEGIN INITIAL;}
-                       if(NULL != (urllval._s  = _lslp_strdup(urltext)))
-                               return(_ZONE);
-                       else
-                               return(0L);
-                       }
-
-<AT_SITE>":"           {urllval._i = *urltext; return(urllval._i);}
-<AT_SITE>"/"           {BEGIN INITIAL; urlless(0);}
-
- /* ipx syntax includes two reserved characters - give the lexer a chance */
- /* to match an ipx production before it starts returning reserved chars */
- /* as tokens */
-
-"/"[iI]{1}[pP]{1}[xX]{1}"/"({hex}{8})":"({hex}{12})":"({hex}{4}) {
-                       if(NULL != (urllval._s  = _lslp_strdup(urltext)))
-                               return(_IPX);
-                       else
-                               return(0L);
-                       }
-
- /* reserved characters  - always a token in normal state unless part of */
- /* one of the productions above */
-";"                    {BEGIN ATTRIBUTE; urllval._i = *urltext; return(urllval._i);}
-"/"                    {urllval._i = *urltext; return(urllval._i);}
-"?"                    {urllval._i = *urltext; return(urllval._i);}
-":"                    {urllval._i = *urltext; return(urllval._i);}
-"@"                    {urllval._i = *urltext; return(urllval._i);}
-"&"                    {urllval._i = *urltext; return(urllval._i);}
-"="                    {urllval._i = *urltext; return(urllval._i);}
-"+"                    {urllval._i = *urltext; return(urllval._i);}
-"$"                    {urllval._i = *urltext; return(urllval._i);}
-","                    {urllval._i = *urltext; return(urllval._i);}
-
- /* a string consisting of only hex digits */
-{hex}+                 {
-                       if(NULL != (urllval._s  = _lslp_strdup(urltext)))
-                               return(_HEXDIG);
-                       else
-                               return(0L);
-                       }
-
- /* an ipv4 address */
-({hex}{1,3})"."({hex}{1,3})"."({hex}{1,3})"."({hex}{1,3}) {
-                       if(NULL != (urllval._s  = _lslp_strdup(urltext)))
-                               return(_IPADDR);
-                       else
-                               return(0L);
-                       }
-
- /* resource names start with alpha and include alphanum and '+' or '-' */
- /* but '+' is reserved and must be escaped */
-[-a-zA-Z0-9.]*         {
-                       if(NULL != (urllval._s  = _lslp_strdup(urltext)))
-                               return(_RESNAME);
-                       else
-                               return(0L);
-                       }
-
-
- /* anything else that is not reserved */
-<ATTRIBUTE>[!-~]+ {
-                       BEGIN INITIAL;
-                       if(NULL != (urllval._s  = _lslp_strdup(urltext)))
-                               return(_ELEMENT);
-                       else
-                               return(0L);
-                       }
-
- /* anything else that is not reserved */
-[^;/?:@&=+$,]+         {
-                       if(NULL != (urllval._s  = _lslp_strdup(urltext)))
-                               return(_ELEMENT);
-                       else
-                               return(0L);
-                       }
-
- /* anything else is an error */
-
-%%
-
-
-void url_close_lexer(uint32 handle)
-{
-  assert(handle != 0);
-  url_delete_buffer((YY_BUFFER_STATE)handle);
-}
-
-
-uint32 url_init_lexer(int8 *s)
-{
-  memset(&buf[0], 0x00, 2052);
-  memset(&heap[0], 0x00, 2052);
-  heapIndex = 0;
-  strncpy(&buf[0], s, 2048);
-  return((uint32)url_scan_buffer(&buf[0], strlen(s) + 2));
-}
-
-
-static int8 *_lslp_strdup(int8 *s)
-{
-  int8 *p = &heap[heapIndex];
-  do { heap[heapIndex++] = *s; } while ((*s != 0x00) && (heapIndex < 2049) && (++s));
-  return(p);
-}
-
-void urlerror(int8 *s, ...)
-{
- return;
-}      
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/url.y b/src/Unsupported/slp_client/src/cmd-utils/slp_client/url.y
deleted file mode 100644 (file)
index 9698e18..0000000
+++ /dev/null
@@ -1,674 +0,0 @@
-/*****************************************************************************
- *  Description: encode/decode attribute urls
- *
- *  Originated: March 6, 2000
- *     Original Author: Mike Day md@soft-hackle.net
- *                                mdd@us.ibm.com
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/slp_client/Attic/url.y,v 1.2 2003/06/05 20:39:29 mday Exp $                                                                 
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-%{
-
-#include "slp_client.h"
-
-
-
-/* prototypes and globals go here */
-void urlerror(int8 *, ...);
-int32 urlwrap(void);
-int32 urllex(void);   
-int32 urlparse(void);
-void url_close_lexer(uint32 handle);
-uint32 url_init_lexer(int8 *s);
-
-lslpAtomizedURL urlHead = 
-{
-       &urlHead, &urlHead, TRUE, NULL, 0
-};
-
-static lslpAtomList srvcHead = {&srvcHead, &srvcHead, TRUE, NULL, 0};
-static lslpAtomList siteHead = {&siteHead, &siteHead, TRUE, NULL, 0};
-static lslpAtomList pathHead = {&pathHead, &pathHead, TRUE, NULL, 0};
-static lslpAtomList attrHead = {&attrHead, &attrHead, TRUE, NULL, 0};
-
-%}
-
-/* definitions for ytab.h */
-%name-prefix="url"  
-
-%union {
-       int32 _i;
-       int8 *_s;
-       lslpAtomList *_atl;
-       lslpAtomizedURL *_aturl;
-}
-
-%token<_i> _RESERVED
-%token<_s> _HEXDIG _STAG _RESNAME _NAME _ELEMENT _IPADDR  _IPX
-%token<_s> _AT _ZONE
-
-/* typecast the non-terminals */
-
-/* %type <_i> */
-%type <_s> ip_site ipx_site at_site hostport host service_id
-%type <_aturl> url
-%type <_atl> service_list service site path_list path_el attr_list attr_el
-%type <_atl> url_part sap
-
-%%
-url: service_list sap {
-                       if (NULL != ($$ = (lslpAtomizedURL *)calloc(1, sizeof(lslpAtomizedURL))))
-                       {
-                               int32 urlLen = 1;
-                               lslpAtomList *temp = srvcHead.next;
-                               while (! _LSLP_IS_HEAD(temp) && temp->str != NULL)
-                               {
-                                       urlLen += strlen(temp->str);
-                                       temp = temp->next;
-                               }
-                               temp = siteHead.next;
-                               while (! _LSLP_IS_HEAD(temp) && temp->str != NULL)
-                               {
-                                       urlLen += strlen(temp->str);
-                                       temp = temp->next;
-                               }
-                               temp = pathHead.next;
-                               while (! _LSLP_IS_HEAD(temp) && temp->str != NULL)
-                               {
-                                       urlLen += strlen(temp->str) + 1;
-                                       temp = temp->next;
-                               }
-                               temp = attrHead.next;
-                               while (! _LSLP_IS_HEAD(temp) && temp->str != NULL)
-                               {
-                                       urlLen += strlen(temp->str) + 1;
-                                       temp = temp->next;
-                               }
-                               if (NULL != ($$->url = (int8 *)calloc(urlLen, sizeof(int8))))
-                               {
-                                       temp = srvcHead.next;
-                                       if (! _LSLP_IS_HEAD(temp) && temp->str != NULL)
-                                       {
-                                               strcpy($$->url, temp->str);
-                                               temp = temp->next;
-                                       }
-                                       while (! _LSLP_IS_HEAD(temp) && temp->str != NULL)
-                                       {
-                                               strcat($$->url, temp->str);
-                                               temp = temp->next;
-                                       }
-                                       temp = siteHead.next;
-                                       while (! _LSLP_IS_HEAD(temp) && temp->str != NULL)
-                                       {
-                                               strcat($$->url, temp->str);
-                                               temp = temp->next;
-                                       }
-                                       temp = pathHead.next;
-                                       while (! _LSLP_IS_HEAD(temp) && temp->str != NULL)
-                                       {
-                                               strcat($$->url, "/");
-                                               strcat($$->url, temp->str);
-                                               temp = temp->next;
-                                       }
-                                       temp = attrHead.next;
-                                       while (! _LSLP_IS_HEAD(temp) && temp->str != NULL)
-                                       {
-                                               strcat($$->url, ";");
-                                               strcat($$->url, temp->str);
-                                               temp = temp->next;
-                                       }
-                                       $$->urlHash = lslpCheckSum($$->url, (int16)strlen($$->url));
-                               }
-
-                               /* make certain the listheads are initialized */
-                               $$->srvcs.next = $$->srvcs.prev = &($$->srvcs);
-                               $$->srvcs.isHead = TRUE;
-                               $$->site.next = $$->site.prev = &($$->site);
-                               $$->site.isHead = TRUE;
-                               $$->path.next = $$->path.prev = &($$->path);
-                               $$->path.isHead = TRUE;
-                               $$->attrs.next = $$->attrs.prev = &($$->attrs);
-                               $$->attrs.isHead = TRUE;
-                               if (! _LSLP_IS_EMPTY(&srvcHead ))
-                               {
-                                       _LSLP_LINK_HEAD(&($$->srvcs), &srvcHead);
-                               }
-                               if (! _LSLP_IS_EMPTY(&siteHead))
-                               {
-                                       _LSLP_LINK_HEAD(&($$->site), &siteHead);
-                               }
-                               if (! _LSLP_IS_EMPTY(&pathHead))
-                               {
-                                       _LSLP_LINK_HEAD(&($$->path), &pathHead);
-                               }
-                               if (! _LSLP_IS_EMPTY(&attrHead))
-                               {
-                                       _LSLP_LINK_HEAD(&($$->attrs), &attrHead);
-                               }
-                               _LSLP_INSERT_BEFORE($$, &urlHead);
-                               lslpInitAtomLists();
-                       }
-               }
-       ;
-service_list: service  {
-                       $$ = &srvcHead;
-                       if ($1 != NULL)
-                       {
-                               _LSLP_INSERT_BEFORE($1, $$);
-                       }
-               }
-
-       | service_list service {
-                       $$ = &srvcHead;
-                       if ($2 != NULL)
-                       {
-                               _LSLP_INSERT_BEFORE($2, $$);
-                       }
-               }
-       ;
-
-service:  _RESNAME ':' {
-                       if (NULL != ($$ = (lslpAtomList *)calloc(1, sizeof(lslpAtomList))))
-                       {
-                               $$->next = $$->prev = $$;
-                               if (NULL != ($$->str = (int8 *)calloc(2 + strlen($1), sizeof(int8))))
-                               {
-                                       strcpy($$->str, $1);
-                                       strcat($$->str, ":");   
-                                       $$->hash = lslpCheckSum($$->str, (int16)strlen($$->str));
-                               }
-                               else
-                               {
-                                       free($$);
-                                       $$ = NULL;
-                               }
-                       }
-
-               }
-       |         _RESNAME '.' _RESNAME ':'     {
-                       if (NULL != ($$ = (lslpAtomList *)calloc(1, sizeof(lslpAtomList))))
-                       {
-                               $$->next = $$->prev = $$;
-                               if (NULL != ($$->str = (int8 *)calloc(3 + strlen($1) + strlen($3), sizeof(int8))))
-                               {
-                                       strcpy($$->str, $1);
-                                       strcat($$->str, ".");
-                                       strcat($$->str, $3);
-                                       strcat($$->str, ":");   
-                                       $$->hash = lslpCheckSum($$->str, (int16)strlen($$->str));
-                               }
-                               else
-                               {
-                                       free($$);
-                                       $$ = NULL;
-                               }
-                       }
-
-               }
-       ;
-
-sap:  site {
-                       $$ = &siteHead;
-                       if ($1 != NULL)
-                       {
-                               _LSLP_INSERT_BEFORE($1, $$);
-                       }
-               }
-       |       site url_part   {
-                       $$ = &siteHead;
-                       if ($1 != NULL)
-                       {
-                                       _LSLP_INSERT_BEFORE($1, $$);
-                       }
-               }
-       ;
-
-site:  ip_site {
-                       if ($1 != NULL)
-                       {
-                               if(NULL != ($$ = (lslpAtomList *)calloc(1, sizeof(lslpAtomList))))
-                               {
-                                       $$->next = $$->prev = $$;
-                                       $$->str = $1;
-                                       $$->hash = lslpCheckSum($$->str, (int16)strlen($$->str));
-                               }
-                       }
-                       else
-                               $$ = NULL;
-               }
-       |       ipx_site {
-                       if ($1 != NULL)
-                       {
-                               if(NULL != ($$ = (lslpAtomList *)calloc(1, sizeof(lslpAtomList))))
-                               {
-                                       $$->next = $$->prev = $$;
-                                       $$->str = $1;
-                                       $$->hash = lslpCheckSum($$->str, (int16)strlen($$->str));
-                               }
-                       }
-                       else
-                               $$ = NULL;
-               }
-       |       at_site {
-                       if ($1 != NULL)
-                       {
-                               if(NULL != ($$ = (lslpAtomList *)calloc(1, sizeof(lslpAtomList))))
-                               {
-                                       $$->next = $$->prev = $$;
-                                       $$->str = $1;
-                                       $$->hash = lslpCheckSum($$->str, (int16)strlen($$->str));
-                               }
-                       }
-                       else
-                               $$ = NULL;
-               }
-
-|       service_id {
-  
-                       if ($1 != NULL)
-                       {
-                               if(NULL != ($$ = (lslpAtomList *)calloc(1, sizeof(lslpAtomList))))
-                               {
-                                       $$->next = $$->prev = $$;
-                                       $$->str = $1;
-                                       $$->hash = lslpCheckSum($$->str, (int16)strlen($$->str));
-                               }
-                       }
-                       else
-                               $$ = NULL;
-  
-}
-
-       ;
-
-ip_site: '/''/' {
-                       $$ = strdup("//");
-               }
-       |   '/''/' hostport {
-                       if(NULL != $3 && (NULL !=($$ = (int8 *)calloc(3 + strlen($3), sizeof(int8)))))
-                       {
-                               strcpy($$, "//");
-                               strcat($$, $3);
-                       }
-
-               }
-       |   '/''/' _RESNAME '@' hostport {
-                       if(NULL != $5 && (NULL !=($$ = (int8 *)calloc(4 + strlen($3) + strlen($5), sizeof(int8)))))
-                       {
-                               strcpy($$, "//");
-                               strcat($$, $3);
-                               strcat($$, "@");
-                               strcat($$, $5);
-                       }
-               }
-       ;
-
-service_id: _RESNAME {
-         $$ = strdup($1);
-       }
-        ;
-
-ipx_site: _IPX {
-                       $$ = $1;
-               }
-       ;
-
-at_site: _AT _ZONE ':' _ZONE ':' _ZONE {
-                       if(NULL != ($$ = (int8 *)calloc(strlen($1) + strlen($2) + strlen($4) + strlen($6) + 3, sizeof(int8))))
-                       {
-                               strcpy($$, $1);
-                               strcat($$, $2);
-                               strcat($$, ":");
-                               strcat($$, $4);
-                               strcat($$, ":");
-                               strcat($$, $6);
-                       }
-               }
-       ;
-
-hostport: host {
-                       $$ = $1;        
-               }
-       |       host ':' _HEXDIG {
-                       if ($1 != NULL)
-                       {
-                               if(NULL != ($$ = (int8 *)calloc(strlen($1) + strlen($3) + 2, sizeof(int8))))
-                               {
-                                       strcpy($$, $1);
-                                       strcat($$, ":");
-                                       strcat($$, $3);
-                               }
-                       }
-                       else
-                               $$ = NULL;      
-               }
-       ;
-
-host: _RESNAME {
-                       $$ = $1;
-               }
-       |  _IPADDR {
-                       $$ = $1;
-               }
-       ;
-
-url_part: path_list {
-                       ;       
-               }
-       |       attr_list {
-                       ;               
-               }
-       |       path_list attr_list {
-                       ;
-               }
-       ;
-
-path_list:     path_el {
-                       $$ = &pathHead;
-                       if ($1 != NULL)
-                       {
-                               _LSLP_INSERT_BEFORE($1, $$);
-                       }
-               }
-       | path_list path_el {
-                       $$ = &pathHead;
-                       if ($2 != NULL)
-                       {
-                               _LSLP_INSERT_BEFORE($2, $$);
-                       }
-               }
-
-       ;
-
-path_el: '/' {
-                        /* dangling path slash - do nothing */
-                        $$ = NULL;
-                        }
-       |    '/' _ELEMENT  {
-                       if(NULL != ($$ = (lslpAtomList *)calloc(1, sizeof(lslpAtomList))))
-                       {
-                               $$->prev = $$->next = $$;
-                               if(NULL != ($$->str = (int8 *)calloc(1 + strlen($2), sizeof(int8))))
-                               {
-                                       strcpy($$->str, $2);
-                                       $$->hash = lslpCheckSum($$->str, (int16)strlen($$->str));
-
-                               }
-                               else
-                               {
-                                       free($$);
-                                       $$ = NULL;
-                               }
-                       }
-
-               }
-       |        '/' _RESNAME  {
-                       if(NULL != ($$ = (lslpAtomList *)calloc(1, sizeof(lslpAtomList))))
-                       {
-                               $$->prev = $$->next = $$;
-                               if(NULL != ($$->str = (int8 *)calloc(1 + strlen($2), sizeof(int8))))
-                               {
-                                       strcpy($$->str, $2);
-                                       $$->hash = lslpCheckSum($$->str, (int16)strlen($$->str));
-                               }
-                               else
-                               {
-                                       free($$);
-                                       $$ = NULL;
-                               }
-                       }
-
-               }
-       |       '/' _HEXDIG {
-                       if(NULL != ($$ = (lslpAtomList *)calloc(1, sizeof(lslpAtomList))))
-                       {
-                               $$->prev = $$->next = $$;
-                               if(NULL != ($$->str = (int8 *)calloc(1 + strlen($2), sizeof(int8))))
-                               {
-                                       strcpy($$->str, $2);
-                                       $$->hash = lslpCheckSum($$->str, (int16)strlen($$->str));
-                               }
-                               else
-                               {
-                                       free($$);
-                                       $$ = NULL;
-                               }
-                       }
-               }
-       ;
-
-attr_list: attr_el {
-                       $$ = &attrHead;
-                       if ($1 != NULL)
-                       {
-                               _LSLP_INSERT_BEFORE($1, $$);
-                       }
-               }
-       | attr_list attr_el {
-                       $$ = &attrHead;
-                       if ($2 != NULL)
-                       {
-                               _LSLP_INSERT_BEFORE($2, $$);
-                       }
-               }
-       ;
-
-attr_el: ';' _ELEMENT  {
-                       if(NULL != ($$ = (lslpAtomList *)calloc(1, sizeof(lslpAtomList))))
-                       {
-                               $$->prev = $$->next = $$;
-                               if(NULL != ($$->str = (int8 *)calloc(1 + strlen($2), sizeof(int8))))
-                               {
-                                       strcpy($$->str, $2);
-                                       $$->hash = lslpCheckSum($$->str, (int16)strlen($$->str));
-                               }
-                               else
-                               {
-                                       free($$);
-                                       $$ = NULL;
-                               }
-                       }
-               }
-
-       |  ';' _ELEMENT '=' _ELEMENT {
-                       if(NULL != ($$ = (lslpAtomList *)calloc(1, sizeof(lslpAtomList))))
-                       {
-                               $$->prev = $$->next = $$;
-                               if(NULL != ($$->str = (int8 *)calloc(2 + strlen($2) + strlen($4), sizeof(int8))))
-                               {
-                                       strcpy($$->str, $2);
-                                       strcat($$->str, "=");
-                                       strcat($$->str, $4);
-                                       $$->hash = lslpCheckSum($$->str, (int16)strlen($$->str));
-                               }
-                               else
-                               {
-                                       free($$);
-                                       $$ = NULL;
-                               }
-                       }
-               }
-       ;
-
-%% 
-
-
-lslpAtomList *lslpAllocAtom(void)
-{
-       lslpAtomList *temp = (lslpAtomList *)calloc(1, sizeof(lslpAtomList));
-       if (temp != NULL)
-       {
-               temp->next = temp->prev = temp;
-       }
-       return(temp);
-}      
-
-lslpAtomList *lslpAllocAtomList(void)
-{
-       lslpAtomList *temp =lslpAllocAtom(); 
-       if (temp != NULL)
-               temp->isHead = TRUE;
-       return(temp);
-}      
-
-void lslpFreeAtom(lslpAtomList *a )
-{
-       assert(a != NULL);
-       if (a->str != NULL)
-               free(a->str);
-       free(a);
-       return;
-}      
-
-void lslpFreeAtomList(lslpAtomList *l, int32 flag)
-{
-       lslpAtomList *temp;
-       assert(l != NULL);
-       assert(_LSLP_IS_HEAD(l));
-       while (! _LSLP_IS_EMPTY(l))
-       {
-               temp = l->next;
-               temp->prev->next = temp->next;
-               temp->next->prev = temp->prev; 
-               lslpFreeAtom(temp);
-       }
-       if (flag)
-               lslpFreeAtom(l);
-       return;
-}      
-
-lslpAtomizedURL *lslpAllocAtomizedURL(void)
-{
-       lslpAtomizedURL *temp = (lslpAtomizedURL *)calloc(1, sizeof(lslpAtomizedURL));
-       if (temp != NULL)
-       {
-               temp->prev = temp->next = temp;
-       }
-       return(temp);
-}      
-
-lslpAtomizedURL *lslpAllocAtomizedURLList(void)
-{
-       lslpAtomizedURL *temp = lslpAllocAtomizedURL();
-       if (temp != NULL)
-       {
-               temp->isHead = TRUE;
-       }
-       return(temp);
-}      
-
-void lslpFreeAtomizedURL(lslpAtomizedURL *u)
-{
-       assert(u != NULL);
-       if (u->url != NULL)
-               free(u->url);
-       if (! _LSLP_IS_EMPTY(&(u->srvcs)))
-               lslpFreeAtomList(&(u->srvcs), 0);
-       if (! _LSLP_IS_EMPTY(&(u->site)))
-               lslpFreeAtomList(&(u->site), 0);
-       if (! _LSLP_IS_EMPTY(&(u->path)))
-               lslpFreeAtomList(&(u->path), 0);
-       if (!  _LSLP_IS_EMPTY(&(u->attrs)))
-               lslpFreeAtomList(&(u->attrs), 0);
-       free(u);
-       return;
-}      
-
-void lslpFreeAtomizedURLList(lslpAtomizedURL *l, int32 flag)
-{
-       lslpAtomizedURL *temp;
-       assert(l != NULL);
-       assert(_LSLP_IS_HEAD(l));
-       while (! (_LSLP_IS_HEAD(l->next)))
-       {
-               temp = l->next;
-               temp->prev->next = temp->next;
-               temp->next->prev = temp->prev;
-               lslpFreeAtomizedURL(temp);
-       }
-       if (flag)
-               free(l);
-       return;
-}      
-
-void lslpInitAtomLists(void)
-{
-       srvcHead.next = srvcHead.prev = &srvcHead;
-       siteHead.next = siteHead.prev = &siteHead;
-       pathHead.next = pathHead.prev = &pathHead;
-       attrHead.next = attrHead.prev = &attrHead;
-       return;
-}      
-
-void lslpInitURLList(void)
-{
-       urlHead.next = urlHead.prev = &urlHead;
-       return;
-}      
-
-
-
-void lslpCleanUpURLLists(void)
-{
-  
-  lslpFreeAtomList(&srvcHead, 0);
-  lslpFreeAtomList(&siteHead, 0);
-  lslpFreeAtomList(&pathHead, 0);
-  lslpFreeAtomList(&attrHead, 0);
-  lslpFreeAtomizedURLList(&urlHead, 0);
-}
-
-lslpAtomizedURL *_lslpDecodeURLs(int8 *u[], int32 count)
-{
-  int32 i;
-  
-  uint32 lexer = 0;
-  lslpAtomizedURL *temp = NULL;
-  assert(u != NULL && u[count - 1] != NULL);
-  lslpInitURLList();
-  lslpInitAtomLists();
-  
-  for (i = 0; i < count; i++) {
-    if (NULL == u[i])
-      break;
-    if((0 != (lexer = url_init_lexer(u[i])))) {
-      if(urlparse())
-       lslpCleanUpURLLists();
-      url_close_lexer(lexer);
-    }
-  }
-  if (! _LSLP_IS_EMPTY(&urlHead)) {
-    if(NULL != (temp = lslpAllocAtomizedURLList())) {
-      _LSLP_LINK_HEAD(temp, &urlHead);
-    }
-  }
-  
-  return(temp);        
-}       
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/y_attr.h b/src/Unsupported/slp_client/src/cmd-utils/slp_client/y_attr.h
deleted file mode 100644 (file)
index 0b6f0de..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-//%2005////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation, The Open Group.
-// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-// EMC Corporation; VERITAS Software Corporation; The Open Group.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-// 
-// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-//==============================================================================
-#ifndef BISON_Y_ATTR_H
-# define BISON_Y_ATTR_H
-
-#ifndef YYSTYPE
-typedef union {
-       int32 _i;
-       int8 *_s;
-       lslpAttrList *_atl;
-} yystype;
-# define YYSTYPE yystype
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-# define       _TRUE   257
-# define       _FALSE  258
-# define       _MULTIVAL       259
-# define       _INT    260
-# define       _ESCAPED        261
-# define       _TAG    262
-# define       _STRING 263
-# define       _OPAQUE 264
-
-
-extern YYSTYPE attrlval;
-
-#endif /* not BISON_Y_ATTR_H */
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/y_attr.output b/src/Unsupported/slp_client/src/cmd-utils/slp_client/y_attr.output
deleted file mode 100644 (file)
index f940dfa..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-Terminals which are not used:
-
-   _OPAQUE
-
-
-Grammar
-
-  Number, Line, Rule
-    1  84 attr_list -> attr
-    2  94 attr_list -> attr_list ',' attr
-    3 106 attr -> _TAG
-    4 113 attr -> '(' _TAG ')'
-    5 120 attr -> '(' _TAG '=' ')'
-    6 128 attr -> '(' _TAG '=' attr_val_list ')'
-    7 140 attr_val_list -> attr_val
-    8 147 attr_val_list -> attr_val_list _MULTIVAL attr_val
-    9 154 attr_val -> _TRUE
-   10 157 attr_val -> _FALSE
-   11 160 attr_val -> _ESCAPED
-   12 163 attr_val -> _STRING
-   13 177 attr_val -> _INT
-
-
-Terminals, with rules where they appear
-
-$ (-1)
-'(' (40) 4 5 6
-')' (41) 4 5 6
-',' (44) 2
-'=' (61) 5 6
-error (256)
-_TRUE (257) 9
-_FALSE (258) 10
-_MULTIVAL (259) 8
-_INT (260) 13
-_ESCAPED (261) 11
-_TAG (262) 3 4 5 6
-_STRING (263) 12
-_OPAQUE (264)
-
-
-Nonterminals, with rules where they appear
-
-attr_list (15)
-    on left: 1 2, on right: 2
-attr (16)
-    on left: 3 4 5 6, on right: 1 2
-attr_val_list (17)
-    on left: 7 8, on right: 6 8
-attr_val (18)
-    on left: 9 10 11 12 13, on right: 7 8
-
-
-state 0
-
-    _TAG       shift, and go to state 1
-    '('        shift, and go to state 2
-
-    attr_list  go to state 3
-    attr       go to state 4
-
-
-
-state 1
-
-    attr  ->  _TAG .   (rule 3)
-
-    $default   reduce using rule 3 (attr)
-
-
-
-state 2
-
-    attr  ->  '(' . _TAG ')'   (rule 4)
-    attr  ->  '(' . _TAG '=' ')'   (rule 5)
-    attr  ->  '(' . _TAG '=' attr_val_list ')'   (rule 6)
-
-    _TAG       shift, and go to state 5
-
-
-
-state 3
-
-    attr_list  ->  attr_list . ',' attr   (rule 2)
-
-    $          go to state 21
-    ','        shift, and go to state 6
-
-
-
-state 4
-
-    attr_list  ->  attr .   (rule 1)
-
-    $default   reduce using rule 1 (attr_list)
-
-
-
-state 5
-
-    attr  ->  '(' _TAG . ')'   (rule 4)
-    attr  ->  '(' _TAG . '=' ')'   (rule 5)
-    attr  ->  '(' _TAG . '=' attr_val_list ')'   (rule 6)
-
-    ')'        shift, and go to state 7
-    '='        shift, and go to state 8
-
-
-
-state 6
-
-    attr_list  ->  attr_list ',' . attr   (rule 2)
-
-    _TAG       shift, and go to state 1
-    '('        shift, and go to state 2
-
-    attr       go to state 9
-
-
-
-state 7
-
-    attr  ->  '(' _TAG ')' .   (rule 4)
-
-    $default   reduce using rule 4 (attr)
-
-
-
-state 8
-
-    attr  ->  '(' _TAG '=' . ')'   (rule 5)
-    attr  ->  '(' _TAG '=' . attr_val_list ')'   (rule 6)
-
-    _TRUE      shift, and go to state 10
-    _FALSE     shift, and go to state 11
-    _INT       shift, and go to state 12
-    _ESCAPED   shift, and go to state 13
-    _STRING    shift, and go to state 14
-    ')'        shift, and go to state 15
-
-    attr_val_list      go to state 16
-    attr_val   go to state 17
-
-
-
-state 9
-
-    attr_list  ->  attr_list ',' attr .   (rule 2)
-
-    $default   reduce using rule 2 (attr_list)
-
-
-
-state 10
-
-    attr_val  ->  _TRUE .   (rule 9)
-
-    $default   reduce using rule 9 (attr_val)
-
-
-
-state 11
-
-    attr_val  ->  _FALSE .   (rule 10)
-
-    $default   reduce using rule 10 (attr_val)
-
-
-
-state 12
-
-    attr_val  ->  _INT .   (rule 13)
-
-    $default   reduce using rule 13 (attr_val)
-
-
-
-state 13
-
-    attr_val  ->  _ESCAPED .   (rule 11)
-
-    $default   reduce using rule 11 (attr_val)
-
-
-
-state 14
-
-    attr_val  ->  _STRING .   (rule 12)
-
-    $default   reduce using rule 12 (attr_val)
-
-
-
-state 15
-
-    attr  ->  '(' _TAG '=' ')' .   (rule 5)
-
-    $default   reduce using rule 5 (attr)
-
-
-
-state 16
-
-    attr  ->  '(' _TAG '=' attr_val_list . ')'   (rule 6)
-    attr_val_list  ->  attr_val_list . _MULTIVAL attr_val   (rule 8)
-
-    _MULTIVAL  shift, and go to state 18
-    ')'        shift, and go to state 19
-
-
-
-state 17
-
-    attr_val_list  ->  attr_val .   (rule 7)
-
-    $default   reduce using rule 7 (attr_val_list)
-
-
-
-state 18
-
-    attr_val_list  ->  attr_val_list _MULTIVAL . attr_val   (rule 8)
-
-    _TRUE      shift, and go to state 10
-    _FALSE     shift, and go to state 11
-    _INT       shift, and go to state 12
-    _ESCAPED   shift, and go to state 13
-    _STRING    shift, and go to state 14
-
-    attr_val   go to state 20
-
-
-
-state 19
-
-    attr  ->  '(' _TAG '=' attr_val_list ')' .   (rule 6)
-
-    $default   reduce using rule 6 (attr)
-
-
-
-state 20
-
-    attr_val_list  ->  attr_val_list _MULTIVAL attr_val .   (rule 8)
-
-    $default   reduce using rule 8 (attr_val_list)
-
-
-
-state 21
-
-    $          go to state 22
-
-
-
-state 22
-
-    $default   accept
-
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/y_filter.h b/src/Unsupported/slp_client/src/cmd-utils/slp_client/y_filter.h
deleted file mode 100644 (file)
index 5f95b5b..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-//%2005////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation, The Open Group.
-// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-// EMC Corporation; VERITAS Software Corporation; The Open Group.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-// 
-// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-//==============================================================================
-#ifndef BISON_Y_FILTER_H
-# define BISON_Y_FILTER_H
-
-#ifndef YYSTYPE
-typedef union {
-  int32 filter_int;
-  int8 *filter_string;
-  lslpLDAPFilter *filter_filter;
-} yystype;
-# define YYSTYPE yystype
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-# define       L_PAREN 257
-# define       R_PAREN 258
-# define       OP_AND  259
-# define       OP_OR   260
-# define       OP_NOT  261
-# define       OP_EQU  262
-# define       OP_GT   263
-# define       OP_LT   264
-# define       OP_PRESENT      265
-# define       OP_APPROX       266
-# define       VAL_INT 267
-# define       VAL_BOOL        268
-# define       OPERAND 269
-
-
-extern YYSTYPE filterlval;
-
-#endif /* not BISON_Y_FILTER_H */
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/y_filter.output b/src/Unsupported/slp_client/src/cmd-utils/slp_client/y_filter.output
deleted file mode 100644 (file)
index cc200aa..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-Grammar
-
-  Number, Line, Rule
-    1  81 filter_list -> filter
-    2  82 filter_list -> filter_list filter
-    3  85 filter -> filter_open filter_op filter_list filter_close
-    4 103 filter -> filter_open expression filter_close
-    5 112 filter_open -> L_PAREN
-    6 115 filter_close -> R_PAREN
-    7 118 filter_op -> OP_AND
-    8 119 filter_op -> OP_OR
-    9 120 filter_op -> OP_NOT
-   10 125 expression -> OPERAND OP_PRESENT
-   11 134 expression -> OPERAND exp_operator VAL_INT
-   12 144 expression -> OPERAND exp_operator VAL_BOOL
-   13 154 expression -> OPERAND exp_operator OPERAND
-   14 165 exp_operator -> OP_EQU
-   15 166 exp_operator -> OP_GT
-   16 167 exp_operator -> OP_LT
-   17 168 exp_operator -> OP_APPROX
-
-
-Terminals, with rules where they appear
-
-$ (-1)
-error (256)
-L_PAREN (257) 5
-R_PAREN (258) 6
-OP_AND (259) 7
-OP_OR (260) 8
-OP_NOT (261) 9
-OP_EQU (262) 14
-OP_GT (263) 15
-OP_LT (264) 16
-OP_PRESENT (265) 10
-OP_APPROX (266) 17
-VAL_INT (267) 11
-VAL_BOOL (268) 12
-OPERAND (269) 10 11 12 13
-
-
-Nonterminals, with rules where they appear
-
-filter_list (16)
-    on left: 1 2, on right: 2 3
-filter (17)
-    on left: 3 4, on right: 1 2
-filter_open (18)
-    on left: 5, on right: 3 4
-filter_close (19)
-    on left: 6, on right: 3 4
-filter_op (20)
-    on left: 7 8 9, on right: 3
-expression (21)
-    on left: 10 11 12 13, on right: 4
-exp_operator (22)
-    on left: 14 15 16 17, on right: 11 12 13
-
-
-state 0
-
-    L_PAREN    shift, and go to state 1
-
-    filter_list        go to state 2
-    filter     go to state 3
-    filter_open        go to state 4
-
-
-
-state 1
-
-    filter_open  ->  L_PAREN .   (rule 5)
-
-    $default   reduce using rule 5 (filter_open)
-
-
-
-state 2
-
-    filter_list  ->  filter_list . filter   (rule 2)
-
-    $          go to state 25
-    L_PAREN    shift, and go to state 1
-
-    filter     go to state 5
-    filter_open        go to state 4
-
-
-
-state 3
-
-    filter_list  ->  filter .   (rule 1)
-
-    $default   reduce using rule 1 (filter_list)
-
-
-
-state 4
-
-    filter  ->  filter_open . filter_op filter_list filter_close   (rule 3)
-    filter  ->  filter_open . expression filter_close   (rule 4)
-
-    OP_AND     shift, and go to state 6
-    OP_OR      shift, and go to state 7
-    OP_NOT     shift, and go to state 8
-    OPERAND    shift, and go to state 9
-
-    filter_op  go to state 10
-    expression go to state 11
-
-
-
-state 5
-
-    filter_list  ->  filter_list filter .   (rule 2)
-
-    $default   reduce using rule 2 (filter_list)
-
-
-
-state 6
-
-    filter_op  ->  OP_AND .   (rule 7)
-
-    $default   reduce using rule 7 (filter_op)
-
-
-
-state 7
-
-    filter_op  ->  OP_OR .   (rule 8)
-
-    $default   reduce using rule 8 (filter_op)
-
-
-
-state 8
-
-    filter_op  ->  OP_NOT .   (rule 9)
-
-    $default   reduce using rule 9 (filter_op)
-
-
-
-state 9
-
-    expression  ->  OPERAND . OP_PRESENT   (rule 10)
-    expression  ->  OPERAND . exp_operator VAL_INT   (rule 11)
-    expression  ->  OPERAND . exp_operator VAL_BOOL   (rule 12)
-    expression  ->  OPERAND . exp_operator OPERAND   (rule 13)
-
-    OP_EQU     shift, and go to state 12
-    OP_GT      shift, and go to state 13
-    OP_LT      shift, and go to state 14
-    OP_PRESENT shift, and go to state 15
-    OP_APPROX  shift, and go to state 16
-
-    exp_operator       go to state 17
-
-
-
-state 10
-
-    filter  ->  filter_open filter_op . filter_list filter_close   (rule 3)
-
-    L_PAREN    shift, and go to state 1
-
-    filter_list        go to state 18
-    filter     go to state 3
-    filter_open        go to state 4
-
-
-
-state 11
-
-    filter  ->  filter_open expression . filter_close   (rule 4)
-
-    R_PAREN    shift, and go to state 19
-
-    filter_close       go to state 20
-
-
-
-state 12
-
-    exp_operator  ->  OP_EQU .   (rule 14)
-
-    $default   reduce using rule 14 (exp_operator)
-
-
-
-state 13
-
-    exp_operator  ->  OP_GT .   (rule 15)
-
-    $default   reduce using rule 15 (exp_operator)
-
-
-
-state 14
-
-    exp_operator  ->  OP_LT .   (rule 16)
-
-    $default   reduce using rule 16 (exp_operator)
-
-
-
-state 15
-
-    expression  ->  OPERAND OP_PRESENT .   (rule 10)
-
-    $default   reduce using rule 10 (expression)
-
-
-
-state 16
-
-    exp_operator  ->  OP_APPROX .   (rule 17)
-
-    $default   reduce using rule 17 (exp_operator)
-
-
-
-state 17
-
-    expression  ->  OPERAND exp_operator . VAL_INT   (rule 11)
-    expression  ->  OPERAND exp_operator . VAL_BOOL   (rule 12)
-    expression  ->  OPERAND exp_operator . OPERAND   (rule 13)
-
-    VAL_INT    shift, and go to state 21
-    VAL_BOOL   shift, and go to state 22
-    OPERAND    shift, and go to state 23
-
-
-
-state 18
-
-    filter_list  ->  filter_list . filter   (rule 2)
-    filter  ->  filter_open filter_op filter_list . filter_close   (rule 3)
-
-    L_PAREN    shift, and go to state 1
-    R_PAREN    shift, and go to state 19
-
-    filter     go to state 5
-    filter_open        go to state 4
-    filter_close       go to state 24
-
-
-
-state 19
-
-    filter_close  ->  R_PAREN .   (rule 6)
-
-    $default   reduce using rule 6 (filter_close)
-
-
-
-state 20
-
-    filter  ->  filter_open expression filter_close .   (rule 4)
-
-    $default   reduce using rule 4 (filter)
-
-
-
-state 21
-
-    expression  ->  OPERAND exp_operator VAL_INT .   (rule 11)
-
-    $default   reduce using rule 11 (expression)
-
-
-
-state 22
-
-    expression  ->  OPERAND exp_operator VAL_BOOL .   (rule 12)
-
-    $default   reduce using rule 12 (expression)
-
-
-
-state 23
-
-    expression  ->  OPERAND exp_operator OPERAND .   (rule 13)
-
-    $default   reduce using rule 13 (expression)
-
-
-
-state 24
-
-    filter  ->  filter_open filter_op filter_list filter_close .   (rule 3)
-
-    $default   reduce using rule 3 (filter)
-
-
-
-state 25
-
-    $          go to state 26
-
-
-
-state 26
-
-    $default   accept
-
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/y_url.h b/src/Unsupported/slp_client/src/cmd-utils/slp_client/y_url.h
deleted file mode 100644 (file)
index eefa97f..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-//%2005////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation, The Open Group.
-// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-// EMC Corporation; VERITAS Software Corporation; The Open Group.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-// 
-// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-//==============================================================================
-#ifndef BISON_Y_URL_H
-# define BISON_Y_URL_H
-
-#ifndef YYSTYPE
-typedef union {
-       int32 _i;
-       int8 *_s;
-       lslpAtomList *_atl;
-       lslpAtomizedURL *_aturl;
-} yystype;
-# define YYSTYPE yystype
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-# define       _RESERVED       257
-# define       _HEXDIG 258
-# define       _STAG   259
-# define       _RESNAME        260
-# define       _NAME   261
-# define       _ELEMENT        262
-# define       _IPADDR 263
-# define       _IPX    264
-# define       _AT     265
-# define       _ZONE   266
-
-
-extern YYSTYPE urllval;
-
-#endif /* not BISON_Y_URL_H */
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_client/y_url.output b/src/Unsupported/slp_client/src/cmd-utils/slp_client/y_url.output
deleted file mode 100644 (file)
index 0ff4951..0000000
+++ /dev/null
@@ -1,602 +0,0 @@
-Terminals which are not used:
-
-   _RESERVED
-   _STAG
-   _NAME
-
-
-Grammar
-
-  Number, Line, Rule
-    1  85 url -> service_list sap
-    2 179 service_list -> service
-    3 187 service_list -> service_list service
-    4 196 service -> _RESNAME ':'
-    5 214 service -> _RESNAME '.' _RESNAME ':'
-    6 236 sap -> site
-    7 243 sap -> site url_part
-    8 252 site -> ip_site
-    9 265 site -> ipx_site
-   10 278 site -> at_site
-   11 292 site -> service_id
-   12 310 ip_site -> '/' '/'
-   13 313 ip_site -> '/' '/' hostport
-   14 321 ip_site -> '/' '/' _RESNAME '@' hostport
-   15 332 service_id -> _RESNAME
-   16 337 ipx_site -> _IPX
-   17 342 at_site -> _AT _ZONE ':' _ZONE ':' _ZONE
-   18 355 hostport -> host
-   19 358 hostport -> host ':' _HEXDIG
-   20 373 host -> _RESNAME
-   21 376 host -> _IPADDR
-   22 381 url_part -> path_list
-   23 384 url_part -> attr_list
-   24 387 url_part -> path_list attr_list
-   25 392 path_list -> path_el
-   26 399 path_list -> path_list path_el
-   27 409 path_el -> '/'
-   28 413 path_el -> '/' _ELEMENT
-   29 431 path_el -> '/' _RESNAME
-   30 448 path_el -> '/' _HEXDIG
-   31 466 attr_list -> attr_el
-   32 473 attr_list -> attr_list attr_el
-   33 482 attr_el -> ';' _ELEMENT
-   34 499 attr_el -> ';' _ELEMENT '=' _ELEMENT
-
-
-Terminals, with rules where they appear
-
-$ (-1)
-'.' (46) 5
-'/' (47) 12 13 14 27 28 29 30
-':' (58) 4 5 17 19
-';' (59) 33 34
-'=' (61) 34
-'@' (64) 14
-error (256)
-_RESERVED (257)
-_HEXDIG (258) 19 30
-_STAG (259)
-_RESNAME (260) 4 5 14 15 20 29
-_NAME (261)
-_ELEMENT (262) 28 33 34
-_IPADDR (263) 21
-_IPX (264) 16
-_AT (265) 17
-_ZONE (266) 17
-
-
-Nonterminals, with rules where they appear
-
-url (19)
-    on left: 1
-service_list (20)
-    on left: 2 3, on right: 1 3
-service (21)
-    on left: 4 5, on right: 2 3
-sap (22)
-    on left: 6 7, on right: 1
-site (23)
-    on left: 8 9 10 11, on right: 6 7
-ip_site (24)
-    on left: 12 13 14, on right: 8
-service_id (25)
-    on left: 15, on right: 11
-ipx_site (26)
-    on left: 16, on right: 9
-at_site (27)
-    on left: 17, on right: 10
-hostport (28)
-    on left: 18 19, on right: 13 14
-host (29)
-    on left: 20 21, on right: 18 19
-url_part (30)
-    on left: 22 23 24, on right: 7
-path_list (31)
-    on left: 25 26, on right: 22 24 26
-path_el (32)
-    on left: 27 28 29 30, on right: 25 26
-attr_list (33)
-    on left: 31 32, on right: 23 24 32
-attr_el (34)
-    on left: 33 34, on right: 31 32
-
-
-state 0
-
-    _RESNAME   shift, and go to state 1
-
-    url        go to state 50
-    service_list       go to state 2
-    service    go to state 3
-
-
-
-state 1
-
-    service  ->  _RESNAME . ':'   (rule 4)
-    service  ->  _RESNAME . '.' _RESNAME ':'   (rule 5)
-
-    ':'        shift, and go to state 4
-    '.'        shift, and go to state 5
-
-
-
-state 2
-
-    url  ->  service_list . sap   (rule 1)
-    service_list  ->  service_list . service   (rule 3)
-
-    _RESNAME   shift, and go to state 6
-    _IPX       shift, and go to state 7
-    _AT        shift, and go to state 8
-    '/'        shift, and go to state 9
-
-    service    go to state 10
-    sap        go to state 11
-    site       go to state 12
-    ip_site    go to state 13
-    service_id go to state 14
-    ipx_site   go to state 15
-    at_site    go to state 16
-
-
-
-state 3
-
-    service_list  ->  service .   (rule 2)
-
-    $default   reduce using rule 2 (service_list)
-
-
-
-state 4
-
-    service  ->  _RESNAME ':' .   (rule 4)
-
-    $default   reduce using rule 4 (service)
-
-
-
-state 5
-
-    service  ->  _RESNAME '.' . _RESNAME ':'   (rule 5)
-
-    _RESNAME   shift, and go to state 17
-
-
-
-state 6
-
-    service  ->  _RESNAME . ':'   (rule 4)
-    service  ->  _RESNAME . '.' _RESNAME ':'   (rule 5)
-    service_id  ->  _RESNAME .   (rule 15)
-
-    ':'        shift, and go to state 4
-    '.'        shift, and go to state 5
-
-    $default   reduce using rule 15 (service_id)
-
-
-
-state 7
-
-    ipx_site  ->  _IPX .   (rule 16)
-
-    $default   reduce using rule 16 (ipx_site)
-
-
-
-state 8
-
-    at_site  ->  _AT . _ZONE ':' _ZONE ':' _ZONE   (rule 17)
-
-    _ZONE      shift, and go to state 18
-
-
-
-state 9
-
-    ip_site  ->  '/' . '/'   (rule 12)
-    ip_site  ->  '/' . '/' hostport   (rule 13)
-    ip_site  ->  '/' . '/' _RESNAME '@' hostport   (rule 14)
-
-    '/'        shift, and go to state 19
-
-
-
-state 10
-
-    service_list  ->  service_list service .   (rule 3)
-
-    $default   reduce using rule 3 (service_list)
-
-
-
-state 11
-
-    url  ->  service_list sap .   (rule 1)
-
-    $default   reduce using rule 1 (url)
-
-
-
-state 12
-
-    sap  ->  site .   (rule 6)
-    sap  ->  site . url_part   (rule 7)
-
-    '/'        shift, and go to state 20
-    ';'        shift, and go to state 21
-
-    $default   reduce using rule 6 (sap)
-
-    url_part   go to state 22
-    path_list  go to state 23
-    path_el    go to state 24
-    attr_list  go to state 25
-    attr_el    go to state 26
-
-
-
-state 13
-
-    site  ->  ip_site .   (rule 8)
-
-    $default   reduce using rule 8 (site)
-
-
-
-state 14
-
-    site  ->  service_id .   (rule 11)
-
-    $default   reduce using rule 11 (site)
-
-
-
-state 15
-
-    site  ->  ipx_site .   (rule 9)
-
-    $default   reduce using rule 9 (site)
-
-
-
-state 16
-
-    site  ->  at_site .   (rule 10)
-
-    $default   reduce using rule 10 (site)
-
-
-
-state 17
-
-    service  ->  _RESNAME '.' _RESNAME . ':'   (rule 5)
-
-    ':'        shift, and go to state 27
-
-
-
-state 18
-
-    at_site  ->  _AT _ZONE . ':' _ZONE ':' _ZONE   (rule 17)
-
-    ':'        shift, and go to state 28
-
-
-
-state 19
-
-    ip_site  ->  '/' '/' .   (rule 12)
-    ip_site  ->  '/' '/' . hostport   (rule 13)
-    ip_site  ->  '/' '/' . _RESNAME '@' hostport   (rule 14)
-
-    _RESNAME   shift, and go to state 29
-    _IPADDR    shift, and go to state 30
-
-    $default   reduce using rule 12 (ip_site)
-
-    hostport   go to state 31
-    host       go to state 32
-
-
-
-state 20
-
-    path_el  ->  '/' .   (rule 27)
-    path_el  ->  '/' . _ELEMENT   (rule 28)
-    path_el  ->  '/' . _RESNAME   (rule 29)
-    path_el  ->  '/' . _HEXDIG   (rule 30)
-
-    _HEXDIG    shift, and go to state 33
-    _RESNAME   shift, and go to state 34
-    _ELEMENT   shift, and go to state 35
-
-    $default   reduce using rule 27 (path_el)
-
-
-
-state 21
-
-    attr_el  ->  ';' . _ELEMENT   (rule 33)
-    attr_el  ->  ';' . _ELEMENT '=' _ELEMENT   (rule 34)
-
-    _ELEMENT   shift, and go to state 36
-
-
-
-state 22
-
-    sap  ->  site url_part .   (rule 7)
-
-    $default   reduce using rule 7 (sap)
-
-
-
-state 23
-
-    url_part  ->  path_list .   (rule 22)
-    url_part  ->  path_list . attr_list   (rule 24)
-    path_list  ->  path_list . path_el   (rule 26)
-
-    '/'        shift, and go to state 20
-    ';'        shift, and go to state 21
-
-    $default   reduce using rule 22 (url_part)
-
-    path_el    go to state 37
-    attr_list  go to state 38
-    attr_el    go to state 26
-
-
-
-state 24
-
-    path_list  ->  path_el .   (rule 25)
-
-    $default   reduce using rule 25 (path_list)
-
-
-
-state 25
-
-    url_part  ->  attr_list .   (rule 23)
-    attr_list  ->  attr_list . attr_el   (rule 32)
-
-    ';'        shift, and go to state 21
-
-    $default   reduce using rule 23 (url_part)
-
-    attr_el    go to state 39
-
-
-
-state 26
-
-    attr_list  ->  attr_el .   (rule 31)
-
-    $default   reduce using rule 31 (attr_list)
-
-
-
-state 27
-
-    service  ->  _RESNAME '.' _RESNAME ':' .   (rule 5)
-
-    $default   reduce using rule 5 (service)
-
-
-
-state 28
-
-    at_site  ->  _AT _ZONE ':' . _ZONE ':' _ZONE   (rule 17)
-
-    _ZONE      shift, and go to state 40
-
-
-
-state 29
-
-    ip_site  ->  '/' '/' _RESNAME . '@' hostport   (rule 14)
-    host  ->  _RESNAME .   (rule 20)
-
-    '@'        shift, and go to state 41
-
-    $default   reduce using rule 20 (host)
-
-
-
-state 30
-
-    host  ->  _IPADDR .   (rule 21)
-
-    $default   reduce using rule 21 (host)
-
-
-
-state 31
-
-    ip_site  ->  '/' '/' hostport .   (rule 13)
-
-    $default   reduce using rule 13 (ip_site)
-
-
-
-state 32
-
-    hostport  ->  host .   (rule 18)
-    hostport  ->  host . ':' _HEXDIG   (rule 19)
-
-    ':'        shift, and go to state 42
-
-    $default   reduce using rule 18 (hostport)
-
-
-
-state 33
-
-    path_el  ->  '/' _HEXDIG .   (rule 30)
-
-    $default   reduce using rule 30 (path_el)
-
-
-
-state 34
-
-    path_el  ->  '/' _RESNAME .   (rule 29)
-
-    $default   reduce using rule 29 (path_el)
-
-
-
-state 35
-
-    path_el  ->  '/' _ELEMENT .   (rule 28)
-
-    $default   reduce using rule 28 (path_el)
-
-
-
-state 36
-
-    attr_el  ->  ';' _ELEMENT .   (rule 33)
-    attr_el  ->  ';' _ELEMENT . '=' _ELEMENT   (rule 34)
-
-    '='        shift, and go to state 43
-
-    $default   reduce using rule 33 (attr_el)
-
-
-
-state 37
-
-    path_list  ->  path_list path_el .   (rule 26)
-
-    $default   reduce using rule 26 (path_list)
-
-
-
-state 38
-
-    url_part  ->  path_list attr_list .   (rule 24)
-    attr_list  ->  attr_list . attr_el   (rule 32)
-
-    ';'        shift, and go to state 21
-
-    $default   reduce using rule 24 (url_part)
-
-    attr_el    go to state 39
-
-
-
-state 39
-
-    attr_list  ->  attr_list attr_el .   (rule 32)
-
-    $default   reduce using rule 32 (attr_list)
-
-
-
-state 40
-
-    at_site  ->  _AT _ZONE ':' _ZONE . ':' _ZONE   (rule 17)
-
-    ':'        shift, and go to state 44
-
-
-
-state 41
-
-    ip_site  ->  '/' '/' _RESNAME '@' . hostport   (rule 14)
-
-    _RESNAME   shift, and go to state 45
-    _IPADDR    shift, and go to state 30
-
-    hostport   go to state 46
-    host       go to state 32
-
-
-
-state 42
-
-    hostport  ->  host ':' . _HEXDIG   (rule 19)
-
-    _HEXDIG    shift, and go to state 47
-
-
-
-state 43
-
-    attr_el  ->  ';' _ELEMENT '=' . _ELEMENT   (rule 34)
-
-    _ELEMENT   shift, and go to state 48
-
-
-
-state 44
-
-    at_site  ->  _AT _ZONE ':' _ZONE ':' . _ZONE   (rule 17)
-
-    _ZONE      shift, and go to state 49
-
-
-
-state 45
-
-    host  ->  _RESNAME .   (rule 20)
-
-    $default   reduce using rule 20 (host)
-
-
-
-state 46
-
-    ip_site  ->  '/' '/' _RESNAME '@' hostport .   (rule 14)
-
-    $default   reduce using rule 14 (ip_site)
-
-
-
-state 47
-
-    hostport  ->  host ':' _HEXDIG .   (rule 19)
-
-    $default   reduce using rule 19 (hostport)
-
-
-
-state 48
-
-    attr_el  ->  ';' _ELEMENT '=' _ELEMENT .   (rule 34)
-
-    $default   reduce using rule 34 (attr_el)
-
-
-
-state 49
-
-    at_site  ->  _AT _ZONE ':' _ZONE ':' _ZONE .   (rule 17)
-
-    $default   reduce using rule 17 (at_site)
-
-
-
-state 50
-
-    $          go to state 51
-
-
-
-state 51
-
-    $          go to state 52
-
-
-
-state 52
-
-    $default   accept
-
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_query/.libs/slp_query b/src/Unsupported/slp_client/src/cmd-utils/slp_query/.libs/slp_query
deleted file mode 100755 (executable)
index 76a62d2..0000000
Binary files a/src/Unsupported/slp_client/src/cmd-utils/slp_query/.libs/slp_query and /dev/null differ
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_query/Makefile b/src/Unsupported/slp_client/src/cmd-utils/slp_query/Makefile
deleted file mode 100644 (file)
index 9d2a5fd..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-#//%2006////////////////////////////////////////////////////////////////////////
-#//
-#// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-#// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-#// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation, The Open Group.
-#// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; Symantec Corporation; The Open Group.
-#//
-#// Permission is hereby granted, free of charge, to any person obtaining a copy
-#// of this software and associated documentation files (the "Software"), to
-#// deal in the Software without restriction, including without limitation the
-#// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-#// sell copies of the Software, and to permit persons to whom the Software is
-#// furnished to do so, subject to the following conditions:
-#// 
-#// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-#// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-#// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-#// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-#// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-#// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-#// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#//
-#//==============================================================================
-PROJECT = slp_query
-LFLAGS += -o$@
-YFLAGS += -o$@
-
-SOURCES = slp_query.c 
-
-OBJS = slp_query$(OBJ) 
-
-LIBS = $(SRC_CLIENT)/libslp_client.la
-
-all: $(PROJECT)$(EXE)
-.PHONY: all
-
-install: $(INSTALL) install.txt
-.PHONY: install
-
-remove: $(REMOVE) remove.txt
-.PHONY: remove
-
-clean: $(CLEAN) clean.txt
-.PHONY: clean
-
-
-$(PROJECT)$(EXE): slp_query$(OBJ)
-       $(LIBTOOL) $(CC) $(LDFLAGS) $(EXE_OUT) $@ $(OBJS) $(LIBS)
-
-slp_query$(OBJ) : slp_query.c 
-       $(LIBTOOL) $(CC) $(NO_LINK_FLAG) $(CFLAGS) $(DEFS) $< $(OBJ_OUT) $@
-
-clean.txt :
-       $(IGNORE)$(LIBTOOL) $(RM) $(RM_FLAGS) $(SUB_PROJECT)$(EXE)
-       $(IGNORE)$(LIBTOOL) $(RM) $(RM_FLAGS) *.o
-       $(IGNORE)$(LIBTOOL) $(RM) $(RM_FLAGS) *.lo
-
-install.txt: $(PROJECT)$(EXE)
-       $(IGNORE)$(LIBTOOL) $(CP) $(CP_FLAGS) slp_query /usr/local/bin
-
-remove.txt:
-       $(IGNORE)$(LIBTOOL) $(RM) $(RM_FLAGS) /usr/local/bin/slp_query
-
-
-
-
-
-
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_query/Makefile.nt b/src/Unsupported/slp_client/src/cmd-utils/slp_query/Makefile.nt
deleted file mode 100644 (file)
index b34cbe9..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#//%2006////////////////////////////////////////////////////////////////////////
-#//
-#// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-#// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-#// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation, The Open Group.
-#// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; Symantec Corporation; The Open Group.
-#//
-#// Permission is hereby granted, free of charge, to any person obtaining a copy
-#// of this software and associated documentation files (the "Software"), to
-#// deal in the Software without restriction, including without limitation the
-#// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-#// sell copies of the Software, and to permit persons to whom the Software is
-#// furnished to do so, subject to the following conditions:
-#// 
-#// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-#// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-#// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-#// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-#// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-#// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-#// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#//
-#//==============================================================================
-CC=cl.exe
-ifdef DEBUG
-CFLAGS=/nologo /Od /D "WIN32" /D "_DEBUG" /Gm /EHsc /RTC1 /MTd /W3 /c /Zi /TC
-LDFLAGS=/nologo /dll /debug
-else
-CFLAGS=/nologo /O2 /D "WIN32" /EHsc /MT /W3 /c /TC
-LDFLAGS=/nologo /dll
-endif
-
-
-all: slp_query.exe
-
-##############################################################
-# slp_query
-##############################################################
-slp_query.obj : slp_query.c
-       $(CC) $(CFLAGS) $<
-slp_query.exe : slp_query.obj
-       $(CC) /nologo /Fe$@ slp_query.obj ../slp_client/slp_client.lib Ws2_32.lib
-
-clean:
-       $(RM) *.obj *.pdb *.idb *.exe
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_query/slp_query.c b/src/Unsupported/slp_client/src/cmd-utils/slp_query/slp_query.c
deleted file mode 100644 (file)
index 79dba3b..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-/*****************************************************************************
- *  Description: scripting shell for slp_client - generates an slp QUERY 
- *
- *  Originated: September 16, 2002
- *     Original Author: Mike Day md@soft-hackle.net
- *                       mdday@us.ibm.com
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/slp_query/Attic/slp_query.c,v 1.2 2003/11/18 23:59:20 tony Exp $                                                                    
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-
-
-
-/**** define the following token to import labels from the slp_client library *****/
-#define SLP_LIB_IMPORT
-#include "../slp_client/slp_client.h"
-int8 *type, *addr, *scopes, *iface, *predicate, *spi;
-int16 port = 427, converge;
-BOOL dir_agent = FALSE;
-BOOL test = FALSE;
-
-void free_globals(void)
-{
-  if(type != NULL)
-    free(type);
-  if(addr != NULL)
-    free(addr);
-  if(scopes != NULL)
-    free(scopes);
-  if(iface != NULL)
-    free(iface);
-  if(predicate != NULL)
-    free(predicate);
-  if(spi != NULL)
-    free(spi);
-}
-
-
-void usage(void)
-{
-  printf("\nslp_query -- transmit an SLP Service Request and print the results.\n");
-  printf("-------------------------------------------------------------------------\n");
-  printf("slp_query --type=service-type-string\n");
-  printf("         [--predicate=predicate-string]\n"); 
-  printf("         [--scopes=scope-string]\n");
-  printf("         [--address=target-IP]\n");
-  printf("         [--port=target-port]\n");
-  printf("         [--interface=host-IP]\n");
-  printf("         [--use_da=true]\n");
-  printf("         [--converge=convergence-cycles]\n");
-  printf("         [--spi=security-parameters-index] (not used)\n");
-  printf("         [--test] (tests parameters)\n");
-  printf("\n");
-  printf("All parameters must be a single string containing no spaces.\n");
-  printf("Always use the format of <parameter>=<value>.\n");
-  printf("Parameters enclosed in brackets are not optional.\n");
-    
-   
-}
-
-BOOL get_options(int argc, char *argv[])
-{
-  int i;
-  int8 *bptr;
-  
-  for(i = 1; i < argc; i++){
-    if((*argv[i] == '-') && (*(argv[i] + 1) == '-')) {
-      if(TRUE == lslp_pattern_match(argv[i] + 2, "type=*", FALSE)) {
-       bptr = argv[i] + 2;
-       while(*bptr != '=') bptr++;
-       bptr++;
-       /* handle case where type is specified twice on the cmd line */
-       if(type != NULL)
-         free(type);
-       type = strdup(bptr);
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "predicate=*", FALSE)) {
-       bptr = argv[i] + 2;
-       while(*bptr != '=') bptr++;
-       bptr++;
-       if(predicate != NULL)
-         free(predicate);
-       predicate = strdup(bptr);
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "scopes*", FALSE)) {
-       bptr = argv[i] + 2;
-       while(*bptr != '=') bptr++;
-       bptr++;
-       if(scopes != NULL)
-         free(scopes);
-       scopes = strdup(bptr);
-       
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "address*", FALSE)) {
-       bptr = argv[i] + 2;
-       while(*bptr != '=') bptr++;
-       bptr++;
-       if(addr != NULL)
-         free(addr);
-       addr = strdup(bptr);
-
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "port*", FALSE)) {
-       bptr = argv[i] + 2;
-       while(*bptr != '=') bptr++;
-       bptr++;
-       port = (int16)strtoul(bptr, NULL, 10);
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "interface*", FALSE)) {
-       bptr = argv[i] + 2;
-       while(*bptr != '=') bptr++;
-       bptr++;
-       if(iface != NULL)
-         free(iface);
-       iface = strdup(bptr);
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "use_da=true*", FALSE)) {
-       dir_agent = TRUE;
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "test*", FALSE)) {
-       test = TRUE;
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "converge=*", FALSE)) {
-       bptr = argv[i] + 2;
-       while(*bptr != '=') bptr++;
-       bptr++;
-       converge = (int16)strtoul(bptr, NULL, 10);
-      }
-    }
-  }
-  
-  if( type == NULL )
-    return FALSE;
-  return TRUE;
-}
-
-
-int main(int argc, char **argv)
-{
-  struct slp_client *client;
-  lslpMsg responses, *temp;
-  
-  if(FALSE == get_options(argc, argv)) {
-    usage();
-  } else {
-    if(scopes == NULL)
-      scopes = strdup("DEFAULT");
-    if(test == TRUE){
-      return test_query(type, predicate, scopes);
-    }
-    
-    if(NULL != (client = create_slp_client(addr, 
-                                          iface, 
-                                          port, 
-                                          "DSA", 
-                                          scopes, 
-                                          FALSE, 
-                                          dir_agent))) {
-                                            
-
-      if( addr != NULL && inet_addr(addr) == inet_addr("127.0.0.1")) {
-       client->local_srv_req(client, type, predicate, scopes);
-      } else if(converge) {
-       client->_convergence = converge ;
-       client->converge_srv_req(client, type, predicate, scopes);
-      } else {
-       SOCKADDR_IN address;
-       address.sin_port = htons(port);
-       address.sin_family = AF_INET;
-       if(addr != NULL)
-         address.sin_addr.s_addr = inet_addr(addr);
-       else
-         address.sin_addr.s_addr = _LSLP_MCAST;
-       client->unicast_srv_req(client, type, predicate, scopes, &address);
-      }
-      
-      responses.isHead = TRUE;
-      responses.next = responses.prev = &responses;
-      
-      client->get_response(client, &responses);
-      while( ! _LSLP_IS_EMPTY(&responses)) {
-       temp = responses.next;
-       if(temp->type == srvRply) 
-         lslp_print_srv_rply(temp);
-       _LSLP_UNLINK(temp);
-       lslpDestroySLPMsg(temp, LSLP_DESTRUCTOR_DYNAMIC);
-      }
-      destroy_slp_client(client);
-    }
-  }
-  
-  free_globals();
-  return(0);
-
-}
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_srvreg/.libs/slp_srvreg b/src/Unsupported/slp_client/src/cmd-utils/slp_srvreg/.libs/slp_srvreg
deleted file mode 100755 (executable)
index 3d74aa2..0000000
Binary files a/src/Unsupported/slp_client/src/cmd-utils/slp_srvreg/.libs/slp_srvreg and /dev/null differ
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_srvreg/Makefile b/src/Unsupported/slp_client/src/cmd-utils/slp_srvreg/Makefile
deleted file mode 100644 (file)
index 1fd2cf6..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#//%2006////////////////////////////////////////////////////////////////////////
-#//
-#// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-#// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-#// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation, The Open Group.
-#// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; Symantec Corporation; The Open Group.
-#//
-#// Permission is hereby granted, free of charge, to any person obtaining a copy
-#// of this software and associated documentation files (the "Software"), to
-#// deal in the Software without restriction, including without limitation the
-#// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-#// sell copies of the Software, and to permit persons to whom the Software is
-#// furnished to do so, subject to the following conditions:
-#// 
-#// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-#// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-#// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-#// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-#// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-#// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-#// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#//
-#//==============================================================================
-PROJECT = slp_srvreg
-LFLAGS += -o$@
-YFLAGS += -o$@
-
-SOURCES = slp_srvreg.c 
-
-OBJS = slp_srvreg$(OBJ) 
-
-LIBS = $(SRC_CLIENT)/libslp_client.la
-
-all: $(PROJECT)$(EXE)
-.PHONY: all
-
-install: $(INSTALL) install.txt
-.PHONY: install
-
-clean: $(CLEAN) clean.txt
-.PHONY: clean
-
-$(PROJECT)$(EXE): slp_srvreg$(OBJ)
-       $(LIBTOOL) $(CC) $(LDFLAGS) $(EXE_OUT) $@ $(OBJS) $(LIBS)
-
-slp_srvreg$(OBJ) : slp_srvreg.c 
-       $(LIBTOOL) $(CC) $(NO_LINK_FLAG) $(CFLAGS) $(DEFS) $< $(OBJ_OUT) $@
-
-install.txt:  $(PROJECT)$(EXE)
-       $(IGNORE)$(LIBTOOL) $(CP) $(CP_FLAGS) slp_srvreg /usr/local/bin
-
-remove.txt:
-       $(IGnore)$(LIBTOOL) $(RM) $(RM_FLAGS) /usr/local/bin/$(SUB_PROJECT)$(EXE)
-
-clean.txt :
-       $(IGNORE)$(LIBTOOL) $(RM) $(RM_FLAGS) $(SUB_PROJECT)$(EXE)
-       $(IGNORE)$(LIBTOOL) $(RM) $(RM_FLAGS) *$(OBJ)
-
-
-
-
-
-
-
-
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_srvreg/Makefile.nt b/src/Unsupported/slp_client/src/cmd-utils/slp_srvreg/Makefile.nt
deleted file mode 100644 (file)
index 8518e17..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-#//%2006////////////////////////////////////////////////////////////////////////
-#//
-#// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-#// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-#// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation, The Open Group.
-#// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
-#// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; VERITAS Software Corporation; The Open Group.
-#// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
-#// EMC Corporation; Symantec Corporation; The Open Group.
-#//
-#// Permission is hereby granted, free of charge, to any person obtaining a copy
-#// of this software and associated documentation files (the "Software"), to
-#// deal in the Software without restriction, including without limitation the
-#// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-#// sell copies of the Software, and to permit persons to whom the Software is
-#// furnished to do so, subject to the following conditions:
-#// 
-#// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-#// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-#// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-#// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-#// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-#// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-#// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#//
-#//==============================================================================
-CC=cl.exe
-ifdef DEBUG
-CFLAGS=/nologo /Od /D "WIN32" /D "_DEBUG" /Gm /EHsc /RTC1 /MTd /W3 /c /Zi /TC
-LDFLAGS=/nologo /dll /debug
-else
-CFLAGS=/nologo /O2 /D "WIN32" /EHsc /MT /W3 /c /TC
-LDFLAGS=/nologo /dll
-endif
-
-
-all: slp_srvreg.exe
-
-##############################################################
-# slp_query
-##############################################################
-slp_srvreg.obj : slp_srvreg.c
-       $(CC) $(CFLAGS) $<
-slp_srvreg.exe : slp_srvreg.obj
-       $(CC) /nologo /Fe$@ slp_srvreg.obj ../slp_client/slp_client.lib Ws2_32.lib
-
-clean:
-       $(RM) *.obj *.pdb *.idb *.exe
-
diff --git a/src/Unsupported/slp_client/src/cmd-utils/slp_srvreg/slp_srvreg.c b/src/Unsupported/slp_client/src/cmd-utils/slp_srvreg/slp_srvreg.c
deleted file mode 100644 (file)
index 9752d8a..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-/*****************************************************************************
- *  Description: scripting shell for slp_client - generates an slp REGISTRATION
- *
- *  Originated: September 16, 2002
- *     Original Author: Mike Day md@soft-hackle.net
- *                       mdday@us.ibm.com
- *
- *  $Header: /cvs/MSB/pegasus/src/Unsupported/slp_client/src/cmd-utils/slp_srvreg/Attic/slp_srvreg.c,v 1.3 2003/11/18 23:59:20 tony Exp $                                                                  
- *                                                                         
- *  Copyright (c) 2001 - 2003  IBM                                          
- *  Copyright (c) 2000 - 2003 Michael Day                                    
- *                                                                           
- *  Permission is hereby granted, free of charge, to any person obtaining a  
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation 
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
- *  and/or sell copies of the Software, and to permit persons to whom the     
- *  Software is furnished to do so, subject to the following conditions:       
- * 
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- * 
- * 
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- *
- *****************************************************************************/
-
-
-#define SLP_LIB_IMPORT
-#include "../slp_client/slp_client.h"
-#ifdef _WIN32
-#include <time.h>
-#endif
-
-int8 *type, *url, *attrs, *addr, *scopes, *iface, *spi;
-uint16 life = 0x0fff, port=427;
-BOOL should_listen = FALSE, dir_agent = FALSE, test = FALSE;
-
-
-void free_globals(void)
-{
-  if(type != NULL)
-    free(type);
-  if(url != NULL)
-    free(url);
-  if(attrs != NULL)
-    free(attrs);
-  if(addr != NULL)
-    free(addr);
-  if(scopes != NULL)
-    free(scopes);
-  if(iface != NULL)
-    free(iface);
-}
-
-
-void usage(void)
-{
-  printf("\nslp_srvreg -- transmit an SLP Service Registration and print the results.\n");
-  printf("-------------------------------------------------------------------------\n");
-  printf("slp_srvreg  --type=service-type-string\n");
-  printf("            --url=url-string\n");
-  printf("            --attributes=attribute-string\n");
-  printf("           [--address=target-IP]\n");
-  printf("           [--port=target-port]\n");
-  printf("           [--scopes=scope-string]\n");
-  printf("           [--lifetime=seconds]\n"); 
-  printf("           [--interface=host-IP]\n");
-  printf("           [--daemon=true]\n");
-  printf("           [--use_da=true]\n");
-  printf("           [--test]\n");
-  printf("           [--spi=security-parameters-index] (not used)\n"); 
-  printf("\n");
-  printf("All parameters must be a single string containing no spaces.\n");
-  printf("Always use the format of <parameter>=<value>.\n");
-  printf("Parameters enclosed in brackets are not optional.\n");
-  
-}
-
-
-BOOL get_options(int argc, char *argv[])
-{
-  int i;
-  int8 *bptr;
-  
-  for(i = 1; i < argc; i++){
-    if((*argv[i] == '-') && (*(argv[i] + 1) == '-')) {
-      if(TRUE == lslp_pattern_match(argv[i] + 2, "type=*", FALSE)) {
-       bptr = argv[i] + 2;
-       while(*bptr != '=') bptr++;
-       bptr++;
-       /* handle case where type is specified twice on the cmd line */
-       if(type != NULL)
-         free(type);
-       type = strdup(bptr);
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "url=*", FALSE)) {
-       bptr = argv[i] + 2;
-       while(*bptr != '=') bptr++;
-       bptr++;
-       if(url != NULL)
-         free(url);
-       url = strdup(bptr);
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "attributes=*", FALSE)) {
-       bptr = argv[i] + 2;
-       while(*bptr != '=') bptr++;
-       bptr++;
-       if(attrs != NULL)
-         free(attrs);
-       attrs = strdup(bptr);
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "address=*", FALSE)) {
-       bptr = argv[i] + 2;
-       while(*bptr != '=') bptr++;
-       bptr++;
-       if(addr != NULL)
-         free(addr);
-       addr = strdup(bptr);
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "scopes=*", FALSE)) {
-       bptr = argv[i] + 2;
-       while(*bptr != '=') bptr++;
-       bptr++;
-       if(scopes != NULL)
-         free(scopes);
-       scopes = strdup(bptr);
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "lifetime*", FALSE)) {
-       bptr = argv[i] + 2;
-       while(*bptr != '=') bptr++;
-       bptr++;
-       life = (uint16)strtoul(bptr, NULL, 10);
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "port=*", FALSE)) {
-       bptr = argv[i] + 2;
-       while(*bptr != '=') bptr++;
-       bptr++;
-       port = (uint16)strtoul(bptr, NULL, 10);
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "interface=*", FALSE)) {
-       bptr = argv[i] + 2;
-       while(*bptr != '=') bptr++;
-       bptr++;
-       if(iface != NULL)
-         free(iface);
-       iface = strdup(bptr);
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "daemon=true*", FALSE)) {
-       should_listen = TRUE;
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "test*", FALSE)) {
-       test = TRUE;
-      } else if(TRUE == lslp_pattern_match(argv[i] + 2, "use_da=true*", FALSE)) {
-       dir_agent = TRUE;
-      }
-    }
-  }
-  
-  if( type == NULL || url == NULL || attrs == NULL )
-    return FALSE;
-  return TRUE;
-}
-
-
-int main(int argc, char **argv)
-{
-  struct slp_client *client;
-  int count = 0;
-  time_t now, last;
-  lslpMsg msg_list;
-  
-  
-  if(FALSE == get_options(argc, argv)) {
-    usage();
-  } else {
-    if(scopes == NULL)
-      scopes = strdup("DEFAULT");
-    if(test == TRUE) {
-      return test_srv_reg(type, url, attrs, scopes);
-    }
-    
-    if(NULL != (client = create_slp_client(addr, 
-                                          iface, 
-                                          port, 
-                                          "DSA", 
-                                          scopes, 
-                                          should_listen,
-                                          dir_agent))) {
-      now = (last = time(NULL));
-      if( addr != NULL && inet_addr(addr) == inet_addr("127.0.0.1") )
-       count = client->srv_reg_local(client, url, attrs, type, scopes, life);
-      else
-       count = client->srv_reg_all(client, url, attrs, type, scopes, life);
-      while(should_listen == TRUE) {
-       _LSLP_SLEEP(10);
-       client->service_listener(client, 0, &msg_list);
-       now = time(NULL);
-       if((now - last) > (life - 1)) {
-         count = client->srv_reg_local(client, url, attrs, type, scopes, life);
-         last = time(NULL);
-       }
-      }
-      destroy_slp_client(client);
-    }
-    printf("srvreg: registered %s with %d SLP agents.\n", type, count);
-  }
-  free_globals();
-  return(1);
-}
-