public override void StartLoading()
 {
     if (!UseCache)
     {
         var connectionRequest = (NSMutableUrlRequest)Request.MutableCopy;
         // we need to mark this request with our header so we know not to handle it in +[NSURLProtocol canInitWithRequest:].
         connectionRequest.SetValueForKey("", MtRnCachingUrlHeader);
         var connection = NSUrlConnection.FromRequest(connectionRequest, this);
         Connection = connection;
     }
     else
     {
         var cache = NSKeyedUnarchiver.UnarchiveFile(CachePathForRequest(this.Request)) as MtRnCachedData;
         if (cache != null)
         {
             var data            = cache.Data;
             var response        = cache.Response;
             var redirectRequest = cache.RedirectRequest;
             if (redirectRequest != null)
             {
                 this.Client.Redirected(this, redirectRequest, response);
             }
             else
             {
                 Client.ReceivedResponse(this, response, NSUrlCacheStoragePolicy.NotAllowed);
                 Client.DataLoaded(this, data);
                 Client.FinishedLoading(this);
             }
         }
         else
         {
             this.Client.FailedWithError(NSError.FromDomain("TODO", NSUrlError.CannotConnectToHost));
         }
     }
 }
Пример #2
0
        public void UploadStream(string url, long content_length, Action completed)
        {
            if (url == null)
            {
                throw new ArgumentNullException("url");
            }

            AddHeader("Expect", "100-continue");
            AddHeader("Content-Type", "application/octet-stream");
            AddHeader("Content-Length", content_length.ToString());

            InvokeOnMainThread(delegate {
                try {
                    request = CreateNativePostRequest(url, content_length);
                } catch (Exception e) {
                    Console.WriteLine("Exception uploading stream");
                    Console.WriteLine(e);
                    completed();
                    return;
                }

                url_connection = NSUrlConnection.FromRequest(request, new NativeUrlDelegate((body) => {
                    completed();
                    request.Dispose();
                }, (reason) => {
                    Console.WriteLine("upload failed: " + reason);
                    completed();
                }));
            });
        }
Пример #3
0
        private bool ShouldStartLoad(UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType)
        {
            if (Url != null && request.Url.Equals(Url))
            {
                return(true);
            }

            Url = request.Url;

            if (Url.Scheme.Equals("acs"))
            {
                var b = new StringBuilder(Uri.UnescapeDataString(request.Url.ToString()));
                b.Replace("acs://settoken?token=", string.Empty);

                var token = RequestSecurityTokenResponse.FromJSON(b.ToString());
                _messageHub.Publish(new RequestTokenMessage(this)
                {
                    TokenResponse = token
                });

                DismissViewController(true, null);
            }

            NSUrlConnection.FromRequest(request, new LoginConnectionDelegate(this));

            return(false);
        }
        public override bool ShouldStartLoad(UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType)
        {
            if (null != _controller && _controller.Url != null)
            {
                if (request.Url.Equals(_controller.Url))
                {
                    return(true);
                }
            }

            if (_controller != null)
            {
                _controller.Url = request.Url;

                var scheme = _controller.Url.Scheme;

                if (scheme.Equals("acs"))
                {
                    var b = new StringBuilder(Uri.UnescapeDataString(request.Url.ToString()));
                    b.Replace("acs://settoken?token=", string.Empty);

                    RequestSecurityTokenResponseStore.Instance.RequestSecurityTokenResponse = RequestSecurityTokenResponse.FromJSON(b.ToString());

                    _controller.NavigationController.PopToRootViewController(true);
                }
            }

            NSUrlConnection.FromRequest(request, _urlDelegate);

            return(false);
        }
Пример #5
0
        private async Task <HttpResponseMessage> Send(Uri requestUri, string content, string method, IDictionary <String, String> headers)
        {
            if (null == Certificate)
            {
                throw new ApplicationException("No certificate has been provided. The request is cancelled.");
            }

            _taskSource = new TaskCompletionSource <HttpResponseMessage>();

            var request = new NSMutableUrlRequest(new NSUrl(requestUri.ToString()), NSUrlRequestCachePolicy.ReloadIgnoringCacheData, TimeOut)
            {
                HttpMethod = method,
                Body       = NSData.FromString(content)
            };

            if (null != headers)
            {
                foreach (var header in headers)
                {
                    request[header.Key] = new NSString(header.Value);
                }
            }

            var conn = NSUrlConnection.FromRequest(request, this);

            return(await _taskSource.Task);
        }
Пример #6
0
        public async Task <Stream> ExecuteAsync()
        {
            taskCompletionSource = new TaskCompletionSource <Stream>();

            var req = new NSUrlRequest(new NSUrl(NetworkProvider.WisdomUrl), NSUrlRequestCachePolicy.ReloadIgnoringCacheData, 10);

            NSUrlConnection.FromRequest(req, this);

            return(await taskCompletionSource.Task);
        }
Пример #7
0
        public void HttpSample()
        {
            var req = new NSUrlRequest(new NSUrl(Application.WisdomUrl), NSUrlRequestCachePolicy.ReloadIgnoringCacheData, 10);

            NSUrlConnection.FromRequest(req, this);
        }