public static void Start(StartupContext startupContext, IUserAlert userAlert, Action <IContainer> startCallback = null) { try { SecurityProtocolPolicy.Register(); X509CertificateValidationPolicy.Register(); Logger.Info("Starting Gamearr - {0} - Version {1}", Assembly.GetCallingAssembly().Location, Assembly.GetExecutingAssembly().GetName().Version); if (!PlatformValidation.IsValidate(userAlert)) { throw new TerminateApplicationException("Missing system requirements"); } LongPathSupport.Enable(); _container = MainAppContainerBuilder.BuildContainer(startupContext); _container.Resolve <InitializeLogger>().Initialize(); _container.Resolve <IAppFolderFactory>().Register(); _container.Resolve <IProvidePidFile>().Write(); var appMode = GetApplicationMode(startupContext); Start(appMode, startupContext); if (startCallback != null) { startCallback(_container); } else { SpinToExit(appMode); } } catch (InvalidConfigFileException ex) { throw new GamearrStartupException(ex); } catch (AccessDeniedConfigFileException ex) { throw new GamearrStartupException(ex); } catch (TerminateApplicationException ex) { Logger.Info(ex.Message); LogManager.Configuration = null; } }
public static void Main(string[] args) { try { SecurityProtocolPolicy.Register(); X509CertificateValidationPolicy.Register(); var startupArgument = new StartupContext(args); NzbDroneLogger.Register(startupArgument, true, true); Logger.Info("Starting Sonarr Update Client"); _container = UpdateContainerBuilder.Build(startupArgument); _container.Resolve <UpdateApp>().Start(args); Logger.Info("Update completed successfully"); } catch (Exception e) { Logger.Fatal(e, "An error has occurred while applying update package."); } }
public HttpResponse GetResponse(HttpRequest request, CookieContainer cookies) { var webRequest = (HttpWebRequest)WebRequest.Create((Uri)request.Url); if (PlatformInfo.IsMono) { // On Mono GZipStream/DeflateStream leaks memory if an exception is thrown, use an intermediate buffer in that case. webRequest.AutomaticDecompression = DecompressionMethods.None; webRequest.Headers.Add("Accept-Encoding", "gzip"); } else { // Deflate is not a standard and could break depending on implementation. // we should just stick with the more compatible Gzip //http://stackoverflow.com/questions/8490718/how-to-decompress-stream-deflated-with-java-util-zip-deflater-in-net webRequest.AutomaticDecompression = DecompressionMethods.GZip; } webRequest.Method = request.Method.ToString(); webRequest.UserAgent = _userAgentBuilder.GetUserAgent(request.UseSimplifiedUserAgent); webRequest.KeepAlive = request.ConnectionKeepAlive; webRequest.AllowAutoRedirect = false; webRequest.CookieContainer = cookies; if (request.RequestTimeout != TimeSpan.Zero) { webRequest.Timeout = (int)Math.Ceiling(request.RequestTimeout.TotalMilliseconds); } AddProxy(webRequest, request); if (request.Headers != null) { AddRequestHeaders(webRequest, request.Headers); } HttpWebResponse httpWebResponse; try { if (request.ContentData != null) { webRequest.ContentLength = request.ContentData.Length; using (var writeStream = webRequest.GetRequestStream()) { writeStream.Write(request.ContentData, 0, request.ContentData.Length); } } httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); } catch (WebException e) { if (e.Status == WebExceptionStatus.SecureChannelFailure && OsInfo.IsWindows) { SecurityProtocolPolicy.DisableTls12(); } httpWebResponse = (HttpWebResponse)e.Response; if (httpWebResponse == null) { // Workaround for mono not closing connections properly in certain situations. AbortWebRequest(webRequest); // The default messages for WebException on mono are pretty horrible. if (e.Status == WebExceptionStatus.NameResolutionFailure) { throw new WebException($"DNS Name Resolution Failure: '{webRequest.RequestUri.Host}'", e.Status); } else if (e.ToString().Contains("TLS Support not")) { throw new TlsFailureException(webRequest, e); } else if (e.ToString().Contains("The authentication or decryption has failed.")) { throw new TlsFailureException(webRequest, e); } else if (OsInfo.IsNotWindows) { throw new WebException($"{e.Message}: '{webRequest.RequestUri}'", e, e.Status, e.Response); } else { throw; }; } } byte[] data = null; using (var responseStream = httpWebResponse.GetResponseStream()) { if (responseStream != null && responseStream != Stream.Null) { try { data = responseStream.ToBytes(); if (PlatformInfo.IsMono && httpWebResponse.ContentEncoding == "gzip") { using (var compressedStream = new MemoryStream(data)) using (var gzip = new GZipStream(compressedStream, CompressionMode.Decompress)) using (var decompressedStream = new MemoryStream()) { gzip.CopyTo(decompressedStream); data = decompressedStream.ToArray(); } httpWebResponse.Headers.Remove("Content-Encoding"); } } catch (Exception ex) { throw new WebException("Failed to read complete http response", ex, WebExceptionStatus.ReceiveFailure, httpWebResponse); } } } return(new HttpResponse(request, new HttpHeader(httpWebResponse.Headers), data, httpWebResponse.StatusCode)); }
public HttpResponse GetResponse(HttpRequest request, CookieContainer cookies) { var webRequest = (HttpWebRequest)WebRequest.Create((Uri)request.Url); // Deflate is not a standard and could break depending on implementation. // we should just stick with the more compatible Gzip //http://stackoverflow.com/questions/8490718/how-to-decompress-stream-deflated-with-java-util-zip-deflater-in-net webRequest.AutomaticDecompression = DecompressionMethods.GZip; webRequest.Method = request.Method.ToString(); webRequest.UserAgent = request.UseSimplifiedUserAgent ? UserAgentBuilder.UserAgentSimplified : UserAgentBuilder.UserAgent; webRequest.KeepAlive = request.ConnectionKeepAlive; webRequest.AllowAutoRedirect = request.AllowAutoRedirect; webRequest.CookieContainer = cookies; if (request.RequestTimeout != TimeSpan.Zero) { webRequest.Timeout = (int)Math.Ceiling(request.RequestTimeout.TotalMilliseconds); } AddProxy(webRequest, request); if (request.Headers != null) { AddRequestHeaders(webRequest, request.Headers); } if (request.ContentData != null) { webRequest.ContentLength = request.ContentData.Length; using (var writeStream = webRequest.GetRequestStream()) { writeStream.Write(request.ContentData, 0, request.ContentData.Length); } } HttpWebResponse httpWebResponse; try { httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); } catch (WebException e) { if (e.Status == WebExceptionStatus.SecureChannelFailure && OsInfo.IsWindows) { SecurityProtocolPolicy.DisableTls12(); } httpWebResponse = (HttpWebResponse)e.Response; if (httpWebResponse == null) { throw; } } byte[] data = null; using (var responseStream = httpWebResponse.GetResponseStream()) { if (responseStream != null) { data = responseStream.ToBytes(); } } return(new HttpResponse(request, new HttpHeader(httpWebResponse.Headers), data, httpWebResponse.StatusCode)); }