private void AuthenticateClient(JsonRpcRequestBuilder requestBuilder, DelugeSettings settings, bool reauthenticate = false) { var authKey = string.Format("{0}:{1}", requestBuilder.BaseUrl, settings.Password); var cookies = _authCookieCache.Find(authKey); if (cookies == null || reauthenticate) { _authCookieCache.Remove(authKey); var authLoginRequest = requestBuilder.Call("auth.login", settings.Password).Build(); var response = _httpClient.Execute(authLoginRequest); var result = Json.Deserialize <JsonRpcResponse <bool> >(response.Content); if (!result.Result) { _logger.Debug("Deluge authentication failed."); throw new DownloadClientAuthenticationException("Failed to authenticate with Deluge."); } _logger.Debug("Deluge authentication succeeded."); cookies = response.GetCookies(); _authCookieCache.Set(authKey, cookies); requestBuilder.SetCookies(cookies); ConnectDaemon(requestBuilder); } else { requestBuilder.SetCookies(cookies); } }
private JsonRpcResponse <TResult> ExecuteRequest <TResult>(JsonRpcRequestBuilder requestBuilder, string method, params object[] arguments) { var request = requestBuilder.Call(method, arguments).Build(); HttpResponse response; try { response = _httpClient.Execute(request); return(Json.Deserialize <JsonRpcResponse <TResult> >(response.Content)); } catch (HttpException ex) { if (ex.Response.StatusCode == HttpStatusCode.RequestTimeout) { _logger.Debug("Deluge timeout during request, daemon connection may have been broken. Attempting to reconnect."); return(new JsonRpcResponse <TResult>() { Error = JToken.Parse("{ Code = 2 }") }); } else { throw new DownloadClientException("Unable to connect to Deluge, please check your settings", ex); } } catch (WebException ex) { throw new DownloadClientUnavailableException("Unable to connect to Deluge, please check your settings", ex); } }