in src/Microsoft.Azure.Relay/WebSocketExceptionHelper.cs [22:70]
public static Exception ConvertToRelayContract(Exception exception, TrackingContext trackingContext, HttpResponseMessage httpResponseMessage = null, bool isListener = true)
{
string message = exception.Message;
if (IsRelayContract(exception))
{
return exception;
}
else if (exception is WebSocketException)
{
WebException innerWebException;
IOException innerIOException;
SocketException socketException;
if ((innerWebException = exception.InnerException as WebException) != null)
{
HttpWebResponse httpWebResponse;
if ((httpWebResponse = innerWebException.Response as HttpWebResponse) != null)
{
return CreateExceptionForStatus(httpWebResponse.StatusCode, httpWebResponse.StatusDescription, exception, trackingContext, isListener);
}
else if (innerWebException.Status == WebExceptionStatus.NameResolutionFailure)
{
message = innerWebException.Message;
}
}
else if ((innerIOException = exception.InnerException as IOException) != null)
{
message = innerIOException.Message;
}
else if ((socketException = exception.InnerException as SocketException) != null)
{
if (socketException.SocketErrorCode == SocketError.HostNotFound)
{
message = socketException.Message;
}
}
else if (httpResponseMessage != null ||
(httpResponseMessage = (HttpResponseMessage)exception.Data[typeof(HttpResponseMessage).FullName]) != null)
{
return CreateExceptionForStatus(httpResponseMessage.StatusCode, httpResponseMessage.ReasonPhrase, exception, trackingContext, isListener);
}
}
if (trackingContext != null)
{
message = trackingContext.EnsureTrackableMessage(message);
}
return new RelayException(message, exception);
}