summaryrefslogtreecommitdiff
path: root/ACEXML/apps
diff options
context:
space:
mode:
authornanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-05-08 21:54:10 +0000
committernanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-05-08 21:54:10 +0000
commit95c422da572abb9ed6376bb0dbf3f069d5b60e34 (patch)
tree010302338ac8df945f024f8f90d1d9d7cd2b2356 /ACEXML/apps
parent64ac93e545c3ba1ac4263fb406ab7e5a66fd06ea (diff)
downloadATCD-95c422da572abb9ed6376bb0dbf3f069d5b60e34.tar.gz
ChangeLogTag:Wed May 8 15:15:41 2002 Nanbor Wang <nanbor@cs.wustl.edu>
Diffstat (limited to 'ACEXML/apps')
-rw-r--r--ACEXML/apps/Makefile17
-rw-r--r--ACEXML/apps/Makefile.bor8
-rw-r--r--ACEXML/apps/XML_Apps.dsw29
-rw-r--r--ACEXML/apps/svcconf/Makefile40
-rw-r--r--ACEXML/apps/svcconf/Makefile.bor20
-rw-r--r--ACEXML/apps/svcconf/README4
-rw-r--r--ACEXML/apps/svcconf/Svcconf.cpp95
-rw-r--r--ACEXML/apps/svcconf/Svcconf.h46
-rw-r--r--ACEXML/apps/svcconf/Svcconf_Handler.cpp671
-rw-r--r--ACEXML/apps/svcconf/Svcconf_Handler.h305
-rw-r--r--ACEXML/apps/svcconf/Svcconf_Handler.i133
-rw-r--r--ACEXML/apps/svcconf/XML_Svc_Conf_Parser.dsp119
12 files changed, 1487 insertions, 0 deletions
diff --git a/ACEXML/apps/Makefile b/ACEXML/apps/Makefile
new file mode 100644
index 00000000000..a5f05b99ae5
--- /dev/null
+++ b/ACEXML/apps/Makefile
@@ -0,0 +1,17 @@
+#----------------------------------------------------------------------------
+# $Id$
+#
+# Makefile for the client programs that test the ACE network services
+#----------------------------------------------------------------------------
+
+DIRS = svcconf
+
+#----------------------------------------------------------------------------
+# Include macros and targets
+#----------------------------------------------------------------------------
+
+include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU
+include $(ACE_ROOT)/include/makeinclude/macros.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.common.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.nested.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.nolocal.GNU
diff --git a/ACEXML/apps/Makefile.bor b/ACEXML/apps/Makefile.bor
new file mode 100644
index 00000000000..1da5c84407c
--- /dev/null
+++ b/ACEXML/apps/Makefile.bor
@@ -0,0 +1,8 @@
+#
+# Makefile for building the ACE XML Library
+#
+
+DIRS = \
+ svcconf
+
+!include <$(ACE_ROOT)\include\makeinclude\recurse.bor>
diff --git a/ACEXML/apps/XML_Apps.dsw b/ACEXML/apps/XML_Apps.dsw
new file mode 100644
index 00000000000..0ed29a77e72
--- /dev/null
+++ b/ACEXML/apps/XML_Apps.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "XML_Svc_Conf_Parser"=.\svcconf\XML_Svc_Conf_Parser.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/ACEXML/apps/svcconf/Makefile b/ACEXML/apps/svcconf/Makefile
new file mode 100644
index 00000000000..fced65f587e
--- /dev/null
+++ b/ACEXML/apps/svcconf/Makefile
@@ -0,0 +1,40 @@
+#----------------------------------------------------------------------------
+# $Id$
+#
+# Makefile for the server-side ACE network services
+#----------------------------------------------------------------------------
+
+LIB = libACEXML_XML_Svc_Conf_Parser.a
+SHLIB = libACEXML_XML_Svc_Conf_Parser.$(SOEXT)
+
+FILES = Svcconf_Handler \
+ Svcconf
+
+DEFS = $(addsuffix .h,$(FILES))
+LSRC = $(addsuffix .cpp,$(FILES))
+
+LIBS += -lACEXML_Parser -lACEXML $(ACELIB)
+CCFLAGS += -I../..
+
+BUILD = $(VLIB) $(VSHLIB)
+
+#----------------------------------------------------------------------------
+# Include macros and targets
+#----------------------------------------------------------------------------
+
+include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU
+include $(ACE_ROOT)/include/makeinclude/macros.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.common.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.lib.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.local.GNU
+
+#----------------------------------------------------------------------------
+# Local targets
+#----------------------------------------------------------------------------
+
+#----------------------------------------------------------------------------
+# Dependencies
+#----------------------------------------------------------------------------
+# DO NOT DELETE THIS LINE -- g++dep uses it.
+# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
diff --git a/ACEXML/apps/svcconf/Makefile.bor b/ACEXML/apps/svcconf/Makefile.bor
new file mode 100644
index 00000000000..0f40444b564
--- /dev/null
+++ b/ACEXML/apps/svcconf/Makefile.bor
@@ -0,0 +1,20 @@
+# Makefile for building the parser
+
+NAME = ACEXML_XML_Svc_Conf_Parser
+
+OBJFILES = \
+ $(OBJDIR)\Svcconf.obj \
+ $(OBJDIR)\Svcconf_Handler.obj
+
+CFLAGS = \
+ $(ACE_CFLAGS) \
+ $(ACE_XML_CFLAGS)
+
+CPPDIR = .;..
+
+LIBFILES = \
+ $(ACE_LIB) \
+ $(ACE_XML_LIB)
+# WE need both -lACEXML and -lACEXML_Parser here
+
+!include <$(ACE_ROOT)\include\makeinclude\build_core_library.bor>
diff --git a/ACEXML/apps/svcconf/README b/ACEXML/apps/svcconf/README
new file mode 100644
index 00000000000..8a39a40bfe3
--- /dev/null
+++ b/ACEXML/apps/svcconf/README
@@ -0,0 +1,4 @@
+$Id$
+
+This directory implement a DLL that contains the parser for XML based
+service configurator.
diff --git a/ACEXML/apps/svcconf/Svcconf.cpp b/ACEXML/apps/svcconf/Svcconf.cpp
new file mode 100644
index 00000000000..919b5f39818
--- /dev/null
+++ b/ACEXML/apps/svcconf/Svcconf.cpp
@@ -0,0 +1,95 @@
+// $Id$
+
+
+#include "Svcconf.h"
+#include "common/FileCharStream.h"
+#include "common/StrCharStream.h"
+#include "parser/parser/Parser.h"
+
+extern "C" ACE_Proper_Export_Flag ACE_XML_Svc_Conf *
+_ACEXML_create_XML_Svc_Conf_Object (void)
+{
+ ACE_XML_Svc_Conf *retp = 0;
+
+ ACE_NEW_RETURN (retp,
+ ACEXML_Svcconf_Parser (),
+ 0);
+
+ return retp;
+}
+
+ACEXML_Svcconf_Parser::ACEXML_Svcconf_Parser ()
+{
+ this->parser_.setContentHandler (&this->svcconf_handler_);
+ this->parser_.setDTDHandler (&this->svcconf_handler_);
+ this->parser_.setErrorHandler (&this->svcconf_handler_);
+ this->parser_.setEntityResolver (&this->svcconf_handler_);
+}
+
+ACEXML_Svcconf_Parser::~ACEXML_Svcconf_Parser ()
+{
+
+}
+
+void *
+ACEXML_Svcconf_Parser::operator new (size_t s)
+{
+ return ::new char[s];
+}
+
+void
+ACEXML_Svcconf_Parser::operator delete (void *p)
+{
+ delete[] (char *)p;
+}
+
+int
+ACEXML_Svcconf_Parser::parse_file (const ACE_TCHAR file[])
+{
+ if (file == 0)
+ ACE_ERROR_RETURN ((LM_ERROR, "ACEXML_Svcconf_Parser: No filename specified\n"), -1);
+
+ ACEXML_FileCharStream *fstm = 0;
+ ACE_NEW_RETURN (fstm,
+ ACEXML_FileCharStream (),
+ 1);
+
+ if (fstm->open (file) != 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("ACEXML_Svcconf_Parser: Fail to open XML file: %s\n"),
+ file),
+ -1);
+
+ this->input_stream_.setCharStream (fstm);
+
+ this->parser_.parse (&this->input_stream_, this->env_);
+ if (this->env_.exception ())
+ {
+ this->env_.exception ()->print ();
+ return -1;
+ }
+ return 0;
+}
+
+
+int
+ACEXML_Svcconf_Parser::parse_string (const ACE_TCHAR str[])
+{
+ if (str == 0)
+ ACE_ERROR_RETURN ((LM_ERROR, "ACEXML_Svcconf_Parser: Can't parse a null string\n"), -1);
+
+ ACEXML_StrCharStream *stm = 0;
+ ACE_NEW_RETURN (stm,
+ ACEXML_StrCharStream (str),
+ -1);
+
+ this->input_stream_.setCharStream (stm);
+
+ this->parser_.parse (&this->input_stream_, this->env_);
+ if (this->env_.exception ())
+ {
+ this->env_.exception ()->print ();
+ return -1;
+ }
+ return 0;
+}
diff --git a/ACEXML/apps/svcconf/Svcconf.h b/ACEXML/apps/svcconf/Svcconf.h
new file mode 100644
index 00000000000..0775658dac5
--- /dev/null
+++ b/ACEXML/apps/svcconf/Svcconf.h
@@ -0,0 +1,46 @@
+/* -*- C++ -*- */
+
+//=============================================================================
+/**
+ * @file Svcconf.h
+ *
+ * $Id$
+ *
+ * @author Nanbor Wang <nanbor@cs.wustl.edu>
+ */
+//=============================================================================
+
+
+#ifndef ACEXML_SVCCONF_H
+#define ACEXML_SVCCONF_H
+
+#include "ace/pre.h"
+#include "ace/XML_Svc_Conf.h"
+#include "parser/parser/Parser.h"
+#include "Svcconf_Handler.h"
+
+
+class ACEXML_Svcconf_Parser : public ACE_XML_Svc_Conf
+{
+public:
+ ACEXML_Svcconf_Parser ();
+
+ virtual ~ACEXML_Svcconf_Parser ();
+
+ virtual int parse_file (const ACE_TCHAR file[]);
+
+ virtual int parse_string (const ACE_TCHAR str[]);
+
+ void * operator new (size_t bytes);
+
+ void operator delete (void *ptr);
+
+protected:
+ ACEXML_Parser parser_;
+ ACEXML_Svcconf_Handler svcconf_handler_;
+ ACEXML_InputSource input_stream_;
+ ACEXML_Env env_;
+};
+
+#include "ace/post.h"
+#endif /* ACEXML_SVCCONF_H */
diff --git a/ACEXML/apps/svcconf/Svcconf_Handler.cpp b/ACEXML/apps/svcconf/Svcconf_Handler.cpp
new file mode 100644
index 00000000000..87a908f067e
--- /dev/null
+++ b/ACEXML/apps/svcconf/Svcconf_Handler.cpp
@@ -0,0 +1,671 @@
+// -*- C++ -*- $Id$
+
+#include "Svcconf_Handler.h"
+#include "ace/ACE.h"
+#include "ace/Log_Msg.h"
+#include "ace/Service_Config.h"
+#include "ace/Service_Types.h"
+#include "ace/Service_Repository.h"
+#include "ace/DLL.h"
+#include "ace/ARGV.h"
+#include "ace/Module.h"
+
+#if !defined (__ACEXML_INLINE__)
+# include "Svcconf_Handler.i"
+#endif /* __ACEXML_INLINE__ */
+
+ACEXML_Svcconf_Handler::ACEXML_Svcconf_Handler (void)
+ : in_stream_def_ (0),
+ in_module_ (0),
+ stream_svc_type_ (0),
+ stream_ (0),
+ dll_handle_ (0)
+{
+ // no-op
+}
+
+ACEXML_Svcconf_Handler::~ACEXML_Svcconf_Handler (void)
+{
+ // no-op
+}
+
+void
+ACEXML_Svcconf_Handler::characters (const ACEXML_Char *,
+ int,
+ int,
+ ACEXML_Env &)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ // no-op
+}
+
+void
+ACEXML_Svcconf_Handler::endDocument (ACEXML_Env &)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ // no-op
+}
+
+void
+ACEXML_Svcconf_Handler::endElement (const ACEXML_Char *,
+ const ACEXML_Char *,
+ const ACEXML_Char *qName,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ if (ACE_OS_String::strcmp (qName, ACE_TEXT ("dynamic")) == 0)
+ {
+ ACE_Parsed_Info *active_info = (this->in_stream_def_ == 0 ?
+ &this->parsed_info_ :
+ &this->stream_info_);
+
+ ACE_DLL svc_dll;
+
+ if (svc_dll.open (active_info->path ()) == -1)
+ {
+ xmlenv.exception (new ACEXML_SAXException ("Cannot locate DLL\n"));
+ return;
+ }
+
+ void *(*func) (ACE_Service_Object_Exterminator *) = 0;
+ ACE_Service_Object_Exterminator gobbler = 0;
+ void *symbol = 0;
+
+ long temp_ptr =
+ ACE_reinterpret_cast(long, svc_dll.symbol (active_info->init_func ()));
+ func = ACE_reinterpret_cast(void *(*)(ACE_Service_Object_Exterminator *),
+ temp_ptr);
+
+ if (func == 0)
+ {
+ xmlenv.exception (new ACEXML_SAXException ("Cannot locator init function\n"));
+ return;
+ }
+ symbol = (*func)(&gobbler); // target object created in the loaded DLL.
+
+ ACE_Service_Type_Impl *stp = ACE_Service_Config::create_service_type_impl
+ (active_info->name (),
+ active_info->service_type (),
+ symbol,
+ ACE_Service_Type::DELETE_THIS |
+ ACE_Service_Type::DELETE_OBJ,
+ gobbler);
+
+ if (this->in_stream_def_)
+ {
+// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Create dynamic %s for stream\n"),
+// this->stream_info_.name ()));
+ if (active_info->service_type () == ACE_Service_Type::STREAM)
+ {
+ this->stream_ = (ACE_Stream_Type *) stp;
+ this->dll_handle_ = svc_dll.get_handle (1);
+ }
+ else
+ {
+ xmlenv.exception (new ACEXML_SAXException
+ ("Expecting Stream type in stream header\n"));
+ return;
+ }
+
+ this->stream_svc_type_ =
+ ACE_Service_Config::create_service_type (this->stream_info_.name (),
+ this->stream_,
+ this->dll_handle_,
+ this->stream_info_.active ());
+
+ }
+ else
+ {
+ if (this->in_module_)
+ {
+ ACE_ARGV args (active_info->init_params ());
+
+ ACE_Module_Type *mt = (ACE_Module_Type *) stp;
+
+ ACE_Module<ACE_SYNCH> *mp = (ACE_Module<ACE_SYNCH> *) mt->object ();
+
+ if (ACE_OS::strcmp (mp->name (), active_info->name ()) != 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_LIB_TEXT ("warning: assigning Module_Type name %s to Module %s since names differ\n"),
+ active_info->name (),
+ mp->name ()));
+ mp->name (active_info->name ());
+ }
+
+ if (mt->init (args.argc (), args.argv ()) == -1
+ || this->stream_->push (mt) == -1)
+ {
+ xmlenv.exception (new ACEXML_SAXException ("Error initializing module"));
+ }
+
+
+// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Push dynamic %s into stream %s\n"),
+// this->parsed_info_.name (),
+// this->stream_info_.name ()));
+ }
+ else
+ {
+ ACE_Service_Type *stype =
+ ACE_Service_Config::create_service_type (active_info->name (),
+ stp,
+ svc_dll.get_handle (1),
+ active_info->active ());
+ // @@ Check error here.
+
+ // ACE_DEBUG ((LM_INFO, ACE_TEXT ("Apply dynamic %s\n"),
+// this->parsed_info_.name ()));
+ if (ACE_Service_Config::initialize (stype,
+ active_info->init_params ()) == -1)
+ {
+ xmlenv.exception (new ACEXML_SAXException
+ ("Fail to initialize dynamic service\n"));
+ return;
+ }
+ }
+ this->parsed_info_.reset ();
+ }
+ }
+ else if (ACE_OS_String::strcmp (qName, ACE_TEXT ("static")) == 0)
+ {
+ if (this->in_stream_def_)
+ {
+ // @@ Couldn't make sense out of the original Svc_Conf.y.
+ ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Create static %s for stream\n"),
+ this->stream_info_.name ()));
+ }
+ else
+ {
+ if (this->in_module_)
+ {
+ // @@ Couldn't make sense out of the original Svc_Conf.y.
+ ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Push static %s into stream %s\n"),
+ this->parsed_info_.name (),
+ this->stream_info_.name ()));
+ }
+ else
+ {
+// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Apply static %s\n"),
+// this->parsed_info_.name ()));
+ if (ACE_Service_Config::initialize (this->parsed_info_.name (),
+ this->parsed_info_.init_params ()) == -1)
+ {
+ xmlenv.exception (new ACEXML_SAXException
+ (ACE_TEXT ("Fail initializing static service\n")));
+ }
+ }
+ this->parsed_info_.reset ();
+ }
+ }
+ else if (ACE_OS_String::strcmp (qName, ACE_TEXT ("module")) == 0)
+ {
+ this->in_module_ = 0;
+ }
+ else if (ACE_OS_String::strcmp (qName, ACE_TEXT ("streamdef")) == 0)
+ {
+// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Apply stream %s of type %s\n"),
+// this->stream_info_.name (),
+// this->stream_info_.name ()));
+ ACE_Service_Config::initialize (this->stream_svc_type_,
+ this->stream_info_.init_params ());
+
+ this->stream_info_.reset ();
+ this->stream_svc_type_ = 0;
+ this->stream_ = 0;
+ this->dll_handle_ = 0;
+ }
+ else if (ACE_OS_String::strcmp (qName, ACE_TEXT ("stream")) == 0)
+ {
+// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Apply stream %s of type %s\n"),
+// this->stream_info_.name (),
+// this->stream_info_.name ()));
+ this->stream_info_.reset ();
+ }
+ else
+ {
+ }
+}
+
+void
+ACEXML_Svcconf_Handler::endPrefixMapping (const ACEXML_Char *,
+ ACEXML_Env &)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ // no-op
+}
+
+void
+ACEXML_Svcconf_Handler::ignorableWhitespace (const ACEXML_Char *,
+ int,
+ int,
+ ACEXML_Env &)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ // no-op
+}
+
+void
+ACEXML_Svcconf_Handler::processingInstruction (const ACEXML_Char *,
+ const ACEXML_Char *,
+ ACEXML_Env &)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ // no-op
+}
+
+void
+ACEXML_Svcconf_Handler::setDocumentLocator (ACEXML_Locator *,
+ ACEXML_Env &)
+{
+ // no-op
+}
+
+void
+ACEXML_Svcconf_Handler::skippedEntity (const ACEXML_Char *,
+ ACEXML_Env &)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ // no-op
+}
+
+void
+ACEXML_Svcconf_Handler::startDocument (ACEXML_Env &)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ // no-op
+}
+
+void
+ACEXML_Svcconf_Handler::startElement (const ACEXML_Char *,
+ const ACEXML_Char *,
+ const ACEXML_Char *qName,
+ ACEXML_Attributes *alist,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ if (ACE_OS_String::strcmp (qName, ACE_TEXT ("dynamic")) == 0)
+ {
+ this->get_dynamic_attrs (alist, xmlenv);
+ }
+ else if (ACE_OS_String::strcmp (qName, ACE_TEXT ("initializer")) == 0)
+ {
+ this->get_initializer_attrs (alist, xmlenv);
+
+ }
+ else if (ACE_OS_String::strcmp (qName, ACE_TEXT ("static")) == 0)
+ {
+ this->get_static_attrs (alist, xmlenv);
+ }
+ else if (ACE_OS_String::strcmp (qName, ACE_TEXT ("stream")) == 0)
+ {
+ this->get_stream_id (alist, xmlenv);
+
+ if (ACE_Service_Repository::instance()->find
+ (this->stream_info_.name (),
+ (const ACE_Service_Type **) &this->stream_svc_type_) == -1)
+ {
+ xmlenv.exception (new ACEXML_SAXException ("Can not find stream\n"));
+ return;
+ }
+ this->stream_ = this->stream_svc_type_ == 0
+ ? 0
+ : ACE_dynamic_cast (ACE_Stream_Type *,
+ ACE_const_cast (ACE_Service_Type_Impl *,
+ this->stream_svc_type_->type ()));
+
+// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Retrieve stream %s from repository\n"),
+// this->stream_info_.name ()));
+ }
+ else if (ACE_OS_String::strcmp (qName, ACE_TEXT ("streamdef")) == 0)
+ {
+ this->in_stream_def_ = 1;
+ // @@ Set up stream service object
+ }
+ else if (ACE_OS_String::strcmp (qName, ACE_TEXT ("module")) == 0)
+ {
+ this->in_stream_def_ = 0;
+ this->in_module_ = 1;
+ }
+ else if (ACE_OS_String::strcmp (qName, ACE_TEXT ("resume")) == 0)
+ {
+ this->get_id (alist, xmlenv);
+ if (this->in_module_)
+ {
+// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Resume %s in stream %s\n"),
+// this->parsed_info_.name (),
+// this->stream_info_.name ()));
+ ACE_Module_Type *mt = (this->stream_ == 0)
+ ? 0
+ : this->stream_->find (this->parsed_info_.name ());
+
+ if (mt == 0)
+ {
+ xmlenv.exception (new ACEXML_SAXException ("Can't locate module\n"));
+ return;
+ }
+
+ mt->resume ();
+ }
+ else
+ {
+// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Resume %s\n"),
+// this->parsed_info_.name ()));
+ if (ACE_Service_Config::resume (this->parsed_info_.name ()) == -1)
+ {
+ xmlenv.exception (new ACEXML_SAXException (ACE_TEXT ("Resume fail\n")));
+ }
+ }
+ this->parsed_info_.reset ();
+ }
+ else if (ACE_OS_String::strcmp (qName, ACE_TEXT ("suspend")) == 0)
+ {
+ this->get_id (alist, xmlenv);
+ if (this->in_module_)
+ {
+// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Suspend %s in stream %s\n"),
+// this->parsed_info_.name (),
+// this->stream_info_.name ()));
+ ACE_Module_Type *mt = (this->stream_ == 0)
+ ? 0
+ : this->stream_->find (this->parsed_info_.name ());
+
+ if (mt == 0)
+ {
+ xmlenv.exception (new ACEXML_SAXException ("Can't locate module\n"));
+ return;
+ }
+
+ mt->suspend ();
+ }
+ else
+ {
+ // ACE_DEBUG ((LM_INFO, ACE_TEXT ("Suspend %s\n"),
+ // this->parsed_info_.name ()));
+ if (ACE_Service_Config::suspend (this->parsed_info_.name ()) == -1)
+ {
+ xmlenv.exception (new ACEXML_SAXException (ACE_TEXT ("Suspend fail\n")));
+ }
+ }
+ this->parsed_info_.reset ();
+ }
+ else if (ACE_OS_String::strcmp (qName, ACE_TEXT ("remove")) == 0)
+ {
+ this->get_id (alist, xmlenv);
+ if (this->in_module_)
+ {
+// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Remove %s in stream %s\n"),
+// this->parsed_info_.name (),
+// this->stream_info_.name ()));
+ ACE_Module_Type *mt = (this->stream_ == 0)
+ ? 0
+ : this->stream_->find (this->parsed_info_.name ());
+
+ if (mt == 0)
+ {
+ xmlenv.exception (new ACEXML_SAXException ("Can't locate module\n"));
+ return;
+ }
+
+ this->stream_->remove (mt);
+ }
+ else
+ {
+// ACE_DEBUG ((LM_INFO, ACE_TEXT ("Remove %s\n"),
+// this->parsed_info_.name ()));
+ if (ACE_Service_Config::remove (this->parsed_info_.name ()) == -1)
+ {
+ xmlenv.exception (new ACEXML_SAXException (ACE_TEXT ("Remove fail\n")));
+ }
+ }
+ this->parsed_info_.reset ();
+ }
+ else if (ACE_OS_String::strcmp (qName, ACE_TEXT ("ACE_Svc_Conf")) == 0)
+ {
+ // Main document tag. no-op.
+// ACE_DEBUG ((LM_INFO, ACE_TEXT ("ACE_Svc_Conf tag\n")));
+ }
+ else
+ {
+ // @@ Error. Perhaps we should relay to user event handler here, if available.
+ }
+
+ return;
+}
+
+void
+ACEXML_Svcconf_Handler::startPrefixMapping (const ACEXML_Char *,
+ const ACEXML_Char *,
+ ACEXML_Env &)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ // No-op.
+}
+
+// *** Methods inherit from ACEXML_DTDHandler.
+
+void
+ACEXML_Svcconf_Handler::notationDecl (const ACEXML_Char *,
+ const ACEXML_Char *,
+ const ACEXML_Char *,
+ ACEXML_Env &)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ // No-op.
+}
+
+void
+ACEXML_Svcconf_Handler::unparsedEntityDecl (const ACEXML_Char *,
+ const ACEXML_Char *,
+ const ACEXML_Char *,
+ const ACEXML_Char *,
+ ACEXML_Env &)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ // No-op.
+}
+
+// Methods inherit from ACEXML_EnitityResolver.
+
+ACEXML_InputSource *
+ACEXML_Svcconf_Handler::resolveEntity (const ACEXML_Char *,
+ const ACEXML_Char *,
+ ACEXML_Env &)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ // No-op.
+ return 0;
+}
+
+// Methods inherit from ACEXML_ErrorHandler.
+
+ /*
+ * Receive notification of a recoverable error.
+ */
+void
+ACEXML_Svcconf_Handler::error (ACEXML_SAXParseException &,
+ ACEXML_Env &)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ // No-op.
+}
+
+void
+ACEXML_Svcconf_Handler::fatalError (ACEXML_SAXParseException &,
+ ACEXML_Env &)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ // No-op.
+}
+
+void
+ACEXML_Svcconf_Handler::warning (ACEXML_SAXParseException &,
+ ACEXML_Env &)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+{
+ // No-op.
+}
+
+int
+ACEXML_Svcconf_Handler::get_stream_id (ACEXML_Attributes *alist,
+ ACEXML_Env &xmlenv)
+{
+ if (alist != 0)
+ for (size_t i = 0; i < alist->getLength (); ++i)
+ {
+ if (ACE_OS_String::strcmp (alist->getQName (i), ACE_TEXT ("id")) == 0)
+ {
+ this->stream_info_.name (alist->getValue (i));
+ }
+ else
+ {
+ xmlenv.exception (new ACEXML_SAXException ("Invalid stream attribute\n"));
+ return -1;
+ }
+ }
+ return 0;
+}
+
+int
+ACEXML_Svcconf_Handler::get_id (ACEXML_Attributes *alist,
+ ACEXML_Env &xmlenv)
+{
+ if (alist != 0)
+ for (size_t i = 0; i < alist->getLength (); ++i)
+ {
+ if (ACE_OS_String::strcmp (alist->getQName (i), ACE_TEXT ("id")) == 0)
+ {
+ this->parsed_info_.name (alist->getValue (i));
+ }
+ else
+ {
+ xmlenv.exception (new ACEXML_SAXException ("Invalid attribute, expecting 'id'\n"));
+ return -1;
+ }
+ }
+ return 0;
+}
+
+int
+ACEXML_Svcconf_Handler::get_dynamic_attrs (ACEXML_Attributes *alist,
+ ACEXML_Env &xmlenv)
+{
+ if (alist != 0)
+ {
+ ACE_Parsed_Info *info = (this->in_stream_def_ == 0 ?
+ &this->parsed_info_ :
+ &this->stream_info_);
+ for (size_t i = 0; i < alist->getLength (); ++i)
+ {
+ if (ACE_OS_String::strcmp (alist->getQName (i), ACE_TEXT ("id")) == 0)
+ {
+ info->name (alist->getValue (i));
+ }
+ else if (ACE_OS_String::strcmp (alist->getQName (i), ACE_TEXT ("status")) == 0)
+ {
+ if (ACE_OS_String::strcmp (alist->getValue (i), ACE_TEXT ("inactive")) == 0)
+ {
+ info->active (0);
+ }
+ else if (ACE_OS_String::strcmp (alist->getValue (i), ACE_TEXT ("active")) == 0)
+ {
+ info->active (1);
+ }
+ else
+ {
+ xmlenv.exception
+ (new ACEXML_SAXException ("Invalid attribute value, expecting 'active' or 'inactive'\n"));
+ return -1;
+ }
+ }
+ else if (ACE_OS_String::strcmp (alist->getQName (i), ACE_TEXT ("type")) == 0)
+ {
+ if (ACE_OS_String::strcasecmp (alist->getValue (i), ACE_TEXT ("service_object")) == 0)
+ {
+ info->service_type (ACE_Service_Type::SERVICE_OBJECT);
+ }
+ else if (ACE_OS_String::strcasecmp (alist->getValue (i), ACE_TEXT ("stream")) == 0)
+ {
+ info->service_type (ACE_Service_Type::STREAM);
+ }
+ else if (ACE_OS_String::strcasecmp (alist->getValue (i), ACE_TEXT ("module")) == 0)
+ {
+ info->service_type (ACE_Service_Type::MODULE);
+ }
+ else
+ {
+ xmlenv.exception
+ (new ACEXML_SAXException ("Invalid Service_Object attribute value\n"));
+ return -1;
+ }
+ }
+ else
+ {
+ xmlenv.exception (new ACEXML_SAXException ("Invalid attribute\n"));
+ return -1;
+ }
+ }
+ }
+ return 0;
+}
+
+int
+ACEXML_Svcconf_Handler::get_initializer_attrs (ACEXML_Attributes *alist,
+ ACEXML_Env &xmlenv)
+{
+ if (alist != 0)
+ {
+ ACE_Parsed_Info *info = (this->in_stream_def_ == 0 ?
+ &this->parsed_info_ :
+ &this->stream_info_);
+ for (size_t i = 0; i < alist->getLength (); ++i)
+ {
+ if (ACE_OS_String::strcmp (alist->getQName (i), ACE_TEXT ("init")) == 0)
+ {
+ info->init_func (alist->getValue (i));
+ }
+ else if (ACE_OS_String::strcmp (alist->getQName (i), ACE_TEXT ("path")) == 0)
+ {
+ info->path (alist->getValue (i));
+ }
+ else if (ACE_OS_String::strcmp (alist->getQName (i), ACE_TEXT ("params")) == 0)
+ {
+ info->init_params (alist->getValue (i));
+ }
+ else
+ {
+ xmlenv.exception (new ACEXML_SAXException ("Invalid initializer attribute.\n"));
+ return -1;
+ }
+ }
+ }
+ return 0;
+}
+
+int
+ACEXML_Svcconf_Handler::get_static_attrs (ACEXML_Attributes *alist,
+ ACEXML_Env &xmlenv)
+{
+ if (alist != 0)
+ {
+ ACE_Parsed_Info *info = (this->in_stream_def_ == 0 ?
+ &this->parsed_info_ :
+ &this->stream_info_);
+ for (size_t i = 0; i < alist->getLength (); ++i)
+ {
+ if (ACE_OS_String::strcmp (alist->getQName (i), ACE_TEXT ("id")) == 0)
+ {
+ info->name (alist->getValue (i));
+ }
+ else if (ACE_OS_String::strcmp (alist->getQName (i), ACE_TEXT ("params")) == 0)
+ {
+ info->init_params (alist->getValue (i));
+ }
+ else
+ {
+ xmlenv.exception (new ACEXML_SAXException ("Invalid static attribute.\n"));
+ return -1;
+ }
+ }
+ }
+ return 0;
+}
diff --git a/ACEXML/apps/svcconf/Svcconf_Handler.h b/ACEXML/apps/svcconf/Svcconf_Handler.h
new file mode 100644
index 00000000000..22069f8b97f
--- /dev/null
+++ b/ACEXML/apps/svcconf/Svcconf_Handler.h
@@ -0,0 +1,305 @@
+// $Id$
+
+//=============================================================================
+/**
+ * @file Svcconf_Handler.h
+ *
+ * $Id$
+ *
+ * @author Nanbor Wang <nanbor@cs.wustl.edu>
+ */
+//=============================================================================
+
+#ifndef ACEXML_SVCCONF_HANDLER_H
+#define ACEXML_SVCCONF_HANDLER_H
+
+#include "common/DefaultHandler.h"
+#include "ace/Service_Types.h"
+
+class ACE_Parsed_Info
+{
+public:
+ ACE_Parsed_Info ();
+ ~ACE_Parsed_Info ();
+
+ /**
+ * Set/get name of a parsed entity.
+ */
+ int name (const ACEXML_Char *n);
+ const ACEXML_Char *name (void);
+
+ /**
+ * Set/get type of a dynamic node.
+ */
+ int service_type (int type);
+ int service_type (void);
+
+ /**
+ * Set/Get active status.
+ */
+ int active (int a);
+ int active (void);
+
+ /**
+ * Set/get initializer path.
+ */
+ int path (const ACEXML_Char *n);
+ const ACEXML_Char *path (void);
+
+ /**
+ * Set/get initializer init function.
+ */
+ int init_func (const ACEXML_Char *n);
+ const ACEXML_Char *init_func (void);
+
+ /**
+ * Set/get initializer init parameter.
+ */
+ int init_params (const ACEXML_Char *n);
+ const ACEXML_Char *init_params (void);
+
+ /**
+ * Reset Parsed_Info.
+ */
+ void reset (void);
+
+protected:
+ ACEXML_Char *name_;
+ int service_type_;
+ int active_;
+ ACEXML_Char *path_;
+ ACEXML_Char *init_func_;
+ ACEXML_Char *init_params_;
+};
+
+/**
+ * @class ACEXML_Svcconf_Handler
+ *
+ * @brief ACEXML_Svcconf_Handler is an example SAX event handler.
+ *
+ * This SAX event handler try to regenerate the XML document it
+ * reads with correct indentation.
+ */
+class ACEXML_Svcconf_Handler : public ACEXML_DefaultHandler
+{
+public:
+ /*
+ * Default constructor.
+ */
+ ACEXML_Svcconf_Handler (void);
+
+ /*
+ * Default destructor.
+ */
+ virtual ~ACEXML_Svcconf_Handler (void);
+
+ // Methods inherit from ACEXML_ContentHandler.
+
+ /*
+ * Receive notification of character data.
+ */
+ virtual void characters (const ACEXML_Char *ch,
+ int start,
+ int length,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+ /*
+ * Receive notification of the end of a document.
+ */
+ virtual void endDocument (ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+ /*
+ * Receive notification of the end of an element.
+ */
+ virtual void endElement (const ACEXML_Char *namespaceURI,
+ const ACEXML_Char *localName,
+ const ACEXML_Char *qName,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+ /*
+ * End the scope of a prefix-URI mapping.
+ */
+ virtual void endPrefixMapping (const ACEXML_Char *prefix,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+ /*
+ * Receive notification of ignorable whitespace in element content.
+ */
+ virtual void ignorableWhitespace (const ACEXML_Char *ch,
+ int start,
+ int length,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+ /*
+ * Receive notification of a processing instruction.
+ */
+ virtual void processingInstruction (const ACEXML_Char *target,
+ const ACEXML_Char *data,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+ /*
+ * Receive an object for locating the origin of SAX document events.
+ */
+ virtual void setDocumentLocator (ACEXML_Locator *locator,
+ ACEXML_Env &xmlenv) ;
+
+ /*
+ * Receive notification of a skipped entity.
+ */
+ virtual void skippedEntity (const ACEXML_Char *name,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+ /*
+ * Receive notification of the beginning of a document.
+ */
+ virtual void startDocument (ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+ /*
+ * Receive notification of the beginning of an element.
+ */
+ virtual void startElement (const ACEXML_Char *namespaceURI,
+ const ACEXML_Char *localName,
+ const ACEXML_Char *qName,
+ ACEXML_Attributes *atts,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+ /*
+ * Begin the scope of a prefix-URI Namespace mapping.
+ */
+ virtual void startPrefixMapping (const ACEXML_Char *prefix,
+ const ACEXML_Char *uri,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+ // *** Methods inherit from ACEXML_DTDHandler.
+
+ /*
+ * Receive notification of a notation declaration event.
+ */
+ virtual void notationDecl (const ACEXML_Char *name,
+ const ACEXML_Char *publicId,
+ const ACEXML_Char *systemId,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+ /*
+ * Receive notification of an unparsed entity declaration event.
+ */
+ virtual void unparsedEntityDecl (const ACEXML_Char *name,
+ const ACEXML_Char *publicId,
+ const ACEXML_Char *systemId,
+ const ACEXML_Char *notationName,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+ // Methods inherit from ACEXML_EnitityResolver.
+
+ /*
+ * Allow the application to resolve external entities.
+ */
+ virtual ACEXML_InputSource *resolveEntity (const ACEXML_Char *publicId,
+ const ACEXML_Char *systemId,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+ // Methods inherit from ACEXML_ErrorHandler.
+
+ /*
+ * Receive notification of a recoverable error.
+ */
+ virtual void error (ACEXML_SAXParseException &exception,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+ /*
+ * Receive notification of a non-recoverable error.
+ */
+ virtual void fatalError (ACEXML_SAXParseException &exception,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+ /*
+ * Receive notification of a warning.
+ */
+ virtual void warning (ACEXML_SAXParseException &exception,
+ ACEXML_Env &xmlenv)
+ // ACE_THROW_SPEC ((ACEXML_SAXException))
+ ;
+
+protected:
+ /**
+ * Get the only attribute in <stream> or <streamdef>.
+ */
+ int get_stream_id (ACEXML_Attributes *alist,
+ ACEXML_Env &xmlenv);
+
+ /**
+ * Get the only attribute in <resume>, <suspend>, <remove>
+ */
+ int get_id (ACEXML_Attributes *alist,
+ ACEXML_Env &xmlenv);
+
+ /**
+ * Get the dynamic tag attributes.
+ */
+ int get_dynamic_attrs (ACEXML_Attributes *alist,
+ ACEXML_Env &xmlenv);
+
+ /**
+ * Get the initializer tag attributes.
+ */
+ int get_initializer_attrs (ACEXML_Attributes *alist,
+ ACEXML_Env &xmlenv);
+
+ /**
+ * Get the static tag attributes.
+ */
+ int get_static_attrs (ACEXML_Attributes *alist,
+ ACEXML_Env &xmlenv);
+
+private:
+ /// We are parsing a stream definition
+ int in_stream_def_;
+
+ /// We are defining a steam module
+ int in_module_;
+
+ /// @a stream_ holds the actually Stream_Type object managed by @a stream_svc_type_.
+ ACE_Service_Type *stream_svc_type_;
+ ACE_Stream_Type *stream_;
+
+ ACE_SHLIB_HANDLE dll_handle_;
+
+ ACE_Parsed_Info parsed_info_;
+
+ ACE_Parsed_Info stream_info_;
+};
+
+#if defined (__ACEXML_INLINE__)
+# include "Svcconf_Handler.i"
+#endif /* __ACEXML_INLINE__ */
+#endif /* ACEXML_SVCCONF_HANDLER_H */
diff --git a/ACEXML/apps/svcconf/Svcconf_Handler.i b/ACEXML/apps/svcconf/Svcconf_Handler.i
new file mode 100644
index 00000000000..c78a345e2f6
--- /dev/null
+++ b/ACEXML/apps/svcconf/Svcconf_Handler.i
@@ -0,0 +1,133 @@
+// -*- C++ -*- $Id$
+
+ACE_INLINE
+ACE_Parsed_Info::ACE_Parsed_Info ()
+ : name_ (0),
+ service_type_ (ACE_Service_Type::INVALID_TYPE),
+ active_ (1),
+ path_ (0),
+ init_func_ (0),
+ init_params_ (0)
+{
+}
+
+ACE_INLINE
+ACE_Parsed_Info::~ACE_Parsed_Info ()
+{
+ delete this->name_;
+ delete this->path_;
+ delete this->init_func_;
+ delete this->init_params_;
+}
+
+ACE_INLINE int
+ACE_Parsed_Info::name (const ACEXML_Char *n)
+{
+ if (this->name_ == 0)
+ {
+ this->name_ = ACE::strnew (n);
+ return 0;
+ }
+ return -1;
+}
+
+ACE_INLINE const ACEXML_Char *
+ACE_Parsed_Info::name (void)
+{
+ return this->name_;
+}
+
+ACE_INLINE int
+ACE_Parsed_Info::service_type (int type)
+{
+ if (this->service_type_ == -1)
+ {
+ this->service_type_ = type;
+ return 0;
+ }
+ return -1;
+}
+
+ACE_INLINE int
+ACE_Parsed_Info::service_type (void)
+{
+ return this->service_type_;
+}
+
+ACE_INLINE int
+ACE_Parsed_Info::active (int a)
+{
+ this->active_ = a;
+ return 0;
+}
+
+ACE_INLINE int
+ACE_Parsed_Info::active (void)
+{
+ return this->active_;
+}
+
+ACE_INLINE int
+ACE_Parsed_Info::path (const ACEXML_Char *p)
+{
+ if (this->path_ == 0)
+ {
+ this->path_ = ACE::strnew (p);
+ return 0;
+ }
+ return -1;
+}
+
+ACE_INLINE const ACEXML_Char *
+ACE_Parsed_Info::path (void)
+{
+ return this->path_;
+}
+
+ACE_INLINE int
+ACE_Parsed_Info::init_func (const ACEXML_Char *n)
+{
+ if (this->init_func_ == 0)
+ {
+ this->init_func_ = ACE::strnew (n);
+ return 0;
+ }
+ return -1;
+}
+
+ACE_INLINE const ACEXML_Char *
+ACE_Parsed_Info::init_func (void)
+{
+ return this->init_func_;
+}
+
+ACE_INLINE int
+ACE_Parsed_Info::init_params (const ACEXML_Char *n)
+{
+ if (this->init_params_ == 0)
+ {
+ this->init_params_ = ACE::strnew (n);
+ return 0;
+ }
+ return -1;
+}
+
+ACE_INLINE const ACEXML_Char *
+ACE_Parsed_Info::init_params (void)
+{
+ return this->init_params_;
+}
+
+ACE_INLINE void
+ACE_Parsed_Info::reset (void)
+{
+ delete this->name_;
+ this->name_ = 0;
+ this->service_type_ = -1;
+ delete this->path_;
+ this->path_ = 0;
+ delete this->init_func_;
+ this->init_func_ = 0;
+ delete this->init_params_;
+ this->init_params_ = 0;
+}
diff --git a/ACEXML/apps/svcconf/XML_Svc_Conf_Parser.dsp b/ACEXML/apps/svcconf/XML_Svc_Conf_Parser.dsp
new file mode 100644
index 00000000000..1560ec4e6de
--- /dev/null
+++ b/ACEXML/apps/svcconf/XML_Svc_Conf_Parser.dsp
@@ -0,0 +1,119 @@
+# Microsoft Developer Studio Project File - Name="XML_Svc_Conf_Parser" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=XML_Svc_Conf_Parser - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "XML_Svc_Conf_Parser.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "XML_Svc_Conf_Parser.mak" CFG="XML_Svc_Conf_Parser - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "XML_Svc_Conf_Parser - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "XML_Svc_Conf_Parser - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "XML_Svc_Conf_Parser - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XML_SVC_CONF_PARSER_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\.." /I "..\.." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 ace.lib ACEXML.lib ACEXML_Parser.lib /nologo /dll /machine:I386 /out:"..\..\..\bin\ACEXML_XML_Svc_Conf_Parser.dll" /libpath:"..\..\..\ace" /libpath:"..\..\Common" /libpath:"..\..\parser\parser"
+
+!ELSEIF "$(CFG)" == "XML_Svc_Conf_Parser - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "XML_Svc_Conf_Parser___Win32_Debug"
+# PROP BASE Intermediate_Dir "XML_Svc_Conf_Parser___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XML_SVC_CONF_PARSER_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\.." /I "..\.." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 aced.lib ACEXMLd.lib ACEXML_Parserd.lib /nologo /dll /debug /machine:I386 /out:"..\..\..\bin\ACEXML_XML_Svc_Conf_Parserd.dll" /pdbtype:sept /libpath:"..\..\..\ace" /libpath:"..\..\Common" /libpath:"..\..\parser\parser"
+
+!ENDIF
+
+# Begin Target
+
+# Name "XML_Svc_Conf_Parser - Win32 Release"
+# Name "XML_Svc_Conf_Parser - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Svcconf.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Svcconf_Handler.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\Svcconf.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Svcconf_Handler.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project