diff options
author | jxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-10-06 08:03:45 +0000 |
---|---|---|
committer | jxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-10-06 08:03:45 +0000 |
commit | c99f1b087ee6b6afea8f436a197abb2e29785715 (patch) | |
tree | f1d49e9e3edda3e33a3707147fef33976cf79e1e /apps | |
parent | c82fae60dac5588dccd6f1c59f738503add5a82b (diff) | |
download | ATCD-c99f1b087ee6b6afea8f436a197abb2e29785715.tar.gz |
Moving towards a full HTTP server again.
Diffstat (limited to 'apps')
31 files changed, 3187 insertions, 998 deletions
diff --git a/apps/JAWS/PROTOTYPE/HTTPU/Makefile b/apps/JAWS/PROTOTYPE/HTTPU/Makefile new file mode 100644 index 00000000000..e304d0cc41f --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/Makefile @@ -0,0 +1,419 @@ +#---------------------------------------------------------------------------- +# $Id$ +# +# Makefile for the ACE Adapter Web Server (JAWS) client +#---------------------------------------------------------------------------- + +#---------------------------------------------------------------------------- +# Local macros +#---------------------------------------------------------------------------- + +#BIN = test_parse_url test_parse_http_request test_http_headers \ +# test_http_request test_http_response + +SHLIB = libHTTPU.so +FILES = parse_url parse_http_request parse_http_response \ + http_request http_response http_base http_status \ + http_headers + +LSRC = $(addsuffix .cpp,$(FILES)) +LOBJ = $(addsuffix .o,$(FILES)) + +CPPFLAGS += -I.. + +LDLIBS = -lhttpu -laoutil +BUILD = $(VSHLIB) $(SHLIBA) $(VLIB) + + +#---------------------------------------------------------------------------- +# 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.bin.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. + +.obj/parse_url.o .obj/parse_url.so .shobj/parse_url.o .shobj/parse_url.so: parse_url.cpp $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/config.h \ + $(ACE_ROOT)/ace/config-sunos5.5.h \ + $(ACE_ROOT)/ace/config-g++-common.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/OS.i $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.h $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i ../HTTPU/parse_url.h +.obj/parse_http_request.o .obj/parse_http_request.so .shobj/parse_http_request.o .shobj/parse_http_request.so: parse_http_request.cpp \ + ../HTTPU/parse_http_request.h $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/config.h \ + $(ACE_ROOT)/ace/config-sunos5.5.h \ + $(ACE_ROOT)/ace/config-g++-common.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/OS.i $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.h $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i ../HTTPU/http_headers.h \ + $(ACE_ROOT)/ace/RB_Tree.h \ + $(ACE_ROOT)/ace/RB_Tree.i \ + $(ACE_ROOT)/ace/RB_Tree.cpp \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Synch.i $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Thread.h $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Singleton.cpp \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Managed_Object.cpp ../JAWS/Parse_Headers.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/Memory_Pool.i \ + $(ACE_ROOT)/ace/Message_Block.i ../JAWS/Headers.h +.obj/parse_http_response.o .obj/parse_http_response.so .shobj/parse_http_response.o .shobj/parse_http_response.so: parse_http_response.cpp \ + ../HTTPU/parse_http_response.h $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/config.h \ + $(ACE_ROOT)/ace/config-sunos5.5.h \ + $(ACE_ROOT)/ace/config-g++-common.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/OS.i $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.h $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i +.obj/http_request.o .obj/http_request.so .shobj/http_request.o .shobj/http_request.so: http_request.cpp ../HTTPU/http_request.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/ACE.h $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/config.h \ + $(ACE_ROOT)/ace/config-sunos5.5.h \ + $(ACE_ROOT)/ace/config-g++-common.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/OS.i $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Synch.i $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Thread.h $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/Memory_Pool.i \ + $(ACE_ROOT)/ace/Message_Block.i ../JAWS/Parse_Headers.h \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Singleton.cpp ../JAWS/Headers.h \ + ../HTTPU/http_base.h ../HTTPU/http_status.h ../HTTPU/http_headers.h \ + $(ACE_ROOT)/ace/RB_Tree.h \ + $(ACE_ROOT)/ace/RB_Tree.i \ + $(ACE_ROOT)/ace/RB_Tree.cpp ../HTTPU/parse_http_request.h \ + ../HTTPU/parse_url.h +.obj/http_response.o .obj/http_response.so .shobj/http_response.o .shobj/http_response.so: http_response.cpp ../HTTPU/http_response.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/ACE.h $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/config.h \ + $(ACE_ROOT)/ace/config-sunos5.5.h \ + $(ACE_ROOT)/ace/config-g++-common.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/OS.i $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Synch.i $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Thread.h $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/Memory_Pool.i \ + $(ACE_ROOT)/ace/Message_Block.i ../JAWS/Parse_Headers.h \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Singleton.cpp ../JAWS/Headers.h \ + ../HTTPU/http_base.h ../HTTPU/http_status.h ../HTTPU/http_headers.h \ + $(ACE_ROOT)/ace/RB_Tree.h \ + $(ACE_ROOT)/ace/RB_Tree.i \ + $(ACE_ROOT)/ace/RB_Tree.cpp ../HTTPU/parse_http_response.h +.obj/http_base.o .obj/http_base.so .shobj/http_base.o .shobj/http_base.so: http_base.cpp ../JAWS/Parse_Headers.h \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Synch.h $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/config.h \ + $(ACE_ROOT)/ace/config-sunos5.5.h \ + $(ACE_ROOT)/ace/config-g++-common.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/OS.i $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Synch.i $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Thread.h $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Singleton.cpp \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/Memory_Pool.i \ + $(ACE_ROOT)/ace/Message_Block.i ../JAWS/Headers.h \ + ../HTTPU/http_base.h ../HTTPU/http_status.h ../HTTPU/http_headers.h \ + $(ACE_ROOT)/ace/RB_Tree.h \ + $(ACE_ROOT)/ace/RB_Tree.i \ + $(ACE_ROOT)/ace/RB_Tree.cpp +.obj/http_status.o .obj/http_status.so .shobj/http_status.o .shobj/http_status.so: http_status.cpp ../HTTPU/http_status.h \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Synch.h $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/config.h \ + $(ACE_ROOT)/ace/config-sunos5.5.h \ + $(ACE_ROOT)/ace/config-g++-common.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/OS.i $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Synch.i $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Thread.h $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Singleton.cpp \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Managed_Object.cpp +.obj/http_headers.o .obj/http_headers.so .shobj/http_headers.o .shobj/http_headers.so: http_headers.cpp ../HTTPU/http_headers.h \ + $(ACE_ROOT)/ace/RB_Tree.h $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/config.h \ + $(ACE_ROOT)/ace/config-sunos5.5.h \ + $(ACE_ROOT)/ace/config-g++-common.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/OS.i $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/RB_Tree.i \ + $(ACE_ROOT)/ace/RB_Tree.cpp \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Synch.i $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Thread.h $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Singleton.cpp \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Managed_Object.cpp ../JAWS/Parse_Headers.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/Memory_Pool.i \ + $(ACE_ROOT)/ace/Message_Block.i ../JAWS/Headers.h + +# IF YOU PUT ANYTHING HERE IT WILL GO AWAY diff --git a/apps/JAWS/PROTOTYPE/HTTPU/http_base.cpp b/apps/JAWS/PROTOTYPE/HTTPU/http_base.cpp new file mode 100644 index 00000000000..7d129e8daea --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/http_base.cpp @@ -0,0 +1,319 @@ +// $Id$ + +#include "JAWS/Parse_Headers.h" +#include "HTTPU/http_base.h" +#include "HTTPU/http_headers.h" + +int +HTTP_Base::receive (ACE_Message_Block &mb) +{ + if (this->line () == 0) + { + if (this->extract_line (mb) == 0) + return 0; + if (this->status () != STATUS_OK) + return 1; + + // Call into the receive hook. + this->parse_line (); + if (this->status_ == STATUS_INTERNAL_SERVER_ERROR || this->no_headers_) + return 1; + } + + // Parse headers + JAWS_Parse_Headers *parser = JAWS_Parse_Headers_Singleton::instance (); + int ret = parser->parse_headers (&(this->info_), mb); + + switch (this->info_.status ()) + { + case JAWS_Header_Info::OK: + break; + + case JAWS_Header_Info::NO_MEMORY: + case JAWS_Header_Info::TOO_LONG: + default: + this->status_ = STATUS_INTERNAL_SERVER_ERROR; + break; + } + + return ret; +} + +int +HTTP_Base::deliver (ACE_Message_Block &mb) +{ + JAWS_Header_Data *data = 0; + + // Deliver this outgoing request. + // We do this by building the request up and writing it into the + // message block. + if (this->mb_ == 0) + { + // Make our Message Block big enough to hold a header name and + // header value + this->mb_ = new ACE_Message_Block (16384); // MAGIC! 2 x 8192 + if (this->mb_ == 0) + { + this->status_ = STATUS_INTERNAL_SERVER_ERROR; + return -1; + } + + // Call into the deliver hook + int r = this->espouse_line (); + if (r == -1) + return -1; + + if (r == 1) + this->deliver_state_ = 2; + + this->iter_.first (); + } + + while (this->deliver_state_ < 3) + { + // Deliver whatever is currently held in this->mb_. + size_t sz = (mb.space () < this->mb_->length () + ? mb.space () + : this->mb_->length ()); + + if (sz > 0) + { + mb.copy (this->mb_->rd_ptr (), sz); + this->mb_->rd_ptr (sz); + } + + if (mb.space () == 0) + return 0; + + // Arriving here means this->mb_ has been emptied. + this->mb_->crunch (); + + switch (this->deliver_state_) + { + case 0: // Obtain the next header data // Deliver a header name + this->deliver_state_ = this->deliver_header_name (data); + break; + + case 1: // Deliver a header value + this->deliver_state_ = this->deliver_header_value (data); + break; + + case 2: // Finished! + delete this->mb_; + this->mb_ = 0; + this->deliver_state_ = 3; + } + } + + return 1; +} + +int +HTTP_Base::receive_payload (ACE_Message_Block &mb) +{ + int result = 0; + + if (this->payload_.space () < mb.length ()) + result = this->payload_.size (this->payload_.size () + + mb.length () - this->payload_.space ()); + + if (result == 0) + { + this->payload_.copy (mb.rd_ptr (), mb.length ()); + mb.rd_ptr (mb.wr_ptr ()); + mb.crunch (); + } + else + this->status_ = STATUS_INTERNAL_SERVER_ERROR; + + return result; +} + +int +HTTP_Base::receive_payload (ACE_Message_Block &mb, long length) +{ + int result = 0; + + if (length == -1) + return this->receive_payload (mb); + + if (this->payload_.size () < (unsigned long) length) + result = this->payload_.size (length); + + if (result == -1) + { + this->status_ = STATUS_INTERNAL_SERVER_ERROR; + return -1; + } + + if (this->payload_.space () >= mb.length ()) + { + this->payload_.copy (mb.rd_ptr (), mb.length ()); + mb.rd_ptr (mb.wr_ptr ()); + mb.crunch (); + } + else + { + size_t space = this->payload_.space (); + this->payload_.copy (mb.rd_ptr (), space); + mb.rd_ptr (space); + } + + return this->payload_.length () == (unsigned long) length; +} + +const char * +HTTP_Base::payload (void) +{ + return this->payload_.rd_ptr (); +} + +unsigned long +HTTP_Base::payload_size (void) +{ + return this->payload_.length (); +} + +int +HTTP_Base::build_headers (JAWS_Headers *new_headers) +{ + JAWS_Header_Data *data = 0; + JAWS_Header_Data *data2 = 0; + JAWS_Header_Table_Iterator iter (*new_headers); + + iter.first (); + while (! iter.done ()) + { + data = iter.next (); + if (data == 0) + { + iter.advance (); + continue; + } + + if (data->header_type () == HTTP_HCodes::REPLACE_HEADER) + this->headers ()->remove_all (data->header_name ()); + else if (data->header_type () == HTTP_HCodes::INSERT_HEADER + || data->header_type () == HTTP_HCodes::APPENDTO_HEADER) + { + data2 = this->headers ()->find (data->header_name ()); + if (data2 != 0) + { + if (data->header_type () == HTTP_HCodes::APPENDTO_HEADER) + { + // Append to existing header + size_t len + = ACE_OS::strlen (data->header_value ()) + + ACE_OS::strlen (data2->header_value ()) + + 3; /* for comma, space, and nul */ + char *buf = new char [len]; + if (buf == 0) + { + this->status_ = STATUS_INTERNAL_SERVER_ERROR; + return -1; + } + ACE_OS::sprintf (buf, "%s, %s", + data2->header_value (), + data->header_value ()); + data2->header_value (buf); + delete [] buf; + } + + // Only insert if it isn't already present + iter.advance (); + continue; + } + } + + data2 = new JAWS_Header_Data (data->header_name (), + data->header_value ()); + if (data2 == 0 || data2->header_name () == 0 + || data2->header_value () == 0) + { + this->status_ = STATUS_INTERNAL_SERVER_ERROR; + return -1; + } + this->headers ()->insert (data2); + + iter.advance (); + } + + return 0; +} + +int +HTTP_Base::deliver_header_name (JAWS_Header_Data *&data) +{ + data = 0; + + for (;;) + { + if ((data = this->iter_.next ()) == 0) + { + // No more headers, deliver final "\r\n" + this->mb_->copy ("\r\n", 2); + return 2; + } + + if (data->header_name ()) + break; + + this->iter_.advance (); + } + + // Assume the following lines will always succeed. + this->mb_->copy (data->header_name ()); + this->mb_->wr_ptr (this->mb_->wr_ptr () - 1); + this->mb_->copy (": ", 2); + + return 1; +} + +int +HTTP_Base::deliver_header_value (JAWS_Header_Data *&data) +{ + // Assume the following line will always succeed. + if (data->header_value ()) + { + this->mb_->copy (data->header_value ()); + this->mb_->wr_ptr (this->mb_->wr_ptr () - 1); + } + this->mb_->copy ("\r\n", 2); + + this->iter_.advance (); + return 0; +} + + +int +HTTP_Base::extract_line (ACE_Message_Block &mb) +{ + JAWS_Parse_Headers *parser = JAWS_Parse_Headers_Singleton::instance (); + char *p = parser->skipset ("\n", mb.rd_ptr (), mb.wr_ptr ()); + if (p == mb.wr_ptr ()) + return 0; + + this->status_ = STATUS_OK; + + *p = '\0'; + if (p[-1] == '\r') + p[-1] = '\0'; + + this->line_ = ACE_OS::strdup (mb.rd_ptr ()); + if (this->line_ == 0) + this->status_ = STATUS_INTERNAL_SERVER_ERROR; + + mb.rd_ptr (p+1); + this->info_.end_of_line (1); + return 1; +} + +void +HTTP_Base::dump (void) +{ + ACE_DEBUG ((LM_DEBUG, "%s\n", this->line ())); + this->info_.dump (); + ACE_DEBUG ((LM_DEBUG, "STATUS IS %d %s\n", + this->status (), + (*HTTP_SCode::instance ())[this->status ()])); +} diff --git a/apps/JAWS/PROTOTYPE/HTTPU/http_base.h b/apps/JAWS/PROTOTYPE/HTTPU/http_base.h new file mode 100644 index 00000000000..4fe57a83217 --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/http_base.h @@ -0,0 +1,88 @@ +// $Id$ + +#if !defined (HTTPU_HTTP_BASE_H) +#define HTTPU_HTTP_BASE_H + +#include "ace/Message_Block.h" + +#include "JAWS/Parse_Headers.h" +#include "HTTPU/http_status.h" +#include "HTTPU/http_headers.h" + +class HTTP_Base : public HTTP_SCode_Base +{ +public: + + HTTP_Base (void) + : status_ (200), + line_ (0), + deliver_state_ (0), + no_headers_ (0), + iter_ (*(this->info_.table ())), + mb_ (0) + {} + virtual ~HTTP_Base (void) + { + if (this->line_) + ACE_OS::free (this->line_); + if (this->mb_) + delete this->mb_; + this->line_ = 0; + this->mb_ = 0; + } + + virtual int receive (ACE_Message_Block &mb); + virtual int deliver (ACE_Message_Block &mb); + + virtual int receive_payload (ACE_Message_Block &mb); + virtual int receive_payload (ACE_Message_Block &mb, long length); + + const char * payload (void); + unsigned long payload_size (void); + + int status (void) const { return this->status_; } + const char *line (void) const { return this->line_; } + HTTP_Headers *http_headers (void) { return &(this->info_); } + JAWS_Headers *headers (void) { return this->info_.table (); } + + int build_headers (JAWS_Headers *new_headers); + // takes a set of new headers that will replace existing headers or + // be added to the header list if there is no corresponding one to replace. + + void dump (void); + +protected: + + virtual void parse_line (void) = 0; + // Hook into the receive function to do specialized parsing of initial line. + // Sets the status_ variable. + + virtual int espouse_line (void) = 0; + // Hook into the deliver function to do specialized initial line creation. + // Returns 0 for success and -1 for failure. + + int deliver_header_name (JAWS_Header_Data *&data); + // Returns the next deliver state + + int deliver_header_value (JAWS_Header_Data *&data); + // Returns the next deliver state + + virtual int extract_line (ACE_Message_Block &mb); + // The first line of a request or a response. + // Return 0 if more data needed. + // Return 1 if line successfully parsed. + +protected: + + int status_; + char *line_; + int deliver_state_; + int no_headers_; + HTTP_Headers info_; + JAWS_Header_Table_Iterator iter_; + ACE_Message_Block *mb_; + ACE_Message_Block payload_; + +}; + +#endif /* !defined (HTTPU_HTTP_BASE_H) */ diff --git a/apps/JAWS/PROTOTYPE/HTTPU/http_headers.cpp b/apps/JAWS/PROTOTYPE/HTTPU/http_headers.cpp new file mode 100644 index 00000000000..2f82e0341ef --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/http_headers.cpp @@ -0,0 +1,137 @@ +// $Id$ + +#include "HTTPU/http_headers.h" + +HTTP_Hdr_Node + + HTTP_HCodes::HTTP ("HTTP", "HTTP%s %s"), + HTTP_HCodes::ACCEPT ("Accept", "Accept: %s\r\n"), + HTTP_HCodes::ACCEPTCHARSET ("Accept-Charset", "Accept-Charset: %s\r\n"), + HTTP_HCodes::ACCEPTENCODING ("Accept-Encoding", "Accept-Encoding: %s\r\n"), + HTTP_HCodes::ACCEPTLANGUAGE ("Accept-Language", "Accept-Language: %s\r\n"), + HTTP_HCodes::ACCEPTRANGES ("Accept-Ranges", "Accept-Ranges: %s\r\n"), + HTTP_HCodes::AGE ("Age", "Age: %s\r\n"), + HTTP_HCodes::ALLOW ("Allow", "Allow: %s\r\n"), + HTTP_HCodes::AUTHORIZATION ("Authorization", "Authorization: %s\r\n"), + HTTP_HCodes::CACHECONTROL ("Cache-Control", "Cache-Control: %s\r\n"), + HTTP_HCodes::CONNECTION ("Connection", "Connection: %s\r\n"), + HTTP_HCodes::CONTENTENCODING ("Content-Encoding", + "Content-Encoding: %d\r\n"), + HTTP_HCodes::CONTENTLENGTH ("Content-Length", "Content-Length: %d\r\n"), + HTTP_HCodes::CONTENTLOCATION ("Content-Location", "Content-Location: %s\r\n"), + HTTP_HCodes::CONTENTMD5 ("Content-MD5", "Content-MD5: %s\r\n"), + HTTP_HCodes::CONTENTRANGE ("Content-Range", "Content-Range: %s\r\n"), + HTTP_HCodes::CONTENTTYPE ("Content-Type", "Content-Type: %s\r\n"), + HTTP_HCodes::DATE ("Date", "Date: %s\r\n"), + HTTP_HCodes::ETAG ("ETag", "ETag: %s\r\n"), + HTTP_HCodes::EXPECT ("Expect", "Expect: %s\r\n"), + HTTP_HCodes::EXPIRES ("Expires", "Expires: %s\r\n"), + HTTP_HCodes::FROM ("From", "From: %s\r\n"), + HTTP_HCodes::HOST ("Host", "Host: %s\r\n"), + HTTP_HCodes::IFMATCH ("If-Match", "If-Match: %s\r\n"), + HTTP_HCodes::IFMODIFIEDSINCE ("If-Modified-Since", + "If-Modified-Since: %s\r\n"), + HTTP_HCodes::IFNONEMATCH ("If-None-Match", "If-None-Match: %s\r\n"), + HTTP_HCodes::IFRANGE ("If-Range", "If-Range: %s\r\n"), + HTTP_HCodes::IFUNMODIFIEDSINCE ("If-Unmodified-Since", + "If-Unmodified-Since: %s\r\n"), + HTTP_HCodes::LASTMODIFIED ("Last-Modified", "Last-Modified: %s\r\n"), + HTTP_HCodes::LOCATION ("Location", "Location: %s\r\n"), + HTTP_HCodes::MAXFORWARDS ("Max-Forwards", "Max-Forwards: %s\r\n"), + HTTP_HCodes::PRAGMA ("Pragma", "Pragma: %s\r\n"), + HTTP_HCodes::PROXYAUTHENTICATE ("Proxy-Authenticate", + "Proxy-Authenticate: %s\r\n"), + HTTP_HCodes::PROXYAUTHORIZATION ("Proxy-Authorization", + "Proxy-Authorization: %s\r\n"), + HTTP_HCodes::RANGE ("Range", "Range: %s\r\n"), + HTTP_HCodes::REFERER ("Referer", "Referer: %s\r\n"), + HTTP_HCodes::SERVER ("Server", "Server: %s\r\n"), + HTTP_HCodes::TE ("TE", "TE: %s\r\n"), + HTTP_HCodes::TRAILER ("Trailer", "Trailer: %s\r\n"), + HTTP_HCodes::TRANSFERENCODING ("Transfer-Encoding", + "Transfer-Encoding: %s\r\n"), + HTTP_HCodes::UPGRADE ("Ugrade", "Ugrade: %s\r\n"), + HTTP_HCodes::USERAGENT ("User-Agent", "User-Agent: %s\r\n"), + HTTP_HCodes::VARY ("Vary", "Vary: %s\r\n"), + HTTP_HCodes::VIA ("Via", "Via: %s\r\n"), + HTTP_HCodes::WARNING ("Warning", "Warning: %s\r\n"), + HTTP_HCodes::WWWAUTHENTICATE ("WWW-Authenticate", + "WWW-Authenticate: %s\r\n"), + HTTP_HCodes::GET ("GET", "GET %s HTTP/%s\r\n"), + HTTP_HCodes::HEAD ("HEAD", "HEAD %s HTTP/%s\r\n"), + HTTP_HCodes::POST ("POST", "POST %s HTTP/%s\r\n"), + HTTP_HCodes::PUT ("PUT", "PUT %s HTTP/%s\r\n"), + HTTP_HCodes::QUIT ("QUIT", "QUIT %s HTTP/%s\r\n"), + HTTP_HCodes::DUNNO ("", ""), + HTTP_HCodes::META ("<META", "<META %s>"), + HTTP_HCodes::A ("<A", "<A %s>"), + HTTP_HCodes::SCRIPT ("<SCRIPT", "<SCRIPT %s>"), + HTTP_HCodes::APPLET ("<APPLET", "<APPLET %s>") + + ////////////// + ; + + +const int &HTTP_HCodes::NUM_HEADER_STRINGS + = HTTP_Header_Nodes_Singleton::instance ()->num_header_strings_; + +HTTP_Hdr_Node::HTTP_Hdr_Node (const char *token, const char *format) + : token_ (token), + format_ (format) +{ + HTTP_Header_Nodes *header_nodes + = HTTP_Header_Nodes_Singleton::instance (); + + this->index_ = header_nodes->num_header_strings_; + header_nodes->insert (this->index_, this); + header_nodes->num_header_strings_++; +} + +const char * +HTTP_Headers::header (int name) const +{ + return this->header_token (name); +} + +const char * +HTTP_Headers::value (int index) +{ + this->value_reset (); + return this->value_next (index); +} + +const char * +HTTP_Headers::value_next (int index) +{ + const char *hs = 0; + const char *hv = 0; + JAWS_Header_Data *data; + + if (0 <= index && index < NUM_HEADER_STRINGS) + { + hs = this->header (index); + data = this->table ()->find_next (hs); + if (data != 0) + hv = data->header_value (); + } + + return hv; +} + +void +HTTP_Headers::value_reset (void) +{ + this->table ()->iter ().first (); +} + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) +template class RB_Tree<int, const HTTP_Hdr_Node *>; +template class RB_Tree_Node<int, const HTTP_Hdr_Node *>; +template class RB_Tree_Iterator<int, const HTTP_Hdr_Node *>; +template class ACE_Singleton<HTTP_Header_Nodes, ACE_SYNCH_MUTEX>; +#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) +#pragma instantiate RB_Tree<int, const HTTP_Hdr_Node *> +#pragma instantiate RB_Tree_Node<int, const HTTP_Hdr_Node *> +#pragma instantiate RB_Tree_Iterator<int, const HTTP_Hdr_Node *> +#pragma instantiate ACE_Singleton<HTTP_Header_Nodes, ACE_SYNCH_MUTEX> +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ diff --git a/apps/JAWS/PROTOTYPE/HTTPU/http_headers.h b/apps/JAWS/PROTOTYPE/HTTPU/http_headers.h new file mode 100644 index 00000000000..1d2df99a3e2 --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/http_headers.h @@ -0,0 +1,169 @@ +// $Id$ + +// by James Hu +// Borrowed from HTTP_Headers.*, which appears to be irrelevent now anyway. + +#if !defined (HTTPU_HTTP_HEADERS_H) +#define HTTPU_HTTP_HEADERS_H + +#include "ace/RB_Tree.h" +#include "ace/Singleton.h" + +#include "JAWS/Parse_Headers.h" + +class HTTP_Headers; + +class HTTP_Hdr_Node +{ + // Constructor should be passed literal strings. + friend class HTTP_HCodes; + +public: + operator const int (void) const { return this->index_; } + operator const char * (void) const { return this->token_; } + const char * format (void) const { return this->format_; } + +private: + HTTP_Hdr_Node (const char *token, const char *format); + +private: + int index_; + const char *token_; + const char *format_; +}; + + +class HTTP_HCodes; + +class HTTP_Header_Nodes : public RB_Tree<int, const HTTP_Hdr_Node *> +{ + friend class HTTP_HCodes; + friend class HTTP_Hdr_Node; + +public: + HTTP_Header_Nodes (void) : num_header_strings_ (0) {} + +private: + int num_header_strings_; +}; + +typedef ACE_Singleton<HTTP_Header_Nodes, ACE_SYNCH_MUTEX> + HTTP_Header_Nodes_Singleton; + +class HTTP_HCodes +{ +public: + HTTP_HCodes (void) + : header_nodes_ (HTTP_Header_Nodes_Singleton::instance ()) + {} + + enum { + REPLACE_HEADER = 1, // Remove any existing header that matches first + APPEND_HEADER = 2, // Unconditionally append the header + INSERT_HEADER = 4, // Insert header if one does not already exist + APPENDTO_HEADER = 8 // Concatenate data to existing header value + }; + + static HTTP_Hdr_Node + HTTP, + ACCEPT, + ACCEPTCHARSET, + ACCEPTENCODING, + ACCEPTLANGUAGE, + ACCEPTRANGES, + AGE, + ALLOW, + AUTHORIZATION, + CACHECONTROL, + CONNECTION, + CONTENTENCODING, + CONTENTLENGTH, + CONTENTLOCATION, + CONTENTMD5, + CONTENTRANGE, + CONTENTTYPE, + DATE, + ETAG, + EXPECT, + EXPIRES, + FROM, + HOST, + IFMATCH, + IFMODIFIEDSINCE, + IFNONEMATCH, + IFRANGE, + IFUNMODIFIEDSINCE, + LASTMODIFIED, + LOCATION, + MAXFORWARDS, + PRAGMA, + PROXYAUTHENTICATE, + PROXYAUTHORIZATION, + RANGE, + REFERER, + RETRYAFTER, + SERVER, + TE, + TRAILER, + TRANSFERENCODING, + UPGRADE, + USERAGENT, + VARY, + VIA, + WARNING, + WWWAUTHENTICATE, + GET, + HEAD, + POST, + PUT, + QUIT, + DUNNO, + META, + A, + SCRIPT, + APPLET + ; + + static const int &NUM_HEADER_STRINGS; + +protected: + + const HTTP_Hdr_Node &hcode (int type) const + { + const HTTP_Hdr_Node **hn = this->header_nodes_->find (type); + + // No error checking! + return **hn; + } + +protected: + + HTTP_Header_Nodes *header_nodes_; +}; + +class HTTP_Headers : public JAWS_Header_Info, public HTTP_HCodes +{ +public: + const char *header( int name ) const; + const char *value( int name ); + const char *value_next( int name ); + void value_reset ( void ); + +public: + HTTP_Headers (void) {} + + const char *header_token (int name) const + { + const HTTP_Hdr_Node **hn = this->header_nodes_->find (name); + return ((hn && *hn) ? (const char *)**hn : 0); + } + + const char *header_strings (int name) const + { + const HTTP_Hdr_Node **hn = this->header_nodes_->find (name); + return ((hn && *hn) ? (*hn)->format () : 0); + } + +}; + +#endif /* !defined (HTTPU_HTTP_HEADERS_HPP) */ diff --git a/apps/JAWS/PROTOTYPE/HTTPU/http_request.cpp b/apps/JAWS/PROTOTYPE/HTTPU/http_request.cpp new file mode 100644 index 00000000000..7ab8dca99a4 --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/http_request.cpp @@ -0,0 +1,82 @@ +// $Id$ + +#include "HTTPU/http_request.h" +#include "HTTPU/parse_http_request.h" + +void +HTTP_Request::parse_line (void) +{ + this->status_ = STATUS_OK; + + this->request_.init (this->line ()); + if (this->request_.error () != Parse_HTTP_Request::HTTPU_OK) + { + this->status_ = STATUS_INTERNAL_SERVER_ERROR; + return; + } + if (this->request_.major_version () == 0) + { + this->no_headers_ = 1; + return; + } + + this->url_.init (this->request_.url ()); + if (this->url_.error () != 0) + this->status_ = STATUS_INTERNAL_SERVER_ERROR; +} + +int +HTTP_Request::espouse_line (void) +{ + int count; + + if (this->request_.major_version () == 0) + { + count = ACE_OS::sprintf (this->mb_->wr_ptr (), "%s /%s\r\n\r\n", + this->request_.method_str (), + this->url_.url_path ()); + + if (count < 0) + return -1; + + this->mb_->wr_ptr (count); + + return 1; + } + + count = ACE_OS::sprintf (this->mb_->wr_ptr (), "%s /%s %s\r\n", + this->request_.method_str (), + this->url_.url_path (), + this->request_.version ()); + + if (count < 0) + return -1; + + this->mb_->wr_ptr (count); + + if (this->url_.host () != 0) + { + JAWS_Header_Data *hd = this->headers ()->find ("Host"); + if (hd == 0) + { + count = ACE_OS::sprintf (this->mb_->wr_ptr (), "Host: %s\r\n", + this->url_.host ()); + + if (count < 0) + return -1; + + this->mb_->wr_ptr (count); + } + } + + return 0; +} + +void +HTTP_Request::dump (void) +{ + ACE_DEBUG ((LM_DEBUG, "===== BEGIN entera_HTTP_Request::dump =====\n")); + HTTP_Base::dump (); + this->request_.dump (); + ACE_DEBUG ((LM_DEBUG, "===== END entera_HTTP_Request::dump =====\n")); +} diff --git a/apps/JAWS/PROTOTYPE/HTTPU/http_request.h b/apps/JAWS/PROTOTYPE/HTTPU/http_request.h new file mode 100644 index 00000000000..3226b62bb6d --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/http_request.h @@ -0,0 +1,47 @@ +// $Id$ + +// There are two kinds of HTTP Requests in a proxy. +// One is the kind you have to read in from the HTTP client. +// The other is the kind you issue to the server. + +#if !defined (HTTPU_HTTP_REQUEST_HPP) +#define HTTPU_HTTP_REQUEST_HPP + +#include "ace/Message_Block.h" + +#include "JAWS/Parse_Headers.h" +#include "HTTPU/http_base.h" +#include "HTTPU/parse_http_request.h" +#include "HTTPU/parse_url.h" + +class HTTP_Request : public HTTP_Base +{ +public: + HTTP_Request (void) {} + virtual ~HTTP_Request (void) {} + + Parse_HTTP_Request *request_line (void) { return &(this->request_); } + // Returns the parsed request line. + + const Parse_HTTP_Request *request_line (void) const + { + return &(this->request_); + } + // Returns the parsed request line. + + HTTP_Parse_URL *url (void) { return &(this->url_); } + // Returns the parsed url. + + void dump (void); + +protected: + + virtual void parse_line (void); + virtual int espouse_line (void); + +private: + Parse_HTTP_Request request_; + HTTP_Parse_URL url_; +}; + +#endif /* !defined (HTTPU_HTTP_REQUEST_HPP) */ diff --git a/apps/JAWS/PROTOTYPE/HTTPU/http_response.cpp b/apps/JAWS/PROTOTYPE/HTTPU/http_response.cpp new file mode 100644 index 00000000000..e894b2726f2 --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/http_response.cpp @@ -0,0 +1,45 @@ +// $Id$ + +#include "HTTPU/http_response.h" + +void +HTTP_Response::parse_line (void) +{ + this->response_.init (this->line ()); + if (this->response_.error () != Parse_HTTP_Response::HTTPU_OK) + this->status_ = STATUS_INTERNAL_SERVER_ERROR; +} + +int +HTTP_Response::espouse_line (void) +{ + int count; + int status; + + if (this->status_ != (int)STATUS_OK) + status = this->status_; + else + status = this->response_line ()->code (); + + count = ACE_OS::sprintf (this->mb_->wr_ptr (), "%s %d %s\r\n", + "HTTP/1.1", + status, + (char *)(*HTTP_SCode::instance ())[status]); + // Last arg is hard coded since we are suppose to report the + // level of server we are, and not act like the level of the + // client. This information should be obtained from the config. + + if (count < 0) + return -1; + + this->mb_->wr_ptr (count); + return 0; +} + +void +HTTP_Response::dump (void) +{ + ACE_DEBUG ((LM_DEBUG, "===== BEGIN entera_HTTP_Response::dump =====\n")); + HTTP_Base::dump (); + ACE_DEBUG ((LM_DEBUG, "===== END entera_HTTP_Response::dump =====\n")); +} diff --git a/apps/JAWS/PROTOTYPE/HTTPU/http_response.h b/apps/JAWS/PROTOTYPE/HTTPU/http_response.h new file mode 100644 index 00000000000..cd3a44a4c06 --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/http_response.h @@ -0,0 +1,37 @@ +// $Id$ + +// There are two kinds of HTTP Responses in a proxy. +// One is the kind you have to read in from the HTTP server. +// The other is the kind you issue to the HTTP client. + +#if !defined (HTTPU_HTTP_RESPONSE_HPP) +#define HTTPU_HTTP_RESPONSE_HPP + +#include "ace/Message_Block.h" +#include "JAWS/Parse_Headers.h" + +#include "HTTPU/http_base.h" +#include "HTTPU/parse_http_response.h" + +class HTTP_Response : public HTTP_Base +{ +public: + HTTP_Response (void) {} + ~HTTP_Response (void) {} + + Parse_HTTP_Response *response_line (void) + { return &(this->response_); } + // Returns the parsed response line. + + void dump (void); + +protected: + + virtual void parse_line (void); + virtual int espouse_line (void); + +private: + Parse_HTTP_Response response_; +}; + +#endif /* !defined (HTTPU_HTTP_RESPONSE_HPP) */ diff --git a/apps/JAWS/PROTOTYPE/HTTPU/http_status.cpp b/apps/JAWS/PROTOTYPE/HTTPU/http_status.cpp new file mode 100644 index 00000000000..b2bf92c1a55 --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/http_status.cpp @@ -0,0 +1,78 @@ +// $Id$ + +#include "HTTPU/http_status.h" + +const char * +HTTP_SCode::table_ [HTTP_SCode::SC_TABLE_SIZE]; + +HTTP_SCode_Node + + HTTP_SCode_Base::STATUS_OK (200, "OK"), + HTTP_SCode_Base::STATUS_CREATED (201, "Created"), + HTTP_SCode_Base::STATUS_ACCEPTED (202, "Accepted"), + HTTP_SCode_Base::STATUS_NO_CONTENT (204, "No Content"), + HTTP_SCode_Base::STATUS_MULTIPLE_CHOICES (300, "Multiple Choices"), + HTTP_SCode_Base::STATUS_MOVED_PERMANENTLY (301, "Moved Permanently"), + HTTP_SCode_Base::STATUS_MOVED_TEMPORARILY (302, "Moved Temporarily"), + HTTP_SCode_Base::STATUS_NOT_MODIFIED (304, "Not Modified"), + HTTP_SCode_Base::STATUS_INSUFFICIENT_DATA (399, "Insufficient Data"), + HTTP_SCode_Base::STATUS_BAD_REQUEST (400, "Bad Request"), + HTTP_SCode_Base::STATUS_UNAUTHORIZED (401, "Unauthorized"), + HTTP_SCode_Base::STATUS_FORBIDDEN (403, "Forbidden"), + HTTP_SCode_Base::STATUS_NOT_FOUND (404, "Not Found"), + HTTP_SCode_Base::STATUS_INTERNAL_SERVER_ERROR (500, "Internal Server Error"), + HTTP_SCode_Base::STATUS_NOT_IMPLEMENTED (501, "Not Implemented"), + HTTP_SCode_Base::STATUS_BAD_GATEWAY (502, "Bad Gateway"), + HTTP_SCode_Base::STATUS_SERVICE_UNAVAILABLE (503, "Service Unavailable"), + HTTP_SCode_Base::STATUS_QUIT (599, "Quit"), + + HTTP_SCode_Base::DUMMY (0, 0); + +HTTP_SCode_Node::HTTP_SCode_Node (int code, const char *code_str) + : code_ (code), + code_str_ (code_str) +{ + if ((HTTP_SCode::MIN_STATUS_CODE <= code) + && (code <= HTTP_SCode::MAX_STATUS_CODE)) + HTTP_SCode::table_[code - HTTP_SCode::MIN_STATUS_CODE] = code_str; +} + +const char * +HTTP_SCode::operator[] (int i) const +{ + const char *s = "Unknown"; + + if (MIN_STATUS_CODE <= i && i <= MAX_STATUS_CODE) + s = this->table_[i - MIN_STATUS_CODE]; + + return s; +} + +HTTP_SCode * +HTTP_SCode::instance (void) +{ + return HTTP_SCode_Singleton::instance (); +} + +void +HTTP_SCode::dump (void) +{ + for (int i = 0; i < SC_TABLE_SIZE; i++) + ACE_DEBUG ((LM_DEBUG, "%s\n", this->table_[i])); +} + +HTTP_SCode::HTTP_SCode (void) +{ + int i; + for (i = 0; i < SC_TABLE_SIZE; i++) + { + if (this->table_[i] == 0) + this->table_[i] = this->table_[(i/100) * 100]; + } +} + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) +template class ACE_Singleton<HTTP_SCode, ACE_Thread_Mutex>; +#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) +#pragma instantiate ACE_Singleton<HTTP_SCode, ACE_Thread_Mutex> +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ diff --git a/apps/JAWS/PROTOTYPE/HTTPU/http_status.h b/apps/JAWS/PROTOTYPE/HTTPU/http_status.h new file mode 100644 index 00000000000..b9f6cb6b33f --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/http_status.h @@ -0,0 +1,96 @@ +// $Id$ + +#ifndef HTTPU_HTTP_STATUS_HPP +#define HTTPU_HTTP_STATUS_HPP + +#include "ace/Singleton.h" + +class HTTP_SCode_Base; + +class HTTP_SCode_Node +// Constructor should be passed a string literal. +{ + friend class HTTP_SCode_Base; + +public: + operator int (void) const { return this->code_; } + operator const char * (void) const { return this->code_str_; } + +private: + HTTP_SCode_Node (int code, const char *code_str); + +private: + int code_; + const char *code_str_; +}; + +class HTTP_SCode_Base +{ +public: + static HTTP_SCode_Node STATUS_OK; + static HTTP_SCode_Node STATUS_CREATED; + static HTTP_SCode_Node STATUS_ACCEPTED; + static HTTP_SCode_Node STATUS_NO_CONTENT; + static HTTP_SCode_Node STATUS_MULTIPLE_CHOICES; + static HTTP_SCode_Node STATUS_MOVED_PERMANENTLY; + static HTTP_SCode_Node STATUS_MOVED_TEMPORARILY; + static HTTP_SCode_Node STATUS_NOT_MODIFIED; + static HTTP_SCode_Node STATUS_INSUFFICIENT_DATA; + static HTTP_SCode_Node STATUS_BAD_REQUEST; + static HTTP_SCode_Node STATUS_UNAUTHORIZED; + static HTTP_SCode_Node STATUS_FORBIDDEN; + static HTTP_SCode_Node STATUS_NOT_FOUND; + static HTTP_SCode_Node STATUS_INTERNAL_SERVER_ERROR; + static HTTP_SCode_Node STATUS_NOT_IMPLEMENTED; + static HTTP_SCode_Node STATUS_BAD_GATEWAY; + static HTTP_SCode_Node STATUS_SERVICE_UNAVAILABLE; + static HTTP_SCode_Node STATUS_QUIT; + + enum + { + MIN_STATUS_CODE = 200, + MAX_STATUS_CODE = 599 + }; + +private: + static HTTP_SCode_Node DUMMY; +}; + +class HTTP_SCode : public HTTP_SCode_Base +{ + // = TITLE + // Go from numeric status codes to descriptive strings. + // + friend class HTTP_SCode_Node; + friend class ACE_Singleton<HTTP_SCode, ACE_SYNCH_MUTEX>; + +protected: + + HTTP_SCode (void); + ~HTTP_SCode (void) {} + +public: + + const char * operator[] (int) const; + // Return the reason string corresponding to a status code number. + + static HTTP_SCode *instance (void); + // Return reference to the singleton. + + enum + { + SC_TABLE_SIZE = MAX_STATUS_CODE - MIN_STATUS_CODE + 1 + }; + + void dump (void); + +private: + static const char *table_[SC_TABLE_SIZE]; +}; + + +typedef ACE_Singleton<HTTP_SCode, ACE_SYNCH_MUTEX> + HTTP_SCode_Singleton; + + +#endif /* HTTPU_HTTP_STATUS_HPP */ diff --git a/apps/JAWS/PROTOTYPE/HTTPU/parse_http_request.cpp b/apps/JAWS/PROTOTYPE/HTTPU/parse_http_request.cpp new file mode 100644 index 00000000000..854fe4d7bee --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/parse_http_request.cpp @@ -0,0 +1,112 @@ +// $Id$ + +#include "HTTPU/parse_http_request.h" + +Parse_HTTP_Request::Parse_HTTP_Request (const char *request) + : method_ (0), + major_version_ (-1), + minor_version_ (-1), + version_ (0), + url_ (0), + request_ (0), + error_ (0) +{ + if (request != 0) + this->init (request); +} + +Parse_HTTP_Request::~Parse_HTTP_Request (void) +{ + if (this->request_) + ACE_OS::free (this->request_); + this->request_ = 0; + this->version_ = 0; + this->url_ = 0; +} + +void +Parse_HTTP_Request::dump (void) +{ + ACE_DEBUG ((LM_DEBUG, "%s %s %s\n", + this->method_str (), this->url (), this->version ())); +} + +void +Parse_HTTP_Request::init (const char *request) +{ + char *method; + + this->request_ = ACE_OS::strdup (request); + if (this->request_ == 0) + { + this->error_ = NO_MEMORY; + return; + } + + char buf[BUFSIZ]; + int n = ::sscanf (this->request_, "%s %*s HTTP/%d.%d", + buf, + &(this->major_version_), + &(this->minor_version_)); + + if (n == 1 || n == 3) + { + char *p = this->request_; + + while (*p == ' ' || *p == '\t') + p++; + + method = p++; + + while (*p != ' ' && *p != '\t') + p++; + + *p++ = '\0'; + + while (*p == ' ' || *p == '\t') + p++; + + this->url_ = p; + + while (*p && !ACE_OS::strchr (" \t\r\n", *p)) + p++; + + *p++ = '\0'; + + if (n == 1) + { + this->major_version_ = 0; + this->minor_version_ = 9; + } + else + { + while (*p == ' ' || *p == '\t') + p++; + + this->version_ = p; + + while (*p && !ACE_OS::strchr (" \t\r\n", *p)) + p++; + + *p++ = '\0'; + } + + if (ACE_OS::strcmp (method, "GET") == 0) + this->method_ = &GET; + else if (ACE_OS::strcmp (method, "HEAD") == 0) + this->method_ = &HEAD; + else if (ACE_OS::strcmp (method, "POST") == 0) + this->method_ = &POST; + else if (ACE_OS::strcmp (method, "PUT") == 0) + this->method_ = &PUT; + else if (ACE_OS::strcmp (method, "QUIT") == 0) + this->method_ = &QUIT; + else + { + this->method_ = &DUNNO; + this->error_ = NOT_IMPLEMENTED; + } + } + else + this->error_ = BAD_REQUEST; +} diff --git a/apps/JAWS/PROTOTYPE/HTTPU/parse_http_request.h b/apps/JAWS/PROTOTYPE/HTTPU/parse_http_request.h new file mode 100644 index 00000000000..dcd369fe13d --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/parse_http_request.h @@ -0,0 +1,47 @@ +// $Id$ + +#if !defined (HTTPU_PARSE_HTTP_REQUEST_H) +#define HTTPU_PARSE_HTTP_REQUEST_H + +#include "ace/OS.h" +#include "HTTPU/http_headers.h" + +class Parse_HTTP_Request : public HTTP_HCodes +{ +public: + Parse_HTTP_Request (const char *request = 0); + ~Parse_HTTP_Request (void); + + void init (const char *request); + + int method (void) const { return (int) *this->method_; } + const char *method_str (void) const { return (const char *) *this->method_; } + + int major_version (void) const { return this->major_version_; } + int minor_version (void) const { return this->minor_version_; } + + const char *version (void) const + { return this->version_ ? this->version_ : "HTTP/0.9"; } + + const char *url (void) const { return this->url_; } + + enum { HTTPU_OK, NO_MEMORY, BAD_REQUEST, NOT_IMPLEMENTED }; + + int error (void) { return this->error_; } + // 0 -> ok + + void dump (void); + +private: + + HTTP_Hdr_Node *method_; + int major_version_; + int minor_version_; + char *version_; + char *url_; + char *request_; + int error_; + +}; + +#endif /* !defined (HTTPU_PARSE_HTTP_REQUEST_H) */ diff --git a/apps/JAWS/PROTOTYPE/HTTPU/parse_http_response.cpp b/apps/JAWS/PROTOTYPE/HTTPU/parse_http_response.cpp new file mode 100644 index 00000000000..1f8ad2eb0f6 --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/parse_http_response.cpp @@ -0,0 +1,69 @@ +// $Id$ + +#include "HTTPU/parse_http_response.h" + +Parse_HTTP_Response::Parse_HTTP_Response (const char *response) + : code_ (200), + code_str_ (0), + major_version_ (0), + minor_version_ (9), + version_ (0), + response_ (0), + error_ (0) +{ + if (response != 0) + this->init (response); +} + +Parse_HTTP_Response::~Parse_HTTP_Response (void) +{ + if (this->response_) + ACE_OS::free (this->response_); + this->response_ = 0; + this->code_str_ = 0; + this->version_ = 0; +} + +void +Parse_HTTP_Response::init (const char *response) +{ + this->response_ = ACE_OS::strdup (response); + if (this->response_ == 0) + { + this->error_ = NO_MEMORY; + return; + } + + int n = ::sscanf (this->response_, "HTTP/%d.%d %d %*s", + &(this->major_version_), + &(this->minor_version_), + &(this->code_)); + + if (n == 3) + { + char *p = this->response_; + + while (*p == ' ' || *p == '\t') + p++; + + this->version_ = p++; + + while (*p != ' ' && *p != '\t') + p++; + + *p++ = '\0'; + + while (*p == ' ' || *p == '\t') + p++; + + this->code_str_ = p; + + while (*p && !ACE_OS::strchr (" \t\r\n", *p)) + p++; + + *p++ = '\0'; + } + else + this->error_ = BAD_RESPONSE; +} + diff --git a/apps/JAWS/PROTOTYPE/HTTPU/parse_http_response.h b/apps/JAWS/PROTOTYPE/HTTPU/parse_http_response.h new file mode 100644 index 00000000000..7cbf77aa134 --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/parse_http_response.h @@ -0,0 +1,43 @@ +// $Id$ + +#if !defined (HTTPU_PARSE_HTTP_RESPONSE_H) +#define HTTPU_PARSE_HTTP_RESPONSE_H + +#include "ace/OS.h" + +class Parse_HTTP_Response +{ +public: + Parse_HTTP_Response (const char *response = 0); + ~Parse_HTTP_Response (void); + + void init (const char *response); + + int code (void) const { return this->code_; } + const char *code_str (void) const + { return this->code_str_ ? this->code_str_ : "200"; } + + int major_version (void) const { return this->major_version_; } + int minor_version (void) const { return this->minor_version_; } + + const char *version (void) const + { return this->version_ ? this->version_ : "HTTP/0.9"; } + + enum { HTTPU_OK, NO_MEMORY, BAD_RESPONSE }; + + int error (void) { return this->error_; } + // 0 -> ok + +private: + + int code_; + char *code_str_; + int major_version_; + int minor_version_; + char *version_; + char *response_; + int error_; + +}; + +#endif /* !defined (HTTPU_PARSE_HTTP_RESPONSE_H) */ diff --git a/apps/JAWS/PROTOTYPE/HTTPU/parse_url.cpp b/apps/JAWS/PROTOTYPE/HTTPU/parse_url.cpp new file mode 100644 index 00000000000..abeabe4b233 --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/parse_url.cpp @@ -0,0 +1,316 @@ +// $Id$ + +#include "ace/OS.h" +#include "HTTPU/parse_url.h" + +HTTP_Parse_URL::HTTP_Parse_URL (const char *url) + : url_ (0), + scheme_ (0), + user_ (0), + passwd_ (0), + host_ (0), + port_ (-1), + url_path_ (0), + error_ (NONE), + is_cgi_ (0) +{ + this->init (url); +} + +HTTP_Parse_URL::~HTTP_Parse_URL (void) +{ + if (this->url_) + ACE_OS::free (this->url_); + this->url_ = 0; + this->scheme_ = 0; + this->user_ = 0; + this->passwd_ = 0; + this->host_ = 0; + this->port_ = -1; + this->url_path_ = 0; +} + + +void +HTTP_Parse_URL::init( const char *url ) +{ + // Should really reset completely and cleanly here before + // doing anything else! + if ( url == 0 ) + return; + + if ( url_ ) + ACE_OS::free( url_ ); + + url_ = ACE_OS::strdup( url ); + if ( url_ == 0 ) + { + error_ = STRDUP; + return; + } + + if (ACE_OS::strlen (this->url_) > 3 && ACE_OS::strstr ("://", this->url_)) + { + // Parse it out completely. Figure out what it is later. + parse_url(); + } + else + { + this->url_path_ = this->url_; + this->is_cgi (this->url_path_); + } +} + + +void +HTTP_Parse_URL::parse_url (void) +{ + char *p = this->url_; + + char *q; + if ((q = ACE_OS::strchr (this->url_, '\r')) + || (q = ACE_OS::strchr (this->url_, '\n'))) + *q = '\0'; + + this->parse_scheme (p); + if (*p == '\0') + { + this->error_ = SCHEME; + return; + } + + // Parse past "//" + if (*p != '/' || *(p+1) != '/') + { + this->error_ = SLASHSLASH; + return; + } + p += 2; + + this->parse_host (p); + if (*p == '/' || *p == '\0') + return; + + this->url_path_ = p; + this->is_cgi (this->url_path_); +} + +void +HTTP_Parse_URL::parse_scheme (char *&p) +{ + // Parse the scheme. The scheme is delimited by a ':'. + if (*p != '\0') + { + this->scheme_ = p++; + for (;;) + { + switch (*p) + { + case '\0': + break; + case ':': + *p++ = '\0'; + break; + default: + p++; + continue; + } + break; + } + } +} + +void +HTTP_Parse_URL::parse_host (char *&p) +{ + // Parse user, password, host, port + if (*p == '/' || *p == '\0') + { + this->set_port_from_scheme (); + return; + } + + char *at = 0; + char *colon1 = 0; + char *colon2 = 0; + char *q = p; + while (*q != '\0') + { + if (*q == '/') + { + *q = '\0'; + q++; + break; + } + if (*q == ':') + { + if (colon1 == 0) + { + if (at != 0 && colon2 == 0) + colon2 = q; + else + colon1 = q; + } + else + { + if (at != 0 && colon2 == 0) + colon2 = q; + } + } + if (*q == '@') + { + if (at == 0) + at = q; + } + q++; + } + + // no user, no port + if (at == 0 && colon1 == 0) + { + if (*p != '\0' && *p != '/') + this->host_ = p; + } + + // no user, port + else if (at == 0 && colon1 != 0) + { + if (p != colon1) + this->host_ = p; + *colon1++ = '\0'; + this->port_ = ACE_OS::atoi (colon1); + } + + // user, no passwd, no port + else if (at != 0 && colon1 == 0 && colon2 == 0) + { + this->user_ = p; + *at++ = '\0'; + if (*at != '\0' && *at != '/') + this->host_ = at; + } + + // user, no passwd, port + else if (at != 0 && colon1 == 0 && colon2 != 0) + { + this->user_ = p; + *at++ = '\0'; + if (at != colon2) + this->host_ = at; + *colon2++ = '\0'; + this->port_ = ACE_OS::atoi (colon2); + } + + // user, passwd, no port + else if (at != 0 && colon1 != 0 && colon2 == 0) + { + this->user_ = p; + *colon1++ = '\0'; + this->passwd_ = colon1; + *at++ = '\0'; + if (*at != '\0') + this->host_ = at; + } + + // user, passwd, and port + else if (at != 0 && colon1 != 0 && colon2 != 0) + { + this->user_ = p; + *colon1++ = '\0'; + this->passwd_ = colon1; + *at++ = '\0'; + if (at != colon2) + this->host_ = at; + *colon2++ = '\0'; + this->port_ = ACE_OS::atoi (colon2); + } + + // impossible! + else + { + ACE_ERROR ((LM_ERROR, "uh oh!\n")); + p = q; + return; + } + + this->set_port_from_scheme (); + p = q; +} + +void +HTTP_Parse_URL::set_port_from_scheme (void) +{ + if (ACE_OS::strcmp (this->scheme_, "ftp") == 0) + { + if (this->port_ == -1) + this->port_ = 21; + if (this->user_ == 0) + { + this->user_ = "anonymous"; + + // *** need something better here + this->passwd_ = "a@b.c"; + } + } + else if (ACE_OS::strcmp (this->scheme_, "http") == 0) + { + if (this->port_ == -1) + this->port_ = 80; + } +} + +const char * +HTTP_Parse_URL::scheme (void) const +{ + return this->scheme_; +} + +const char * +HTTP_Parse_URL::user (void) const +{ + return this->user_; +} + +const char * +HTTP_Parse_URL::passwd (void) const +{ + return this->passwd_; +} + +const char * +HTTP_Parse_URL::host (void) const +{ + return this->host_; +} + +int +HTTP_Parse_URL::port (void) const +{ + return this->port_; +} + +const char * +HTTP_Parse_URL::url_path (void) const +{ + return this->url_path_ ? this->url_path_ : ""; +} + +void +HTTP_Parse_URL::is_cgi (const char *path) +{ + int yes; + + yes = (ACE_OS::strchr (path, '?') != 0); + if (!yes && (ACE_OS::strlen (path) >= 3)) + yes = (ACE_OS::strstr (path, "cgi") != 0); + if (!yes) + yes = (ACE_OS::strstr (path, "asp") != 0); + + this->is_cgi_ = yes; +} + +int +HTTP_Parse_URL::is_cgi (void) const +{ + return this->is_cgi_; +} diff --git a/apps/JAWS/PROTOTYPE/HTTPU/parse_url.h b/apps/JAWS/PROTOTYPE/HTTPU/parse_url.h new file mode 100644 index 00000000000..fed7ab881b1 --- /dev/null +++ b/apps/JAWS/PROTOTYPE/HTTPU/parse_url.h @@ -0,0 +1,61 @@ +/* -*- c++ -*- */ +// $Id$ + +#if !defined (HTTPU_HTTP_PARSE_H) +#define HTTPU_HTTP_PARSE_H + +class HTTP_Parse_URL +{ + // CAVEAT: + + // The user of the class is responsible for testing the difference + // between a missing username versus an empty one. Same goes for + // password The RFC (1738) makes the differentiation for username + // and password. If the hostname is missing (or empty), this class + // always returns a null value for the host. + +public: + HTTP_Parse_URL (const char *url = 0); + ~HTTP_Parse_URL (void); + + void init (const char *url); + + enum URL_SCHEME { HTTP, FTP }; + + const char *scheme (void) const; + const char *user (void) const; + const char *passwd (void) const; + const char *host (void) const; + int port (void) const; + const char *url_path (void) const; + + enum URL_ERROR { NONE, STRDUP, SCHEME, SLASHSLASH }; + + int error (void) const { return( error_ ); } + + int is_cgi (void) const; + +private: + void parse_url (void); + void parse_scheme (char *&p); + void parse_host (char *&p); + void parse_url_path (char *&p); + void is_cgi (const char *path); + + void set_port_from_scheme (void); + +private: + char *url_; + + char *scheme_; + char *user_; + char *passwd_; + char *host_; + int port_; + char *url_path_; + + int error_; + int is_cgi_; +}; + +#endif /* !defined (HTTPU_HTTP_PARSE_H) */ diff --git a/apps/JAWS/PROTOTYPE/HTTP_10.cpp b/apps/JAWS/PROTOTYPE/HTTP_10.cpp index 659c104343d..60ebdc8b17f 100644 --- a/apps/JAWS/PROTOTYPE/HTTP_10.cpp +++ b/apps/JAWS/PROTOTYPE/HTTP_10.cpp @@ -6,27 +6,6 @@ ACE_RCSID(PROTOTYPE, HTTP_10, "$Id$") -JAWS_HTTP_10_Headers::JAWS_HTTP_10_Headers (void) - : iter_ (*this) -{ -} - -JAWS_HTTP_10_Headers::~JAWS_HTTP_10_Headers (void) -{ -} - -int -JAWS_HTTP_10_Headers::lessthan (const char *const &k1, const char *const &k2) -{ - return ACE_OS::strcmp (k1, k2) < 0; -} - -Symbol_Table_Iterator & -JAWS_HTTP_10_Headers::iter (void) -{ - return this->iter_; -} - char * JAWS_HTTP_10_Helper::HTTP_decode_string (char *path) { @@ -37,27 +16,17 @@ JAWS_HTTP_10_Helper::HTTP_decode_string (char *path) for (i = j = 0; path[i] != '\0'; i++, j++) { if (path[i] == '%') - { - percentcode[0] = path[++i]; - percentcode[1] = path[++i]; - percentcode[2] = '\0'; - path[j] = (char) ACE_OS::strtol (percentcode, (char **) 0, 16); - } + { + percentcode[0] = path[++i]; + percentcode[1] = path[++i]; + percentcode[2] = '\0'; + path[j] = (char) ACE_OS::strtol (percentcode, (char **) 0, 16); + } else - path[j] = path[i]; + path[j] = path[i]; } path[j] = path[i]; return path; } - -#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) -template class RB_Tree_Node<const char *, const char *>; -template class RB_Tree<const char *, const char *>; -template class RB_Tree_Iterator<const char *, const char *>; -#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) -#pragma instantiate RB_Tree_Node<const char *, const char *> -#pragma instantiate RB_Tree<const char *, const char *> -#pragma instantiate RB_Tree_Iterator<const char *, const char *> -#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ diff --git a/apps/JAWS/PROTOTYPE/HTTP_10.h b/apps/JAWS/PROTOTYPE/HTTP_10.h index 8dcb2e00dd7..d5008b77918 100644 --- a/apps/JAWS/PROTOTYPE/HTTP_10.h +++ b/apps/JAWS/PROTOTYPE/HTTP_10.h @@ -34,13 +34,6 @@ public: virtual int handle_put (JAWS_Data_Block *data, ACE_Time_Value *tv); -private: - int parse_request (JAWS_HTTP_10_Request *info, JAWS_Data_Block *data); - int parse_headers (JAWS_HTTP_10_Request *info, ACE_Message_Block &mb); - int parse_header_type (JAWS_HTTP_10_Request *info, ACE_Message_Block &mb); - int parse_header_value (JAWS_HTTP_10_Request *info, ACE_Message_Block &mb); - char * skipset (const char *set, char *start, char *end); - }; // Write the response @@ -56,143 +49,7 @@ public: private: }; -typedef RB_Tree<const char *, const char *> Symbol_Table; -typedef RB_Tree_Iterator<const char *, const char *> Symbol_Table_Iterator; - -class JAWS_HTTP_10_Headers : public Symbol_Table -{ -public: - JAWS_HTTP_10_Headers (void); - virtual ~JAWS_HTTP_10_Headers (void); - - virtual int lessthan (const char *const &k1, const char *const &k2); - // virtual comparison hook in RB_Tree - - Symbol_Table_Iterator &iter (void); - // returns an iterator to the headers container - -private: - Symbol_Table_Iterator iter_; -}; - -class JAWS_HTTP_10_Request -{ -public: - JAWS_HTTP_10_Request (void); - ~JAWS_HTTP_10_Request (void); - - int end_of_line (void) const; - void end_of_line (int flag); - - const char *last_header_type (void) const; - void last_header_type (char *ht); - - const char *last_header_value (void) const; - void last_header_value (char *hv); - - int last_header_length (void) const; - void last_header_length (int len); - - char *header_buf (void); - - void append_last_header_value (char c); - void reduce_last_header_value (void); - void resize_last_header_value (void); - - void create_next_header_value (char *ht, char *hv); - - int reset (char *buffer, int buflen); - - void parse_request_line (char *request_line); - - int got_request_line (void) const; - int end_of_headers (void) const; - int status (void) const; - - const char *method (void) const; - const char *uri (void) const; - const char *version (void) const; - const char *path (void) const; - - void got_request_line (int flag); - void end_of_headers (int flag); - void status (int s); - - JAWS_HTTP_10_Headers *table (void); - - const char *method (const char *s); - const char *uri (const char *s); - const char *version (const char *s); - const char *path (const char *s); - - int type (void); - - enum REQUEST_TYPE - { - NO_TYPE = -1, - GET = 0, - HEAD, - POST, - PUT, - QUIT, - NUM_METHOD_STRINGS - }; - - enum STATUS_CODE - { - STATUS_OK = 200, - STATUS_CREATED = 201, - STATUS_ACCEPTED = 202, - STATUS_NO_CONTENT = 204, - STATUS_MOVED_PERMANENTLY = 301, - STATUS_MOVED_TEMPORARILY = 302, - STATUS_NOT_MODIFIED = 304, - STATUS_INSUFFICIENT_DATA = 399, - STATUS_BAD_REQUEST = 400, - STATUS_UNAUTHORIZED = 401, - STATUS_FORBIDDEN = 403, - STATUS_NOT_FOUND = 404, - STATUS_INTERNAL_SERVER_ERROR = 500, - STATUS_NOT_IMPLEMENTED = 501, - STATUS_BAD_GATEWAY = 502, - STATUS_SERVICE_UNAVAILABLE = 503, - STATUS_QUIT = 599 - }; - - enum - { - MAX_STATUS_CODE = 599, - MAX_HEADER_LENGTH = 8192 - }; - // Note that RFC 822 does not mention the maximum length of a header - // line. So in theory, there is no maximum length. - // In Apache, they assume that each header line should not exceed - // 8K. Who am I to disagree? - - -private: - int got_request_line_; - int end_of_headers_; - int end_of_line_; - char *last_header_type_; - char *last_header_value_; - int last_header_length_; - int status_; - int type_; - int content_length_; - int datalen_; - int status_msglen_; - - char *data_; - char *method_; - char *uri_; - char *version_; - char *path_; - - char header_buf_[MAX_HEADER_LENGTH]; - - JAWS_HTTP_10_Headers table_; -}; +// Helpers class JAWS_HTTP_10_Helper // Static functions to enhance the lives of HTTP programmers everywhere. diff --git a/apps/JAWS/PROTOTYPE/HTTP_10_Parse.cpp b/apps/JAWS/PROTOTYPE/HTTP_10_Parse.cpp index de87d6ebfce..c0c04964776 100644 --- a/apps/JAWS/PROTOTYPE/HTTP_10_Parse.cpp +++ b/apps/JAWS/PROTOTYPE/HTTP_10_Parse.cpp @@ -7,6 +7,8 @@ #include "JAWS/IO_Handler.h" #include "JAWS/Policy.h" +#include "HTTP_10_Request.h" + ACE_RCSID(PROTOTYPE, HTTP_10_Parse, "$Id$") // --------------- PARSE TASK ---------------------- @@ -46,10 +48,9 @@ cerr << "************* Message block in parse: " << data << endl; data->payload (ACE_static_cast (void *, info)); } - while (this->parse_request (info, data) == 0) + while (info->receive (*(ACE_Message_Block *)data) == 0) { - int next_read_size - = JAWS_Data_Block::JAWS_DATA_BLOCK_SIZE - data->length (); + int next_read_size = data->space (); if (next_read_size == 0) { @@ -73,293 +74,9 @@ cerr << "************* Message block in parse: " << data << endl; } } - // request completely parsed - - return 0; -} - -int -JAWS_HTTP_10_Parse_Task::parse_request (JAWS_HTTP_10_Request *info, - JAWS_Data_Block *data) -{ - JAWS_TRACE ("JAWS_HTTP_10_Parse_Task::parse_request"); - - // Algorithm -- - // - // -- if we have not parsed a request line - // scan for a newline - // if no newline present, return - // parse the request line - // set "parsed request line" flag - // set "end of line" flag - // adjust the read pointer - // - // -- parse the header line input - // loop: - // if no more input break - // if "end of line" flag is set and - // line does not begin with leading white space - // if this char is a newline - // set "end of headers" flag - // return - // get the header type (i.e, up to colon) - // if there is no colon - // ignore input up to next newline or no more input - // adjust the read pointer - // goto loop: - // set header value to something empty - // set last header to point to current header - // unset "end of line" flag - // if "end of line" flag is not set or - // if the line begins with leading white space, - // while not a newline character present - // if "end of input" end while - // otherwise append char to last header value - // adjust the read pointer - // if a newline, set "end of line" flag - // goto loop: - // - // -- adjust read and write pointer - // if "end of input" occurs but there is still - - ACE_Message_Block &mb = *data; - - if (!info->got_request_line ()) - { - char *p; - p = this->skipset ("\n", mb.rd_ptr (), mb.wr_ptr ()); - if (p == mb.wr_ptr ()) - // can't do anything yet - return 0; - - info->parse_request_line (mb.rd_ptr ()); - - mb.rd_ptr (p+1); - info->end_of_line (1); - } - - return this->parse_headers (info, mb); -} - -int -JAWS_HTTP_10_Parse_Task::parse_headers (JAWS_HTTP_10_Request *info, - ACE_Message_Block &mb) -{ - JAWS_TRACE ("JAWS_HTTP_10_Parse_Task::parse_headers"); - - for (;;) - { - if (mb.rd_ptr () == mb.wr_ptr ()) - break; - - char *p = mb.rd_ptr (); - - if (info->end_of_line () - && (*p != ' ' && *p != '\t')) - { - int r = this->parse_header_type (info, mb); - if (r == 1) - return info->end_of_headers (); - continue; - } - else - { - int r = this->parse_header_value (info, mb); - if (r == 1) - break; - continue; - } - } - - if (mb.rd_ptr () != mb.base ()) - { - size_t len = mb.length (); - if (len > 0) - ACE_OS::memmove (mb.base (), mb.rd_ptr (), len); - mb.rd_ptr (mb.base ()); - mb.wr_ptr (mb.base () + len); - return 0; - } - else if (mb.length () == mb.size ()) - { - // This is one of those cases that should rarely ever happen. - // If we get here, it means the initial HTTP request line was - // over 8K long or that the header type name is over 8K long. - // In either case, we flag this as a bad request. - - // In HTTP/1.1, I have to remember that a bad request means the - // connection needs to be closed and the client has to - // reinitiate the connection. - - info->status (JAWS_HTTP_10_Request::STATUS_BAD_REQUEST); - return 1; - } - - return 0; -} - -char * -JAWS_HTTP_10_Parse_Task::skipset (const char *set, char *start, char *end) -{ - char *p = start; - while (p < end) - { - if (ACE_OS::strchr (set, *p) != NULL) - break; - p++; - } - return p; -} - -int -JAWS_HTTP_10_Parse_Task::parse_header_type (JAWS_HTTP_10_Request *info, - ACE_Message_Block &mb) -{ - JAWS_TRACE ("JAWS_HTTP_10_Parse_Task::parse_header_type"); + cerr << "parse status: " << info->status () << endl; - char *p = mb.rd_ptr (); - char *q; - - q = this->skipset (":\n", p, mb.wr_ptr ()); - if (q == mb.wr_ptr ()) - // no more progress can be made until we find a ':' - return 1; - if (q == p) - { - // Ignore empty header type names - info->create_next_header_value (0, 0); - info->end_of_line (0); - mb.rd_ptr (q+1); - return 0; - } - if (*q == '\n') - { - // ignore this line - mb.rd_ptr (q+1); - if (q == p || ((q-1) == p && q[-1] == '\r')) - { - // blank line means end of headers - info->create_next_header_value (0, 0); - info->end_of_headers (1); - if (mb.rd_ptr () == mb.wr_ptr ()) - { - mb.rd_ptr (mb.base ()); - mb.wr_ptr (mb.base ()); - } - return 1; - } - - // not a blank line, but no ':', so ignore it - info->create_next_header_value (0, 0); - return 0; - } - - // otherwise, we have a header type name! - *q = '\0'; - char *header_type = ACE_OS::strdup (p); - char *header_value = info->header_buf (); - - if (header_type == 0) - { - ACE_ERROR ((LM_ERROR, - "%p\n", - "JAWS_HTTP_10_Parse_Task::parse_request")); - ACE_OS::free (header_type); - header_type = 0; - header_value = 0; - info->create_next_header_value (header_type, header_value); - } - else - { - JAWS_TRACE ("JAWS_HTTP_10_Parse_Task::parse_header_type got one!"); - - info->create_next_header_value (header_type, header_value); - header_value[0] = '\0'; - info->table ()->insert (header_type, header_value); - } - - info->end_of_line (0); + // request completely parsed - mb.rd_ptr (q+1); return 0; } - -int -JAWS_HTTP_10_Parse_Task::parse_header_value (JAWS_HTTP_10_Request *info, - ACE_Message_Block &mb) -{ - JAWS_TRACE ("JAWS_HTTP_10_Parse_Task::parse_header_value"); - - // break --> return 1; - // continue --> return 0; - - char *q = mb.rd_ptr (); - - if (info->last_header_value () == 0) - { - JAWS_TRACE ("JAWS_HTTP_10_Parse_Task::parse_header_value ignore"); - - q = this->skipset ("\n", mb.rd_ptr (), mb.wr_ptr ()); - if (q == mb.wr_ptr ()) - { - info->end_of_line (0); - mb.rd_ptr (q); - if (q[-1] == '\r') - mb.rd_ptr (q-1); - return 1; - } - if (*q == '\n') - { - info->end_of_line (1); - q++; - } - mb.rd_ptr (q); - return 0; - } - else - { - JAWS_TRACE ("JAWS_HTTP_10_Parse_Task::parse_header_value skip"); - - // Skip over leading linear white space - q = this->skipset (" \t", mb.rd_ptr (), mb.wr_ptr ()); - if (q == mb.wr_ptr ()) - { - // need more input - info->end_of_line (0); - mb.rd_ptr (q); - return 1; - } - - // If not the first header value character, - // insert a single space - if (info->last_header_length () != 0) - info->append_last_header_value (' '); - - while (q < mb.wr_ptr ()) - { - if (*q == '\n') - break; - info->append_last_header_value (*q); - q++; - } - - if (q == mb.wr_ptr ()) - { - info->end_of_line (0); - mb.rd_ptr (q); - return 1; - } - - if (*q == '\n') - { - if (q[-1] == '\r') - info->reduce_last_header_value (); - info->end_of_line (1); - mb.rd_ptr (q+1); - return 0; - } - } - - // NOT REACHED - return 1; -} diff --git a/apps/JAWS/PROTOTYPE/HTTP_10_Read.cpp b/apps/JAWS/PROTOTYPE/HTTP_10_Read.cpp index 98518cc57ae..fe746512d14 100644 --- a/apps/JAWS/PROTOTYPE/HTTP_10_Read.cpp +++ b/apps/JAWS/PROTOTYPE/HTTP_10_Read.cpp @@ -32,9 +32,14 @@ JAWS_HTTP_10_Read_Task::handle_put (JAWS_Data_Block *data, ACE_Time_Value *) if (data->length () > 0) { - JAWS_TRACE ("JAWS_HTTP_10_Read_Task::handle_put, have data"); - return 0; + if (data->rd_ptr ()[0] != '\0') + { + JAWS_TRACE ("JAWS_HTTP_10_Read_Task::handle_put, have data"); + return 0; + } } + data->rd_ptr (data->wr_ptr ()); + data->crunch (); io->read (handler, data, data->size ()); switch (handler->status ()) diff --git a/apps/JAWS/PROTOTYPE/HTTP_10_Request.cpp b/apps/JAWS/PROTOTYPE/HTTP_10_Request.cpp index bfecf6071cd..7f839f550a9 100644 --- a/apps/JAWS/PROTOTYPE/HTTP_10_Request.cpp +++ b/apps/JAWS/PROTOTYPE/HTTP_10_Request.cpp @@ -1,213 +1,66 @@ // $Id$ #include "JAWS/JAWS.h" -#include "HTTP_10.h" +#include "HTTP_10_Request.h" ACE_RCSID(PROTOTYPE, HTTP_10_Request, "$Id$") -#define ACCESSOR(T,C,x) \ -T C##::##x (void) const { return this->##x##_; }\ -void C##::##x (T t) { this->##x##_ = t; } - +static int dummy; JAWS_HTTP_10_Request::JAWS_HTTP_10_Request (void) - : got_request_line_ (0), - end_of_headers_ (0), - end_of_line_ (0), - last_header_type_ (0), - last_header_value_ (0), - last_header_length_ (0), - status_ (0), - type_ (-1), - content_length_ (-1), - datalen_ (0), - status_msglen_ (0), - data_ (0), - method_ (0), - uri_ (0), - version_ (0), - path_ (0) + : path_ (0) { } JAWS_HTTP_10_Request::~JAWS_HTTP_10_Request (void) { - ACE_OS::free (this->method_); - ACE_OS::free (this->uri_); - ACE_OS::free (this->version_); ACE_OS::free (this->path_); -} - -int -JAWS_HTTP_10_Request::reset (char *buffer, int buflen) -{ - // Initialize these every time. - this->content_length_ = -1; - - // Extract the data pointer. - this->data_ = buffer; - this->datalen_ = 0; - - // Set the datalen - if (this->data_ != NULL) - this->datalen_ = buflen; - else - this->datalen_ = 0; - - // ACE_DEBUG ((LM_DEBUG, " (%t) init has initialized\n")); - - return 1; -} - -void -JAWS_HTTP_10_Request::parse_request_line (char *request_line) -{ - char *ptr = request_line; - char *buf = request_line; - int offset = 1; - - this->status_ = JAWS_HTTP_10_Request::STATUS_OK; - - ptr = ACE_OS::strchr (request_line, '\n'); - - if (ptr > request_line && ptr[-1] == '\r') - ptr--, offset++; - - if (ptr == request_line) - { - this->status_ = JAWS_HTTP_10_Request::STATUS_BAD_REQUEST; - return; - } - - *ptr = '\0'; - ptr += offset; - - char *lasts = 0; // for strtok_r - - // Get the request type. - this->got_request_line_ = 1; - - if (this->method (ACE_OS::strtok_r (buf, " \t", &lasts)) - && this->uri (ACE_OS::strtok_r (NULL, " \t", &lasts))) - { - if (this->type () != NO_TYPE) - { - if (this->version (ACE_OS::strtok_r (NULL, " \t", &lasts)) == 0 - && this->type () != GET) - this->status_ = STATUS_NOT_IMPLEMENTED; - - if (this->path (this->uri ()) == 0) - this->status_ = STATUS_NOT_FOUND; - } - } -} - -const char * -JAWS_HTTP_10_Request::method (const char *method_string) -{ - if (this->method_) - ACE_OS::free (this->method_); - - if (method_string == 0) - { - this->status_ = STATUS_BAD_REQUEST; - this->method_ = 0; - } - else - this->method_ = ACE_OS::strdup (method_string); - - return this->method_; -} - -const char * -JAWS_HTTP_10_Request::uri (const char *uri_string) -{ - if (this->uri_) - ACE_OS::free (this->uri_); - - if (uri_string == 0) - { - this->status_ = STATUS_BAD_REQUEST; - this->uri_ = 0; - } - else - { - this->uri_ = ACE_OS::strdup (uri_string); - // this->cgi (this->uri_); - JAWS_HTTP_10_Helper::HTTP_decode_string (this->uri_); - } - - return this->uri_; -} - -const char * -JAWS_HTTP_10_Request::version (const char *version_string) -{ - if (this->version_) - ACE_OS::free (this->version_); - - if (version_string) - this->version_ = ACE_OS::strdup (version_string); - else - this->version_ = 0; - - return this->version_; + this->path_ = 0; } const char * JAWS_HTTP_10_Request::method (void) const { - return this->method_; + return this->request_line ()->method_str (); } const char * JAWS_HTTP_10_Request::uri (void) const { - return this->uri_; + return this->request_line ()->url (); } const char * JAWS_HTTP_10_Request::version (void) const { - return this->version_; + return this->request_line ()->version (); } -const char * -JAWS_HTTP_10_Request::path (void) const +int +JAWS_HTTP_10_Request::type (void) const { - return this->path_; + return this->request_line ()->method (); } -int -JAWS_HTTP_10_Request::type (void) +const char * +JAWS_HTTP_10_Request::path (void) const { - if (this->type_ == NO_TYPE && this->method () != 0) + if (this->path_ == 0) { - if (ACE_OS::strcmp (this->method (), "GET") == 0) - this->type_ = GET; - else if (ACE_OS::strcmp (this->method (), "HEAD") == 0) - this->type_ = HEAD; - else if (ACE_OS::strcmp (this->method (), "POST") == 0) - this->type_ = POST; - else if (ACE_OS::strcmp (this->method (), "PUT") == 0) - this->type_ = PUT; - else if (ACE_OS::strcmp (this->method (), "QUIT") == 0) - this->type_ = QUIT; - else - this->status_ = STATUS_NOT_IMPLEMENTED; + JAWS_HTTP_10_Request *mutable_this = (JAWS_HTTP_10_Request *)this; + mutable_this->path (this->uri ()); } - - return this->type_; + return this->path_; } -const char * +void JAWS_HTTP_10_Request::path (const char *uri_string) { char const *file_name = uri_string; char buf[MAXPATHLEN + 1]; buf[0] = '\0'; - if (file_name == 0) return 0; + if (file_name == 0) return; if (*file_name == '/') { @@ -230,7 +83,7 @@ JAWS_HTTP_10_Request::path (const char *uri_string) struct passwd pw_struct; if (ACE_OS::getpwnam_r (buf, &pw_struct, pw_buf, sizeof (pw_buf)) == 0) - return 0; + return; ACE_OS::strcpy (buf, pw_struct.pw_dir); #endif /* NOT ACE_WIN32 AND NOT VXWORKS */ } @@ -257,93 +110,4 @@ JAWS_HTTP_10_Request::path (const char *uri_string) if (*buf != '\0') this->path_ = ACE_OS::strdup (buf); - - return this->path_; -} - -JAWS_HTTP_10_Headers * -JAWS_HTTP_10_Request::table (void) -{ - return &(this->table_); } - -void -JAWS_HTTP_10_Request::append_last_header_value (char c) -{ - if (this->last_header_value_ == 0) - return; - - if (this->last_header_length_ < MAX_HEADER_LENGTH-1) - { - this->last_header_value_[this->last_header_length_] = c; - this->last_header_length_++; - this->last_header_value_[this->last_header_length_] = '\0'; - } -} - -void -JAWS_HTTP_10_Request::reduce_last_header_value (void) -{ - if (this->last_header_value_ == 0) return; - - if (this->last_header_length_ > 0) - { - this->last_header_length_--; - this->last_header_value_[this->last_header_length_] = '\0'; - } -} - -void -JAWS_HTTP_10_Request::resize_last_header_value (void) -{ - if (this->last_header_value_ == 0) - return; - else { - JAWS_TRACE ("JAWS_HTTP_10_Request::resize_last_header_value"); - - char *nhv = ACE_OS::strdup (this->last_header_value_); - - if (nhv == 0) - { - ACE_ERROR ((LM_ERROR, - "%p\n", - "JAWS_HTTP_10_Request::resize_last_header_value")); - this->table_.remove (this->last_header_type_); - ACE_OS::free (this->last_header_type_); - } - else - { - const char **s = this->table_.find (this->last_header_type_); - *s = nhv; - } - - this->last_header_type_ = 0; - this->last_header_value_ = 0; - this->last_header_length_ = 0; - } -} - -void -JAWS_HTTP_10_Request::create_next_header_value (char *ht, char *hv) -{ - JAWS_TRACE ("JAWS_HTTP_10_Request::create_next_header_value"); - - this->resize_last_header_value (); - this->last_header_type (ht); - this->last_header_value (hv); - this->last_header_length (0); -} - -char * -JAWS_HTTP_10_Request::header_buf (void) -{ - return this->header_buf_; -} - -const ACCESSOR(char *,JAWS_HTTP_10_Request,last_header_type) -const ACCESSOR(char *,JAWS_HTTP_10_Request,last_header_value) -ACCESSOR(int,JAWS_HTTP_10_Request,last_header_length) -ACCESSOR(int,JAWS_HTTP_10_Request,end_of_line) -ACCESSOR(int,JAWS_HTTP_10_Request,got_request_line) -ACCESSOR(int,JAWS_HTTP_10_Request,end_of_headers) -ACCESSOR(int,JAWS_HTTP_10_Request,status) diff --git a/apps/JAWS/PROTOTYPE/HTTP_10_Write.cpp b/apps/JAWS/PROTOTYPE/HTTP_10_Write.cpp index 8279db64799..d0185aa337a 100644 --- a/apps/JAWS/PROTOTYPE/HTTP_10_Write.cpp +++ b/apps/JAWS/PROTOTYPE/HTTP_10_Write.cpp @@ -7,6 +7,8 @@ #include "HTTP_10.h" +#include "HTTP_10_Request.h" + ACE_RCSID(PROTOTYPE, HTTP_10_Write, "$Id$") // --------------- WRITE TASK ---------------------- @@ -24,6 +26,8 @@ JAWS_HTTP_10_Write_Task::handle_put (JAWS_Data_Block *data, ACE_Time_Value *) { JAWS_TRACE ("JAWS_HTTP_10_Write_Task::handle_put"); + int status; + JAWS_IO_Handler *handler = data->io_handler (); JAWS_Dispatch_Policy *policy = this->policy (); if (policy == 0) policy = data->policy (); @@ -38,36 +42,20 @@ JAWS_HTTP_10_Write_Task::handle_put (JAWS_Data_Block *data, ACE_Time_Value *) (info->uri () ? info->uri () : "="), (info->version () ? info->version () : "HTTP/0.9"))); -#if 0 - JAWS_HTTP_10_Headers *table = info->table (); - Symbol_Table_Iterator &iter = table->iter (); - for (iter.first (); ! iter.is_done (); iter.next ()) - { - ACE_DEBUG ((LM_DEBUG, " (%t) header %s::%s\n", - *(iter.key ()), - *(iter.item ()))); - } + status = info->status (); - char message[] = "<html><h1>This is a test</h1></html>\n"; + if (info->type () != (int) JAWS_HTTP_10_Request::GET) + status = JAWS_HTTP_10_Request::STATUS_NOT_IMPLEMENTED; - io->send_error_message (handler, message, sizeof (message)); - if (handler->status () == JAWS_IO_Handler::WRITE_OK) - { - return 0; - } + if (info->type () == (int) JAWS_HTTP_10_Request::QUIT) + status = JAWS_HTTP_10_Request::STATUS_QUIT; - return -1; -#else - - if (info->type () != JAWS_HTTP_10_Request::GET) - info->status (JAWS_HTTP_10_Request::STATUS_NOT_IMPLEMENTED); - - if (info->type () == JAWS_HTTP_10_Request::QUIT) - info->status (JAWS_HTTP_10_Request::STATUS_QUIT); - - if (info->status () != JAWS_HTTP_10_Request::STATUS_OK) + if (status != (int) JAWS_HTTP_10_Request::STATUS_OK) { - char *msg = + JAWS_TRACE ("JAWS_HTTP_10_Write_Task::handle_put, ! STATUS OK"); + cerr << "status: " << status << endl; + + char msg[] = "<html><head><title>HTTP/1.0 500 Internal Server Error</title>" "<body><h1>Server Error</h1>HTTP/1.0 500 Internal Server Error" "</body></html>"; @@ -75,18 +63,17 @@ JAWS_HTTP_10_Write_Task::handle_put (JAWS_Data_Block *data, ACE_Time_Value *) io->send_error_message (handler, msg, sizeof (msg)); if (handler->status () == JAWS_IO_Handler::WRITE_OK) { - JAWS_HTTP_10_Headers *table = info->table (); - Symbol_Table_Iterator &iter = table->iter (); - for (iter.first (); ! iter.is_done (); iter.next ()) - { - table->remove (*(iter.key ())); - ACE_OS::free ((void *) *(iter.key ())); - ACE_OS::free ((void *) *(iter.item ())); - } - int result = (info->status () == JAWS_HTTP_10_Request::STATUS_QUIT); + JAWS_TRACE ("JAWS_HTTP_10_Write_Task::handle_put, QUIT"); + int result = (status + == (int) JAWS_HTTP_10_Request::STATUS_QUIT); delete info; return -result; } + else + { + delete info; + return 1; + } } else { @@ -97,30 +84,29 @@ JAWS_HTTP_10_Write_Task::handle_put (JAWS_Data_Block *data, ACE_Time_Value *) "", 0); - JAWS_HTTP_10_Headers *table = info->table (); - Symbol_Table_Iterator &iter = table->iter (); - for (iter.first (); ! iter.is_done (); iter.next ()) - { - table->remove (*(iter.key ())); - ACE_OS::free ((void *) *(iter.key ())); - ACE_OS::free ((void *) *(iter.item ())); - } - switch (handler->status ()) { case JAWS_IO_Handler::TRANSMIT_OK: - delete info; - return 0; + { + JAWS_TRACE ("JAWS_HTTP_10_Write_Task::handle_put, OK"); + delete info; + return 0; + } case JAWS_IO_Handler::TRANSMIT_ERROR: - delete info; - return -1; + { + JAWS_TRACE ("JAWS_HTTP_10_Write_Task::handle_put, ERROR"); + delete info; + return -1; + } default: - delete info; - return 1; + { + JAWS_TRACE ("JAWS_HTTP_10_Write_Task::handle_put, DEFAULT"); + delete info; + return 1; + } } } delete info; return -1; -#endif } diff --git a/apps/JAWS/PROTOTYPE/JAWS/Headers.cpp b/apps/JAWS/PROTOTYPE/JAWS/Headers.cpp new file mode 100644 index 00000000000..b41ddd87ff5 --- /dev/null +++ b/apps/JAWS/PROTOTYPE/JAWS/Headers.cpp @@ -0,0 +1,165 @@ +/* $Id$ */ + +#include "JAWS/Headers.h" + +// Header Data + +JAWS_Header_Data::JAWS_Header_Data (const char *name, const char *value, + int type) + : header_name_ (name ? ACE_OS::strdup (name) : 0), + header_value_ (value ? ACE_OS::strdup (value) : 0), + header_type_ (type) +{ +} + +JAWS_Header_Data::JAWS_Header_Data (const char *name, int type, + const char *value) + : header_name_ (name ? ACE_OS::strdup (name) : 0), + header_value_ (value ? ACE_OS::strdup (value) : 0), + header_type_ (type) +{ +} + +JAWS_Header_Data::~JAWS_Header_Data (void) +{ + if ( this->header_name_ ) + ACE_OS::free ((void *)this->header_name_); + if ( this->header_value_ ) + ACE_OS::free ((void *)this->header_value_); + this->header_name_ = 0; + this->header_value_ = 0; +} + +const char * +JAWS_Header_Data::header_name (void) const +{ + return this->header_name_; +} + +const char * +JAWS_Header_Data::header_value (void) const +{ + return this->header_value_; +} + +int +JAWS_Header_Data::header_type (void) const +{ + return this->header_type_; +} + +void +JAWS_Header_Data::header_name (const char *name) +{ + if (this->header_name_) + ACE_OS::free ((void *)this->header_name_); + this->header_name_ = name ? ACE_OS::strdup (name) : 0; +} + +void +JAWS_Header_Data::header_value (const char *value) +{ + if (this->header_value_) + ACE_OS::free ((void *)this->header_value_); + this->header_value_ = value ? ACE_OS::strdup (value) : 0; +} + +void +JAWS_Header_Data::header_type (int type) +{ + this->header_type_ = type; +} + + +// Header Table + +JAWS_Headers::JAWS_Headers (void) + : iter_ (*this) +{ +} + +JAWS_Headers::~JAWS_Headers (void) +{ +} + +JAWS_Header_Table_Iterator & +JAWS_Headers::iter (void) +{ + return this->iter_; +} + +int +JAWS_Headers::insert (JAWS_Header_Data *new_data) +{ + // Since there may be duplicate header entries, we don't worry about + // doing this find anymore. Make the application developer figure + // out how to interpret duplicate entries. + + return (JAWS_Header_Table::insert_tail (new_data) ? 0 : -1); +} + +JAWS_Header_Data * +JAWS_Headers::find (const char *const &header_name) +{ + this->iter_.first (); + return this->find_next (header_name); +} + +JAWS_Header_Data * +JAWS_Headers::find_next (const char *const &header_name) +{ + JAWS_Header_Data *data = 0; + JAWS_Header_Table_Iterator &i = this->iter_; + + while (! i.done ()) + { + data = i.next (); + if (data != 0) + { + if (ACE_OS::strcasecmp (data->header_name (), header_name) != 0) + data = 0; + } + i.advance (); + if (data != 0) + break; + } + + return data; +} + +void +JAWS_Headers::remove_all (const char *const &header_name) +{ + JAWS_Header_Data *data; + int done; + + do + { + JAWS_Header_Table_Iterator i (*this); + i.first (); + done = 1; + while (! i.done ()) + { + data = i.next (); + if (data != 0 + && ACE_OS::strcasecmp (data->header_name (), header_name) == 0) + { + i.remove (); + delete data; + done = 0; + break; + } + else + i.advance (); + } + } + while (! done); +} + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) +template class ACE_DLList<JAWS_Header_Data>; +template class ACE_DLList_Iterator<JAWS_Header_Data>; +#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) +#pragma instantiate ACE_DLList<JAWS_Header_Data> +#pragma instantiate ACE_DLList_Iterator<JAWS_Header_Data> +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ diff --git a/apps/JAWS/PROTOTYPE/JAWS/Headers.h b/apps/JAWS/PROTOTYPE/JAWS/Headers.h new file mode 100644 index 00000000000..047cbddc3d7 --- /dev/null +++ b/apps/JAWS/PROTOTYPE/JAWS/Headers.h @@ -0,0 +1,73 @@ +/* -*- c++ -*- */ +// $Id$ + +#if !defined (JAWS_HEADERS_H) +#define JAWS_HEADERS_H + +#include "ace/Containers.h" + +// Use scenario -- + +// Parse_Headers will parse out a header name and then will want to +// update "last header data" in Header_Info. At this point, only the +// header name is strdup'd. + +// Parse_Headers will then append additional data to the header value +// until the header value of "last header data" is done. + +// Parse_Headers will notify Header_Info that "last header data" is +// done and is ready to be inserted into the Headers data structure. +// At this point, the header value is strdup'd. + +class JAWS_Header_Data +{ +public: + JAWS_Header_Data (const char *name, const char *value = 0, int type = 0); + JAWS_Header_Data (const char *name, int type, const char *value = 0); + ~JAWS_Header_Data (void); + + const char * header_name (void) const; + const char * header_value (void) const; + int header_type (void) const; + + void header_name (const char *name); + void header_value (const char *value); + void header_type (int type); + +private: + const char * header_name_; + const char * header_value_; + int header_type_; +}; + +typedef ACE_DLList<JAWS_Header_Data> JAWS_Header_Table; +typedef ACE_DLList_Iterator<JAWS_Header_Data> JAWS_Header_Table_Iterator; + +class JAWS_Headers : public JAWS_Header_Table +{ +public: + JAWS_Headers (void); + ~JAWS_Headers (void); + + int insert (JAWS_Header_Data *new_data); + // insert the new data 0 -> success, -1 -> failure + + JAWS_Header_Data * find (const char *const &header_name); + // find always begins from the beginning of the list + // result is NULL if not found + + JAWS_Header_Data * find_next (const char *const &header_name); + // behaves like find, but from where that last find left off + // result is NULL if not found + + void remove_all (const char *const &header_name); + // remove all headers from list that match header_name + + JAWS_Header_Table_Iterator &iter (void); + // returns an iterator to the headers container + +private: + JAWS_Header_Table_Iterator iter_; +}; + +#endif /* !defined (JAWS_HEADERS_H) */ diff --git a/apps/JAWS/PROTOTYPE/JAWS/IO.cpp b/apps/JAWS/PROTOTYPE/JAWS/IO.cpp index 71a693d1c21..e5727c78181 100644 --- a/apps/JAWS/PROTOTYPE/JAWS/IO.cpp +++ b/apps/JAWS/PROTOTYPE/JAWS/IO.cpp @@ -241,7 +241,7 @@ JAWS_Asynch_IO::accept (JAWS_IO_Handler *ioh, JAWS_TRACE ("JAWS_Asynch_IO::accept"); JAWS_Data_Block *db = ioh->message_block (); - ACE_HANDLE listen_handle = db->policy ()->acceptor ()->get_handle (); + //ACE_HANDLE listen_handle = db->policy ()->acceptor ()->get_handle (); //JAWS_Asynch_IO_Handler *aioh = // ACE_dynamic_cast (JAWS_Asynch_IO_Handler *, ioh); diff --git a/apps/JAWS/PROTOTYPE/JAWS/IO_Handler.cpp b/apps/JAWS/PROTOTYPE/JAWS/IO_Handler.cpp index dd1e222ce11..47c3bd3b07a 100644 --- a/apps/JAWS/PROTOTYPE/JAWS/IO_Handler.cpp +++ b/apps/JAWS/PROTOTYPE/JAWS/IO_Handler.cpp @@ -221,28 +221,36 @@ void JAWS_Asynch_Handler::open (ACE_HANDLE h, ACE_Message_Block &mb) { + JAWS_TRACE ("JAWS_Asynch_Handler::open"); + // This currently does nothing, but just in case. ACE_Service_Handler::open (h, mb); // ioh_ set from the ACT hopefully //this->dispatch_handler (); + this->handler ()->mb_->rd_ptr (this->handler ()->mb_->wr_ptr ()); this->handler ()->mb_->crunch (); - if (mb.rd_ptr ()[0] != '\0') - this->handler ()->mb_->copy (mb.rd_ptr (), mb.length ()); + + // Assume at this point there is no data. + //if (mb.rd_ptr ()[0] != '\0') + // this->handler ()->mb_->copy (mb.rd_ptr (), mb.length ()); ACE_Message_Block &mb2 = *(this->handler ()->mb_); ACE_Asynch_Accept::Result fake_result (*this, JAWS_IO_Asynch_Acceptor_Singleton::instance ()->get_handle (), h, mb2, JAWS_Data_Block::JAWS_DATA_BLOCK_SIZE, this->ioh_, ACE_INVALID_HANDLE); - + this->handler ()->handler_ = this; - this->handle_accept (fake_result); + + fake_result.complete (0, 1, 0); } void JAWS_Asynch_Handler::act (const void *act_ref) { + JAWS_TRACE ("JAWS_Asynch_Handler::act"); + // Set the ioh from the act this->ioh_ = (JAWS_IO_Handler *) act_ref; } @@ -361,10 +369,14 @@ JAWS_Asynch_Handler::handle_transmit_file (const void JAWS_Asynch_Handler::handle_accept (const ACE_Asynch_Accept::Result &result) { + JAWS_TRACE ("JAWS_Asynch_Handler::handle_accept"); this->dispatch_handler (); if (result.success ()) - this->handler ()->accept_complete (result.accept_handle ()); + { + JAWS_TRACE ("JAWS_Asynch_Handler::handle_accept, success"); + this->handler ()->accept_complete (result.accept_handle ()); + } else this->handler ()->accept_error (); diff --git a/apps/JAWS/PROTOTYPE/JAWS/Makefile b/apps/JAWS/PROTOTYPE/JAWS/Makefile index 30125c60226..f874017572e 100644 --- a/apps/JAWS/PROTOTYPE/JAWS/Makefile +++ b/apps/JAWS/PROTOTYPE/JAWS/Makefile @@ -14,6 +14,8 @@ LIB = libJAWS.a SHLIB = libJAWS.$(SOEXT) MYFILES = \ + Headers \ + Parse_Headers \ Waiter \ Reaper \ Pipeline \ diff --git a/apps/JAWS/PROTOTYPE/JAWS/Parse_Headers.cpp b/apps/JAWS/PROTOTYPE/JAWS/Parse_Headers.cpp new file mode 100644 index 00000000000..21aaba59b64 --- /dev/null +++ b/apps/JAWS/PROTOTYPE/JAWS/Parse_Headers.cpp @@ -0,0 +1,418 @@ +// $Id$ + +#include "JAWS/Parse_Headers.h" + +#define ACCESSOR(T,C,x) \ +T C##::##x (void) const { return this->##x##_; }\ +void C##::##x (T t) { this->##x##_ = t; } + +int +JAWS_Parse_Headers::parse_headers (JAWS_Header_Info *info, + ACE_Message_Block &mb) +{ + for (;;) + { + if (mb.rd_ptr () == mb.wr_ptr ()) + break; + + char *p = mb.rd_ptr (); + + if (info->end_of_line () + && (*p != ' ' && *p != '\t')) + { + int r = this->parse_header_name (info, mb); + if (r == 1) + return info->end_of_headers (); + continue; + } + else + { + int r = this->parse_header_value (info, mb); + if (r == 1) + break; + continue; + } + } + + // If we arrive here, it means either there is nothing more to read, + // or parse_header_value ran into difficulties (like maybe the + // header value was too long). + + if (mb.rd_ptr () != mb.base ()) + { + mb.crunch (); + return 0; + } + else if (mb.length () == mb.size ()) + { + // This is one of those cases that should rarely ever happen. + // If we get here, the header type name is over 8K long. We + // flag this as a bad thing. + + // In HTTP/1.1, I have to remember that a bad request means the + // connection needs to be closed and the client has to + // reinitiate the connection. + + info->status (JAWS_Header_Info::TOO_LONG); + return 1; + } + + ACE_DEBUG ((LM_DEBUG, "JAWS_Parse_Headers -- shouldn't be here!\n")); + return 1; +} + +char * +JAWS_Parse_Headers::skipset (const char *set, char *start, char *end) +{ + char *p = start; + while (p < end) + { + if (ACE_OS::strchr (set, *p) != NULL) + break; + p++; + } + return p; +} + +char * +JAWS_Parse_Headers::skipcset (const char *set, char *start, char *end) +{ + char *p = start; + while (p < end) + { + if (ACE_OS::strchr (set, *p) == NULL) + break; + p++; + } + return p; +} + +int +JAWS_Parse_Headers::parse_header_name (JAWS_Header_Info *info, + ACE_Message_Block &mb) +{ + char *p = mb.rd_ptr (); + char *q; + + q = this->skipset (":\n", p, mb.wr_ptr ()); + if (q == mb.wr_ptr ()) + { + // no more progress can be made until we find a ':' + return 1; + } + if (*q != '\n' && q == p) + { + // Ignore empty header type names + info->finish_last_header_value (); + info->create_next_header_value (0); + info->end_of_line (0); + mb.rd_ptr (q+1); + return 0; + } + if (*q == '\n') + { + // ignore this line + mb.rd_ptr (q+1); + if (q == p || ((q-1) == p && q[-1] == '\r')) + { + // blank line means end of headers + info->finish_last_header_value (); + info->create_next_header_value (0); + info->end_of_headers (1); + if (mb.rd_ptr () == mb.wr_ptr ()) + mb.crunch (); + return 1; + } + + // not a blank line, but no ':', so ignore it + info->finish_last_header_value (); + info->create_next_header_value (0); + return 0; + } + + // otherwise, we have a header type name! + *q = '\0'; + info->create_next_header_value (p); + info->end_of_line (0); + + mb.rd_ptr (q+1); + return 0; +} + +int +JAWS_Parse_Headers::parse_header_value (JAWS_Header_Info *info, + ACE_Message_Block &mb) +{ + // break --> return 1; + // continue --> return 0; + + char *q = mb.rd_ptr (); + + if (info->last_header_data () == 0) + { + // Ignoring this header (it is too long or something). + + q = this->skipset ("\n", mb.rd_ptr (), mb.wr_ptr ()); + if (q == mb.wr_ptr ()) + { + info->end_of_line (0); + mb.rd_ptr (q); + + // Move the rd_ptr back one character if the last thing we + // see is a carriage return. Assert: wr_ptr > rd_ptr. + if (q[-1] == '\r') + mb.rd_ptr (q-1); + + return 1; + } + + // Move past the newline, set the end of line flag + if (*q == '\n') + { + info->end_of_line (1); + q++; + } + mb.rd_ptr (q); + + return 0; + } + else + { + if (info->end_of_line ()) + { + // Skip over leading linear white space + q = this->skipcset (" \t", mb.rd_ptr (), mb.wr_ptr ()); + if (q == mb.wr_ptr ()) + { + // need more input + info->end_of_line (1); + mb.rd_ptr (q-1); + return 1; + } + + if (*q != '\n') + info->append_last_header_value (' '); + } + + // Append to last header value character by character + while (q < mb.wr_ptr ()) + { + if (*q == '\n') + break; + info->append_last_header_value (*q); + q++; + } + + // Need more input + if (q == mb.wr_ptr ()) + { + mb.rd_ptr (q); + info->end_of_line (0); + return 1; + } + + // Reached a newline + if (*q == '\n') + { + // Reduce by one character if line discipline is "\r\n" + if (info->append_last_header_value () == '\r') + info->reduce_last_header_value (); + + // Move past newline, set end of line flag + mb.rd_ptr (q+1); + info->end_of_line (1); + + return 0; + } + } + + // NOT REACHED + return 1; +} + + +JAWS_Header_Info::JAWS_Header_Info (void) + : end_of_headers_ (0), + end_of_line_ (1), + last_header_data_ (0), + last_header_length_ (0), + status_ (0) +{ +} + +JAWS_Header_Info::~JAWS_Header_Info (void) +{ + JAWS_Header_Table_Iterator iter (this->table_); + JAWS_Header_Data *data_ptr; + + for (iter.first (); !iter.done (); iter.advance ()) + { + data_ptr = iter.next (); + if (data_ptr) + delete data_ptr; + } +} + +void +JAWS_Header_Info::dump (void) +{ + JAWS_Header_Table_Iterator iter (this->table_); + + ACE_DEBUG ((LM_DEBUG, "== BEGIN HEADER INFO DUMP ==\n")); + for (iter.first (); ! iter.done (); iter.advance ()) + { + JAWS_Header_Data *data; + data = iter.next (); + if (data != 0) + ACE_DEBUG ((LM_DEBUG, + "%s -- %s\n", + data->header_name (), data->header_value ())); + else + ACE_DEBUG ((LM_DEBUG, "NULL ENTRY\n")); + } + ACE_DEBUG ((LM_DEBUG, "== END HEADER INFO DUMP ==\n")); +} + +JAWS_Headers * +JAWS_Header_Info::table (void) +{ + return &(this->table_); +} + +void +JAWS_Header_Info::append_last_header_value (char c) +{ + if (this->last_header_data_ == 0) + return; + + if (this->last_header_length_ == 0 && (c == ' ' || c == '\t')) + return; + + if (this->last_header_length_ < MAX_HEADER_LENGTH-1) + { + this->header_buf_[this->last_header_length_] = c; + this->last_header_length_++; + this->header_buf_[this->last_header_length_] = '\0'; + } + +} + +int +JAWS_Header_Info::append_last_header_value (void) +{ + if (this->last_header_data_ == 0 || this->last_header_length_ == 0) + return -1; + + return this->header_buf_[this->last_header_length_-1]; +} + +void +JAWS_Header_Info::append_last_header_value (const char *begin, const char *end) +{ + if (this->last_header_data_ == 0) + return; + + while (this->last_header_length_ < MAX_HEADER_LENGTH-1) + { + if (begin == end) + break; + + this->header_buf_[this->last_header_length_] = *begin; + this->last_header_length_++; + begin++; + } + + this->header_buf_[this->last_header_length_] = '\0'; +} + +void +JAWS_Header_Info::reduce_last_header_value (void) +{ + if (this->last_header_data_ == 0) return; + + if (this->last_header_length_ > 0) + { + this->last_header_length_--; + this->header_buf_[this->last_header_length_] = '\0'; + } +} + +void +JAWS_Header_Info::create_next_header_value (char *ht) +{ + if (ht == 0) + { + // discard last header data + + delete this->last_header_data_; + this->last_header_data_ = 0; + this->last_header_length (0); + return; + } + + this->finish_last_header_value (); + + if (this->status () == JAWS_Header_Info::OK) + { + // create a new last_header_data_ node + + this->last_header_data_ = new JAWS_Header_Data (ht, 0); + // The above performs a strdup. + + if (this->last_header_data_ == 0 || this->last_header_name () == 0) + { + this->status (JAWS_Header_Info::NO_MEMORY); + delete this->last_header_data_; + this->last_header_data_ = 0; + } + this->last_header_length (0); + this->header_buf_[0] = '\0'; + } +} + +void +JAWS_Header_Info::finish_last_header_value (void) +{ + if (this->last_header_data_ != 0) + { + // prepare to insert last header data into the table. + + this->last_header_data_->header_value (this->header_buf ()); + // The above performs a strdup. + + if (this->status () == JAWS_Header_Info::OK) + this->table_.insert (this->last_header_data_); + else + delete this->last_header_data_; + this->last_header_data_ = 0; + } +} + +char * +JAWS_Header_Info::header_buf (void) +{ + return this->header_buf_; +} + +const char * +JAWS_Header_Info::last_header_name (void) const +{ + return this->last_header_data_ ? this->last_header_data_->header_name () : 0; +} + +const JAWS_Header_Data * +JAWS_Header_Info::last_header_data (void) const +{ + return this->last_header_data_; +} + +ACCESSOR(int,JAWS_Header_Info,last_header_length) +ACCESSOR(int,JAWS_Header_Info,end_of_line) +ACCESSOR(int,JAWS_Header_Info,end_of_headers) +ACCESSOR(int,JAWS_Header_Info,status) + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) + template class ACE_Singleton<JAWS_Parse_Headers, ACE_SYNCH_MUTEX>; +#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) +# pragma instantiate ACE_Singleton<JAWS_Parse_Headers, ACE_SYNCH_MUTEX> +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ diff --git a/apps/JAWS/PROTOTYPE/JAWS/Parse_Headers.h b/apps/JAWS/PROTOTYPE/JAWS/Parse_Headers.h new file mode 100644 index 00000000000..49118f61fc3 --- /dev/null +++ b/apps/JAWS/PROTOTYPE/JAWS/Parse_Headers.h @@ -0,0 +1,116 @@ +/* -*- c++ -*- */ +// $Id$ + +#if !defined (JAWS_PARSE_HEADERS_H) +#define JAWS_PARSE_HEADERS_H + +#include "ace/Singleton.h" +#include "ace/Message_Block.h" + +#include "Headers.h" + +class JAWS_Header_Info +{ +public: + JAWS_Header_Info (void); + ~JAWS_Header_Info (void); + + int end_of_line (void) const; + void end_of_line (int flag); + + const char *last_header_name (void) const; + + int last_header_length (void) const; + void last_header_length (int len); + + const JAWS_Header_Data * last_header_data (void) const; + + char *header_buf (void); + + void append_last_header_value (char c); + int append_last_header_value (void); + void append_last_header_value (const char *begin, const char *end); + void reduce_last_header_value (void); + + void create_next_header_value (char *ht); + // This will insert last_header_data into the table if it is not + // null. Then, it will create a new header_data node and populate + // it. If ht is null, last_header_data is not inserted. + + void finish_last_header_value (void); + // This will insert last_header_data into the table if it is not + // null. + + int end_of_headers (void) const; + void end_of_headers (int flag); + + int status (void) const; + void status (int s); + + JAWS_Headers *table (void); + + enum STATUS_CODE + { + OK = 0, + NO_MEMORY, + TOO_LONG + }; + + enum + { + MAX_HEADER_LENGTH = 8192 + }; + // Note that RFC 822 does not mention the maximum length of a header + // line. So in theory, there is no maximum length. + // In Apache, they assume that each header line should not exceed + // 8K. Who am I to disagree? + + void dump (void); + +private: + int end_of_headers_; + int end_of_line_; + + JAWS_Header_Data *last_header_data_; + + int last_header_length_; + int status_; + + char header_buf_[MAX_HEADER_LENGTH]; + JAWS_Headers table_; +}; + +class JAWS_Parse_Headers +{ +public: + + int parse_headers (JAWS_Header_Info *info, ACE_Message_Block &mb); + // Return 0 means need more data, and call it again. + // Return 1 means all done or error. + + int parse_header_name (JAWS_Header_Info *info, ACE_Message_Block &mb); + // Return 0 means reiterate on remaining input. + // Return 1 means input has ended (either because it ended + // prematurely, or that there are no more headers). + + int parse_header_value (JAWS_Header_Info *info, ACE_Message_Block &mb); + // Return 0 means reiterate on remaining input. + // Return 1 means input has ended or that an error has occurred. + + char * skipset (const char *set, char *start, char *end); + // Scans from start to end for characters that match skip set. + // Returns pointer to first location between start and end of a + // character that is in the skip set. + + char * skipcset (const char *set, char *start, char *end); + // Scans from start to end for characters that match skip set. + // Returns pointer to first location between start and end of a + // character that is *not* in the skip set. + +}; + +typedef ACE_Singleton<JAWS_Parse_Headers, ACE_SYNCH_MUTEX> + JAWS_Parse_Headers_Singleton; + + +#endif /* !defined (JAWS_PARSE_HEADERS_H) */ diff --git a/apps/JAWS/PROTOTYPE/Makefile b/apps/JAWS/PROTOTYPE/Makefile index 63d11c96c29..8ae0e628aa4 100644 --- a/apps/JAWS/PROTOTYPE/Makefile +++ b/apps/JAWS/PROTOTYPE/Makefile @@ -20,7 +20,7 @@ SRC = $(addsuffix .cpp,$(FILES)) OBJ = $(addsuffix .o,$(FILES)) LDFLAGS += -L./JAWS -LDLIBS = -lJAWS +LDLIBS = -lHTTPU -lJAWS BUILD = $(VBIN) @@ -46,10 +46,8 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU # DO NOT DELETE THIS LINE -- g++dep uses it. # DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. -.obj/HTTP_10.o .obj/HTTP_10.so .shobj/HTTP_10.o .shobj/HTTP_10.so: HTTP_10.cpp HTTP_10.h \ - $(ACE_ROOT)/ace/RB_Tree.h \ - $(ACE_ROOT)/ace/ACE.h \ - $(ACE_ROOT)/ace/OS.h \ +.obj/HTTP_10.o .obj/HTTP_10.so .shobj/HTTP_10.o .shobj/HTTP_10.so: HTTP_10.cpp HTTP_10.h $(ACE_ROOT)/ace/RB_Tree.h \ + $(ACE_ROOT)/ace/ACE.h $(ACE_ROOT)/ace/OS.h \ $(ACE_ROOT)/ace/inc_user_config.h \ $(ACE_ROOT)/ace/config.h \ $(ACE_ROOT)/ace/config-sunos5.5.h \ @@ -57,8 +55,7 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/streams.h \ $(ACE_ROOT)/ace/Basic_Types.h \ $(ACE_ROOT)/ace/Basic_Types.i \ - $(ACE_ROOT)/ace/OS.i \ - $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/OS.i $(ACE_ROOT)/ace/Trace.h \ $(ACE_ROOT)/ace/Log_Msg.h \ $(ACE_ROOT)/ace/Log_Record.h \ $(ACE_ROOT)/ace/ACE.i \ @@ -72,13 +69,11 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ - $(ACE_ROOT)/ace/Synch.i \ - $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Synch.i $(ACE_ROOT)/ace/Synch_T.h \ $(ACE_ROOT)/ace/Event_Handler.h \ $(ACE_ROOT)/ace/Event_Handler.i \ $(ACE_ROOT)/ace/Synch_T.i \ - $(ACE_ROOT)/ace/Thread.h \ - $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Thread.h $(ACE_ROOT)/ace/Thread.i \ $(ACE_ROOT)/ace/Atomic_Op.i \ $(ACE_ROOT)/ace/Synch_T.cpp \ $(ACE_ROOT)/ace/Singleton.i \ @@ -87,8 +82,8 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Object_Manager.i \ $(ACE_ROOT)/ace/Managed_Object.h \ $(ACE_ROOT)/ace/Managed_Object.i \ - $(ACE_ROOT)/ace/Managed_Object.cpp JAWS/Pipeline.h \ - $(ACE_ROOT)/ace/Service_Config.h \ + $(ACE_ROOT)/ace/Managed_Object.cpp JAWS/Export.h \ + JAWS/Pipeline.h $(ACE_ROOT)/ace/Service_Config.h \ $(ACE_ROOT)/ace/Service_Object.h \ $(ACE_ROOT)/ace/Shared_Object.h \ $(ACE_ROOT)/ace/Shared_Object.i \ @@ -96,8 +91,11 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Signal.h \ $(ACE_ROOT)/ace/Containers.h \ $(ACE_ROOT)/ace/Containers.i \ - $(ACE_ROOT)/ace/Containers.cpp \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ $(ACE_ROOT)/ace/Malloc.i \ $(ACE_ROOT)/ace/Malloc_T.h \ $(ACE_ROOT)/ace/Free_List.h \ @@ -128,13 +126,17 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Message_Block.h \ $(ACE_ROOT)/ace/Message_Block.i \ $(ACE_ROOT)/ace/Time_Value.h \ - $(ACE_ROOT)/ace/Module.h \ - $(ACE_ROOT)/ace/Task_T.h \ + $(ACE_ROOT)/ace/Module.h $(ACE_ROOT)/ace/Task_T.h \ $(ACE_ROOT)/ace/Message_Queue.h \ + $(ACE_ROOT)/ace/Message_Queue_T.h \ + $(ACE_ROOT)/ace/Message_Queue_T.i \ + $(ACE_ROOT)/ace/Message_Queue_T.cpp \ $(ACE_ROOT)/ace/Strategies.h \ $(ACE_ROOT)/ace/Strategies_T.h \ $(ACE_ROOT)/ace/Synch_Options.h \ $(ACE_ROOT)/ace/Synch_Options.i \ + $(ACE_ROOT)/ace/Thread_Manager.h \ + $(ACE_ROOT)/ace/Thread_Manager.i \ $(ACE_ROOT)/ace/Hash_Map_Manager.h \ $(ACE_ROOT)/ace/Hash_Map_Manager.cpp \ $(ACE_ROOT)/ace/Strategies_T.i \ @@ -143,15 +145,11 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Service_Types.h \ $(ACE_ROOT)/ace/Service_Types.i \ $(ACE_ROOT)/ace/Service_Repository.i \ - $(ACE_ROOT)/ace/Thread_Manager.h \ - $(ACE_ROOT)/ace/Thread_Manager.i \ $(ACE_ROOT)/ace/WFMO_Reactor.h \ $(ACE_ROOT)/ace/WFMO_Reactor.i \ $(ACE_ROOT)/ace/Strategies.i \ $(ACE_ROOT)/ace/Message_Queue.i \ - $(ACE_ROOT)/ace/Message_Queue.cpp \ - $(ACE_ROOT)/ace/Task.h \ - $(ACE_ROOT)/ace/Task.i \ + $(ACE_ROOT)/ace/Task.h $(ACE_ROOT)/ace/Task.i \ $(ACE_ROOT)/ace/Task_T.i \ $(ACE_ROOT)/ace/Task_T.cpp \ $(ACE_ROOT)/ace/Module.i \ @@ -162,10 +160,9 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Stream.i \ $(ACE_ROOT)/ace/Stream.cpp JAWS/Pipeline_Handler.h \ JAWS/Pipeline_Handler.cpp JAWS/Data_Block.h JAWS/JAWS.h -.obj/HTTP_10_Request.o .obj/HTTP_10_Request.so .shobj/HTTP_10_Request.o .shobj/HTTP_10_Request.so: HTTP_10_Request.cpp HTTP_10.h \ - $(ACE_ROOT)/ace/RB_Tree.h \ - $(ACE_ROOT)/ace/ACE.h \ - $(ACE_ROOT)/ace/OS.h \ +.obj/HTTP_10_Request.o .obj/HTTP_10_Request.so .shobj/HTTP_10_Request.o .shobj/HTTP_10_Request.so: HTTP_10_Request.cpp JAWS/JAWS.h HTTP_10_Request.h \ + HTTPU/http_request.h $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/ACE.h $(ACE_ROOT)/ace/OS.h \ $(ACE_ROOT)/ace/inc_user_config.h \ $(ACE_ROOT)/ace/config.h \ $(ACE_ROOT)/ace/config-sunos5.5.h \ @@ -173,114 +170,60 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/streams.h \ $(ACE_ROOT)/ace/Basic_Types.h \ $(ACE_ROOT)/ace/Basic_Types.i \ - $(ACE_ROOT)/ace/OS.i \ - $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/OS.i $(ACE_ROOT)/ace/Trace.h \ $(ACE_ROOT)/ace/Log_Msg.h \ $(ACE_ROOT)/ace/Log_Record.h \ $(ACE_ROOT)/ace/ACE.i \ $(ACE_ROOT)/ace/Log_Priority.h \ $(ACE_ROOT)/ace/Log_Record.i \ - $(ACE_ROOT)/ace/RB_Tree.i \ - $(ACE_ROOT)/ace/RB_Tree.cpp JAWS/Pipeline_Tasks.h \ - $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ $(ACE_ROOT)/ace/Synch.h \ $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ - $(ACE_ROOT)/ace/Synch.i \ - $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Synch.i $(ACE_ROOT)/ace/Synch_T.h \ $(ACE_ROOT)/ace/Event_Handler.h \ $(ACE_ROOT)/ace/Event_Handler.i \ $(ACE_ROOT)/ace/Synch_T.i \ - $(ACE_ROOT)/ace/Thread.h \ - $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Thread.h $(ACE_ROOT)/ace/Thread.i \ $(ACE_ROOT)/ace/Atomic_Op.i \ $(ACE_ROOT)/ace/Synch_T.cpp \ - $(ACE_ROOT)/ace/Singleton.i \ - $(ACE_ROOT)/ace/Singleton.cpp \ - $(ACE_ROOT)/ace/Object_Manager.h \ - $(ACE_ROOT)/ace/Object_Manager.i \ - $(ACE_ROOT)/ace/Managed_Object.h \ - $(ACE_ROOT)/ace/Managed_Object.i \ - $(ACE_ROOT)/ace/Managed_Object.cpp JAWS/Pipeline.h \ - $(ACE_ROOT)/ace/Service_Config.h \ - $(ACE_ROOT)/ace/Service_Object.h \ - $(ACE_ROOT)/ace/Shared_Object.h \ - $(ACE_ROOT)/ace/Shared_Object.i \ - $(ACE_ROOT)/ace/Service_Object.i \ - $(ACE_ROOT)/ace/Signal.h \ - $(ACE_ROOT)/ace/Containers.h \ - $(ACE_ROOT)/ace/Containers.i \ - $(ACE_ROOT)/ace/Containers.cpp \ - $(ACE_ROOT)/ace/Malloc.h \ - $(ACE_ROOT)/ace/Malloc.i \ - $(ACE_ROOT)/ace/Malloc_T.h \ $(ACE_ROOT)/ace/Free_List.h \ $(ACE_ROOT)/ace/Free_List.i \ $(ACE_ROOT)/ace/Free_List.cpp \ $(ACE_ROOT)/ace/Malloc_T.i \ $(ACE_ROOT)/ace/Malloc_T.cpp \ $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ $(ACE_ROOT)/ace/Mem_Map.h \ $(ACE_ROOT)/ace/Mem_Map.i \ $(ACE_ROOT)/ace/Memory_Pool.i \ - $(ACE_ROOT)/ace/Signal.i \ - $(ACE_ROOT)/ace/SString.h \ - $(ACE_ROOT)/ace/SString.i \ - $(ACE_ROOT)/ace/Service_Config.i \ - $(ACE_ROOT)/ace/Reactor.h \ - $(ACE_ROOT)/ace/Handle_Set.h \ - $(ACE_ROOT)/ace/Handle_Set.i \ - $(ACE_ROOT)/ace/Timer_Queue.h \ - $(ACE_ROOT)/ace/Timer_Queue_T.h \ - $(ACE_ROOT)/ace/Timer_Queue_T.i \ - $(ACE_ROOT)/ace/Timer_Queue_T.cpp \ - $(ACE_ROOT)/ace/Reactor.i \ - $(ACE_ROOT)/ace/Reactor_Impl.h \ - $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \ - $(ACE_ROOT)/ace/Stream.h \ - $(ACE_ROOT)/ace/IO_Cntl_Msg.h \ - $(ACE_ROOT)/ace/Message_Block.h \ - $(ACE_ROOT)/ace/Message_Block.i \ - $(ACE_ROOT)/ace/Time_Value.h \ - $(ACE_ROOT)/ace/Module.h \ - $(ACE_ROOT)/ace/Task_T.h \ - $(ACE_ROOT)/ace/Message_Queue.h \ - $(ACE_ROOT)/ace/Strategies.h \ - $(ACE_ROOT)/ace/Strategies_T.h \ - $(ACE_ROOT)/ace/Synch_Options.h \ - $(ACE_ROOT)/ace/Synch_Options.i \ - $(ACE_ROOT)/ace/Hash_Map_Manager.h \ - $(ACE_ROOT)/ace/Hash_Map_Manager.cpp \ - $(ACE_ROOT)/ace/Strategies_T.i \ - $(ACE_ROOT)/ace/Strategies_T.cpp \ - $(ACE_ROOT)/ace/Service_Repository.h \ - $(ACE_ROOT)/ace/Service_Types.h \ - $(ACE_ROOT)/ace/Service_Types.i \ - $(ACE_ROOT)/ace/Service_Repository.i \ - $(ACE_ROOT)/ace/Thread_Manager.h \ - $(ACE_ROOT)/ace/Thread_Manager.i \ - $(ACE_ROOT)/ace/WFMO_Reactor.h \ - $(ACE_ROOT)/ace/WFMO_Reactor.i \ - $(ACE_ROOT)/ace/Strategies.i \ - $(ACE_ROOT)/ace/Message_Queue.i \ - $(ACE_ROOT)/ace/Message_Queue.cpp \ - $(ACE_ROOT)/ace/Task.h \ - $(ACE_ROOT)/ace/Task.i \ - $(ACE_ROOT)/ace/Task_T.i \ - $(ACE_ROOT)/ace/Task_T.cpp \ - $(ACE_ROOT)/ace/Module.i \ - $(ACE_ROOT)/ace/Module.cpp \ - $(ACE_ROOT)/ace/Stream_Modules.h \ - $(ACE_ROOT)/ace/Stream_Modules.i \ - $(ACE_ROOT)/ace/Stream_Modules.cpp \ - $(ACE_ROOT)/ace/Stream.i \ - $(ACE_ROOT)/ace/Stream.cpp JAWS/Pipeline_Handler.h \ - JAWS/Pipeline_Handler.cpp JAWS/Data_Block.h -.obj/HTTP_10_Read.o .obj/HTTP_10_Read.so .shobj/HTTP_10_Read.o .shobj/HTTP_10_Read.so: HTTP_10_Read.cpp HTTP_10.h \ + $(ACE_ROOT)/ace/Message_Block.i JAWS/Parse_Headers.h \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Singleton.cpp JAWS/Headers.h \ + HTTPU/http_base.h HTTPU/http_status.h HTTPU/http_headers.h \ $(ACE_ROOT)/ace/RB_Tree.h \ - $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/RB_Tree.i \ + $(ACE_ROOT)/ace/RB_Tree.cpp HTTPU/parse_http_request.h \ + HTTPU/parse_url.h +.obj/HTTP_10_Read.o .obj/HTTP_10_Read.so .shobj/HTTP_10_Read.o .shobj/HTTP_10_Read.so: HTTP_10_Read.cpp HTTP_10.h \ + $(ACE_ROOT)/ace/RB_Tree.h $(ACE_ROOT)/ace/ACE.h \ $(ACE_ROOT)/ace/OS.h \ $(ACE_ROOT)/ace/inc_user_config.h \ $(ACE_ROOT)/ace/config.h \ @@ -289,8 +232,7 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/streams.h \ $(ACE_ROOT)/ace/Basic_Types.h \ $(ACE_ROOT)/ace/Basic_Types.i \ - $(ACE_ROOT)/ace/OS.i \ - $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/OS.i $(ACE_ROOT)/ace/Trace.h \ $(ACE_ROOT)/ace/Log_Msg.h \ $(ACE_ROOT)/ace/Log_Record.h \ $(ACE_ROOT)/ace/ACE.i \ @@ -304,13 +246,11 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ - $(ACE_ROOT)/ace/Synch.i \ - $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Synch.i $(ACE_ROOT)/ace/Synch_T.h \ $(ACE_ROOT)/ace/Event_Handler.h \ $(ACE_ROOT)/ace/Event_Handler.i \ $(ACE_ROOT)/ace/Synch_T.i \ - $(ACE_ROOT)/ace/Thread.h \ - $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Thread.h $(ACE_ROOT)/ace/Thread.i \ $(ACE_ROOT)/ace/Atomic_Op.i \ $(ACE_ROOT)/ace/Synch_T.cpp \ $(ACE_ROOT)/ace/Singleton.i \ @@ -319,8 +259,8 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Object_Manager.i \ $(ACE_ROOT)/ace/Managed_Object.h \ $(ACE_ROOT)/ace/Managed_Object.i \ - $(ACE_ROOT)/ace/Managed_Object.cpp JAWS/Pipeline.h \ - $(ACE_ROOT)/ace/Service_Config.h \ + $(ACE_ROOT)/ace/Managed_Object.cpp JAWS/Export.h \ + JAWS/Pipeline.h $(ACE_ROOT)/ace/Service_Config.h \ $(ACE_ROOT)/ace/Service_Object.h \ $(ACE_ROOT)/ace/Shared_Object.h \ $(ACE_ROOT)/ace/Shared_Object.i \ @@ -328,8 +268,11 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Signal.h \ $(ACE_ROOT)/ace/Containers.h \ $(ACE_ROOT)/ace/Containers.i \ - $(ACE_ROOT)/ace/Containers.cpp \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ $(ACE_ROOT)/ace/Malloc.i \ $(ACE_ROOT)/ace/Malloc_T.h \ $(ACE_ROOT)/ace/Free_List.h \ @@ -360,13 +303,17 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Message_Block.h \ $(ACE_ROOT)/ace/Message_Block.i \ $(ACE_ROOT)/ace/Time_Value.h \ - $(ACE_ROOT)/ace/Module.h \ - $(ACE_ROOT)/ace/Task_T.h \ + $(ACE_ROOT)/ace/Module.h $(ACE_ROOT)/ace/Task_T.h \ $(ACE_ROOT)/ace/Message_Queue.h \ + $(ACE_ROOT)/ace/Message_Queue_T.h \ + $(ACE_ROOT)/ace/Message_Queue_T.i \ + $(ACE_ROOT)/ace/Message_Queue_T.cpp \ $(ACE_ROOT)/ace/Strategies.h \ $(ACE_ROOT)/ace/Strategies_T.h \ $(ACE_ROOT)/ace/Synch_Options.h \ $(ACE_ROOT)/ace/Synch_Options.i \ + $(ACE_ROOT)/ace/Thread_Manager.h \ + $(ACE_ROOT)/ace/Thread_Manager.i \ $(ACE_ROOT)/ace/Hash_Map_Manager.h \ $(ACE_ROOT)/ace/Hash_Map_Manager.cpp \ $(ACE_ROOT)/ace/Strategies_T.i \ @@ -375,15 +322,11 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Service_Types.h \ $(ACE_ROOT)/ace/Service_Types.i \ $(ACE_ROOT)/ace/Service_Repository.i \ - $(ACE_ROOT)/ace/Thread_Manager.h \ - $(ACE_ROOT)/ace/Thread_Manager.i \ $(ACE_ROOT)/ace/WFMO_Reactor.h \ $(ACE_ROOT)/ace/WFMO_Reactor.i \ $(ACE_ROOT)/ace/Strategies.i \ $(ACE_ROOT)/ace/Message_Queue.i \ - $(ACE_ROOT)/ace/Message_Queue.cpp \ - $(ACE_ROOT)/ace/Task.h \ - $(ACE_ROOT)/ace/Task.i \ + $(ACE_ROOT)/ace/Task.h $(ACE_ROOT)/ace/Task.i \ $(ACE_ROOT)/ace/Task_T.i \ $(ACE_ROOT)/ace/Task_T.cpp \ $(ACE_ROOT)/ace/Module.i \ @@ -395,22 +338,19 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Stream.cpp JAWS/Pipeline_Handler.h \ JAWS/Pipeline_Handler.cpp JAWS/Data_Block.h JAWS/JAWS.h JAWS/IO.h \ $(ACE_ROOT)/ace/Asynch_IO.h \ + $(ACE_ROOT)/ace/Asynch_IO.i \ $(ACE_ROOT)/ace/SOCK_Stream.h \ - $(ACE_ROOT)/ace/SOCK_IO.h \ - $(ACE_ROOT)/ace/SOCK.h \ - $(ACE_ROOT)/ace/Addr.h \ - $(ACE_ROOT)/ace/Addr.i \ + $(ACE_ROOT)/ace/SOCK_IO.h $(ACE_ROOT)/ace/SOCK.h \ + $(ACE_ROOT)/ace/Addr.h $(ACE_ROOT)/ace/Addr.i \ $(ACE_ROOT)/ace/IPC_SAP.h \ - $(ACE_ROOT)/ace/IPC_SAP.i \ - $(ACE_ROOT)/ace/SOCK.i \ + $(ACE_ROOT)/ace/IPC_SAP.i $(ACE_ROOT)/ace/SOCK.i \ $(ACE_ROOT)/ace/SOCK_IO.i \ $(ACE_ROOT)/ace/INET_Addr.h \ $(ACE_ROOT)/ace/INET_Addr.i \ $(ACE_ROOT)/ace/SOCK_Stream.i JAWS/IO_Handler.h \ JAWS/Policy.h JAWS/Concurrency.h .obj/HTTP_10_Parse.o .obj/HTTP_10_Parse.so .shobj/HTTP_10_Parse.o .shobj/HTTP_10_Parse.so: HTTP_10_Parse.cpp HTTP_10.h \ - $(ACE_ROOT)/ace/RB_Tree.h \ - $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/RB_Tree.h $(ACE_ROOT)/ace/ACE.h \ $(ACE_ROOT)/ace/OS.h \ $(ACE_ROOT)/ace/inc_user_config.h \ $(ACE_ROOT)/ace/config.h \ @@ -419,8 +359,7 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/streams.h \ $(ACE_ROOT)/ace/Basic_Types.h \ $(ACE_ROOT)/ace/Basic_Types.i \ - $(ACE_ROOT)/ace/OS.i \ - $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/OS.i $(ACE_ROOT)/ace/Trace.h \ $(ACE_ROOT)/ace/Log_Msg.h \ $(ACE_ROOT)/ace/Log_Record.h \ $(ACE_ROOT)/ace/ACE.i \ @@ -434,13 +373,11 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ - $(ACE_ROOT)/ace/Synch.i \ - $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Synch.i $(ACE_ROOT)/ace/Synch_T.h \ $(ACE_ROOT)/ace/Event_Handler.h \ $(ACE_ROOT)/ace/Event_Handler.i \ $(ACE_ROOT)/ace/Synch_T.i \ - $(ACE_ROOT)/ace/Thread.h \ - $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Thread.h $(ACE_ROOT)/ace/Thread.i \ $(ACE_ROOT)/ace/Atomic_Op.i \ $(ACE_ROOT)/ace/Synch_T.cpp \ $(ACE_ROOT)/ace/Singleton.i \ @@ -449,8 +386,8 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Object_Manager.i \ $(ACE_ROOT)/ace/Managed_Object.h \ $(ACE_ROOT)/ace/Managed_Object.i \ - $(ACE_ROOT)/ace/Managed_Object.cpp JAWS/Pipeline.h \ - $(ACE_ROOT)/ace/Service_Config.h \ + $(ACE_ROOT)/ace/Managed_Object.cpp JAWS/Export.h \ + JAWS/Pipeline.h $(ACE_ROOT)/ace/Service_Config.h \ $(ACE_ROOT)/ace/Service_Object.h \ $(ACE_ROOT)/ace/Shared_Object.h \ $(ACE_ROOT)/ace/Shared_Object.i \ @@ -458,8 +395,11 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Signal.h \ $(ACE_ROOT)/ace/Containers.h \ $(ACE_ROOT)/ace/Containers.i \ - $(ACE_ROOT)/ace/Containers.cpp \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ $(ACE_ROOT)/ace/Malloc.i \ $(ACE_ROOT)/ace/Malloc_T.h \ $(ACE_ROOT)/ace/Free_List.h \ @@ -490,13 +430,17 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Message_Block.h \ $(ACE_ROOT)/ace/Message_Block.i \ $(ACE_ROOT)/ace/Time_Value.h \ - $(ACE_ROOT)/ace/Module.h \ - $(ACE_ROOT)/ace/Task_T.h \ + $(ACE_ROOT)/ace/Module.h $(ACE_ROOT)/ace/Task_T.h \ $(ACE_ROOT)/ace/Message_Queue.h \ + $(ACE_ROOT)/ace/Message_Queue_T.h \ + $(ACE_ROOT)/ace/Message_Queue_T.i \ + $(ACE_ROOT)/ace/Message_Queue_T.cpp \ $(ACE_ROOT)/ace/Strategies.h \ $(ACE_ROOT)/ace/Strategies_T.h \ $(ACE_ROOT)/ace/Synch_Options.h \ $(ACE_ROOT)/ace/Synch_Options.i \ + $(ACE_ROOT)/ace/Thread_Manager.h \ + $(ACE_ROOT)/ace/Thread_Manager.i \ $(ACE_ROOT)/ace/Hash_Map_Manager.h \ $(ACE_ROOT)/ace/Hash_Map_Manager.cpp \ $(ACE_ROOT)/ace/Strategies_T.i \ @@ -505,15 +449,11 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Service_Types.h \ $(ACE_ROOT)/ace/Service_Types.i \ $(ACE_ROOT)/ace/Service_Repository.i \ - $(ACE_ROOT)/ace/Thread_Manager.h \ - $(ACE_ROOT)/ace/Thread_Manager.i \ $(ACE_ROOT)/ace/WFMO_Reactor.h \ $(ACE_ROOT)/ace/WFMO_Reactor.i \ $(ACE_ROOT)/ace/Strategies.i \ $(ACE_ROOT)/ace/Message_Queue.i \ - $(ACE_ROOT)/ace/Message_Queue.cpp \ - $(ACE_ROOT)/ace/Task.h \ - $(ACE_ROOT)/ace/Task.i \ + $(ACE_ROOT)/ace/Task.h $(ACE_ROOT)/ace/Task.i \ $(ACE_ROOT)/ace/Task_T.i \ $(ACE_ROOT)/ace/Task_T.cpp \ $(ACE_ROOT)/ace/Module.i \ @@ -525,23 +465,22 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Stream.cpp JAWS/Pipeline_Handler.h \ JAWS/Pipeline_Handler.cpp JAWS/Data_Block.h JAWS/JAWS.h JAWS/IO.h \ $(ACE_ROOT)/ace/Asynch_IO.h \ + $(ACE_ROOT)/ace/Asynch_IO.i \ $(ACE_ROOT)/ace/SOCK_Stream.h \ - $(ACE_ROOT)/ace/SOCK_IO.h \ - $(ACE_ROOT)/ace/SOCK.h \ - $(ACE_ROOT)/ace/Addr.h \ - $(ACE_ROOT)/ace/Addr.i \ + $(ACE_ROOT)/ace/SOCK_IO.h $(ACE_ROOT)/ace/SOCK.h \ + $(ACE_ROOT)/ace/Addr.h $(ACE_ROOT)/ace/Addr.i \ $(ACE_ROOT)/ace/IPC_SAP.h \ - $(ACE_ROOT)/ace/IPC_SAP.i \ - $(ACE_ROOT)/ace/SOCK.i \ + $(ACE_ROOT)/ace/IPC_SAP.i $(ACE_ROOT)/ace/SOCK.i \ $(ACE_ROOT)/ace/SOCK_IO.i \ $(ACE_ROOT)/ace/INET_Addr.h \ $(ACE_ROOT)/ace/INET_Addr.i \ $(ACE_ROOT)/ace/SOCK_Stream.i JAWS/IO_Handler.h \ - JAWS/Policy.h JAWS/Concurrency.h -.obj/HTTP_10_Write.o .obj/HTTP_10_Write.so .shobj/HTTP_10_Write.o .shobj/HTTP_10_Write.so: HTTP_10_Write.cpp HTTP_10.h \ - $(ACE_ROOT)/ace/RB_Tree.h \ - $(ACE_ROOT)/ace/ACE.h \ - $(ACE_ROOT)/ace/OS.h \ + JAWS/Policy.h JAWS/Concurrency.h HTTP_10_Request.h \ + HTTPU/http_request.h JAWS/Parse_Headers.h JAWS/Headers.h \ + HTTPU/http_base.h HTTPU/http_status.h HTTPU/http_headers.h \ + HTTPU/parse_http_request.h HTTPU/parse_url.h +.obj/HTTP_10_Write.o .obj/HTTP_10_Write.so .shobj/HTTP_10_Write.o .shobj/HTTP_10_Write.so: HTTP_10_Write.cpp JAWS/JAWS.h JAWS/IO.h \ + $(ACE_ROOT)/ace/ACE.h $(ACE_ROOT)/ace/OS.h \ $(ACE_ROOT)/ace/inc_user_config.h \ $(ACE_ROOT)/ace/config.h \ $(ACE_ROOT)/ace/config-sunos5.5.h \ @@ -549,47 +488,38 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/streams.h \ $(ACE_ROOT)/ace/Basic_Types.h \ $(ACE_ROOT)/ace/Basic_Types.i \ - $(ACE_ROOT)/ace/OS.i \ - $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/OS.i $(ACE_ROOT)/ace/Trace.h \ $(ACE_ROOT)/ace/Log_Msg.h \ $(ACE_ROOT)/ace/Log_Record.h \ $(ACE_ROOT)/ace/ACE.i \ $(ACE_ROOT)/ace/Log_Priority.h \ $(ACE_ROOT)/ace/Log_Record.i \ - $(ACE_ROOT)/ace/RB_Tree.i \ - $(ACE_ROOT)/ace/RB_Tree.cpp JAWS/Pipeline_Tasks.h \ - $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Asynch_IO.h \ + $(ACE_ROOT)/ace/Task.h \ + $(ACE_ROOT)/ace/Service_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.i \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Service_Object.i \ + $(ACE_ROOT)/ace/Thread_Manager.h \ + $(ACE_ROOT)/ace/Thread.h $(ACE_ROOT)/ace/Thread.i \ $(ACE_ROOT)/ace/Synch.h \ $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ - $(ACE_ROOT)/ace/Synch.i \ - $(ACE_ROOT)/ace/Synch_T.h \ - $(ACE_ROOT)/ace/Event_Handler.h \ - $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch.i $(ACE_ROOT)/ace/Synch_T.h \ $(ACE_ROOT)/ace/Synch_T.i \ - $(ACE_ROOT)/ace/Thread.h \ - $(ACE_ROOT)/ace/Thread.i \ $(ACE_ROOT)/ace/Atomic_Op.i \ $(ACE_ROOT)/ace/Synch_T.cpp \ - $(ACE_ROOT)/ace/Singleton.i \ - $(ACE_ROOT)/ace/Singleton.cpp \ - $(ACE_ROOT)/ace/Object_Manager.h \ - $(ACE_ROOT)/ace/Object_Manager.i \ - $(ACE_ROOT)/ace/Managed_Object.h \ - $(ACE_ROOT)/ace/Managed_Object.i \ - $(ACE_ROOT)/ace/Managed_Object.cpp JAWS/Pipeline.h \ - $(ACE_ROOT)/ace/Service_Config.h \ - $(ACE_ROOT)/ace/Service_Object.h \ - $(ACE_ROOT)/ace/Shared_Object.h \ - $(ACE_ROOT)/ace/Shared_Object.i \ - $(ACE_ROOT)/ace/Service_Object.i \ - $(ACE_ROOT)/ace/Signal.h \ $(ACE_ROOT)/ace/Containers.h \ $(ACE_ROOT)/ace/Containers.i \ - $(ACE_ROOT)/ace/Containers.cpp \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ $(ACE_ROOT)/ace/Malloc.i \ $(ACE_ROOT)/ace/Malloc_T.h \ $(ACE_ROOT)/ace/Free_List.h \ @@ -598,10 +528,27 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Malloc_T.i \ $(ACE_ROOT)/ace/Malloc_T.cpp \ $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Signal.h $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ $(ACE_ROOT)/ace/Mem_Map.h \ $(ACE_ROOT)/ace/Mem_Map.i \ $(ACE_ROOT)/ace/Memory_Pool.i \ - $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Thread_Manager.i \ + $(ACE_ROOT)/ace/Task.i $(ACE_ROOT)/ace/Task_T.h \ + $(ACE_ROOT)/ace/Message_Queue.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/Message_Block.i \ + $(ACE_ROOT)/ace/IO_Cntl_Msg.h \ + $(ACE_ROOT)/ace/Message_Queue_T.h \ + $(ACE_ROOT)/ace/Message_Queue_T.i \ + $(ACE_ROOT)/ace/Message_Queue_T.cpp \ + $(ACE_ROOT)/ace/Strategies.h \ + $(ACE_ROOT)/ace/Strategies_T.h \ + $(ACE_ROOT)/ace/Service_Config.h \ $(ACE_ROOT)/ace/SString.h \ $(ACE_ROOT)/ace/SString.i \ $(ACE_ROOT)/ace/Service_Config.i \ @@ -615,16 +562,6 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Reactor.i \ $(ACE_ROOT)/ace/Reactor_Impl.h \ $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \ - $(ACE_ROOT)/ace/Stream.h \ - $(ACE_ROOT)/ace/IO_Cntl_Msg.h \ - $(ACE_ROOT)/ace/Message_Block.h \ - $(ACE_ROOT)/ace/Message_Block.i \ - $(ACE_ROOT)/ace/Time_Value.h \ - $(ACE_ROOT)/ace/Module.h \ - $(ACE_ROOT)/ace/Task_T.h \ - $(ACE_ROOT)/ace/Message_Queue.h \ - $(ACE_ROOT)/ace/Strategies.h \ - $(ACE_ROOT)/ace/Strategies_T.h \ $(ACE_ROOT)/ace/Synch_Options.h \ $(ACE_ROOT)/ace/Synch_Options.i \ $(ACE_ROOT)/ace/Hash_Map_Manager.h \ @@ -635,38 +572,41 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU $(ACE_ROOT)/ace/Service_Types.h \ $(ACE_ROOT)/ace/Service_Types.i \ $(ACE_ROOT)/ace/Service_Repository.i \ - $(ACE_ROOT)/ace/Thread_Manager.h \ - $(ACE_ROOT)/ace/Thread_Manager.i \ $(ACE_ROOT)/ace/WFMO_Reactor.h \ $(ACE_ROOT)/ace/WFMO_Reactor.i \ $(ACE_ROOT)/ace/Strategies.i \ $(ACE_ROOT)/ace/Message_Queue.i \ - $(ACE_ROOT)/ace/Message_Queue.cpp \ - $(ACE_ROOT)/ace/Task.h \ - $(ACE_ROOT)/ace/Task.i \ $(ACE_ROOT)/ace/Task_T.i \ $(ACE_ROOT)/ace/Task_T.cpp \ - $(ACE_ROOT)/ace/Module.i \ + $(ACE_ROOT)/ace/Module.h $(ACE_ROOT)/ace/Module.i \ $(ACE_ROOT)/ace/Module.cpp \ $(ACE_ROOT)/ace/Stream_Modules.h \ $(ACE_ROOT)/ace/Stream_Modules.i \ $(ACE_ROOT)/ace/Stream_Modules.cpp \ - $(ACE_ROOT)/ace/Stream.i \ - $(ACE_ROOT)/ace/Stream.cpp JAWS/Pipeline_Handler.h \ - JAWS/Pipeline_Handler.cpp JAWS/Data_Block.h JAWS/JAWS.h JAWS/IO.h \ - $(ACE_ROOT)/ace/Asynch_IO.h \ + $(ACE_ROOT)/ace/Asynch_IO.i \ $(ACE_ROOT)/ace/SOCK_Stream.h \ - $(ACE_ROOT)/ace/SOCK_IO.h \ - $(ACE_ROOT)/ace/SOCK.h \ - $(ACE_ROOT)/ace/Addr.h \ - $(ACE_ROOT)/ace/Addr.i \ + $(ACE_ROOT)/ace/SOCK_IO.h $(ACE_ROOT)/ace/SOCK.h \ + $(ACE_ROOT)/ace/Addr.h $(ACE_ROOT)/ace/Addr.i \ $(ACE_ROOT)/ace/IPC_SAP.h \ - $(ACE_ROOT)/ace/IPC_SAP.i \ - $(ACE_ROOT)/ace/SOCK.i \ + $(ACE_ROOT)/ace/IPC_SAP.i $(ACE_ROOT)/ace/SOCK.i \ $(ACE_ROOT)/ace/SOCK_IO.i \ $(ACE_ROOT)/ace/INET_Addr.h \ $(ACE_ROOT)/ace/INET_Addr.i \ - $(ACE_ROOT)/ace/SOCK_Stream.i JAWS/IO_Handler.h \ - JAWS/Policy.h JAWS/Concurrency.h + $(ACE_ROOT)/ace/SOCK_Stream.i \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Singleton.cpp JAWS/Export.h \ + JAWS/IO_Handler.h JAWS/Policy.h JAWS/Concurrency.h HTTP_10.h \ + $(ACE_ROOT)/ace/RB_Tree.h \ + $(ACE_ROOT)/ace/RB_Tree.i \ + $(ACE_ROOT)/ace/RB_Tree.cpp JAWS/Pipeline_Tasks.h \ + JAWS/Pipeline.h $(ACE_ROOT)/ace/Stream.h \ + $(ACE_ROOT)/ace/Time_Value.h \ + $(ACE_ROOT)/ace/Stream.i \ + $(ACE_ROOT)/ace/Stream.cpp JAWS/Pipeline_Handler.h \ + JAWS/Pipeline_Handler.cpp JAWS/Data_Block.h HTTP_10_Request.h \ + HTTPU/http_request.h JAWS/Parse_Headers.h JAWS/Headers.h \ + HTTPU/http_base.h HTTPU/http_status.h HTTPU/http_headers.h \ + HTTPU/parse_http_request.h HTTPU/parse_url.h # IF YOU PUT ANYTHING HERE IT WILL GO AWAY |