Browse Source

classes: introduce TRawByteStringStream

git-svn-id: trunk@43845 -
ondrej 5 years ago
parent
commit
e1e4f4c122

+ 17 - 45
packages/fcl-web/src/base/fphttpclient.pp

@@ -461,34 +461,6 @@ begin
   SetLength(Result, P-Pchar(Result));
   SetLength(Result, P-Pchar(Result));
 end;
 end;
 
 
-Type
-
-  { TRawStringStream }
-
-  TRawStringStream = Class(TMemoryStream)
-  public
-    Constructor Create (const aData : RawByteString); overload;
-    function DataString: RawByteString;
-  end;
-
-constructor TRawStringStream.Create(const aData: RawByteString);
-begin
-  Inherited Create;
-  If Length(aData)>0 then
-    begin
-    WriteBuffer(aData[1],Length(aData));
-    Position:=0;
-    end;
-end;
-
-function TRawStringStream.DataString: RawByteString;
-begin
-  Result:='';
-  SetLength(Result,Size);
-  if Size>0 then
-    Move(Memory^, Result[1], Size);
-end;
-
 { TProxyData }
 { TProxyData }
 
 
 function TProxyData.GetProxyHeaders: String;
 function TProxyData.GetProxyHeaders: String;
@@ -1491,10 +1463,10 @@ end;
 function TFPCustomHTTPClient.Get(const AURL: String): RawByteString;
 function TFPCustomHTTPClient.Get(const AURL: String): RawByteString;
 
 
 Var
 Var
-  SS : TRawStringStream;
+  SS : TRawByteStringStream;
 
 
 begin
 begin
-  SS:=TRawStringStream.Create;
+  SS:=TRawByteStringStream.Create;
   try
   try
     Get(AURL,SS);
     Get(AURL,SS);
     Result:=SS.Datastring;
     Result:=SS.Datastring;
@@ -1606,9 +1578,9 @@ end;
 
 
 function TFPCustomHTTPClient.Post(const URL: string): RawByteString;
 function TFPCustomHTTPClient.Post(const URL: string): RawByteString;
 Var
 Var
-  SS : TRawStringStream;
+  SS : TRawByteStringStream;
 begin
 begin
-  SS:=TRawStringStream.Create();
+  SS:=TRawByteStringStream.Create();
   try
   try
     Post(URL,SS);
     Post(URL,SS);
     Result:=SS.Datastring;
     Result:=SS.Datastring;
@@ -1699,9 +1671,9 @@ end;
 
 
 function TFPCustomHTTPClient.Put(const URL: string): RawByteString;
 function TFPCustomHTTPClient.Put(const URL: string): RawByteString;
 Var
 Var
-  SS : TRawStringStream;
+  SS : TRawByteStringStream;
 begin
 begin
-  SS:=TRawStringStream.Create();
+  SS:=TRawByteStringStream.Create();
   try
   try
     Put(URL,SS);
     Put(URL,SS);
     Result:=SS.Datastring;
     Result:=SS.Datastring;
@@ -1789,9 +1761,9 @@ end;
 
 
 function TFPCustomHTTPClient.Delete(const URL: string): RawByteString;
 function TFPCustomHTTPClient.Delete(const URL: string): RawByteString;
 Var
 Var
-  SS : TRawStringStream;
+  SS : TRawByteStringStream;
 begin
 begin
-  SS:=TRawStringStream.Create();
+  SS:=TRawByteStringStream.Create();
   try
   try
     Delete(URL,SS);
     Delete(URL,SS);
     Result:=SS.Datastring;
     Result:=SS.Datastring;
@@ -1879,9 +1851,9 @@ end;
 
 
 function TFPCustomHTTPClient.Options(const URL: string): RawByteString;
 function TFPCustomHTTPClient.Options(const URL: string): RawByteString;
 Var
 Var
-  SS : TRawStringStream;
+  SS : TRawByteStringStream;
 begin
 begin
-  SS:=TRawStringStream.Create();
+  SS:=TRawByteStringStream.Create();
   try
   try
     Options(URL,SS);
     Options(URL,SS);
     Result:=SS.Datastring;
     Result:=SS.Datastring;
@@ -1956,7 +1928,7 @@ end;
 procedure TFPCustomHTTPClient.FormPost(const URL : String; FormData: RawBytestring; const Response: TStream);
 procedure TFPCustomHTTPClient.FormPost(const URL : String; FormData: RawBytestring; const Response: TStream);
 
 
 begin
 begin
-  RequestBody:=TRawStringStream.Create(FormData);
+  RequestBody:=TRawByteStringStream.Create(FormData);
   try
   try
     AddHeader('Content-Type','application/x-www-form-urlencoded');
     AddHeader('Content-Type','application/x-www-form-urlencoded');
     Post(URL,Response);
     Post(URL,Response);
@@ -1999,9 +1971,9 @@ end;
 
 
 function TFPCustomHTTPClient.FormPost(const URL : String;  Const FormData: RawBytestring): RawByteString;
 function TFPCustomHTTPClient.FormPost(const URL : String;  Const FormData: RawBytestring): RawByteString;
 Var
 Var
-  SS : TRawStringStream;
+  SS : TRawByteStringStream;
 begin
 begin
-  SS:=TRawStringStream.Create();
+  SS:=TRawByteStringStream.Create();
   try
   try
     FormPost(URL,FormData,SS);
     FormPost(URL,FormData,SS);
     Result:=SS.Datastring;
     Result:=SS.Datastring;
@@ -2012,9 +1984,9 @@ end;
 
 
 function TFPCustomHTTPClient.FormPost(const URL: string; FormData: TStrings): RawByteString;
 function TFPCustomHTTPClient.FormPost(const URL: string; FormData: TStrings): RawByteString;
 Var
 Var
-  SS : TRawStringStream;
+  SS : TRawByteStringStream;
 begin
 begin
-  SS:=TRawStringStream.Create();
+  SS:=TRawByteStringStream.Create();
   try
   try
     FormPost(URL,FormData,SS);
     FormPost(URL,FormData,SS);
     Result:=SS.Datastring;
     Result:=SS.Datastring;
@@ -2130,13 +2102,13 @@ procedure TFPCustomHTTPClient.StreamFormPost(const AURL: string;
   const AStream: TStream; const Response: TStream);
   const AStream: TStream; const Response: TStream);
 Var
 Var
   S, Sep : string;
   S, Sep : string;
-  SS : TRawStringStream;
+  SS : TRawByteStringStream;
   I: Integer;
   I: Integer;
   N,V: String;
   N,V: String;
 begin
 begin
   Sep:=Format('%.8x_multipart_boundary',[Random($ffffff)]);
   Sep:=Format('%.8x_multipart_boundary',[Random($ffffff)]);
   AddHeader('Content-Type','multipart/form-data; boundary='+Sep);
   AddHeader('Content-Type','multipart/form-data; boundary='+Sep);
-  SS:=TRawStringStream.Create();
+  SS:=TRawByteStringStream.Create();
   try
   try
     if (FormData<>Nil) then
     if (FormData<>Nil) then
       for I:=0 to FormData.Count -1 do
       for I:=0 to FormData.Count -1 do

+ 11 - 0
rtl/objpas/classes/classesh.inc

@@ -1263,6 +1263,17 @@ type
     Property Encoding : TEncoding Read FEncoding;
     Property Encoding : TEncoding Read FEncoding;
   end;
   end;
 
 
+{ TRawByteStringStream }
+
+  TRawByteStringStream = Class(TBytesStream)
+  public
+    Constructor Create (const aData : RawByteString); overload;
+    function DataString: RawByteString;
+
+    function ReadString(Count: Longint): RawByteString;
+    procedure WriteString(const AString: RawByteString);
+  end;
+
 { TResourceStream }
 { TResourceStream }
 
 
 {$ifdef FPC_OS_UNICODE}
 {$ifdef FPC_OS_UNICODE}

+ 45 - 0
rtl/objpas/classes/streams.inc

@@ -1655,6 +1655,51 @@ end;
 
 
 
 
 
 
+{****************************************************************************}
+{*                          TRawByteStringStream                            *}
+{****************************************************************************}
+
+constructor TRawByteStringStream.Create(const aData: RawByteString);
+begin
+  Inherited Create;
+  If Length(aData)>0 then
+    begin
+    WriteBuffer(aData[1],Length(aData));
+    Position:=0;
+    end;
+end;
+
+function TRawByteStringStream.DataString: RawByteString;
+begin
+  Result:='';
+  SetLength(Result,Size);
+  if Size>0 then
+    Move(Memory^, Result[1], Size);
+end;
+
+function TRawByteStringStream.ReadString(Count: Longint): RawByteString;
+Var
+  NewLen : Longint;
+
+begin
+  NewLen:=Size-FPosition;
+  If NewLen>Count then NewLen:=Count;
+  Result:='';
+  if NewLen>0 then
+    begin
+    SetLength(Result, NewLen);
+    Move(FBytes[FPosition],Result[1],NewLen);
+    end;
+end;
+
+procedure TRawByteStringStream.WriteString(const AString: RawByteString);
+begin
+  if Length(AString)>0 then
+    WriteBuffer(AString[1],Length(AString));
+end;
+
+
+
 {****************************************************************************}
 {****************************************************************************}
 {*                             TResourceStream                              *}
 {*                             TResourceStream                              *}
 {****************************************************************************}
 {****************************************************************************}