示例#1
0
        private void ConnectDaemon(JsonRpcRequestBuilder requestBuilder)
        {
            var resultConnected = ExecuteRequest <bool>(requestBuilder, "web.connected");

            VerifyResponse(resultConnected);

            if (resultConnected.Result)
            {
                return;
            }

            var resultHosts = ExecuteRequest <List <object[]> >(requestBuilder, "web.get_hosts");

            VerifyResponse(resultHosts);

            if (resultHosts.Result != null)
            {
                // The returned list contains the id, ip, port and status of each available connection. We want the 127.0.0.1
                var connection = resultHosts.Result.FirstOrDefault(v => "127.0.0.1" == (v[1] as string));

                if (connection != null)
                {
                    var resultConnect = ExecuteRequest <object>(requestBuilder, "web.connect", new object[] { connection[0] });
                    VerifyResponse(resultConnect);

                    return;
                }
            }

            throw new DownloadClientException("Failed to connect to Deluge daemon.");
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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);
            }
        }
示例#4
0
        private T ProcessRequest <T>(HadoukenSettings settings, string method, params object[] parameters)
        {
            var baseUrl        = HttpRequestBuilder.BuildBaseUrl(settings.UseSsl, settings.Host, settings.Port, "api");
            var requestBuilder = new JsonRpcRequestBuilder(baseUrl, method, parameters);

            requestBuilder.LogResponseContent = true;
            requestBuilder.NetworkCredential  = new NetworkCredential(settings.Username, settings.Password);
            requestBuilder.Headers.Add("Accept-Encoding", "gzip,deflate");

            var          httpRequest = requestBuilder.Build();
            HttpResponse response;

            try
            {
                response = _httpClient.Execute(httpRequest);
            }
            catch (HttpException ex)
            {
                throw new DownloadClientException("Unable to connect to Hadouken, please check your settings", ex);
            }
            catch (WebException ex)
            {
                throw new DownloadClientUnavailableException("Unable to connect to Hadouken, please check your settings", ex);
            }

            var result = Json.Deserialize <JsonRpcResponse <T> >(response.Content);

            if (result.Error != null)
            {
                throw new DownloadClientException("Error response received from Hadouken: {0}", result.Error.ToString());
            }

            return(result.Result);
        }
        private IEnumerable <IndexerRequest> GetPagedRequests(BroadcastheNetTorrentQuery parameters, int results, int offset)
        {
            var builder = new JsonRpcRequestBuilder(Settings.BaseUrl)
                          .Call("getTorrents", Settings.ApiKey, parameters, results, offset);

            builder.SuppressHttpError = true;

            yield return(new IndexerRequest(builder.Build()));
        }
        private IEnumerable <IndexerRequest> GetPagedRequests(int maxPages, BroadcastheNetTorrentQuery parameters)
        {
            var builder = new JsonRpcRequestBuilder(Settings.BaseUrl)
                          .Call("getTorrents", Settings.ApiKey, parameters, PageSize, 0);

            builder.SuppressHttpError = true;

            for (var page = 0; page < maxPages; page++)
            {
                builder.JsonParameters[3] = page * PageSize;

                yield return(new IndexerRequest(builder.Build()));
            }
        }
示例#7
0
        private JsonRpcRequestBuilder BuildRequest(DelugeSettings settings)
        {
            string url = HttpRequestBuilder.BuildBaseUrl(settings.UseSsl, settings.Host, settings.Port, settings.UrlBase);

            var requestBuilder = new JsonRpcRequestBuilder(url);

            requestBuilder.LogResponseContent = true;

            requestBuilder.Resource("json");
            requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15);

            AuthenticateClient(requestBuilder, settings);

            return(requestBuilder);
        }
示例#8
0
        private IEnumerable <IndexerRequest> GetPagedRequests(int maxPages, BroadcastheNetTorrentQuery parameters)
        {
            if (parameters == null)
            {
                parameters = new BroadcastheNetTorrentQuery();
            }

            var builder = new JsonRpcRequestBuilder(Settings.BaseUrl, "getTorrents", new object[] { Settings.ApiKey, parameters, PageSize, 0 });

            builder.SupressHttpError = true;

            for (var page = 0; page < maxPages; page++)
            {
                builder.Parameters[3] = page * PageSize;

                yield return(new IndexerRequest(builder.Build("")));
            }
        }
示例#9
0
        private T ProcessRequest <T>(NzbgetSettings settings, string method, params object[] parameters)
        {
            var baseUrl = HttpRequestBuilder.BuildBaseUrl(settings.UseSsl, settings.Host, settings.Port, "jsonrpc");

            var requestBuilder = new JsonRpcRequestBuilder(baseUrl, method, parameters);

            requestBuilder.LogResponseContent = true;
            requestBuilder.NetworkCredential  = new NetworkCredential(settings.Username, settings.Password);

            var httpRequest = requestBuilder.Build();

            HttpResponse response;

            try
            {
                response = _httpClient.Execute(httpRequest);
            }
            catch (HttpException ex)
            {
                if (ex.Response.StatusCode == HttpStatusCode.Unauthorized)
                {
                    throw new DownloadClientAuthenticationException("Authentication failed for NzbGet, please check your settings", ex);
                }

                throw new DownloadClientException("Unable to connect to NzbGet. " + ex.Message, ex);
            }
            catch (WebException ex)
            {
                throw new DownloadClientUnavailableException("Unable to connect to NzbGet. " + ex.Message, ex);
            }

            var result = Json.Deserialize <JsonRpcResponse <T> >(response.Content);

            if (result.Error != null)
            {
                throw new DownloadClientException("Error response received from nzbget: {0}", result.Error.ToString());
            }

            return(result.Result);
        }
示例#10
0
        private string ProcessRequest(XbmcSettings settings, string method, params object[] parameters)
        {
            var url            = string.Format(@"http://{0}/jsonrpc", settings.Address);
            var requestBuilder = new JsonRpcRequestBuilder(url, method, parameters);

            requestBuilder.LogResponseContent = true;

            var request = requestBuilder.Build();

            if (!settings.Username.IsNullOrWhiteSpace())
            {
                request.AddBasicAuthentication(settings.Username, settings.Password);
            }

            var response = _httpClient.Execute(request);

            _logger.Trace("Response: {0}", response.Content);

            CheckForError(response);

            return(response.Content);
        }
示例#11
0
        private string ProcessRequest(XbmcSettings settings, string method, params object[] parameters)
        {
            var url            = HttpRequestBuilder.BuildBaseUrl(settings.UseSsl, settings.Host, settings.Port, "jsonrpc");
            var requestBuilder = new JsonRpcRequestBuilder(url, method, parameters);

            requestBuilder.LogResponseContent = true;

            var request = requestBuilder.Build();

            if (!settings.Username.IsNullOrWhiteSpace())
            {
                request.Credentials = new BasicNetworkCredential(settings.Username, settings.Password);
            }

            var response = _httpClient.Execute(request);

            _logger.Trace("Response: {0}", response.Content);

            CheckForError(response);

            return(response.Content);
        }