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;