diff --git a/wst/trunk/binary_streamer.pas b/wst/trunk/binary_streamer.pas index 713338fc5..c0f02b0d7 100644 --- a/wst/trunk/binary_streamer.pas +++ b/wst/trunk/binary_streamer.pas @@ -30,13 +30,14 @@ Type TInt64S = Int64; TInt64U = QWord; TBoolData = Boolean; TEnumData = Int64; - TAnsiStringData = AnsiString; + TAnsiStringData = TBinaryString; TWideStringData = WideString; {$IFDEF WST_UNICODESTRING} TUnicodeStringData = UnicodeString; {$ENDIF WST_UNICODESTRING} TAnsiCharacter = AnsiChar; TWideCharacter = WideChar; + TByteDynArray = wst_types.TByteDynArray; TFloat_Single_4 = Single; TFloat_Double_8 = Double; @@ -66,6 +67,7 @@ Type {$IFDEF WST_UNICODESTRING} procedure WriteUnicodeStr(Const AData : TUnicodeStringData); {$ENDIF WST_UNICODESTRING} + procedure WriteBinary(const AData : TByteDynArray); procedure WriteSingle(Const AData : TFloat_Single_4); procedure WriteDouble(Const AData : TFloat_Double_8); @@ -97,6 +99,7 @@ Type {$IFDEF WST_UNICODESTRING} function ReadUnicodeStr():TUnicodeStringData; {$ENDIF WST_UNICODESTRING} + function ReadBinary() : TByteDynArray; function ReadSingle():TFloat_Single_4; function ReadDouble():TFloat_Double_8; @@ -231,6 +234,7 @@ Type {$IFDEF WST_UNICODESTRING} procedure WriteUnicodeStr(Const AData : TUnicodeStringData); {$ENDIF WST_UNICODESTRING} + procedure WriteBinary(const AData : TByteDynArray); procedure WriteSingle(Const AData : TFloat_Single_4); procedure WriteDouble(Const AData : TFloat_Double_8); @@ -268,6 +272,7 @@ Type {$IFDEF WST_UNICODESTRING} function ReadUnicodeStr():TUnicodeStringData; {$ENDIF WST_UNICODESTRING} + function ReadBinary() : TByteDynArray; function ReadSingle():TFloat_Single_4; function ReadDouble():TFloat_Double_8; @@ -437,6 +442,16 @@ begin end; end; +procedure TDataStore.WriteBinary(const AData : TByteDynArray); +var + i : TInt32S; +begin + i := Length(AData); + WriteInt32S(i); + if ( i > 0 ) then + FStream.Write(AData[1],i); +end; + {$IFDEF WST_UNICODESTRING} procedure TDataStore.WriteUnicodeStr(const AData: TUnicodeStringData); @@ -615,6 +630,16 @@ begin end; end; +function TDataStoreReader.ReadBinary() : TByteDynArray; +var + i : TInt32S; +begin + i := ReadInt32S(); + SetLength(Result,i); + if ( i > 0 ) then + FStream.ReadBuffer(Result[1],i); +end; + {$IFDEF WST_UNICODESTRING} function TDataStoreReader.ReadUnicodeStr(): TUnicodeStringData; var diff --git a/wst/trunk/indy_tcp_protocol.pas b/wst/trunk/indy_tcp_protocol.pas index 8a558b88f..70127a65d 100644 --- a/wst/trunk/indy_tcp_protocol.pas +++ b/wst/trunk/indy_tcp_protocol.pas @@ -113,7 +113,7 @@ procedure TTCPTransport.SendAndReceive(ARequest, AResponse: TStream); var wrtr : IDataStore; buffStream : TMemoryStream; - strBuff : TBinaryString; + binBuff : TByteDynArray; bufferLen : LongInt; begin buffStream := TMemoryStream.Create(); @@ -123,10 +123,10 @@ begin wrtr.WriteAnsiStr(Target); wrtr.WriteAnsiStr(ContentType); wrtr.WriteAnsiStr(Self.Format); - SetLength(strBuff,ARequest.Size); + SetLength(binBuff,ARequest.Size); ARequest.Position := 0; - ARequest.Read(strBuff[1],Length(strBuff)); - wrtr.WriteAnsiStr(strBuff); + ARequest.Read(binBuff[1],Length(binBuff)); + wrtr.WriteBinary(binBuff); buffStream.Position := 0; wrtr.WriteInt32S(buffStream.Size-4); buffStream.Position := 0; diff --git a/wst/trunk/indy_tcp_server.pas b/wst/trunk/indy_tcp_server.pas index 2ad2be200..6bde457a6 100644 --- a/wst/trunk/indy_tcp_server.pas +++ b/wst/trunk/indy_tcp_server.pas @@ -139,7 +139,8 @@ var locInStream, locOutStream : TMemoryStream; wrtr : IDataStore; rdr : IDataStoreReader; - buff, trgt,ctntyp, frmt : TBinaryString; + trgt,ctntyp, frmt : TBinaryString; + buff : TByteDynArray; rqst : IRequestBuffer; i : PtrUInt; begin @@ -160,7 +161,7 @@ begin trgt := rdr.ReadAnsiStr(); ctntyp := rdr.ReadAnsiStr(); frmt := rdr.ReadAnsiStr(); - buff := rdr.ReadAnsiStr(); + buff := rdr.ReadBinary(); {$IFDEF WST_DBG} WriteLn(buff); @@ -169,6 +170,7 @@ begin rdr := nil; locInStream.Size := 0; locInStream.Write(buff[1],Length(buff)); + SetLength(buff,0); locInStream.Position := 0; rqst := TRequestBuffer.Create(trgt,ctntyp,locInStream,locOutStream,frmt); rqst.GetPropertyManager().SetProperty(sREMOTE_IP,AContext.Binding.PeerIP); @@ -180,7 +182,7 @@ begin locOutStream.Read(buff[1],i); locOutStream.Size := 0; wrtr := CreateBinaryWriter(locOutStream); - wrtr.WriteAnsiStr(buff); + wrtr.WriteBinary(buff); locOutStream.Position := 0; {$IFDEF INDY_10} AContext.Connection.IOHandler.Write(locOutStream,locOutStream.Size,False); diff --git a/wst/trunk/samples/widestring/client/ws_client.lpi b/wst/trunk/samples/widestring/client/ws_client.lpi index 278e0530f..1b221365f 100644 --- a/wst/trunk/samples/widestring/client/ws_client.lpi +++ b/wst/trunk/samples/widestring/client/ws_client.lpi @@ -13,7 +13,6 @@ - @@ -38,16 +37,14 @@ - + - - - - - + + + @@ -55,9 +52,7 @@ - - - + @@ -65,36 +60,28 @@ - - - + - - - + + - - - - - @@ -113,9 +100,7 @@ - - @@ -123,129 +108,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/wst/trunk/samples/widestring/client/ws_client.pas b/wst/trunk/samples/widestring/client/ws_client.pas index 86d5987f9..436376f91 100644 --- a/wst/trunk/samples/widestring/client/ws_client.pas +++ b/wst/trunk/samples/widestring/client/ws_client.pas @@ -7,7 +7,7 @@ uses cthreads, cwstring, {$ENDIF} Classes, SysUtils, - service_intf, soap_formatter, synapse_http_protocol, + service_intf, soap_formatter, synapse_http_protocol, //synapse_tcp_protocol, echo_service, echo_service_proxy; const @@ -21,8 +21,10 @@ var c : Integer; begin SYNAPSE_RegisterHTTP_Transport(); + //SYNAPSE_RegisterTCP_Transport(); locService := wst_CreateInstance_IEchoService('SOAP:','HTTP:','http://127.0.0.1:8000/services/IEchoService'); + //locService := wst_CreateInstance_IEchoService('SOAP:','TCP:Port=1234;Target=IEchoService;','127.0.0.1'); WriteLn('WST WideString Sample - Client'); diff --git a/wst/trunk/synapse_tcp_protocol.pas b/wst/trunk/synapse_tcp_protocol.pas index 5c6a37838..05233a4cf 100644 --- a/wst/trunk/synapse_tcp_protocol.pas +++ b/wst/trunk/synapse_tcp_protocol.pas @@ -111,7 +111,7 @@ procedure TTCPTransport.SendAndReceive(ARequest, AResponse: TStream); Var wrtr : IDataStore; buffStream : TMemoryStream; - strBuff : TBinaryString; + binBuff : TByteDynArray; bufferLen : LongInt; i, j, c : PtrInt; begin @@ -122,10 +122,10 @@ begin wrtr.WriteAnsiStr(Target); wrtr.WriteAnsiStr(ContentType); wrtr.WriteAnsiStr(Self.Format); - SetLength(strBuff,ARequest.Size); + SetLength(binBuff,ARequest.Size); ARequest.Position := 0; - ARequest.Read(strBuff[1],Length(strBuff)); - wrtr.WriteAnsiStr(strBuff); + ARequest.Read(binBuff[1],Length(binBuff)); + wrtr.WriteBinary(binBuff); buffStream.Position := 0; wrtr.WriteInt32S(buffStream.Size-4); @@ -144,11 +144,11 @@ begin i := 1024; if ( i > bufferLen ) then i := bufferLen; - SetLength(strBuff,i); + SetLength(binBuff,i); repeat - j := FConnection.RecvBufferEx(@(strBuff[1]),i,DefaultTimeOut); + j := FConnection.RecvBufferEx(@(binBuff[1]),i,DefaultTimeOut); FConnection.ExceptCheck(); - AResponse.Write(strBuff[1],j); + AResponse.Write(binBuff[1],j); Inc(c,j); i := Min(1024,(bufferLen-c)); until ( i =0 ) or ( j <= 0 ); diff --git a/wst/trunk/synapse_tcp_server.pas b/wst/trunk/synapse_tcp_server.pas index bbdcc7c05..179197235 100644 --- a/wst/trunk/synapse_tcp_server.pas +++ b/wst/trunk/synapse_tcp_server.pas @@ -99,7 +99,7 @@ end; function TClientHandlerThread.ReadInputBuffer(): Integer; var - strBuff : TBinaryString; + binBuff : TByteDynArray; bufferLen : LongInt; i, j, c, readBufferLen : PtrInt; begin @@ -119,11 +119,11 @@ begin i := 1024; if ( i > bufferLen ) then i := bufferLen; - SetLength(strBuff,i); + SetLength(binBuff,i); repeat - j := FSocketObject.RecvBufferEx(@(strBuff[1]),i,DefaultTimeOut); + j := FSocketObject.RecvBufferEx(@(binBuff[1]),i,DefaultTimeOut); FSocketObject.ExceptCheck(); - FInputStream.Write(strBuff[1],j); + FInputStream.Write(binBuff[1],j); Inc(c,j); if ( ( bufferLen - c ) > 1024 ) then i := 1024 @@ -173,7 +173,8 @@ procedure TClientHandlerThread.Execute(); var wrtr : IDataStore; rdr : IDataStoreReader; - buff, trgt,ctntyp, frmt : TBinaryString; + trgt,ctntyp, frmt : TBinaryString; + buff : TByteDynArray; rqst : IRequestBuffer; i : PtrUInt; begin @@ -196,10 +197,11 @@ begin trgt := rdr.ReadAnsiStr(); ctntyp := rdr.ReadAnsiStr(); frmt := rdr.ReadAnsiStr(); - buff := rdr.ReadAnsiStr(); + buff := rdr.ReadBinary(); rdr := nil; FInputStream.Size := 0; FInputStream.Write(buff[1],Length(buff)); + SetLength(buff,0); FInputStream.Position := 0; rqst := TRequestBuffer.Create(trgt,ctntyp,FInputStream,FOutputStream,frmt); rqst.GetPropertyManager().SetProperty(sREMOTE_IP,FSocketObject.GetRemoteSinIP()); @@ -211,7 +213,8 @@ begin FOutputStream.Read(buff[1],i); FOutputStream.Size := 0; wrtr := CreateBinaryWriter(FOutputStream); - wrtr.WriteAnsiStr(buff); + wrtr.WriteBinary(buff); + SetLength(buff,0); SendOutputBuffer(); ClearBuffers(); end;