public void LogRequest(IOnPremiseConnectorRequest onPremiseConnectorRequest, IOnPremiseTargetReponse onPremiseTargetReponse, HttpStatusCode responseStatusCode, Guid linkId, string originId, string relayPath) { if (onPremiseConnectorRequest == null) { throw new ArgumentNullException(nameof(onPremiseConnectorRequest), "A client request must be set."); } var onPremiseTargetInformation = GetOnPremiseTargetInformation(onPremiseTargetReponse); var pathInformation = _pathSplitter.Split(relayPath); _logRepository.LogRequest(new RequestLogEntry { LocalUrl = pathInformation.LocalUrl, HttpStatusCode = responseStatusCode, ContentBytesIn = GetContentByteCount(onPremiseConnectorRequest.Body), ContentBytesOut = onPremiseTargetInformation.ContentBytesOut, OnPremiseConnectorInDate = onPremiseConnectorRequest.RequestStarted, OnPremiseConnectorOutDate = onPremiseConnectorRequest.RequestFinished, OnPremiseTargetInDate = onPremiseTargetInformation.OnPremiseTargetInDate, OnPremiseTargetOutDate = onPremiseTargetInformation.OnPremiseTargetOutDate, OriginId = Guid.Parse(originId), OnPremiseTargetKey = pathInformation.OnPremiseTargetKey, LinkId = linkId }); }
public HttpResponseMessage BuildFrom(IOnPremiseTargetReponse onPremiseTargetReponse, Link link) { var response = new HttpResponseMessage(); if (onPremiseTargetReponse == null) { response.StatusCode = HttpStatusCode.GatewayTimeout; response.Content = new ByteArrayContent(new byte[] { }); response.Content.Headers.Add("X-TTRELAY-TIMEOUT", "On-Premise"); } else { response.StatusCode = onPremiseTargetReponse.StatusCode; response.Content = GetResponseContentForOnPremiseTargetResponse(onPremiseTargetReponse, link); string wwwAuthenticate; if (onPremiseTargetReponse.HttpHeaders.TryGetValue("WWW-Authenticate", out wwwAuthenticate)) { var parts = wwwAuthenticate.Split(' '); response.Headers.WwwAuthenticate.Add(parts.Length == 2 ? new AuthenticationHeaderValue(parts[0], parts[1]) : new AuthenticationHeaderValue(wwwAuthenticate)); } } return(response); }
public override async Task SendOnPremiseTargetResponse(string originId, IOnPremiseTargetReponse reponse) { CheckDisposed(); _logger.Debug("Sending On-Premise Target response to origin '{0}'", originId); var queue = DeclareRelayServerQueue(originId); await _bus.Advanced.PublishAsync(Exchange.GetDefault(), queue.Name, false, false, new Message <string>(JsonConvert.SerializeObject(reponse))); }
internal OnPremiseTargetInformation GetOnPremiseTargetInformation(IOnPremiseTargetReponse onPremiseTargetReponse) { var onPremiseTargetInformation = new OnPremiseTargetInformation(); if (onPremiseTargetReponse != null) { onPremiseTargetInformation.OnPremiseTargetInDate = onPremiseTargetReponse.RequestStarted; onPremiseTargetInformation.OnPremiseTargetOutDate = onPremiseTargetReponse.RequestFinished; onPremiseTargetInformation.ContentBytesOut = GetContentByteCount(onPremiseTargetReponse.Body); } return(onPremiseTargetInformation); }
private void ForwardOnPremiseTargetResponse(IOnPremiseTargetReponse reponse) { _logger.Debug("Forwarding On-Premise Target response for request '{0}'", reponse.RequestId); IOnPremiseConnectorCallback onPremiseConnectorCallback; if (_callbacks.TryRemove(reponse.RequestId, out onPremiseConnectorCallback)) { onPremiseConnectorCallback.Reponse = reponse; onPremiseConnectorCallback.Handle.Set(); } else { _logger.Debug("No callback found for request '{0}'", reponse.RequestId); } }
public HttpResponseMessage BuildFrom(IOnPremiseTargetReponse onPremiseTargetReponse, Link link) { var response = new HttpResponseMessage(); if (onPremiseTargetReponse == null) { response.StatusCode = HttpStatusCode.GatewayTimeout; response.Content = new ByteArrayContent(new byte[] { }); response.Content.Headers.Add("X-TTRELAY-TIMEOUT", "On-Premise"); } else { response.StatusCode = onPremiseTargetReponse.StatusCode; response.Content = GetResponseContentForOnPremiseTargetResponse(onPremiseTargetReponse, link); } return(response); }
internal HttpContent GetResponseContentForOnPremiseTargetResponse(IOnPremiseTargetReponse onPremiseTargetReponse, Link link) { if (onPremiseTargetReponse == null) { throw new ArgumentNullException("onPremiseTargetReponse", "On-Premise Target response must not be null here."); } if (onPremiseTargetReponse.StatusCode == HttpStatusCode.InternalServerError && !link.ForwardOnPremiseTargetErrorResponse) { return(null); } var content = new ByteArrayContent(onPremiseTargetReponse.Body ?? new byte[] { }); SetHttpHeaders(onPremiseTargetReponse.HttpHeaders, content); return(content); }
public void Trace(IOnPremiseConnectorRequest onPremiseConnectorRequest, IOnPremiseTargetReponse onPremiseTargetReponse, Guid traceConfigurationId) { try { if (!Directory.Exists(_configuration.TraceFileDirectory)) { Directory.CreateDirectory(_configuration.TraceFileDirectory); } var filenamePrefix = $"{Path.Combine(_configuration.TraceFileDirectory, traceConfigurationId.ToString())}-{DateTime.Now.Ticks}"; _traceFileWriter.WriteHeaderFile(filenamePrefix + OnPremiseConnectorHeaderExtension, onPremiseConnectorRequest.HttpHeaders); _traceFileWriter.WriteContentFile(filenamePrefix + OnPremiseConnectorContentExtension, onPremiseConnectorRequest.Body); _traceFileWriter.WriteHeaderFile(filenamePrefix + OnPremiseTargetHeaderExtension, onPremiseTargetReponse.HttpHeaders); _traceFileWriter.WriteContentFile(filenamePrefix + OnPremiseTargetContentExtension, onPremiseTargetReponse.Body); } catch (Exception ex) { _logger.Warn("Could not create trace", ex); } }
public abstract Task SendOnPremiseTargetResponse(string originId, IOnPremiseTargetReponse reponse);