Browse Source

* Fixed bugs in reading of content from browser. (WST server now works)

git-svn-id: trunk@17526 -
michael 14 years ago
parent
commit
78cd2eb692
1 changed files with 40 additions and 4 deletions
  1. 40 4
      packages/fcl-web/src/base/fphttpserver.pp

+ 40 - 4
packages/fcl-web/src/base/fphttpserver.pp

@@ -35,7 +35,9 @@ Type
   TFPHTTPConnectionRequest = Class(TRequest)
   TFPHTTPConnectionRequest = Class(TRequest)
   private
   private
     FConnection: TFPHTTPConnection;
     FConnection: TFPHTTPConnection;
+    
   protected
   protected
+    procedure SetContent(AValue : String);
     Property Connection : TFPHTTPConnection Read FConnection;
     Property Connection : TFPHTTPConnection Read FConnection;
   end;
   end;
 
 
@@ -208,6 +210,32 @@ begin
   end;
   end;
 end;
 end;
 
 
+procedure TFPHTTPConnectionRequest.SetContent(AValue : String);
+
+begin
+  FContent:=Avalue;
+  FContentRead:=true;
+end;
+(*
+Procedure TFPHTTPConnectionRequest.SetFieldValue(Index : Integer; Value : String);
+
+begin
+  if Index=35 then
+    FContent:=Value
+  else
+    Inherited (Index,Value);
+end;
+
+Function TFPHTTPConnectionRequest.GetFieldValue(Index : Integer) : String;
+
+begin
+  if Index=35 then
+    Result:=FContent
+  else
+    Result:=Inherited GetFieldValue(Index);
+end;
+*)
+
 procedure TFPHTTPConnectionResponse.DoSendHeaders(Headers: TStrings);
 procedure TFPHTTPConnectionResponse.DoSendHeaders(Headers: TStrings);
 
 
 Var
 Var
@@ -269,6 +297,7 @@ begin
         Delete(FBuffer,1,1);
         Delete(FBuffer,1,1);
         Done:=True;
         Done:=True;
         end;
         end;
+      CheckLF:=False;  
       end;
       end;
     if not Done then
     if not Done then
       begin
       begin
@@ -360,9 +389,14 @@ begin
     SetLength(S,L);
     SetLength(S,L);
     P:=Length(FBuffer);
     P:=Length(FBuffer);
     if (P>0) then
     if (P>0) then
-      Move(FBuffer[1],S,P);
+      begin
+      Move(FBuffer[1],S[1],P);
+      L:=L-P;
+      end;
     P:=P+1;
     P:=P+1;
-    Repeat
+    R:=1;
+    While (L<>0) and (R>0) do
+      begin
       R:=FSocket.Read(S[p],L);
       R:=FSocket.Read(S[p],L);
       If R<0 then
       If R<0 then
         Raise EHTTPServer.Create(SErrReadingSocket);
         Raise EHTTPServer.Create(SErrReadingSocket);
@@ -371,9 +405,9 @@ begin
         P:=P+R;
         P:=P+R;
         L:=L-R;
         L:=L-R;
         end;
         end;
-    until (L=0) or (R=0);
+      end;  
     end;
     end;
-  ARequest.Content:=S;
+  ARequest.SetContent(S);
 end;
 end;
 
 
 function TFPHTTPConnection.ReadRequestHeaders: TFPHTTPConnectionRequest;
 function TFPHTTPConnection.ReadRequestHeaders: TFPHTTPConnectionRequest;
@@ -417,7 +451,9 @@ begin
   try
   try
     // Read content, if any
     // Read content, if any
     If Req.ContentLength>0 then
     If Req.ContentLength>0 then
+      begin
       ReadRequestContent(Req);
       ReadRequestContent(Req);
+      end;
     // Create Response
     // Create Response
     Resp:= TFPHTTPConnectionResponse.Create(Req);
     Resp:= TFPHTTPConnectionResponse.Create(Req);
     try
     try