else if (Length(lRequest) = 0) then begin lRequestStream := TROBytesStream.Create(lRequest); lResponseStream := TROBytesStream.Create; try if ServeRodl then begin lTransport := TQueueItem.Create(self, aTarget, aRequestHeaders, lResponseHeaders, ldisp, lRequest); if IntDispatchMessage(ldisp, lTransport, lRequestStream, lResponseStream, lIgnore) then lResponseHeaders.ContentType := lTransport.ContentType else WriteError(lResponseHeaders,lResponseStream,HTTP_500_code,HTTP_500_status,HTTP_500_error_invalid_path); end else begin WriteError(lResponseHeaders,lResponseStream,HTTP_500_code,HTTP_500_status,HTTP_500_error_invalid_path); end;
if ldisp = nil then begin {$IFDEF DELPHI10UP}{$REGION 'disp = nil'}{$ENDIF} lRequestStream := TROBytesStream.Create(lRequest); lResponseStream := TROBytesStream.Create; try if HandleExtendedDispatchers(lroot, aRequestHeaders, lResponseHeaders, lRequestStream,lResponseStream) then begin end else if HandleUnknownRequest(aTarget, aRequestHeaders, lRequest) then begin // don't handle it Exit; end else if DoProcessDocs(aRequestHeaders,lResponseHeaders,lResponseStream,lroot,lSubPath) then begin if lResponseHeaders.Code = HTTP_FAILED then WriteError(lResponseHeaders,lResponseStream,HTTP_500_code,HTTP_500_status,HTTP_500_error_invalid_path); end else begin WriteError(lResponseHeaders,lResponseStream,HTTP_500_code,HTTP_500_status,Format(err_NoDispatcherConfiguredForS,[lroot])); end; lb := lResponseStream.Bytes; SetLength(lb, lResponseStream.Size); SendResponse(aTarget, lResponseHeaders, lb, nil, True); finally lResponseStream.ResetCapacity; lRequestStream.ResetCapacity; lResponseStream.Free; lRequestStream.Free; end; {$IFDEF DELPHI10UP}{$ENDREGION}{$ENDIF} end else begin {$IFDEF DELPHI10UP}{$REGION 'DispatchMessage <> nil'}{$ENDIF} if not ldisp.Enabled then begin SendError(aTarget, lResponseHeaders, Format(err_DispatcherForSIsDisabled,[lroot])); exit; end else if ldisp.Message = nil then begin SendError(aTarget, lResponseHeaders,Format(err_MessageForDispatcherSIsHasNotBeenAssigned,[lroot])); exit; end else if (Length(lRequest) = 0) and ServeRodl then begin lRequestStream := TROBytesStream.Create(lRequest); lResponseStream := TROBytesStream.Create; try lTransport := TQueueItem.Create(self, aTarget, aRequestHeaders, lResponseHeaders, ldisp, lRequest); if IntDispatchMessage(ldisp, lTransport, lRequestStream, lResponseStream, lIgnore) then lResponseHeaders.ContentType := lTransport.ContentType else WriteError(lResponseHeaders,lResponseStream,HTTP_500_code,HTTP_500_status,HTTP_500_error_invalid_path); lb := lResponseStream.Bytes; SetLength(lb, lResponseStream.Size); SendResponse(aTarget, lResponseHeaders, lb, nil, True); finally lResponseStream.ResetCapacity; lRequestStream.ResetCapacity; lResponseStream.Free; lRequestStream.Free; end; exit; end else if ((aRequestHeaders.Method = 'GET') or (Length(lRequest) = 4)) and(ServeRodl) then begin if (lSubPath = '') or (lSubPath = 'rodl') then begin SendRodl(aTarget, aRequestHeaders, lResponseHeaders, ldisp); exit; end else begin SendError(aTarget, lResponseHeaders, Format(err_MessageForDispatcherSIsHasNotBeenAssigned,[lroot])); exit; end; end else if Supports(ldisp.Message, IRONamedModuleInfo, info) and (CompareText(info.ModuleInfoName, lSubPath) = 0) and ServeRodl then begin SendModuleInfo(aTarget, aRequestHeaders, lResponseHeaders, info); exit; end else begin IncomingData(aTarget, aRequestHeaders, lResponseHeaders, lRequest, ldisp); end; {$IFDEF DELPHI10UP}{$ENDREGION}{$ENDIF} end; except on e: Exception do SendError(aTarget,lResponseHeaders, e.Message); end; finally lResponseHeaders.Free; end; end;
真不知道,这个到底要怎么改。
----------------------------------------------
(C)(P)Flying Wang