THRIFT-4886 More detailed error information for WinHTTP transport
Client: Delphi
Patch: Jens Geyer
diff --git a/lib/delphi/src/Thrift.Transport.WinHTTP.pas b/lib/delphi/src/Thrift.Transport.WinHTTP.pas
index 48b74a6..d7eefa8 100644
--- a/lib/delphi/src/Thrift.Transport.WinHTTP.pas
+++ b/lib/delphi/src/Thrift.Transport.WinHTTP.pas
@@ -51,7 +51,10 @@
function CreateRequest: IWinHTTPRequest;
function SecureProtocolsAsWinHTTPFlags : Cardinal;
- private type
+ private
+ type
+ TErrorInfo = ( SplitUrl, WinHTTPSession, WinHTTPConnection, WinHTTPRequest, RequestSetup, AutoProxy );
+
THTTPResponseStream = class( TThriftStreamImpl)
private
FRequest : IWinHTTPRequest;
@@ -131,33 +134,45 @@
function TWinHTTPClientImpl.CreateRequest: IWinHTTPRequest;
var
- pair : TPair<string,string>;
+ pair : TPair<string,string>;
session : IWinHTTPSession;
connect : IWinHTTPConnection;
url : IWinHTTPUrl;
sPath : string;
+ info : TErrorInfo;
begin
- url := TWinHTTPUrlImpl.Create( FUri);
+ info := TErrorInfo.SplitUrl;
+ try
+ url := TWinHTTPUrlImpl.Create( FUri);
- session := TWinHTTPSessionImpl.Create('Apache Thrift Delphi WinHTTP');
- session.EnableSecureProtocols( SecureProtocolsAsWinHTTPFlags);
+ info := TErrorInfo.WinHTTPSession;
+ session := TWinHTTPSessionImpl.Create('Apache Thrift Delphi WinHTTP');
+ session.EnableSecureProtocols( SecureProtocolsAsWinHTTPFlags);
- connect := session.Connect( url.HostName, url.Port);
+ info := TErrorInfo.WinHTTPConnection;
+ connect := session.Connect( url.HostName, url.Port);
- sPath := url.UrlPath + url.ExtraInfo;
- result := connect.OpenRequest( (url.Scheme = 'https'), 'POST', sPath, THRIFT_MIMETYPE);
+ info := TErrorInfo.WinHTTPRequest;
+ sPath := url.UrlPath + url.ExtraInfo;
+ result := connect.OpenRequest( (url.Scheme = 'https'), 'POST', sPath, THRIFT_MIMETYPE);
- // setting a timeout value to 0 (zero) means "no timeout" for that setting
- result.SetTimeouts( DnsResolveTimeout, ConnectionTimeout, SendTimeout, ReadTimeout);
+ // setting a timeout value to 0 (zero) means "no timeout" for that setting
+ info := TErrorInfo.RequestSetup;
+ result.SetTimeouts( DnsResolveTimeout, ConnectionTimeout, SendTimeout, ReadTimeout);
- // headers
- result.AddRequestHeader( 'Content-Type: '+THRIFT_MIMETYPE, WINHTTP_ADDREQ_FLAG_ADD);
- for pair in FCustomHeaders do begin
- Result.AddRequestHeader( pair.Key +': '+ pair.Value, WINHTTP_ADDREQ_FLAG_ADD);
+ // headers
+ result.AddRequestHeader( 'Content-Type: '+THRIFT_MIMETYPE, WINHTTP_ADDREQ_FLAG_ADD);
+ for pair in FCustomHeaders do begin
+ Result.AddRequestHeader( pair.Key +': '+ pair.Value, WINHTTP_ADDREQ_FLAG_ADD);
+ end;
+
+ // AutoProxy support
+ info := TErrorInfo.AutoProxy;
+ result.TryAutoProxy( FUri);
+ except
+ on e:TException do raise;
+ on e:Exception do raise TTransportExceptionUnknown.Create( e.Message+' (at '+EnumUtils<TErrorInfo>.ToString(Ord(info))+')');
end;
-
- // AutoProxy support
- result.TryAutoProxy( FUri);
end;