private static void HttpRequestHttpCallback(IPluginHttpUtilClient client, HttpRequest request, ICallInfo info, HttpRequestQueueResultCode result, AsyncHttpRequest asyncHttpRequest, object state) { var response = HttpResponseImpl.CreateHttpResponse(request, info, result, asyncHttpRequest); client.Log.Debug("Got HttpResoonse - executing callback."); // Sync request triggers an event to release the waiting Request thread to continue try { request.Callback(response, state); } catch (Exception ex) { client.Log.Error(ex); if (request.Async) { client.Log.Error(ex); client.PluginReportError(ErrorCodes.AsyncCallbackException, ex, state); } else { throw; } } }
private void HandleErrorHttpRespone(PeerBase peer, byte operationCode, HttpRequestQueueResultCode result, AsyncHttpRequest request, string requestUri) { string msg; if (request != null) { msg = string.Format( "webRpc request to address '{0}' failed. HttpQueueResult:{3}, WebStatus:{1}, Exception :{2}", requestUri, request.WebStatus, request.Exception == null ? "(null)" : request.Exception.ToString(), result); } else { msg = string.Format("webRpc request to address '{0}' failed. HttpQueueResult:{1}", requestUri, result); } this.SendErrorResponse(peer, operationCode, new SendParameters(), msg: msg); if (result == HttpRequestQueueResultCode.QueueFull) { Log.Debug(msg); } else { Log.Error(msg); } }
public static HttpResponseImpl CreateHttpResponse(HttpRequest request, ICallInfo info, HttpRequestQueueResultCode result, AsyncHttpRequest asyncHttpRequest) { var statusCode = -1; string statusDescription; byte[] responseData = null; NameValueCollection headers = null; try { switch (result) { case HttpRequestQueueResultCode.Success: statusCode = (int)asyncHttpRequest.WebResponse.StatusCode; statusDescription = asyncHttpRequest.WebResponse.StatusDescription; responseData = asyncHttpRequest.Response; headers = asyncHttpRequest.WebResponse.Headers; break; case HttpRequestQueueResultCode.Error: if (asyncHttpRequest.WebResponse != null) { statusCode = (int)asyncHttpRequest.WebResponse.StatusCode; statusDescription = asyncHttpRequest.WebResponse.StatusDescription; headers = asyncHttpRequest.WebResponse.Headers; } else { statusDescription = asyncHttpRequest.Exception.Message; } break; default: statusCode = -1; statusDescription = String.Empty; break; } } catch (Exception ex) { // we should never get her statusDescription = ex.Message; log.Warn("Exception during http response creation", ex); } var webStatus = asyncHttpRequest == null ? -1 : (int)asyncHttpRequest.WebStatus; if (asyncHttpRequest != null) { asyncHttpRequest.Dispose(); } return(new HttpResponseImpl(request, info, responseData, result, statusCode, statusDescription, webStatus, headers)); }
private void HandleHttpResponse(PeerBase peer, byte operationCode, HttpRequestQueueResultCode result, WebRpcRequest rpcRequest, AsyncHttpRequest request, string requestUri) { if (result == HttpRequestQueueResultCode.Success) { this.HandleSuccessHttpResponse(peer, operationCode, rpcRequest, request); } else { this.HandleErrorHttpRespone(peer, operationCode, result, request, requestUri); } }
public HttpResponseImpl(HttpRequest request, ICallInfo info, byte[] responseData, HttpRequestQueueResultCode status, int httpCode, string reason, int webStatus, NameValueCollection headers) { this.Request = request; this.responseData = responseData; this.responseText = responseData == null ? null : Encoding.UTF8.GetString(responseData, 0, responseData.Length); this.status = (byte)status; this.httpCode = httpCode; this.reason = reason; this.webStatus = webStatus; this.CallInfo = info; this.Headers = headers; }
private void ResponseCallBack(HttpRequestQueueResultCode result, AsyncHttpRequest response, object state) { Interlocked.Increment(ref this.responseCount); var requestState = state as RequestState; if (requestState != null) { requestState.Result = result; requestState.Response = response; requestState.State = state; requestState.ResetEvent.Set(); } this.resetEvent.Set(); }
public HttpResponseImpl(HttpRequest request, ICallInfo info, HttpRequestQueueResultCode status, string reason, int webStatus) : this(request, info, null, status, 0, reason, webStatus, null) { }
private static void HttpRequestCallback(IPluginHttpUtilClient client, HttpRequest request, HttpRequestQueueResultCode result, AsyncHttpRequest httpRequest, object state, ICallInfo info) { var callInfo = (ICallInfoImpl)info; var doCheck = !callInfo.IsProcessed; if (doCheck) { callInfo.Reset(); } var response = HttpResponseImpl.CreateHttpResponse(request, info, result, httpRequest); client.Log.Debug("Got HttpResponse - executing callback."); try { request.Callback(response, state); string errorMsg; // and check that one of methods was called if (doCheck && !info.StrictModeCheck(out errorMsg)) { var infoTypeName = info.GetType().ToString(); client.PluginReportError(ErrorCodes.MissingCallProcessing, null, infoTypeName); info.Fail(string.Format("HttpRequestCallback: {0}", errorMsg)); } } catch (Exception ex) { client.Log.Error(ex); client.PluginReportError(ErrorCodes.AsyncCallbackException, ex, state); if (!callInfo.IsProcessed) { callInfo.Fail(ex.ToString()); } } }
//added for Viveport, they use 4XX status codes when token expires private void OnCallbackReturnExpectedStatusCodes(HttpRequestQueueResultCode resultCode, AsyncHttpRequest result, object userState, Action <AsyncHttpResponse, ClientAuthenticationQueue> userCallback, List <HttpStatusCode> expectedStatusCodes) { try { var url = result.WebRequest.RequestUri; byte[] responseData = null; var status = result.Status; var exception = result.Exception; this.RequestTimeCounter.AddValue((int)result.Elapsedtime.TotalMilliseconds); if (result.Response != null) { responseData = result.Response; } if (resultCode == HttpRequestQueueResultCode.Error && expectedStatusCodes != null && expectedStatusCodes.Any(expectedStatusCode => expectedStatusCode == result.WebResponse.StatusCode)) { resultCode = HttpRequestQueueResultCode.Success; responseData = Encoding.UTF8.GetBytes(string.Format("{0}/{1}", (int)result.WebResponse.StatusCode, result.WebResponse.StatusDescription)); // responseData = Encoding.UTF8.GetBytes(((int)result.WebResponse.StatusCode).ToString()); } result.Dispose(); byte[] resultResponseData = null; switch (resultCode) { case HttpRequestQueueResultCode.Success: { if (log.IsDebugEnabled) { var responseString = string.Empty; if (responseData != null) { responseString = Encoding.UTF8.GetString(responseData); } log.DebugFormat( "Custom authentication result: uri={0}, status={1}, msg={2}, data={3}", url, status, exception != null ? exception.Message : string.Empty, responseString); } this.timeoutCounter.AddValue(0); resultResponseData = responseData; } break; case HttpRequestQueueResultCode.RequestTimeout: { if (log.IsDebugEnabled) { log.DebugFormat("Custom authentication timed out: uri={0}, status={1}, msg={2}", url, status, exception != null ? exception.Message : string.Empty); } this.timeoutCounter.AddValue(1); } break; case HttpRequestQueueResultCode.QueueFull: { if (log.IsDebugEnabled) { log.DebugFormat( "Custom authentication error: queue is full. Requests count {0}, url:{1}, msg:{2}", this.httpRequestQueue.QueuedRequestCount, url, exception != null ? exception.Message : string.Empty); } } break; case HttpRequestQueueResultCode.QueueTimeout: if (log.IsDebugEnabled) { log.DebugFormat("Custom authentication error: Queue timedout. uri={0}, status={1}, msg={2}", url, status, exception != null ? exception.Message : string.Empty); } break; case HttpRequestQueueResultCode.Error: { if (log.IsDebugEnabled) { log.DebugFormat("Custom authentication error: uri={0}, status={1}, msg={2}", url, status, exception != null ? exception.Message : string.Empty); } } break; case HttpRequestQueueResultCode.Offline: { if (log.IsDebugEnabled) { log.DebugFormat("Custom auth error. Queue is offline. url:{0}, status{1}, msg:{2}", url, status, exception != null ? exception.Message : string.Empty); } } break; } var response = new AsyncHttpResponse(resultCode, this.RejectIfUnavailable, userState) { ResponseData = resultResponseData, ElapsedTicks = result.ElapsedTicks, }; ThreadPool.QueueUserWorkItem(delegate { userCallback(response, this); }); return; } catch (Exception e) { log.Error(e); } ThreadPool.QueueUserWorkItem(delegate { userCallback(new AsyncHttpResponse(HttpRequestQueueResultCode.Error, this.RejectIfUnavailable, userState), this); }); }
private void HandleHttpResponse(PeerBase peer, byte operationCode, HttpRequestQueueResultCode result, WebRpcRequest rpcRequest, AsyncHttpRequest request, string requestUri) { if (result == HttpRequestQueueResultCode.Success) { this.HandleSuccessHttpResponse(peer, operationCode, rpcRequest, request); } else { this.HandleErrorHttpRespone(peer, operationCode, result, request, requestUri); } }
private void HandleErrorHttpRespone(PeerBase peer, byte operationCode, HttpRequestQueueResultCode result, AsyncHttpRequest request, string requestUri) { string msg; if (request != null) { msg = string.Format( "webRpc request to address '{0}' failed. HttpQueueResult:{3}, WebStatus:{1}, Exception :{2}", requestUri, request.WebStatus, request.Exception == null ? "(null)" : request.Exception.ToString(), result); } else { msg = string.Format("webRpc request to address '{0}' failed. HttpQueueResult:{1}", requestUri, result); } this.SendErrorResponse(peer, operationCode, new SendParameters(), msg: msg); if (result == HttpRequestQueueResultCode.QueueFull) { Log.Debug(msg); } else { Log.Error(msg); } }
public AsyncHttpResponse(HttpRequestQueueResultCode status, bool rejectIfUnavailable, object state) { this.Status = status; this.State = state; this.RejectIfUnavailable = rejectIfUnavailable; }
private void OnCallback(HttpRequestQueueResultCode resultCode, AsyncHttpRequest result, object userState, Action<AsyncHttpResponse, ClientAuthenticationQueue> userCallback) { try { var url = result.WebRequest.RequestUri; byte[] responseData = null; var status = result.Status; var exception = result.Exception; this.RequestTimeCounter.AddValue((int)result.Elapsedtime.TotalMilliseconds); if (result.Response != null) { responseData = result.Response; } byte[] resultResponseData = null; switch (resultCode) { case HttpRequestQueueResultCode.Success: { if (log.IsDebugEnabled) { var responseString = string.Empty; if (responseData != null) { responseString = Encoding.UTF8.GetString(responseData); } log.DebugFormat( "Custom authentication result: uri={0}, status={1}, msg={2}, data={3}", url, status, exception != null ? exception.Message : string.Empty, responseString); } this.timeoutCounter.AddValue(0); resultResponseData = responseData; } break; case HttpRequestQueueResultCode.RequestTimeout: { if (log.IsDebugEnabled) { log.DebugFormat("Custom authentication timed out: uri={0}, status={1}, msg={2}", url, status, exception != null ? exception.Message : string.Empty); } this.timeoutCounter.AddValue(1); } break; case HttpRequestQueueResultCode.QueueFull: { if (log.IsDebugEnabled) { log.DebugFormat( "Custom authentication error: queue is full. Requests count {0}, url:{1}, msg:{2}", this.httpRequestQueue.QueuedRequestCount, url, exception != null ? exception.Message : string.Empty); } } break; case HttpRequestQueueResultCode.QueueTimeout: if (log.IsDebugEnabled) { log.DebugFormat("Custom authentication error: Queue timedout. uri={0}, status={1}, msg={2}", url, status, exception != null ? exception.Message : string.Empty); } break; case HttpRequestQueueResultCode.Error: { if (log.IsDebugEnabled) { log.DebugFormat("Custom authentication error: uri={0}, status={1}, msg={2}", url, status, exception != null ? exception.Message : string.Empty); } } break; case HttpRequestQueueResultCode.Offline: { if (log.IsDebugEnabled) { log.DebugFormat("Custom auth error. Queue is offline. url:{0}, status{1}, msg:{2}", url, status, exception != null ? exception.Message : string.Empty); } } break; } var response = new AsyncHttpResponse(resultCode, this.RejectIfUnavailable, userState) { ResponseData = resultResponseData }; ThreadPool.QueueUserWorkItem(delegate { userCallback(response, this); }); return; } catch (Exception e) { log.ErrorFormat("Exception happened:{0}", e); } ThreadPool.QueueUserWorkItem(delegate { userCallback(new AsyncHttpResponse(HttpRequestQueueResultCode.Error, this.RejectIfUnavailable, userState), this); }); }
private void ResponseCallBack(HttpRequestQueueResultCode result, AsyncHttpRequest response, object state) { Interlocked.Increment(ref this.responseCount); var requestState = state as RequestState; if (requestState != null) { requestState.Result = result; requestState.Response = response; requestState.State = state; requestState.ResetEvent.Set(); } this.resetEvent.Set(); }
private static void HttpRequestQueueCallbackAsync(HttpRequestQueueResultCode result, AsyncHttpRequest request, object userState) { var state = (AsyncRequestState)userState; state.Stopwatch.Stop(); var appId = state.AppId; var elapsedMS = state.Stopwatch.ElapsedMilliseconds; var queue = state.HttpQueue; state.ResultCode = MonitoringServiceResult.Error; state.HttpRequestQueueResultCode = result; switch (result) { case HttpRequestQueueResultCode.Success: { GetTmpMonitoringFromResponse(state, request.WebRequest.RequestUri.ToString(), Encoding.UTF8.GetString(request.Response)); break; } case HttpRequestQueueResultCode.RequestTimeout: { if (log.IsWarnEnabled) { log.WarnFormat( "Monitoring service: Request failed. Timeout. appId={0}, url={1}, duration: {2}ms, duration2: {4}, request timeout set to: {3}ms, ConnectionLimit:{5}", appId, request.WebRequest.RequestUri, elapsedMS, request.WebRequest.Timeout, request.Elapsedtime, System.Net.ServicePointManager.DefaultConnectionLimit); } state.ResultCode = MonitoringServiceResult.Timeout; state.ErrorMessage = ErrorMessages.RequestTimedout; break; } case HttpRequestQueueResultCode.Error: { var response = request.WebResponse; if (response != null && response.StatusCode == HttpStatusCode.NotFound) { // if (state.IsBlobStoreQueue && log.IsWarnEnabled) // { // log.WarnFormat(state.LogGuard, // "Account service: Application account does not exist or Url is wrong - did user submit an invalid App ID? appId={0}, url={1}, duration: {2}ms, request timeout set to: {3}ms", // appId, // request.WebRequest.RequestUri, // elapsedMS, // request.WebRequest.Timeout); // } state.ResultCode = MonitoringServiceResult.NotFound; state.ErrorMessage = ErrorMessages.AppIdNotFound; } else { var msg = string.Format("Monitoring service: Error getting application account: appId={0}, url={1}", appId, request.WebRequest.RequestUri); log.Error(state.LogGuard, msg, request.Exception); state.ErrorMessage = string.Format("Error during getting monitoring: WebStatus:{0}, Request Status:{1}", request.WebStatus, request.Status); } break; } case HttpRequestQueueResultCode.QueueTimeout: { if (log.IsWarnEnabled) { log.WarnFormat(state.LogGuard, "Monitoring service: Request failed. Http Queue Timeout. appId:'{0}', url:'{1}', timeout:{2}, max concurent request:{3}", appId, request.WebRequest.RequestUri, queue.QueueTimeout, queue.MaxConcurrentRequests ); } state.ErrorMessage = ErrorMessages.QueueTimeout; break; } case HttpRequestQueueResultCode.QueueFull: { if (log.IsWarnEnabled) { log.WarnFormat(state.LogGuard, "Monitoring service: Request failed. Http Queue Full. appId:'{0}', url:'{1}', max queue size:{2}", appId, request.WebRequest.RequestUri, queue.MaxQueuedRequests); } state.ErrorMessage = ErrorMessages.QueueFull; break; } case HttpRequestQueueResultCode.Offline: { if (log.IsWarnEnabled) { log.WarnFormat(state.LogGuard, "Monitoring service: Request failed. Http Queue is offline. appId:'{0}', url:'{1}', queue reconnect interval:{2}", appId, request.WebRequest.RequestUri, queue.ReconnectInterval); } state.ErrorMessage = ErrorMessages.QueueOffline; break; } default: log.ErrorFormat("Monitoring service: Unknown result code: {0}, a", result); break; } request.Dispose(); try { state.Callback(state); } catch (Exception e) { log.Warn(state.LogGuard, string.Format("Monitoring service: Got exception during callback call. appId:{0}. Exception Msg:{1}", appId, e.Message), e); } }
private void HttpRequestHttpCallback(HttpRequest request, HttpRequestQueueResultCode result, AsyncHttpRequest httpRequest, object state) { var statusCode = -1; string statusDescription; byte[] responseData = null; try { switch (result) { case HttpRequestQueueResultCode.Success: statusCode = (int)httpRequest.WebResponse.StatusCode; statusDescription = httpRequest.WebResponse.StatusDescription; responseData = httpRequest.Response; break; case HttpRequestQueueResultCode.Error: if (httpRequest.WebResponse != null) { statusCode = (int)httpRequest.WebResponse.StatusCode; statusDescription = httpRequest.WebResponse.StatusDescription; } else { statusDescription = httpRequest.Exception.Message; } break; default: statusCode = -1; statusDescription = string.Empty; break; } } catch (Exception ex) { // we should never get her statusDescription = ex.Message; } var response = new HttpResponseImpl( request, responseData, responseData == null ? null : Encoding.UTF8.GetString(responseData, 0, responseData.Length), result, statusCode, statusDescription, httpRequest == null ? -1 : (int)httpRequest.WebStatus); Log.Debug("Got HttpResoonse - executing callback."); // Sync request triggers an event to release the waiting Request thread to continue try { request.Callback(response, state); } catch (Exception ex) { Log.Error(ex); if (request.Async) { this.Plugin.ReportError(ErrorCodes.AsyncCallbackException, ex, state); } else { throw; } } }
public HttpResponseImpl(HttpRequest request, byte[] responseData, string responseText, HttpRequestQueueResultCode status, int httpCode, string reason, int webStatus) { this.Request = request; this.responseData = responseData; this.responseText = responseText; this.status = (byte)status; this.httpCode = httpCode; this.reason = reason; this.webStatus = webStatus; }
public AsyncHttpResponse(HttpRequestQueueResultCode status, bool rejectIfUnavailable, object state) { this.Status = status; this.State = state; this.RejectIfUnavailable = rejectIfUnavailable; }