Apache module extension to be a dll/so hosting env

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@278 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2007-10-22 12:44:00 +00:00
parent 343b11db66
commit 952fa6ce12
11 changed files with 1125 additions and 272 deletions

View File

@@ -7,7 +7,7 @@
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="0"/>
<ActiveEditorIndexAtStart Value="3"/>
</General>
<VersionInfo>
<ProjectVersion Value=""/>
@@ -24,121 +24,482 @@
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
<Units Count="14">
<Units Count="56">
<Unit0>
<Filename Value="mod_wst.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="mod_wst"/>
<CursorPos X="3" Y="11"/>
<CursorPos X="38" Y="11"/>
<TopLine Value="1"/>
<EditorIndex Value="0"/>
<UsageCount Value="36"/>
<UsageCount Value="68"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
<Filename Value="wst_apache_binding.pas"/>
<UnitName Value="wst_apache_binding"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="249"/>
<EditorIndex Value="4"/>
<UsageCount Value="18"/>
<CursorPos X="19" Y="74"/>
<TopLine Value="70"/>
<EditorIndex Value="1"/>
<UsageCount Value="33"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
<Filename Value="..\..\metadata_wsdl.pas"/>
<UnitName Value="metadata_wsdl"/>
<CursorPos X="70" Y="30"/>
<TopLine Value="16"/>
<EditorIndex Value="8"/>
<UsageCount Value="18"/>
<Loaded Value="True"/>
<CursorPos X="5" Y="82"/>
<TopLine Value="67"/>
<UsageCount Value="33"/>
</Unit2>
<Unit3>
<Filename Value="..\user_service_intf_imp.pas"/>
<UnitName Value="user_service_intf_imp"/>
<CursorPos X="71" Y="20"/>
<TopLine Value="1"/>
<EditorIndex Value="9"/>
<UsageCount Value="18"/>
<Loaded Value="True"/>
<CursorPos X="8" Y="225"/>
<TopLine Value="191"/>
<UsageCount Value="21"/>
</Unit3>
<Unit4>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\packages\base\httpd\httpd-1.3\httpd.pas"/>
<UnitName Value="httpd"/>
<CursorPos X="5" Y="26"/>
<TopLine Value="25"/>
<UsageCount Value="9"/>
<UsageCount Value="6"/>
</Unit4>
<Unit5>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\packages\base\httpd\httpd-1.3\httpd.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="75"/>
<UsageCount Value="9"/>
<UsageCount Value="6"/>
</Unit5>
<Unit6>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\packages\base\httpd\httpd-2.2\httpd.pas"/>
<UnitName Value="httpd"/>
<CursorPos X="35" Y="44"/>
<TopLine Value="61"/>
<UsageCount Value="9"/>
<UsageCount Value="6"/>
</Unit6>
<Unit7>
<Filename Value="..\..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\packages\base\httpd\httpd-2.2\http_protocol.inc"/>
<CursorPos X="47" Y="799"/>
<TopLine Value="777"/>
<EditorIndex Value="7"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
<UsageCount Value="9"/>
</Unit7>
<Unit8>
<Filename Value="..\..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\packages\base\httpd\httpd-2.2\httpd.inc"/>
<CursorPos X="5" Y="794"/>
<TopLine Value="777"/>
<EditorIndex Value="6"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
<UsageCount Value="8"/>
</Unit8>
<Unit9>
<Filename Value="..\..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\packages\base\httpd\httpd-2.0\apr\apr_tables.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="16"/>
<EditorIndex Value="5"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
<UsageCount Value="8"/>
</Unit9>
<Unit10>
<Filename Value="..\..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\packages\base\httpd\httpd-2.2\http_config.inc"/>
<CursorPos X="71" Y="66"/>
<TopLine Value="32"/>
<EditorIndex Value="1"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
<UsageCount Value="8"/>
</Unit10>
<Unit11>
<Filename Value="..\..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\packages\base\httpd\httpd-2.2\httpd.pas"/>
<UnitName Value="httpd"/>
<CursorPos X="41" Y="134"/>
<TopLine Value="117"/>
<EditorIndex Value="2"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
<UsageCount Value="8"/>
</Unit11>
<Unit12>
<Filename Value="..\..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\packages\base\httpd\httpd-2.2\ap_mmn.inc"/>
<CursorPos X="3" Y="111"/>
<TopLine Value="96"/>
<EditorIndex Value="3"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
<UsageCount Value="8"/>
</Unit12>
<Unit13>
<Filename Value="..\..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\packages\base\httpd\httpd-2.0\apr\apr_pools.inc"/>
<CursorPos X="3" Y="48"/>
<TopLine Value="678"/>
<UsageCount Value="10"/>
<UsageCount Value="7"/>
</Unit13>
<Unit14>
<Filename Value="..\..\wst_rtti_filter\cursor_intf.pas"/>
<UnitName Value="cursor_intf"/>
<CursorPos X="16" Y="18"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
</Unit14>
<Unit15>
<Filename Value="..\user_service_intf_binder.pas"/>
<UnitName Value="user_service_intf_binder"/>
<CursorPos X="3" Y="252"/>
<TopLine Value="250"/>
<UsageCount Value="13"/>
</Unit15>
<Unit16>
<Filename Value="..\imp_helper.pas"/>
<UnitName Value="imp_helper"/>
<CursorPos X="1" Y="76"/>
<TopLine Value="33"/>
<UsageCount Value="20"/>
</Unit16>
<Unit17>
<Filename Value="..\..\metadata_service_binder.pas"/>
<UnitName Value="metadata_service_binder"/>
<CursorPos X="29" Y="43"/>
<TopLine Value="1"/>
<UsageCount Value="25"/>
</Unit17>
<Unit18>
<Filename Value="..\..\metadata_service.pas"/>
<UnitName Value="metadata_service"/>
<CursorPos X="71" Y="76"/>
<TopLine Value="1"/>
<UsageCount Value="25"/>
</Unit18>
<Unit19>
<Filename Value="..\..\metadata_service_imp.pas"/>
<UnitName Value="metadata_service_imp"/>
<CursorPos X="61" Y="21"/>
<TopLine Value="13"/>
<UsageCount Value="24"/>
</Unit19>
<Unit20>
<Filename Value="..\..\library_imp_utils.pas"/>
<UnitName Value="library_imp_utils"/>
<CursorPos X="42" Y="35"/>
<TopLine Value="73"/>
<EditorIndex Value="7"/>
<UsageCount Value="24"/>
<Loaded Value="True"/>
</Unit20>
<Unit21>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-2.0\apr\apr.pas"/>
<UnitName Value="apr"/>
<CursorPos X="18" Y="182"/>
<TopLine Value="173"/>
<UsageCount Value="10"/>
</Unit21>
<Unit22>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-2.0\apr\apr_file_info.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="151"/>
<UsageCount Value="7"/>
</Unit22>
<Unit23>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-2.0\apr\apr_file_io.inc"/>
<CursorPos X="124" Y="665"/>
<TopLine Value="778"/>
<UsageCount Value="7"/>
</Unit23>
<Unit24>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-2.0\apr\apr_dso.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="66"/>
<UsageCount Value="7"/>
</Unit24>
<Unit25>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-2.0\apr\apr_lib.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="192"/>
<UsageCount Value="7"/>
</Unit25>
<Unit26>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-2.0\apr\apr_general.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="199"/>
<UsageCount Value="7"/>
</Unit26>
<Unit27>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-2.0\apr\apr_strings.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="329"/>
<UsageCount Value="7"/>
</Unit27>
<Unit28>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-1.3\httpd.inc"/>
<CursorPos X="21" Y="23"/>
<TopLine Value="10"/>
<UsageCount Value="12"/>
</Unit28>
<Unit29>
<Filename Value="..\..\library_base_intf.pas"/>
<UnitName Value="library_base_intf"/>
<CursorPos X="29" Y="17"/>
<TopLine Value="73"/>
<EditorIndex Value="5"/>
<UsageCount Value="23"/>
<Loaded Value="True"/>
</Unit29>
<Unit30>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-1.3\ap_alloc.inc"/>
<CursorPos X="3" Y="45"/>
<TopLine Value="30"/>
<UsageCount Value="11"/>
</Unit30>
<Unit31>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-2.0\apr\apr_pools.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="678"/>
<UsageCount Value="7"/>
</Unit31>
<Unit32>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-1.3\httpd.pas"/>
<UnitName Value="httpd"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="82"/>
<UsageCount Value="10"/>
</Unit32>
<Unit33>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-1.3\http_log.inc"/>
<CursorPos X="11" Y="75"/>
<TopLine Value="60"/>
<UsageCount Value="10"/>
</Unit33>
<Unit34>
<Filename Value="..\..\server_service_xmlrpc.pas"/>
<UnitName Value="server_service_xmlrpc"/>
<CursorPos X="17" Y="57"/>
<TopLine Value="42"/>
<UsageCount Value="13"/>
</Unit34>
<Unit35>
<Filename Value="..\..\base_xmlrpc_formatter.pas"/>
<UnitName Value="base_xmlrpc_formatter"/>
<CursorPos X="3" Y="29"/>
<TopLine Value="14"/>
<UsageCount Value="13"/>
</Unit35>
<Unit36>
<Filename Value="..\..\server_service_intf.pas"/>
<UnitName Value="server_service_intf"/>
<CursorPos X="5" Y="18"/>
<TopLine Value="3"/>
<UsageCount Value="21"/>
</Unit36>
<Unit37>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\win32\classes.pp"/>
<UnitName Value="Classes"/>
<CursorPos X="8" Y="46"/>
<TopLine Value="21"/>
<UsageCount Value="8"/>
</Unit37>
<Unit38>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\objpas\classes\classes.inc"/>
<CursorPos X="11" Y="1674"/>
<TopLine Value="1665"/>
<UsageCount Value="8"/>
</Unit38>
<Unit39>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-1.3\http_config.inc"/>
<CursorPos X="24" Y="165"/>
<TopLine Value="150"/>
<UsageCount Value="8"/>
</Unit39>
<Unit40>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-2.2\apr\apr_pools.inc"/>
<CursorPos X="3" Y="48"/>
<TopLine Value="33"/>
<UsageCount Value="8"/>
</Unit40>
<Unit41>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-2.2\http_config.inc"/>
<CursorPos X="25" Y="154"/>
<TopLine Value="117"/>
<UsageCount Value="17"/>
</Unit41>
<Unit42>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-2.2\httpd.pas"/>
<UnitName Value="httpd"/>
<CursorPos X="3" Y="70"/>
<TopLine Value="55"/>
<UsageCount Value="15"/>
</Unit42>
<Unit43>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-2.2\httpd.inc"/>
<CursorPos X="5" Y="1029"/>
<TopLine Value="1014"/>
<UsageCount Value="11"/>
</Unit43>
<Unit44>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-2.2\http_log.inc"/>
<CursorPos X="15" Y="34"/>
<TopLine Value="17"/>
<UsageCount Value="11"/>
</Unit44>
<Unit45>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\base\httpd\httpd-2.0\http_config.inc"/>
<CursorPos X="1" Y="136"/>
<TopLine Value="113"/>
<UsageCount Value="13"/>
</Unit45>
<Unit46>
<Filename Value="..\..\wst.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
</Unit46>
<Unit47>
<Filename Value="..\..\base_service_intf.pas"/>
<UnitName Value="base_service_intf"/>
<CursorPos X="25" Y="1252"/>
<TopLine Value="1237"/>
<EditorIndex Value="6"/>
<UsageCount Value="13"/>
<Loaded Value="True"/>
</Unit47>
<Unit48>
<Filename Value="..\..\imp_utils.pas"/>
<UnitName Value="imp_utils"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="38"/>
<UsageCount Value="10"/>
</Unit48>
<Unit49>
<Filename Value="..\..\wst_resources_imp.pas"/>
<UnitName Value="wst_resources_imp"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="13"/>
<UsageCount Value="10"/>
</Unit49>
<Unit50>
<Filename Value="..\..\record_rtti.pas"/>
<UnitName Value="record_rtti"/>
<CursorPos X="5" Y="66"/>
<TopLine Value="51"/>
<UsageCount Value="10"/>
</Unit50>
<Unit51>
<Filename Value="..\..\server_service_imputils.pas"/>
<UnitName Value="server_service_imputils"/>
<CursorPos X="5" Y="18"/>
<TopLine Value="3"/>
<UsageCount Value="10"/>
</Unit51>
<Unit52>
<Filename Value="..\..\server_service_soap.pas"/>
<UnitName Value="server_service_soap"/>
<CursorPos X="15" Y="22"/>
<TopLine Value="1"/>
<EditorIndex Value="2"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit52>
<Unit53>
<Filename Value="..\..\base_soap_formatter.pas"/>
<UnitName Value="base_soap_formatter"/>
<CursorPos X="5" Y="356"/>
<TopLine Value="342"/>
<EditorIndex Value="3"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit53>
<Unit54>
<Filename Value="..\..\server_binary_formatter.pas"/>
<UnitName Value="server_binary_formatter"/>
<CursorPos X="5" Y="18"/>
<TopLine Value="3"/>
<UsageCount Value="10"/>
</Unit54>
<Unit55>
<Filename Value="..\..\metadata_repository.pas"/>
<UnitName Value="metadata_repository"/>
<CursorPos X="5" Y="117"/>
<TopLine Value="102"/>
<EditorIndex Value="4"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit55>
</Units>
<JumpHistory Count="0" HistoryIndex="-1"/>
<JumpHistory Count="22" HistoryIndex="21">
<Position1>
<Filename Value="wst_apache_binding.pas"/>
<Caret Line="72" Column="16" TopLine="70"/>
</Position1>
<Position2>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position2>
<Position3>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="20" Column="5" TopLine="5"/>
</Position3>
<Position4>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1252" Column="25" TopLine="1237"/>
</Position4>
<Position5>
<Filename Value="wst_apache_binding.pas"/>
<Caret Line="73" Column="19" TopLine="70"/>
</Position5>
<Position6>
<Filename Value="wst_apache_binding.pas"/>
<Caret Line="73" Column="34" TopLine="70"/>
</Position6>
<Position7>
<Filename Value="wst_apache_binding.pas"/>
<Caret Line="74" Column="22" TopLine="70"/>
</Position7>
<Position8>
<Filename Value="..\..\server_service_soap.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position8>
<Position9>
<Filename Value="..\..\server_service_soap.pas"/>
<Caret Line="22" Column="18" TopLine="3"/>
</Position9>
<Position10>
<Filename Value="..\..\base_soap_formatter.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position10>
<Position11>
<Filename Value="..\..\base_soap_formatter.pas"/>
<Caret Line="18" Column="5" TopLine="3"/>
</Position11>
<Position12>
<Filename Value="wst_apache_binding.pas"/>
<Caret Line="74" Column="41" TopLine="70"/>
</Position12>
<Position13>
<Filename Value="wst_apache_binding.pas"/>
<Caret Line="74" Column="56" TopLine="70"/>
</Position13>
<Position14>
<Filename Value="wst_apache_binding.pas"/>
<Caret Line="75" Column="22" TopLine="70"/>
</Position14>
<Position15>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position15>
<Position16>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="18" Column="5" TopLine="3"/>
</Position16>
<Position17>
<Filename Value="wst_apache_binding.pas"/>
<Caret Line="75" Column="36" TopLine="70"/>
</Position17>
<Position18>
<Filename Value="wst_apache_binding.pas"/>
<Caret Line="76" Column="12" TopLine="70"/>
</Position18>
<Position19>
<Filename Value="wst_apache_binding.pas"/>
<Caret Line="74" Column="19" TopLine="70"/>
</Position19>
<Position20>
<Filename Value="..\..\server_service_soap.pas"/>
<Caret Line="22" Column="15" TopLine="1"/>
</Position20>
<Position21>
<Filename Value="..\..\base_soap_formatter.pas"/>
<Caret Line="1" Column="1" TopLine="7"/>
</Position21>
<Position22>
<Filename Value="..\..\base_soap_formatter.pas"/>
<Caret Line="18" Column="58" TopLine="3"/>
</Position22>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>
<Version Value="5"/>
@@ -147,9 +508,10 @@
<Filename Value="mod_wst.so"/>
</Target>
<SearchPaths>
<OtherUnitFiles Value="..\;..\..\;..\..\wst_rtti_filter\;$(LazarusDir)\fpc\2.1.3\source\packages\base\httpd\httpd-2.2\;$(LazarusDir)\fpc\2.1.3\source\packages\base\httpd\httpd-2.2\apr\;$(LazarusDir)\fpc\2.1.3\source\packages\base\httpd\httpd-2.2\apriconv\;$(LazarusDir)\fpc\2.1.3\source\packages\base\httpd\httpd-2.2\aprutil\"/>
<IncludeFiles Value="..\..\"/>
<OtherUnitFiles Value="..\;..\..\;..\..\wst_rtti_filter\;$(FPCSrcDir)\packages\base\httpd\httpd-2.0\;$(FPCSrcDir)\packages\base\httpd\httpd-2.0\apr\;$(FPCSrcDir)\packages\base\httpd\httpd-2.0\apriconv\;$(FPCSrcDir)\packages\base\httpd\httpd-2.0\aprutil\"/>
<UnitOutputDirectory Value="obj"/>
<SrcPath Value="$(LazarusDir)\fpc\2.1.3\source\packages\base\httpd\httpd-2.2\;$(LazarusDir)\fpc\2.1.3\source\packages\base\httpd\httpd-2.2\apr\;$(LazarusDir)\fpc\2.1.3\source\packages\base\httpd\httpd-2.2\apriconv\;$(LazarusDir)\fpc\2.1.3\source\packages\base\httpd\httpd-2.2\aprutil\"/>
<SrcPath Value="$(FPCSrcDir)\packages\base\httpd\httpd-2.0\;$(FPCSrcDir)\packages\base\httpd\httpd-2.0\apr\;$(FPCSrcDir)\packages\base\httpd\httpd-2.0\apriconv\;$(FPCSrcDir)\packages\base\httpd\httpd-2.0\aprutil\"/>
</SearchPaths>
<CodeGeneration>
<Generate Value="Faster"/>

View File

@@ -41,6 +41,7 @@ end;
begin
default_module_ptr := @wst_module;
wst_apache_binding.wst_module_ptr := default_module_ptr;
FillChar(default_module_ptr^, SizeOf(default_module_ptr^), 0);
STANDARD20_MODULE_STUFF(default_module_ptr^);
with wst_module do
@@ -48,5 +49,9 @@ begin
name := MODULE_NAME;
magic := MODULE_MAGIC_COOKIE;
register_hooks := @RegisterHooks;
create_dir_config := @wst_create_dir_config;
cmds := WstCommandStructArray;
end;
WstCommandStructArray[0].cmd_data := @WstConfigData^.BasePath;
FillChar(WstCommandStructArray[1],SizeOf(command_rec),#0);
end.

View File

@@ -1,4 +1,27 @@
{$DEFINE WST_DBG}
{$UNDEF WST_DBG}
(*WST_BROKER enable the service brokering :
if enabled, this module just forwards the request to the
implementation libraries contained in the WstRootPath path.
WST load these libraries in the local file system folder
configured by the value of WstRootPath.
WstRootPath is a configuration directive which must be
in the wst "Location" scope.
Example :
<Location /wst>
SetHandler wst-handler
WstRootPath "C:/Programmes/lazarus/wst/trunk/samples/library_server/"
</Location>
Services can then be invoked through the following addressing schema
http://127.0.0.1:8080/wst/services/lib_server/UserService
lib_server : the library name ( without extension )
UserService : the target service
wst/services : constant.
*)
{$DEFINE WST_BROKER}
unit wst_apache_binding;
@@ -17,25 +40,82 @@ const
sWSDL = 'WSDL';
sHTTP_BINARY_CONTENT_TYPE = 'application/octet-stream';
sCONTENT_TYPE = 'Content-Type';
sWstRootPath = 'WstRootPath'; // The WST local file system path configure in apache
sWST_LIBRARY_EXTENSION = '.wml';
type
PWstConfigData = ^TWstConfigData;
TWstConfigData = record
Dir : PChar;
BasePath : PChar;
end;
var
wst_module_ptr : Pmodule = nil;
WstConfigData : PWstConfigData = nil;
WstCommandStructArray : array[0..1] of command_rec = (
( name : sWstRootPath;
func : ( func_take1 : @ap_set_string_slot );
cmd_data : ( nil {@WstConfigData^.BasePath} );
req_override : OR_ALL;
args_how : TAKE1;
errmsg : 'usage : WstRootPath <path>' + LineEnding + ' path is the path to the WST root path.';
),
()
);
function wst_RequestHandler(r: Prequest_rec): Integer;
function wst_create_dir_config(p: Papr_pool_t; dir: PChar) : Pointer;cdecl;
implementation
uses base_service_intf,
server_service_intf, server_service_imputils,
server_service_soap, server_binary_formatter,
metadata_repository, metadata_wsdl, DOM, XMLWrite,
user_service_intf, user_service_intf_binder, user_service_intf_imp,
server_service_soap, server_binary_formatter, server_service_xmlrpc,
metadata_repository, metadata_wsdl,
imp_utils, binary_streamer, library_base_intf, library_imp_utils,
DOM, XMLWrite,
metadata_service, metadata_service_binder, metadata_service_imp;
procedure wst_initialize();
begin
RegisterStdTypes();
Server_service_RegisterBinaryFormat();
Server_service_RegisterSoapFormat();
//Server_service_RegisterXmlRpcFormat();
RegisterWSTMetadataServiceImplementationFactory();
Server_service_RegisterWSTMetadataServiceService();
end;
function wst_create_dir_config(p: Papr_pool_t; dir: PChar) : Pointer; cdecl;
begin
WstConfigData := PWstConfigData(apr_palloc(p,SizeOf(TWstConfigData)));
FillChar(WstConfigData^,SizeOf(TWstConfigData),#0);
WstConfigData^.Dir := apr_pstrdup(p,dir);
Result := WstConfigData;
end;
function GetWstPath(): PChar;inline;
begin
Result := WstConfigData^.BasePath;
end;
type
PRequestArgument = ^TRequestArgument;
TRequestArgument = record
Name : shortstring;
Value : shortstring;
Next : PRequestArgument;
end;
TRequestInfo = record
Root : string;
URI : string;
ContentType : string;
Buffer : string;
Argument : string;
InnerRequest : Pointer;
Root : string;
URI : string;
ContentType : string;
Buffer : string;
Arguments : string;
ArgList : PRequestArgument;
end;
TResponseInfo = record
@@ -43,6 +123,52 @@ type
ContentType : string;
end;
function ParseArgs(
const APool : Papr_pool_t;
const AArgs : string;
const ASeparator : Char = '&'
) : PRequestArgument;
var
locBuffer, locArg : string;
locPrev, locTmpArg : PRequestArgument;
begin
Result := nil;
locBuffer := Trim(AArgs);
if not IsStrEmpty(locBuffer) then begin
locTmpArg := nil;
locPrev := nil;
while True do begin
locArg := GetToken(locBuffer,ASeparator);
if IsStrEmpty(locArg) then
Break;
locPrev := locTmpArg;
locTmpArg := PRequestArgument(apr_palloc(APool,SizeOf(TRequestArgument)));
FillChar(locTmpArg^,SizeOf(TRequestArgument),#0);
if ( Result = nil ) then begin
Result := locTmpArg;
end else begin
locPrev^.Next := locTmpArg;
end;
locTmpArg^.Name := GetToken(locArg,'=');
locTmpArg^.Value := locArg;
end;
end;
end;
function FindArg(const AArgs : PRequestArgument; const AName : string) : PRequestArgument;
var
p : PRequestArgument;
begin
Result := nil;
p := AArgs;
while Assigned(p) do begin
if AnsiSameText(AName,AArgs^.Name) then begin
Result := p;
Break;
end;
p := p^.Next;
end;
end;
procedure SaveStringToFile(const AStr,AFile:string;const AKeepExisting : Boolean);
begin
@@ -154,7 +280,7 @@ begin
Result := '<html>' +
'<head>'+
'<title>'+
'The Web Service Toolkit generated Metadata table'+
'The Web Service Toolkit generated Metadata table XXXXX'+
'</title>'+
'<body>' +
'<p BGCOLOR="#DDEEFF"><FONT FACE="Arial" COLOR="#0000A0" SIZE="+2">The following repositories has available. Click on the link to view the corresponding WSDL.</FONT></p>'+
@@ -233,7 +359,7 @@ begin
AResponseInfo.ContentType := sHTTP_BINARY_CONTENT_TYPE
else
AResponseInfo.ContentType := ctntyp;
rqst := TRequestBuffer.Create(trgt,ctntyp,inStream,outStream,'');
rqst := TRequestBuffer.Create(trgt,ctntyp,inStream,outStream,ARequestInfo.ContentType);
HandleServiceRequest(rqst);
i := outStream.Size;
if ( i > 0 ) then begin
@@ -244,7 +370,7 @@ begin
outStream.Free();
inStream.Free();
{$IFDEF WST_DBG}
SaveStringToFile('RequestInfo.ContentType=' + ARequestInfo.Argument + LineEnding,'c:\log.log',False);
SaveStringToFile('RequestInfo.ContentType=' + ARequestInfo.Arguments + LineEnding,'c:\log.log',False);
{SaveStringToFile('RequestInfo.Buffer=' + ARequestInfo.Buffer + LineEnding,'E:\Inoussa\Sources\lazarus\wst\v0.3\tests\apache_module\log.log',True);
SaveStringToFile('RequestInfo.URI=' + ARequestInfo.URI + LineEnding,'E:\Inoussa\Sources\lazarus\wst\v0.3\tests\apache_module\log.log',True);
SaveStringToFile('ResponseInfo.ContentType=' + AResponseInfo.ContentType + LineEnding,'E:\Inoussa\Sources\lazarus\wst\v0.3\tests\apache_module\log.log',True);
@@ -254,14 +380,94 @@ begin
end;
end;
const MAX_ERR_LEN = 500;
function ProcessServiceRequestLibrary(
const ARequestInfo : TRequestInfo;
out AResponseInfo : TResponseInfo
) : Boolean;
var
loc_path, ctntyp : string;
targetModuleName, targetFormat, targetService : string;
wrtr : IDataStore;
buffStream : TMemoryStream;
strBuff : string;
intfBuffer : IwstStream;
bl : LongInt;
targetModule : IwstModule;
handlerProc : TwstLibraryHandlerFunction;
pArg : PRequestArgument;
i : Integer;
begin
try
FillChar(AResponseInfo,SizeOf(TResponseInfo),#0);
loc_path := ARequestInfo.URI;
targetModuleName := ExtractNextPathElement(loc_path);
Result := False;
targetModule := LibraryManager.Get(GetWstPath() + targetModuleName + sWST_LIBRARY_EXTENSION);
handlerProc := TwstLibraryHandlerFunction(targetModule.GetProc(WST_LIB_HANDLER));
if not Assigned(handlerProc) then
Exit;
targetService := ExtractNextPathElement(loc_path);
if AnsiSameText(sWSDL,targetService) then
Exit;
pArg := FindArg(ARequestInfo.ArgList,'format');
if Assigned(pArg) then
targetFormat := pArg^.Value;
if IsStrEmpty(targetFormat) then
targetFormat := ARequestInfo.ContentType;
buffStream := TMemoryStream.Create();
try
wrtr := CreateBinaryWriter(buffStream);
wrtr.WriteInt32S(0);
wrtr.WriteStr(targetService);
wrtr.WriteStr(ARequestInfo.ContentType);
wrtr.WriteStr(targetFormat);
wrtr.WriteStr(ARequestInfo.Buffer);
buffStream.Position := 0;
wrtr.WriteInt32S(buffStream.Size-4);
buffStream.Position := 0;
intfBuffer := TwstStream.Create(buffStream);
bl := MAX_ERR_LEN;
strBuff := StringOfChar(#0,bl);
i := handlerProc(intfBuffer,Pointer(strBuff),bl);
if ( i <> RET_OK ) then
raise Exception.CreateFmt('Library server error :'#13'Code : %d'#13'Message : %s',[i,strBuff]);
if AnsiSameText(sBINARY_CONTENT_TYPE,ARequestInfo.ContentType) then
AResponseInfo.ContentType := sHTTP_BINARY_CONTENT_TYPE
else
AResponseInfo.ContentType := ARequestInfo.ContentType;
buffStream.Position := 0;
if ( buffStream.Size > 0 ) then begin
SetLength(AResponseInfo.ContentText,buffStream.Size);
buffStream.Read(AResponseInfo.ContentText[1],Length(AResponseInfo.ContentText));
end else begin
AResponseInfo.ContentText := '';
end;
finally
buffStream.Free();
end;
Result := True;
except
on e : Exception do begin
Result := False;
ap_log_rerror(PCHAR('wst_apache_binding'),392,APLOG_ERR,0,Prequest_rec(ARequestInfo.InnerRequest),PCHAR(e.Message),[]);
end;
end;
end;
function wst_RequestHandler(r: Prequest_rec): Integer;
function FillRequestInfo(var ARequestInfo : TRequestInfo):Integer;
begin
ARequestInfo.InnerRequest := r;
ARequestInfo.ContentType := apr_table_get(r^.headers_in,sCONTENT_TYPE);
ARequestInfo.Root := ap_get_server_name(r) + sSEPARATOR + sWST_ROOT + sSEPARATOR;
ARequestInfo.URI := r^.uri;
ARequestInfo.Argument := r^.args;
ARequestInfo.Arguments := r^.args;
ARequestInfo.ArgList := ParseArgs(r^.pool,ARequestInfo.Arguments);
Result := ReadBuffer(r,ARequestInfo.Buffer);
end;
@@ -279,8 +485,14 @@ begin
try
if AnsiSameText(sSERVICES_PREFIXE,ExtractNextPathElement(loc_RequestInfo.URI)) then begin
{$IFDEF WST_BROKER}
if not ProcessServiceRequestLibrary(loc_RequestInfo,loc_ResponseInfo) then
ProcessWSDLRequest(loc_RequestInfo,loc_ResponseInfo);
{$ELSE}
if not ProcessServiceRequest(loc_RequestInfo,loc_ResponseInfo) then
ProcessWSDLRequest(loc_RequestInfo,loc_ResponseInfo);
{$ENDIF}
end else begin
ProcessWSDLRequest(loc_RequestInfo,loc_ResponseInfo);
end;
@@ -294,7 +506,6 @@ begin
ap_rputs(PCHAR(loc_ResponseInfo.ContentText), r);
end;
Result := OK;
Exit;
except
on e : Exception do begin
ap_set_content_type(r, 'text/html');
@@ -307,14 +518,6 @@ begin
end;
initialization
RegisterStdTypes();
Server_service_RegisterBinaryFormat();
Server_service_RegisterSoapFormat();
RegisterUserServiceImplementationFactory();
Server_service_RegisterUserServiceService();
RegisterWSTMetadataServiceImplementationFactory();
Server_service_RegisterWSTMetadataServiceService();
wst_initialize();
end.