protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
#if XAMARIN_MODERN
            Volatile.Write (ref sentRequest, true);
#endif
            var headers = request.Headers as IEnumerable<KeyValuePair<string, IEnumerable<string>>>;
            var ms = new MemoryStream();

            if (request.Content != null) {
                await request.Content.CopyToAsync(ms).ConfigureAwait(false);
                headers = headers.Union(request.Content.Headers).ToArray();
            }

            var rq = new NSMutableUrlRequest() {
                AllowsCellularAccess = true,
                Body = NSData.FromArray(ms.ToArray()),
                CachePolicy = (!this.DisableCaching ? NSUrlRequestCachePolicy.UseProtocolCachePolicy : NSUrlRequestCachePolicy.ReloadIgnoringCacheData),
                Headers = headers.Aggregate(new NSMutableDictionary(), (acc, x) => {
                    acc.Add(new NSString(x.Key), new NSString(String.Join(getHeaderSeparator(x.Key), x.Value)));
                    return acc;
                }),
                HttpMethod = request.Method.ToString().ToUpperInvariant(),
                Url = NSUrl.FromString(request.RequestUri.AbsoluteUri),
            };

            var op = session.CreateDataTask(rq);

            cancellationToken.ThrowIfCancellationRequested();

            var ret = new TaskCompletionSource<HttpResponseMessage>();
            cancellationToken.Register(() => ret.TrySetCanceled());

            lock (inflightRequests) {
                inflightRequests[op] = new InflightOperation() {
                    FutureResponse = ret,
                    Request = request,
#if !XAMARIN_MODERN
                    Progress = getAndRemoveCallbackFromRegister(request),
#endif
                    ResponseBody = new ByteArrayListStream(),
                    CancellationToken = cancellationToken,
                };
            }

            op.Resume();
            return await ret.Task.ConfigureAwait(false);
        }
		private void LoadAlbumInformation ()
		{
			var albumUrlPath = "http://api.dribbble.com/" + _apiPath; 

			// Nimbus processors allow us to perform complex computations on a separate thread before
			// returning the object to the main thread. This is useful here because we perform sorting
			// operations and pruning on the results.
			var url = new NSUrl (albumUrlPath);
			var request = new NSMutableUrlRequest (url);

//			public delegate void ImageRequestOperationWithRequestSuccess1(UIImage image);
//			public delegate void ImageRequestOperationWithRequestSuccess2(NSUrlRequest request, NSHttpUrlResponse response, UIImage image);
//			public delegate void ImageRequestOperationWithRequestFailure(NSUrlRequest request, NSHttpUrlResponse response, NSError error);
//			public delegate UIImage ImageRequestOperationWithRequestProcessingBlock(UIImage image);
//			public delegate void AFJSONRequestOperationJsonRequestOperationWithRequestSuccess(NSUrlRequest request, NSHttpUrlResponse response, NSObject json);
//			public delegate void AFJSONRequestOperationJsonRequestOperationWithRequestFailure(NSUrlRequest request, NSHttpUrlResponse response, NSError error, NSObject json);
//			[BaseType (typeof (AFHTTPRequestOperation))]

			var albumRequest = AFJSONRequestOperation.JsonRequestOperationWithRequest (request, 
			                                                                           (req, res, json) => {
				BlockForAlbumProcessing (req, res, (NSDictionary)json);
			}, (req, resp, error, json) => {
				Console.WriteLine ("Error");
			});

			Queue.AddOperation (albumRequest);
		}
Example #3
0
        /// <summary>
        /// Create a new instance of NativeRequest, add the headers to the request
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static NSMutableUrlRequest CreateNativeRequest(string url)
        {
            var request = new NSMutableUrlRequest();

            if (url == null)
            {
                Logger.Logg("Empty URL, could not create NSUrl");
            }
            else
            {
                NSUrl nsurl = NSUrl.FromString(url);
                request = new NSMutableUrlRequest(nsurl);

                if (url.Contains(AppContext.Domain))
                {
                    if (Session.LoggedIn)
                    {
                        request["Cookie"] = Session.CookieJar.ToString();
                        request["ApiKey"] = AppContext.ApiKey;
                    }
                }

                //If we have a IDporten cookie we add that as well (increased performance)
                if (Session.IDPortenCookie != null)
                {
                    request["IDPSecurityPortal"] = Session.IDPortenCookie.Value;
                }
            }

            return request;
        }
		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 ();
				}));
			});
		}
        public void Open(string url, string protocol = null, string authToken = null)
        {
            try
            {
                if (_client != null)
                    Close();

                NSUrlRequest req = new NSUrlRequest(new NSUrl(url));
                if (!string.IsNullOrEmpty(authToken))
                {
                    NSMutableUrlRequest mutableRequest = new NSMutableUrlRequest(new NSUrl(url));
                    mutableRequest["Authorization"] = authToken;
                    req = (NSUrlRequest)mutableRequest.Copy();
                }

                if (string.IsNullOrEmpty(protocol))
                    _client = new WebSocket(req);
                else
                    _client = new WebSocket(req, new NSObject[] { new NSString(protocol) });

                _client.ReceivedMessage += _client_ReceivedMessage;
                _client.WebSocketClosed += _client_WebSocketClosed;
                _client.WebSocketFailed += _client_WebSocketFailed;
                _client.WebSocketOpened += _client_WebSocketOpened;

                _client.Open();
            }
            catch (Exception ex)
            {
                OnError(ex.Message);
            }
        }
        void loadURL(string url)
        {
            var nsurl = new NSUrl(url);
                    var request = new NSMutableUrlRequest(nsurl);

                    /* 20100603 10:2 ���߂���
                    request.Headers = new NSDictionary();
                    request.Headers[new NSString("User-Agent")] = new NSString("SomeOne/1.0");
                    request.Headers[new NSString("User_Agent")] = new NSString("SomeOne/1.0");
                    */

                    /** 20100603 10:16 �_������
                    Selector selSetValueForHttpHeaderField = new Selector("setValue:forHTTPHeaderField:");
                    Messaging.void_objc_msgSend_IntPtr_IntPtr(request.Handle, selSetValueForHttpHeaderField.Handle,
                        new NSString("My-Special-Agent/1.0").Handle,
                        new NSString("User-Agent").Handle);
                     */

                    /* 20100602 ���߂���
                    Selector selSetValueForHttpHeaderField = new Selector("setValue:forHTTPHeaderField:");
                    // Set the User_Agent HTTP Header
                    Messaging.void_objc_msgSend_IntPtr_IntPtr(request.Handle, selSetValueForHttpHeaderField.Handle,
                        new NSString("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0").Handle,
                        new NSString("User_Agent").Handle);

                    Messaging.void_objc_msgSend_IntPtr_IntPtr(request.Handle, selSetValueForHttpHeaderField.Handle,
                        new NSString("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0").Handle,
                        new NSString("User-Agent").Handle);

                    Messaging.void_objc_msgSend_IntPtr_IntPtr(request.Handle, selSetValueForHttpHeaderField.Handle,
                        new NSString("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0").Handle,
                        new NSString("userAgent").Handle);

                    Messaging.void_objc_msgSend_IntPtr_IntPtr(request.Handle, selSetValueForHttpHeaderField.Handle,
                        new NSString("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0").Handle,
                        new NSString("user_agent").Handle);

                    Messaging.void_objc_msgSend_IntPtr_IntPtr(request.Handle, selSetValueForHttpHeaderField.Handle,
                        new NSString("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0").Handle,
                        new NSString("user-agent").Handle);
                    */
                    //request["User_Agent"] = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0";
                    //request._SetValue("User_Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0");
                    //request.Headers = new NSDictionary();
                    //request.Headers[new NSString("User_Agent")] = new NSString("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0");
                    _browser.LoadRequest(request);
        }
Example #7
0
		public static void Launch (string url, bool callbackOnMainThread, Action<string> callback)
		{
			Util.PushNetworkActive ();
			Uri uri = new Uri (url);
			
			Util.Log(uri.OriginalString);
			
			// Wake up 3G if it has been more than 3 minutes
			lock (minuteLock){
				var nowTicks = DateTime.UtcNow.Ticks;
				if (nowTicks-lastLaunchTick > TimeSpan.TicksPerMinute*3)
					MonoTouch.ObjCRuntime.Runtime.StartWWAN (uri);
				lastLaunchTick = nowTicks;
			}			
			
			var req = new NSMutableUrlRequest(new NSUrl(url), NSUrlRequestCachePolicy.ReloadIgnoringCacheData,5);			
			//req["User-Agent"]=_UserAgent;			
			var mydelegate = new EscozUrlDelegate(url,(result)=>
           { 				
				try
				{
					lock (queue)
						pending--;
					
					Util.PopNetworkActive ();					
					
					if (callbackOnMainThread)
						invoker.BeginInvokeOnMainThread (delegate { callback(result); });
					else 
						callback(result);
					
				} catch (Exception e){
					Util.LogException ("Launch", e);
				}
				lock (queue){
					if (queue.Count > 0){
						var nextRequest = queue.Dequeue ();
						Launch (nextRequest.Url, nextRequest.CallbackOnMainThread, nextRequest.Callback);
					}
				}
			});
			//new NSUrlConnectionWrapper(req, mydelegate);
			invoker.BeginInvokeOnMainThread(()=>
            {
				new NSUrlConnection(req, mydelegate, true);
			});
		}
        public static void ApplyHeadersTo(NSMutableUrlRequest mutableRequest)
        {
            if (!mutableRequest.Headers.ContainsKey(new NSString(BrokerConstants.ChallengeHeaderKey)))
            {
                mutableRequest[BrokerConstants.ChallengeHeaderKey] = BrokerConstants.ChallengeHeaderValue;
            }

            if (AdditionalHeaders!=null)
            {
                foreach (var key in AdditionalHeaders.Keys)
                {
                    mutableRequest.Headers[new NSString(key)] = new NSString(AdditionalHeaders[key]);
                }

                AdditionalHeaders = null;
            }
        }
Example #9
0
        private static RxTerm RxTermViaNSURLConnectionAsync(string rxcui, Action <RxTerm> callback = null)
        {
            var rxTerm = new RxTerm();

            try {
                var request = new NSMutableUrlRequest(new NSUrl(string.Format("http://rxnav.nlm.nih.gov/REST/RxTerms/rxcui/{0}/allinfo", rxcui)),
                                                      NSUrlRequestCachePolicy.ReloadRevalidatingCacheData, 20);
                request["Accept"] = "application/json";

                var connectionDelegate = new RxTermNSURLConnectionDelegate();
                var connection         = new NSUrlConnection(request, connectionDelegate);
                connection.Start();
            } catch (Exception ex) {
                Console.WriteLine("Problem getting data for concept: {0} -- Exception: {1}", rxcui, ex.Message + ex.StackTrace);
            }

            return(rxTerm);
        }
Example #10
0
		Task<bool> SendData (NSUrl url, string uploadData)
		{
			var tcs = new TaskCompletionSource<bool> ();
			var request = new NSMutableUrlRequest (url);
			request.HttpMethod = "POST";
			var rv = NSUrlSession.SharedSession.CreateUploadTask (request, NSData.FromString (uploadData), (NSData data, NSUrlResponse response, NSError error) =>
			{
				if (error != null) {
					Console.WriteLine ("Failed to send data to {0}: {1}", url.AbsoluteString, error);
					tcs.SetResult (false);
				} else {
					//Console.WriteLine ("Succeeded sending data to {0}", url.AbsoluteString);
					tcs.SetResult (true);
				}
			});
			rv.Resume ();
			return tcs.Task;
		}
Example #11
0
        private void NavigateTo3DSPage()
        {
            _webView.Hidden     = false;
            _webView.LoadError -= WebView_LoadError;
            _webView.LoadError += WebView_LoadError;

            var request = new NSMutableUrlRequest(new NSUrl(_3dsUrl));

            request.HttpMethod        = "POST";
            request.Body              = NSData.FromString(_postContent.ReadAsStringAsync().Result);
            request["Content-Length"] = request.Body.Length.ToString();

            foreach (var kv in _postContent.Headers)
            {
                request[kv.Key] = string.Join(" ", kv.Value);
            }

            _webView.LoadRequest(request);
        }
Example #12
0
 /// <summary>
 /// Attaches a TLS certificate to be used for encryption of connection.
 /// </summary>
 /// <param name="url">The server url</param>
 /// <param name="nsUrlRequest">The url request to encrypt</param>
 private void AttachCertificate(string url, NSMutableUrlRequest nsUrlRequest)
 {
     if (url.ToLower().Contains("raincloud223.aquamonix.com.au"))
     {
         var certPath = NSBundle.MainBundle.PathForResource(RaincloudCertName, RaincloudCertType);
         //var certData = NSData.FromFile(certPath);
         //Security.SecCertificate secCert =
         //var certDataRef = (CFDataRef)certData;
         var cert = new Security.SecCertificate(new System.Security.Cryptography.X509Certificates.X509Certificate2(System.IO.File.ReadAllBytes(certPath)));
         //var certPtr = SecCertificateCopyData(cert.Handle);
         nsUrlRequest.SetSSLPinnedCertificates(new NSObject[] { ObjCRuntime.Runtime.GetNSObject(cert.Handle) });
     }
     else
     {
         var certPath = NSBundle.MainBundle.PathForResource(DefaultCertName, DefaultCertType);
         var cert     = new Security.SecCertificate(System.Security.Cryptography.X509Certificates.X509Certificate2.CreateFromCertFile(certPath));
         nsUrlRequest.SetSSLPinnedCertificates(new NSObject[] { ObjCRuntime.Runtime.GetNSObject(cert.Handle) });
     }
 }
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            if (NativeView != null)
            {
                var mywebview = Element as PayWebView;

                var request = new NSMutableUrlRequest(new NSUrl(new NSString(mywebview.url)));
                request.Body       = mywebview.PostData;
                request.HttpMethod = "POST";

                NSMutableDictionary dic = new NSMutableDictionary();
                dic.Add(new NSString("Content-Type"), new NSString("application/json"));
                request.Headers = dic;

                LoadRequest(request);
            }
        }
Example #14
0
        public static NSMutableUrlRequest ToNative(this HttpTransferRequest request)
        {
            var url    = NSUrl.FromString(request.Uri);
            var native = new NSMutableUrlRequest(url)
            {
                HttpMethod           = request.HttpMethod.Method,
                AllowsCellularAccess = request.UseMeteredConnection,
            };

            if (request.Headers.Any())
            {
                native.Headers = NSDictionary.FromObjectsAndKeys(
                    request.Headers.Values.ToArray(),
                    request.Headers.Keys.ToArray()
                    );
            }

            return(native);
        }
Example #15
0
        private void PubliceRequestMethod(NSMutableUrlRequest request)
        {
            NSError err;
            // 设置header
            NSMutableDictionary header = new NSMutableDictionary();

            header.SetValueForKey((NSString)"application/json; charset=utf-8", (NSString)"Content-Type");
            request.Headers = header;

            NSUrlSession session = NSUrlSession.FromConfiguration(NSUrlSessionConfiguration.DefaultSessionConfiguration, (INSUrlSessionDelegate)this, NSOperationQueue.CurrentQueue);

            NSUrlSessionDataTask task = session.CreateDataTask(request, (data, response, error) =>
            {
                if (error != null)
                {
                    Console.WriteLine(error.Description);
                }
                else
                {
                    NSHttpUrlResponse resp = (NSHttpUrlResponse)response;
                    NSDictionary dicData   = (NSDictionary)NSJsonSerialization.Deserialize(data, NSJsonReadingOptions.MutableLeaves, out err);
                    if (dicData == null)
                    {
                        return;
                    }
                    NSObject code = dicData.ValueForKey((NSString)"code");
                    if (resp.StatusCode == 200 && code.ToString().Equals("0"))
                    {
                        NetworkHelperRDelegate(dicData, resp, null);
                        Console.WriteLine(resp.Description);
                    }
                    else
                    {
                        NetworkHelperRDelegate(dicData, resp, err);
                        string message = dicData.ValueForKey((NSString)"message").ToString();
                        Console.WriteLine(dicData.Description);
                    }
                }
            });

            task.Resume();
        }
        protected virtual NSUrlRequest CreateRequest(TaskConfiguration config)
        {
            var url     = NSUrl.FromString(config.Uri);
            var request = new NSMutableUrlRequest(url)
            {
                HttpMethod           = config.HttpMethod,
                AllowsCellularAccess = config.UseMeteredConnection
            };

            if (!String.IsNullOrWhiteSpace(config.PostData))
            {
                request.Body = NSData.FromString(config.PostData);
            }

            var headerDictionary = NSDictionary.FromObjectsAndKeys(config.Headers.Values.ToArray(), config.Headers.Keys.ToArray());

            request.Headers = headerDictionary;

            return(request);
        }
        void NSUrlSessionButton_TouchUpInside(object sender, EventArgs args)
        {
            NSUrlSessionConfiguration sessionConfig = NSUrlSessionConfiguration.DefaultSessionConfiguration;

            sessionConfig.AllowsCellularAccess          = true;
            sessionConfig.TimeoutIntervalForRequest     = 30.0;
            sessionConfig.TimeoutIntervalForResource    = 60.0;
            sessionConfig.HttpMaximumConnectionsPerHost = 1;

            NSUrl url = NSUrl.FromString(URLRequestBin);
            NSMutableUrlRequest urlRequest = new NSMutableUrlRequest(url, NSUrlRequestCachePolicy.ReloadIgnoringLocalCacheData, 60.0);

            urlRequest.HttpMethod = "POST";
            urlRequest.Body       = NSData.FromString("data=This is some NSURLSession data");

            NSUrlSession         session  = NSUrlSession.FromConfiguration(sessionConfig);
            NSUrlSessionDataTask dataTask = session.CreateDataTask(urlRequest);

            dataTask.Resume();
        }
		protected override void Dispose (bool disposing)
		{
			if (url_connection != null) {
				url_connection.Dispose ();
				url_connection = null;
			}
			
			if (request != null) {
				request.BodyStream = null;
				request.Dispose ();
				request = null;
			}
			
			if (random_input_stream != null) {
				random_input_stream.Dispose ();
				random_input_stream = null;	
			}
			
			base.Dispose (disposing);
		}
        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var headers = request.Headers as IEnumerable<KeyValuePair<string, IEnumerable<string>>>;
            var ms = new MemoryStream();

            if (request.Content != null) {
                await request.Content.CopyToAsync(ms).ConfigureAwait(false);
                headers = headers.Union(request.Content.Headers).ToArray();
            }

            var rq = new NSMutableUrlRequest() {
                AllowsCellularAccess = true,
                Body = NSData.FromArray(ms.ToArray()),
                CachePolicy = NSUrlRequestCachePolicy.UseProtocolCachePolicy,
                Headers = headers.Aggregate(new NSMutableDictionary(), (acc, x) => {
                    acc.Add(new NSString(x.Key), new NSString(x.Value.LastOrDefault()));
                    return acc;
                }),
                HttpMethod = request.Method.ToString().ToUpperInvariant(),
                Url = NSUrl.FromString(request.RequestUri.AbsoluteUri),
            };

            var op = session.CreateDataTask(rq);

            cancellationToken.ThrowIfCancellationRequested();

            var ret = new TaskCompletionSource<HttpResponseMessage>();
            cancellationToken.Register(() => ret.TrySetCanceled());

            lock (inflightRequests) {
                inflightRequests[op] = new InflightOperation() {
                    FutureResponse = ret,
                    Request = request,
                    ResponseBody = new ByteArrayListStream(),
                    CancellationToken = cancellationToken,
                };
            }

            op.Resume();
            return await ret.Task.ConfigureAwait(false);
        }
Example #20
0
        public void Open(string url, string protocol, IDictionary <string, string> headers = null)
        {
            try
            {
                if (_client != null)
                {
                    Close();
                }

                NSUrlRequest req = new NSUrlRequest(new NSUrl(url));
                if (headers?.Count > 0)
                {
                    NSMutableUrlRequest mutableRequest = new NSMutableUrlRequest(new NSUrl(url));
                    foreach (var header in headers)
                    {
                        mutableRequest[header.Key] = header.Value;
                    }
                    req = (NSUrlRequest)mutableRequest.Copy();
                }

                if (string.IsNullOrEmpty(protocol))
                {
                    _client = new WebSocket(req);
                }
                else
                {
                    _client = new WebSocket(req, new NSObject[] { new NSString(protocol) });
                }

                _client.ReceivedMessage += _client_ReceivedMessage;
                _client.WebSocketClosed += _client_WebSocketClosed;
                _client.WebSocketFailed += _client_WebSocketFailed;
                _client.WebSocketOpened += _client_WebSocketOpened;

                _client.Open();
            }
            catch (Exception ex)
            {
                OnError(ex);
            }
        }
        internal static void SummonThreeDSecure(PaymentRequiresThreeDSecureModel threedDSecureReceipt, SecureWebView secureWebView)
        {
            secureWebView.ReceiptID = threedDSecureReceipt.ReceiptId;

            NSCharacterSet allowedCharecterSet = NSCharacterSet.FromString(@":/=,!$&'()*+;[]@#?").InvertedSet;
            NSString       paReq        = new NSString(threedDSecureReceipt.PaReq);
            var            encodedPaReq = paReq.CreateStringByAddingPercentEncoding(allowedCharecterSet);

            NSString termUrl        = new NSString("judo1234567890://threedsecurecallback");
            var      encodedTermUrl = termUrl.CreateStringByAddingPercentEncoding(allowedCharecterSet);


            NSUrl url = new NSUrl(threedDSecureReceipt.AcsUrl);

            NSMutableUrlRequest req = new NSMutableUrlRequest(url);

            NSString postString = new NSString("MD=" + threedDSecureReceipt.Md + "&PaReq=" + encodedPaReq + "&TermUrl=" + encodedTermUrl + "");
            NSData   postData   = postString.Encode(NSStringEncoding.UTF8);

            req.HttpMethod = "POST";
            req.Body       = postData;

            try {
                DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => {
                    secureWebView.LoadRequest(req);

                    LoadingScreen.HideLoading();
                    secureWebView.Hidden = false;
                });
            } catch (Exception e) {
                if (secureWebView._failureCallback != null)
                {
                    var judoError = new JudoError {
                        Exception = e
                    };
                    secureWebView.CloseView();
                    secureWebView._failureCallback(judoError);
                }
            }
        }
		NSMutableUrlRequest CreateNativePostRequest (string url, long content_length)
		{
			NSUrl nsurl = NSUrl.FromString (url);
			
			if (nsurl == null)
				throw new Exception ("Invalid upload URL, could not create NSUrl from: '" + url + "'.");
			
			NSMutableUrlRequest request = new NSMutableUrlRequest (nsurl);
					
			request.HttpMethod = "POST";

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

			return request;
		}
        private void LoadInternetContent()
        {
            if (Control == null || Element == null)
            {
                return;
            }

            var headers = new NSMutableDictionary();

            Element.LocalRegisteredHeaders
            .Concat(HybridWebViewControl.GlobalRegisteredHeaders.Where(_ => Element.EnableGlobalHeaders))
            .Where(header => !headers.ContainsKey((NSString)header.Key))
            .ForEach(header => headers.Add((NSString)header.Key, (NSString)header.Value));

            var url     = new NSUrl(Element.Source);
            var request = new NSMutableUrlRequest(url)
            {
                Headers = headers
            };

            Control.LoadRequest(request);
        }
        private void LoadMessageBody(UAInboxMessage message)
        {
            var request = new NSMutableUrlRequest(message.MessageBodyURL);

            UAMessageCenter.Shared.User.GetUserData((UAUserData userData) =>
            {
                if (userData == null)
                {
                    return;
                }

                var auth = UAUtils.AuthHeaderString(userData.Username, userData.Password);

                NSMutableDictionary dict = new NSMutableDictionary();
                dict.Add(new NSString("Authorization"), new NSString(auth));
                request.Headers = dict;

                webView.LoadRequest(request);

                messagePage.OnRendererLoadStarted(messageId);
            });
        }
        /// <summary>
        /// Crea consulta rest.
        /// </summary>
        /// <returns>Request.</returns>
        /// <param name="uri">URI data.</param>
        private NSMutableUrlRequest CreateRequest(URIData uri)
        {
            // Convierto a UTF8
            string converted = ((NSString)(url + uri.Url)).CreateStringByAddingPercentEscapes(NSStringEncoding.UTF8);

            // Method
            NSMutableUrlRequest request = new NSMutableUrlRequest(NSUrl.FromString(converted))
            {
                HttpMethod = uri.GetMethod()
            };

            // Accept
            if (uri.GetAccept() != null)
            {
                request["Accept"] = uri.GetAccept();
            }

            // Content-Type
            if (uri.GetContentType() != null)
            {
                request["Content-Type"] = uri.GetContentType();
            }

            // Authorization
            if (uri.Auth != 0)
            {
                request["Authorization"] = token;
            }

            // Body
            if (uri.Body != null)
            {
                request.Body = uri.Body;
            }

            // Devuelvo request
            return(request);
        }
Example #26
0
        async Task <NSUrlRequest> CreateRequest(HttpRequestMessage request)
        {
            var stream  = Stream.Null;
            var headers = request.Headers as IEnumerable <KeyValuePair <string, IEnumerable <string> > >;

            if (request.Content != null)
            {
                stream = await request.Content.ReadAsStreamAsync().ConfigureAwait(false);

                headers = headers.Union(request.Content.Headers).ToArray();
            }

            var nsrequest = new NSMutableUrlRequest {
                AllowsCellularAccess = true,
                CachePolicy          = DisableCaching ? NSUrlRequestCachePolicy.ReloadIgnoringCacheData : NSUrlRequestCachePolicy.UseProtocolCachePolicy,
                HttpMethod           = request.Method.ToString().ToUpperInvariant(),
                Url     = NSUrl.FromString(request.RequestUri.AbsoluteUri),
                Headers = headers.Aggregate(new NSMutableDictionary(), (acc, x) => {
                    acc.Add(new NSString(x.Key), new NSString(string.Join(GetHeaderSeparator(x.Key), x.Value)));
                    return(acc);
                })
            };

            if (stream != Stream.Null)
            {
                // HttpContent.TryComputeLength is `protected internal` :-( but it's indirectly called by headers
                var length = request.Content.Headers.ContentLength;
                if (length.HasValue && (length <= MaxInputInMemory))
                {
                    nsrequest.Body = NSData.FromStream(stream);
                }
                else
                {
                    nsrequest.BodyStream = new WrappedNSInputStream(stream);
                }
            }
            return(nsrequest);
        }
        void LoadInternetContent()
        {
            if (Control == null || Element == null)
            {
                return;
            }

            var headers = new NSMutableDictionary();

            foreach (var header in Element.LocalRegisteredHeaders)
            {
                var key = new NSString(header.Key);
                if (!headers.ContainsKey(key))
                {
                    headers.Add(key, new NSString(header.Value));
                }
            }

            if (Element.EnableGlobalHeaders)
            {
                foreach (var header in FormsWebView.GlobalRegisteredHeaders)
                {
                    var key = new NSString(header.Key);
                    if (!headers.ContainsKey(key))
                    {
                        headers.Add(key, new NSString(header.Value));
                    }
                }
            }

            var url     = new NSUrl(Element.Source);
            var request = new NSMutableUrlRequest(url)
            {
                Headers = headers
            };

            Control.LoadRequest(request);
        }
Example #28
0
        public void Open(string url, string protocol = null, string authToken = null)
        {
            try
            {
                if (_client != null)
                {
                    Close();
                }

                NSUrlRequest req = new NSUrlRequest(new NSUrl(url));
                if (!string.IsNullOrEmpty(authToken))
                {
                    NSMutableUrlRequest mutableRequest = new NSMutableUrlRequest(new NSUrl(url));
                    mutableRequest["Authorization"] = authToken;
                    req = (NSUrlRequest)mutableRequest.Copy();
                }

                if (string.IsNullOrEmpty(protocol))
                {
                    _client = new WebSocket(req);
                }
                else
                {
                    _client = new WebSocket(req, new NSObject[] { new NSString(protocol) });
                }

                _client.ReceivedMessage += _client_ReceivedMessage;
                _client.WebSocketClosed += _client_WebSocketClosed;
                _client.WebSocketFailed += _client_WebSocketFailed;
                _client.WebSocketOpened += _client_WebSocketOpened;

                _client.Open();
            }
            catch (Exception ex)
            {
                OnError(ex.Message);
            }
        }
Example #29
0
        public void StartDownload(NSUrlSession session, bool allowsCellularAccess)
        {
            using (var downloadUrl = NSUrl.FromString(Url))
                using (var request = new NSMutableUrlRequest(downloadUrl)) {
                    if (Headers != null)
                    {
                        var headers = new NSMutableDictionary();
                        foreach (var header in Headers)
                        {
                            headers.SetValueForKey(
                                new NSString(header.Value),
                                new NSString(header.Key)
                                );
                        }
                        request.Headers = headers;
                    }

                    request.AllowsCellularAccess = allowsCellularAccess;

                    Task = session.CreateDownloadTask(request);
                    Task.Resume();
                }
        }
            void StartDownload(NSUrl url, WebViewAction target)
            {
                if (!owner.eventsHandler.OnStartDownload(url))
                {
                    return;
                }
                UrlSessionDelegate @delegate = new UrlSessionDelegate()
                {
                    owner = owner
                };

                @delegate.session = NSUrlSession.FromConfiguration(
                    NSUrlSessionConfiguration.DefaultSessionConfiguration,
                    (INSUrlSessionDelegate)@delegate, null);
                var request = new NSMutableUrlRequest(url);

                if (target.MimeType != null)
                {
                    request["Accept"] = target.MimeType;
                }
                @delegate.task = @delegate.session.CreateDownloadTask(request);
                @delegate.task.Resume();
            }
Example #31
0
        protected override void Dispose(bool disposing)
        {
            if (url_connection != null)
            {
                url_connection.Dispose();
                url_connection = null;
            }

            if (request != null)
            {
                request.BodyStream = null;
                request.Dispose();
                request = null;
            }

            if (random_input_stream != null)
            {
                random_input_stream.Dispose();
                random_input_stream = null;
            }

            base.Dispose(disposing);
        }
Example #32
0
        protected virtual NSUrlRequest CreateRequest(TaskConfiguration config)
        {
            var url     = NSUrl.FromString(config.Uri);
            var request = new NSMutableUrlRequest(url)
            {
                HttpMethod           = config.HttpMethod,
                AllowsCellularAccess = config.UseMeteredConnection
            };

            if (!String.IsNullOrWhiteSpace(config.PostData))
            {
                request.Body = NSData.FromString(config.PostData);
            }

            foreach (var header in config.Headers)
            {
                request.Headers.SetValueForKey(
                    new NSString(header.Value),
                    new NSString(header.Key)
                    );
            }
            return(request);
        }
Example #33
0
        Task <bool> SendData(NSUrl url, string uploadData)
        {
            var tcs     = new TaskCompletionSource <bool> ();
            var request = new NSMutableUrlRequest(url);

            request.HttpMethod = "POST";
            var rv = NSUrlSession.SharedSession.CreateUploadTask(request, NSData.FromString(uploadData), (NSData data, NSUrlResponse response, NSError error) =>
            {
                if (error != null)
                {
                    Console.WriteLine("Failed to send data to {0}: {1}", url.AbsoluteString, error);
                    tcs.SetResult(false);
                }
                else
                {
                    //Console.WriteLine ("Succeeded sending data to {0}", url.AbsoluteString);
                    tcs.SetResult(true);
                }
            });

            rv.Resume();
            return(tcs.Task);
        }
        public override void Execute(FormDialogViewController controller, Element element, Action completed)
        {
            controller.SetValue("temperature", "");
            controller.SetValue("humidity", "");
            controller.SetValue("windspeed", "");

            var request = new NSMutableUrlRequest(new NSUrl("http://ws.geonames.org/weatherIcaoJSON?ICAO=KORD"), NSUrlRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData, 10);

            new UrlConnection("weather", request, (result) => {
                var json    = JsonObject.Parse(result);
                var weather = json["weatherObservation"];

                controller.SetValue("temperature", weather["temperature"].CleanString() + " celsius");
                controller.SetValue("humidity", weather["humidity"].CleanString() + "%");
                controller.SetValue("windspeed", weather["windSpeed"].CleanString() + " km/h");

                controller.Reload();
                completed();
            }, (error) => {
                controller.NetworkFailed(error);
                completed();
            });
        }
        void HandleSelectUpload(object sender, UIButtonEventArgs args)
        {
            this.sheet.Dismissed -= this.HandleSelectUpload;
            this.sheet            = null;

            string localFilename = args.ButtonIndex <= 3 ? GetLocalPathForImage(args.ButtonIndex + 1) : null;
            var    filename      = Path.GetFileName(localFilename);
            var    hostUrl       = NSUrl.FromString($"http://{AppDelegate.HOST_ADDRESS}:{AppDelegate.HOST_PORT}/{filename}");

            Console.WriteLine($"Host URL: {hostUrl}");

            var request = new NSMutableUrlRequest(hostUrl)
            {
                HttpMethod = "PUT"
            };

            var keys    = new object[] { "Content-Type" };
            var objects = new object[] { "image/png" };

            request.Headers = NSDictionary.FromObjectsAndKeys(objects, keys);

            this.Manager.CreateFileUpload(request, localFilename);
        }
		public override void Execute (FormDialogViewController controller, Element element, Action completed)
		{
			controller.SetValue("temperature", "");
			controller.SetValue("humidity", "");
			controller.SetValue("windspeed", "");
			
			var request = new NSMutableUrlRequest(new NSUrl("http://ws.geonames.org/weatherIcaoJSON?ICAO=KORD"), NSUrlRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData, 10);
			
			new UrlConnection("weather", request, (result)=>{
				var json = JsonObject.Parse(result);
				var weather = json["weatherObservation"];
				
				controller.SetValue("temperature", weather["temperature"].CleanString()+ " celsius");
				controller.SetValue("humidity", weather["humidity"].CleanString() + "%");
				controller.SetValue("windspeed", weather["windSpeed"].CleanString()+" km/h");
				
				controller.Reload();
				completed();
				
			}, (error)=>{
				controller.NetworkFailed(error);
				completed();
			});
		}
Example #37
0
 private async Task <string> UploadToImgur(UIImage image, CancellationToken token)
 {
     try {
         NSUrlSession session;
         session = NSUrlSession.FromConfiguration(
             NSUrlSessionConfiguration.EphemeralSessionConfiguration,
             new NSUrlSessionTaskDelegate() as INSUrlSessionDelegate,
             new NSOperationQueue()
             );
         NSUrl uploadHandleUrl       = NSUrl.FromString("https://api.imgur.com/3/image");
         NSMutableUrlRequest request = new NSMutableUrlRequest(uploadHandleUrl)
         {
             HttpMethod = "POST",
             Headers    = NSDictionary.FromObjectsAndKeys(
                 new [] { "Client-ID " + APIKeys.ImgurClientID },
                 new [] { "Authorization" }
                 )
         };
         request["Content-Type"] = "text/paint";
         var    png         = image.AsPNG();
         string base64Image = png?.GetBase64EncodedString(NSDataBase64EncodingOptions.SixtyFourCharacterLineLength);
         request.Body = $"{base64Image}";
         var dataTask            = session.CreateDataTaskAsync(request);
         var dataTaskCancellable = Task.Run(async() => await dataTask, token);
         if (await Task.WhenAny(dataTaskCancellable, Task.Delay(HttpService.TimeOut)) == dataTaskCancellable)
         {
             var    dataTaskRequest = await dataTaskCancellable;
             string result          = new NSString(dataTaskRequest.Data, NSStringEncoding.UTF8);
             Regex  reg             = new Regex("link\":\"(.*?)\"");
             Match  match           = reg.Match(result);
             return(match.ToString().Replace("link\":\"", "").Replace("\"", "").Replace("\\/", "/"));
         }
     } catch {
     }
     return(null);
 }
Example #38
0
        protected override void OnElementChanged(ElementChangedEventArgs <EnhancedWebView> e)
        {
            base.OnElementChanged(e);
            var webView = Control as WKWebView;

            if (webView == null)
            {
                var config = new WKWebViewConfiguration();
                webView = new WKWebView(Frame, config);
                SetNativeControl(webView);
            }

            if (e.OldElement != null)
            {
            }
            if (e.NewElement != null)
            {
                UrlWebViewSource source = (Xamarin.Forms.UrlWebViewSource)Element.Source;
                var webRequest          = new NSMutableUrlRequest(new NSUrl(source.Url));
                if (Element.CustomHeaders.Count > 0)
                {
                    foreach (string key in Element.CustomHeaders.Keys)
                    {
                        webRequest[key] = Element.CustomHeaders[key];
                    }
                }
                if (!string.IsNullOrEmpty(Element.Username) && !string.IsNullOrEmpty(Element.Password))
                {
                    WebViewDelegate webViewDelegate = new WebViewDelegate();
                    webViewDelegate.Username   = Element.Username;
                    webViewDelegate.Password   = Element.Password;
                    webView.NavigationDelegate = webViewDelegate;
                }
                Control.LoadRequest(webRequest);
            }
        }
Example #39
0
        async Task <FileUploadResponse> MakeRequest(string uploadPath, string tag, string url, IDictionary <string, string> headers, string boundary)
        {
            var request = new NSMutableUrlRequest(NSUrl.FromString(url));

            request.HttpMethod      = "POST";
            request["Accept"]       = "*/*";
            request["Content-Type"] = "multipart/form-data; boundary=" + boundary;
            uploadCompletionSource  = new TaskCompletionSource <FileUploadResponse>();

            var sessionConfiguration = CreateSessionConfiguration(headers, $"{SessionId}{uploadPath}", boundary);

            var session = NSUrlSession.FromConfiguration(sessionConfiguration, (INSUrlSessionDelegate)this, NSOperationQueue.MainQueue);

            var uploadTask = session.CreateUploadTask(request, new NSUrl(uploadPath, false));

            uploadTask.TaskDescription = $"{tag}|{uploadPath}";
            uploadTask.Priority        = NSUrlSessionTaskPriority.High;
            uploadTask.Resume();


            var retVal = await uploadCompletionSource.Task;

            return(retVal);
        }
Example #40
0
        private ApiResult <T> ApiPostCall <T>(string action_url)
        {
            var _result = new ApiResult <T>()
            {
                success = false,
                message = "",
                result  = default(T)
            };

            try
            {
                var _request = new NSMutableUrlRequest(NSUrl.FromString($"{Constants.LionApiUrl}{action_url}"));
                _request.HttpMethod = "POST";

                var _response = (NSUrlResponse)null;
                var _error    = (NSError)null;

                var _url_data = this.ApiCallAsync(_request, ref _response, ref _error);
                if (_error != null)
                {
                    NSLogHelper.NSLog($"apiPostCall error: {_error}");
                    _result.message = _error.ToString();
                }
                else
                {
                    _result = JsonConvert.DeserializeObject <ApiResult <T> >(_url_data.ToString());
                }
            }
            catch (Exception ex)
            {
                ConfigHelper.ShowConfirm("오류", "서버가 응답하지 않습니다.\n 잠시 후 다시 시도해주시기 바랍니다.", "확인");
                _result.message = ex.ToString();
            }

            return(_result);
        }
Example #41
0
        /// <summary>
        /// Sets the server url. Attaches a certificate if necessary.
        /// </summary>
        /// <param name="url">The server url</param>
        public void SetUrl(string url)
        {
            this._url = url;
            if (_client != null && _client.ReadyState != ReadyState.Closed)
            {
                _client.Close();
            }

            //_client = new WebSocket(new NSUrl(url.Trim()));
            var nsUrlRequest = new NSMutableUrlRequest(new NSUrl(url.Trim()));

            if (AttachCert)
            {
                this.AttachCertificate(url, nsUrlRequest);
            }

            //NSObject[] protocols = { new NSString("wss"), new NSString("ws") };
            //_client = new WebSocket(nsUrlRequest, protocols, true);

            _client = new WebSocket(nsUrlRequest);

            _client.Delegate = new SocketDelegate(this);
            LogUtility.LogMessage(String.Format("WebSocket Url set to {0}", url));
        }
Example #42
0
            public override NSUrlRequest WillSendRequest(NSUrlConnection connection, NSUrlRequest request,
                                                         NSUrlResponse response)
            {
                NSMutableUrlRequest mutableRequest = (NSMutableUrlRequest)request.MutableCopy();

                if (response != null)
                {
                    RemoveProperty("ADURLProtocol", mutableRequest);
                    handler.Client.Redirected(handler, mutableRequest, response);
                    connection.Cancel();
                    if (!request.Headers.ContainsKey(new NSString("x-ms-PkeyAuth")))
                    {
                        mutableRequest[BrokerConstants.ChallengeHeaderKey] = BrokerConstants.ChallengeHeaderValue;
                    }
                    return(mutableRequest);
                }

                if (!request.Headers.ContainsKey(new NSString(BrokerConstants.ChallengeHeaderKey)))
                {
                    mutableRequest[BrokerConstants.ChallengeHeaderKey] = BrokerConstants.ChallengeHeaderValue;
                }

                return(mutableRequest);
            }
		partial void NSUrlConnectionButtonXamarinExample_TouchUpInside(UIButton sender)
		{
			string rxcui = "198440";
			NSMutableUrlRequest request = new NSMutableUrlRequest(new NSUrl(string.Format("http://rxnav.nlm.nih.gov/REST/RxTerms/rxcui/{0}/allinfo", rxcui)), 
				NSUrlRequestCachePolicy.ReloadRevalidatingCacheData, 20);
			request["Accept"] = "application/json";

			RxTermNSURLConnectionDelegate connectionDelegate = new RxTermNSURLConnectionDelegate();

			NSUrlConnection aConnection = new NSUrlConnection(request, connectionDelegate);
			aConnection.Start();
		}
        //this is a test
        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
            var urlRequest = new NSMutableUrlRequest
            {
                HttpMethod = request.Method.Method,
                Url = NSUrl.FromString(request.RequestUri.AbsoluteUri),
                AllowsCellularAccess = true,
            };


            var dictionary = new NSMutableDictionary();

            if (request.Headers != null && request.Headers.Count() > 0)
            {
                foreach (var item in request.Headers)
                {
                    dictionary.SetValueForKey((NSString)item.Value.First(), (NSString)item.Key);
                }
            }

            if (request.Content != null)
            {
                foreach (var item in request.Content.Headers)
                {
                    dictionary.SetValueForKey((NSString)item.Value.First(), (NSString)item.Key);
                }
            }

            urlRequest.Headers = dictionary;

            if (request.Content != null)
            {
                using (Stream requestStream = await request.Content.ReadAsStreamAsync())
                {
                    urlRequest.Body = NSData.FromStream(requestStream);
                }
            }

            try
            {
                NSUrlAsyncResult response = await NSUrlConnection.SendRequestAsync(urlRequest, NSOperationQueue.MainQueue);

                NSHttpUrlResponse httpResponse = response.Response as NSHttpUrlResponse;

                HttpContent responseContent = null;

                if (response.Data == null)
                {
                    responseContent = new StringContent("");
                }

                else
                {
                    responseContent = new StreamContent(response.Data.AsStream());
                }

                HttpResponseMessage responseMessage = new HttpResponseMessage
                {
                    Content = responseContent,
                    RequestMessage = request,
                    StatusCode = (HttpStatusCode)int.Parse(httpResponse.StatusCode.ToString())
                };

                var headers = (from p in httpResponse.AllHeaderFields.Keys
                               let key = p.ToString()
                               let val = httpResponse.AllHeaderFields[p].ToString()
                               orderby key
                               select new KeyValuePair<string, string>(key, val)).ToList();

                SetHeaders(headers, responseMessage);

                return responseMessage;
            }

            catch (NSErrorException ex)
            {
                throw new HttpRequestException(ex.Error.LocalizedDescription, ex);
            }

            catch (Exception ex)
            {
                throw new HttpRequestException("An error occurred while sending the request.", ex);
            }
        }
		protected void RequestImageFromSource (string source, NIPhotoScrollViewPhotoSize photoSize, int photoIndex)
		{
			var isThumbnail = photoSize == NIPhotoScrollViewPhotoSize.NIPhotoScrollViewPhotoSizeThumbnail;
			var identifier = IdentifierWithPhotoSize (photoSize, photoIndex);
			var identifierKey = IdentifierKeyFromIdentifier (identifier);

			// avoid duplicate requests
			if (ActiveRequests.Contains (identifierKey))
				return;

			NSUrl url = null;
			if (source.StartsWith ("http")) {
				url = new NSUrl (source);
			} else {
				url = new NSUrl (source, true);
			}

			NSMutableUrlRequest request = new NSMutableUrlRequest (url);
			request.TimeoutInterval = 30;

			var photoIndexKey = CacheKeyForPhotoIndex (photoIndex);



			var readOp = AFImageRequestOperation.ImageRequestOperationWithRequest (request, null, 
       			(NSUrlRequest req, NSHttpUrlResponse resp, UIImage img) => 
               	{
					// Store the image in the correct image cache.
					if (isThumbnail) {
						ThumbnailImageCache.StoreObject(img, photoIndexKey);

					} else {
						HighQualityImageCache.StoreObject(img, photoIndexKey);
					}
					// If you decide to move this code around then ensure that this method is called from
					// the main thread. Calling it from any other thread will have undefined results.
					PhotoAlbumView.DidLoadPhoto(img, photoIndex, photoSize);
					
					if(isThumbnail) {
						if(PhotoScrubberView != null)
							PhotoScrubberView.DidLoadThumbnail(img, photoIndex);
					}

					this.ActiveRequests.Remove(identifierKey);

				}, (NSUrlRequest req, NSHttpUrlResponse resp, NSError er) => {

				});

			readOp.ImageScale = 1;

			// Set the operation priority level.
			if(photoSize == NIPhotoScrollViewPhotoSize.NIPhotoScrollViewPhotoSizeThumbnail)
			{
				readOp.QueuePriority = NSOperationQueuePriority.Low;
			}else
			{
				readOp.QueuePriority = NSOperationQueuePriority.Normal;
			}
					
			// Start the operation.
			ActiveRequests.Add(identifierKey);
			Queue.AddOperation(readOp);
		}
        void ProcessRequest()
        {
            try
            {
                var requestUri = new StringBuilder();
                requestUri.AppendFormat("{0}{1}{2}/{3}",
                    BaseUri,
                    (BaseUri.ToString().EndsWith("/")) ? string.Empty : "/",
                    Uri.EscapeUriString(ScopeName),
                    _wrapper.CacheRequest.RequestType.ToString());

                string prefix = "?";

                // Add the scope params if any
                foreach (KeyValuePair<string, string> kvp in _scopeParameters)
                {
                    requestUri.AppendFormat("{0}{1}={2}", prefix, Uri.EscapeUriString(kvp.Key), Uri.EscapeUriString(kvp.Value));
                    if (prefix.Equals("?"))
                    {
                        prefix = "&";
                    }
                }

                // Create the WebRequest
                var webRequest = new NSMutableUrlRequest(new NSUrl(requestUri.ToString()));
                if (_credentials != null)
                {
                    NetworkCredential credential = _credentials.GetCredential(BaseUri, "Basic");
                    string svcCredentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(credential.UserName + ":" + credential.Password));
                    webRequest["Authorization"] = "Basic " + svcCredentials;

                    webRequest["configname"] = _behaviors.ConfigName;
                    webRequest["configversion"] = _behaviors.ConfigVersion;

                    webRequest["coreversion"] = _behaviors.CoreVersion.ToString();
                }
                else
                    throw new Exception("Credentials is null");

                foreach (var item in _behaviors.DeviceInfo)
                    webRequest[item.Key] = item.Value;

                webRequest.HttpMethod = "POST";
                webRequest["Accept"] = ApplicationContext.Current.Settings.BitMobileFormatterDisabled ? "application/atom+xml" : "application/bitmobile";
                webRequest["Content-Type"] = ApplicationContext.Current.Settings.BitMobileFormatterDisabled ? "application/atom+xml" : "application/bitmobile";
                webRequest["Accept-Encoding"] = "gzip, deflate";
                webRequest.TimeoutInterval = Timeout;

                webRequest.Body = CreateRequestBody();

                _wrapper.WebRequest = webRequest;

                if (_wrapper.CacheRequest.RequestType == CacheRequestType.UploadChanges)
                {
                    lock (_lockObject)
                    {
                        _currentTask = CreateUploadSession().CreateDownloadTask(webRequest);
                        _currentTask.Resume();
                    }
                }
                else
                {
                    lock (_lockObject)
                    {
                        _currentTask = CreateDownloadSession().CreateDownloadTask(webRequest);
                        _currentTask.Resume();
                    }
                }
            }
            catch (Exception e)
            {
                if (ExceptionUtility.IsFatal(e))
                    throw;

                _wrapper.Error = e;

                _workerManager.CompleteWorkRequest(_wrapper.WorkerRequest, _wrapper);
            }
        }
Example #47
0
        /// <summary>
        /// Initiates a navigate request to the provided URI. This method allows customizable options for including posted form data and HTTP headers.
        /// </summary>
        /// <param name="uri">The URI to navigate to.</param>
        /// <param name="postData">The posted form data.</param>
        /// <param name="additionalHeaders">The additional HTTP headers.</param>
        public void Navigate(Uri uri, byte[] postData, string additionalHeaders)
        {
            var request = new NSMutableUrlRequest(UriToNsUrl(uri));
            if (postData != null && postData.Length != 0)
            {
                request.Body = NSData.FromArray(postData);
            }
            if (!string.IsNullOrEmpty(additionalHeaders))
            {
                request.Headers = ParceAdditionalHeaders(additionalHeaders);
            }

            this.NativeWebView.LoadRequest(request);
        }
		public static void SummonThreeDSecure (PaymentRequiresThreeDSecureModel threedDSecureReceipt, SecureWebView secureWebView)
		{
			secureWebView.ReceiptID =	threedDSecureReceipt.ReceiptId;

			NSCharacterSet allowedCharecterSet = NSCharacterSet.FromString (@":/=,!$&'()*+;[]@#?").InvertedSet;
			NSString paReq = new NSString (threedDSecureReceipt.PaReq);
			var encodedPaReq = paReq.CreateStringByAddingPercentEncoding (allowedCharecterSet);

			NSString termUrl = new NSString ("judo1234567890://threedsecurecallback");
			var encodedTermUrl = termUrl.CreateStringByAddingPercentEncoding (allowedCharecterSet);


			NSUrl url = new NSUrl (threedDSecureReceipt.AcsUrl);

			NSMutableUrlRequest req = new NSMutableUrlRequest (url);

			NSString postString = new NSString ("MD=" + threedDSecureReceipt.Md + "&PaReq=" + encodedPaReq + "&TermUrl=" + encodedTermUrl + "");
			NSData postData = postString.Encode (NSStringEncoding.UTF8);

			req.HttpMethod = "POST";
			req.Body = postData;

			try {
				DispatchQueue.MainQueue.DispatchAfter (DispatchTime.Now, () => {
					secureWebView.LoadRequest (req);

					JudoSDKManager.HideLoading ();
					secureWebView.Hidden = false;
				});
			} catch (Exception e) {
				if (secureWebView._failureCallback != null) {
					var judoError = new JudoError { Exception = e };
					secureWebView._failureCallback (judoError);
				}
			}
		}
Example #49
0
 public override UIImage GetUIImage()
 {
     if (this.image == null)
     {
         this.ImageLoadStatus = ImageStatus.Loading;
         if (!this.UriSource.IsAbsoluteUri)
         {
             this.image = UIImage.FromBundle(string.Format("iOS/{0}", this.UriSource.OriginalString));
             if (this.image == null)
             {
                 this.image = UIImage.FromBundle("Assets/" + this.UriSource.OriginalString);
             }
         }
         else if (this.UriSource.IsFile)
         {
             this.image = UIImage.FromBundle(this.UriSource.OriginalString);
         }
         else if (this.UriSource.Scheme == Uri.UriSchemeHttp || this.UriSource.Scheme == Uri.UriSchemeHttps)
         {
             NSUrlRequest req = new NSMutableUrlRequest(this.UriSource);
             NSOperationQueue queue = new NSOperationQueue();
             NSUrlConnection.SendAsynchronousRequest(req, queue, (pesponse, data, error) =>
             {
                 try
                 {
                     if (error == null && data != null && data.Length != 0)
                     {
                         Dispatcher.BeginInvoke(() =>
                             {
                                 this.image = UIImage.LoadFromData(data);
                                 if (this.ImageOpened != null)
                                 {
                                     this.ImageOpened(this, new RoutedEventArgs());
                                 }
                             });
                     }
                     else
                     {
                         Dispatcher.BeginInvoke(() =>
                         {
                             if (this.ImageFailed != null)
                             {
                                 this.ImageFailed(this, new ExceptionRoutedEventArgs());
                             }
                         });
                     }
                 }
                 catch (Exception e)
                 {
                     Dispatcher.BeginInvoke(() =>
                     {
                         this.image = UIImage.LoadFromData(data);
                         if (this.ImageFailed != null)
                         {
                             this.ImageFailed(this, new ExceptionRoutedEventArgs(e));
                         }
                     });
                 }
             });
             return this.image;
         }
         if (this.image == null)
         {
             this.image = UIImage.FromFile(this.UriSource.OriginalString);
         }
     }
     return this.image;
 }
        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var headers = request.Headers as IEnumerable<KeyValuePair<string, IEnumerable<string>>>;
            var ms = new MemoryStream();

            if (request.Content != null) {
                await request.Content.CopyToAsync(ms).ConfigureAwait(false);
                headers = headers.Union(request.Content.Headers);
            }

            var rq = new NSMutableUrlRequest() {
                AllowsCellularAccess = true,
                Body = NSData.FromArray(ms.ToArray()),
                CachePolicy = NSUrlRequestCachePolicy.UseProtocolCachePolicy,
                Headers = headers.Aggregate(new NSMutableDictionary(), (acc, x) => {
                    acc.Add(new NSString(x.Key), new NSString(x.Value.LastOrDefault()));
                    return acc;
                }),
                HttpMethod = request.Method.ToString().ToUpperInvariant(),
                Url = NSUrl.FromString(request.RequestUri.AbsoluteUri),
            };

            var host = request.RequestUri.GetLeftPart(UriPartial.Authority);
            var op = default(AFHTTPRequestOperation);
            var err = default(NSError);
            var handler = new AFHTTPClient(new NSUrl(host));

            // NB: I have no idea how async methods affects object lifetime and
            // GC'ing of local variables, soooooooo....
            lock (pins) { pins[rq] = new object[] { op, handler, }; }

            var blockingTcs = new TaskCompletionSource<bool>();
            var ret= default(HttpResponseMessage);

            try {
                op = await enqueueOperation(handler, new AFHTTPRequestOperation(rq), cancellationToken, () => blockingTcs.SetResult(true), ex => {
                    if (ex is ApplicationException) {
                        err = (NSError)ex.Data["err"];
                    }

                    if (ret == null) {
                        return;
                    }

                    ret.ReasonPhrase = (err != null ? err.LocalizedDescription : null);
                });
            } catch (ApplicationException ex) {
                op = (AFHTTPRequestOperation)ex.Data["op"];
                err = (NSError)ex.Data["err"];
            }

            var resp = (NSHttpUrlResponse)op.Response;

            if (err != null && resp == null && err.Domain == NSError.NSUrlErrorDomain) {
                throw new WebException (err.LocalizedDescription, WebExceptionStatus.NameResolutionFailure);
            }

            if (op.IsCancelled) {
                lock (pins) { pins.Remove(rq); }
                throw new TaskCanceledException();
            }

            var httpContent = new StreamContent (
                new ConcatenatingStream(new Func<Stream>[] { 
                    () => op.ResponseData == null || op.ResponseData.Length == 0 ? Stream.Null : op.ResponseData.AsStream(),
                },
                true, blockingTcs.Task, () => { if (!op.IsCancelled && !op.IsFinished) op.Cancel(); }));

            cancellationToken.Register (httpContent.Dispose);

            ret = new HttpResponseMessage((HttpStatusCode)resp.StatusCode) {
                Content = httpContent,
                RequestMessage = request,
                ReasonPhrase = (err != null ? err.LocalizedDescription : null),
            };

            foreach(var v in resp.AllHeaderFields) {
                ret.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString());
                ret.Content.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString());
            }

            lock (pins) { pins.Remove(rq); }
            return ret;
        }
		void NSUrlConnectionButton_TouchUpInside(object sender, EventArgs args)
		{
			NSUrl url = NSUrl.FromString (URLRequestBin);
			NSMutableUrlRequest urlRequest = new NSMutableUrlRequest (url, NSUrlRequestCachePolicy.ReloadIgnoringLocalCacheData, 60.0);
			urlRequest.HttpMethod = "POST";
			urlRequest.Body = NSData.FromString ("data=This is some data");

			NSUrlConnection connection = new NSUrlConnection(urlRequest, new RxTermNSURLConnectionDelegate(), true);
		}
		private async Task BegingDownloading(RequestData requestData, EventHandler<DownloadEventArgs> downloadedAction, Guid taskGuid)
		{
			NSUrlSession session = GetSession(requestData, downloadedAction);

			NSUrlSessionDownloadTask task;

			if (requestData.Type == RequestData.RequestType.Get)
			{
				NSString urlSting = new NSString(requestData.Url);

				urlSting = urlSting.CreateStringByAddingPercentEscapes(NSStringEncoding.UTF8);

				task = session.CreateDownloadTask(NSUrl.FromString(urlSting));
			}
			else
			{
				NSMutableUrlRequest request = new NSMutableUrlRequest(NSUrl.FromString(requestData.Url))
				{
					Body = FormatBody(requestData.Body),
					HttpMethod = "POST"
				};

				task = session.CreateDownloadTask(request);
			}

			if (task != null)
			{
				task.TaskDescription = await JsonParser.SerializeToJsonString(new Dictionary<string, JsonValueInfo> { 
					{ "request", new JsonValueInfo(requestData.ToJson(), false) },
					{ "guid", new JsonValueInfo(taskGuid) }
				});

				task.Resume();
			}
			else
			{
				downloadedAction(this, new DownloadEventArgs("", taskGuid, requestData, "Can't create NSUrlSessionDownloadTask."));
			}
		}
        //this is a test
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
            var urlRequest = new NSMutableUrlRequest
            {
                HttpMethod           = request.Method.Method,
                Url                  = NSUrl.FromString(request.RequestUri.AbsoluteUri),
                AllowsCellularAccess = true,
            };


            var dictionary = new NSMutableDictionary();

            if (request.Headers != null && request.Headers.Count() > 0)
            {
                foreach (var item in request.Headers)
                {
                    dictionary.SetValueForKey((NSString)item.Value.First(), (NSString)item.Key);
                }
            }

            if (request.Content != null)
            {
                foreach (var item in request.Content.Headers)
                {
                    dictionary.SetValueForKey((NSString)item.Value.First(), (NSString)item.Key);
                }
            }

            urlRequest.Headers = dictionary;

            if (request.Content != null)
            {
                using (Stream requestStream = await request.Content.ReadAsStreamAsync())
                {
                    urlRequest.Body = NSData.FromStream(requestStream);
                }
            }

            try
            {
                NSUrlAsyncResult response = await NSUrlConnection.SendRequestAsync(urlRequest, NSOperationQueue.MainQueue);

                NSHttpUrlResponse httpResponse = response.Response as NSHttpUrlResponse;

                HttpContent responseContent = null;

                if (response.Data == null)
                {
                    responseContent = new StringContent("");
                }

                else
                {
                    responseContent = new StreamContent(response.Data.AsStream());
                }

                HttpResponseMessage responseMessage = new HttpResponseMessage
                {
                    Content        = responseContent,
                    RequestMessage = request,
                    StatusCode     = (HttpStatusCode)int.Parse(httpResponse.StatusCode.ToString())
                };

                var headers = (from p in httpResponse.AllHeaderFields.Keys
                               let key = p.ToString()
                                         let val = httpResponse.AllHeaderFields[p].ToString()
                                                   orderby key
                                                   select new KeyValuePair <string, string>(key, val)).ToList();

                SetHeaders(headers, responseMessage);

                return(responseMessage);
            }

            catch (NSErrorException ex)
            {
                throw new HttpRequestException(ex.Error.LocalizedDescription, ex);
            }

            catch (Exception ex)
            {
                throw new HttpRequestException("An error occurred while sending the request.", ex);
            }
        }
		/// <summary>
		/// Prepares the upload.
		/// </summary>
		/// <returns>The upload.</returns>
		public async Task PrepareUpload()
		{
			try {
				Console.WriteLine("PrepareUpload called...");

				if (session == null)
					session = InitBackgroundSession();

				// Check if task already exits
				var tsk = await GetPendingTask();
				if (tsk != null) {
					Console.WriteLine ("TaskId {0} found, state: {1}", tsk.TaskIdentifier, tsk.State);

					// If our task is suspended, resume it.
					if (tsk.State == NSUrlSessionTaskState.Suspended) {
						Console.WriteLine ("Resuming taskId {0}...", tsk.TaskIdentifier);
						tsk.Resume();
					}

					return; // exit, we already have a task
				}

				// For demo purposes file is attached to project as "Content" and PDF is 8.1MB.
				var fileToUpload = "UIKitUICatalog.pdf";

				if(File.Exists(fileToUpload)) {
					var boundary = "FileBoundary";
					var bodyPath = Path.Combine (Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "BodyData.tmp");

					// Create request
					NSUrl uploadHandleUrl = NSUrl.FromString (webApiAddress);
					NSMutableUrlRequest request = new NSMutableUrlRequest (uploadHandleUrl);
					request.HttpMethod = "POST";
					request ["Content-Type"] = "multipart/form-data; boundary=" + boundary;
					request ["FileName"] = Path.GetFileName(fileToUpload);

					// Construct the body
					System.Text.StringBuilder sb = new System.Text.StringBuilder("");
					sb.AppendFormat("--{0}\r\n", boundary);
					sb.AppendFormat("Content-Disposition: form-data; name=\"file\"; filename=\"{0}\"\r\n", Path.GetFileName(fileToUpload));
					sb.Append("Content-Type: application/octet-stream\r\n\r\n");

					// Delete any previous body data file
					if (File.Exists(bodyPath))
						File.Delete(bodyPath);

					// Write file to BodyPart
					var fileBytes = File.ReadAllBytes (fileToUpload);
					using (var writeStream = new FileStream (bodyPath, FileMode.Create, FileAccess.Write, FileShare.Read)) {
						writeStream.Write (Encoding.Default.GetBytes (sb.ToString ()), 0, sb.Length);
						writeStream.Write (fileBytes, 0, fileBytes.Length);

						sb.Clear ();
						sb.AppendFormat ("\r\n--{0}--\r\n", boundary);
						writeStream.Write (Encoding.Default.GetBytes (sb.ToString ()), 0, sb.Length);
					}
					sb = null;
					fileBytes = null;

					// Creating upload task
					var uploadTask = session.CreateUploadTask(request, NSUrl.FromFilename(bodyPath));
					Console.WriteLine ("New TaskID: {0}", uploadTask.TaskIdentifier);

					// Start task
					uploadTask.Resume (); 
				}
				else
				{
					Console.WriteLine ("Upload file doesn't exist. File: {0}", fileToUpload);
				}	
			} catch (Exception ex) {
				Console.WriteLine ("PrepareUpload Ex: {0}", ex.Message);
			}
		}
        private static RxTerm RxTermViaNSURLConnectionAsync(string rxcui, Action<RxTerm> callback = null)
        {
            var rxTerm = new RxTerm();

            try {
                var request = new NSMutableUrlRequest(new NSUrl(string.Format("http://rxnav.nlm.nih.gov/REST/RxTerms/rxcui/{0}/allinfo", rxcui)),
                NSUrlRequestCachePolicy.ReloadRevalidatingCacheData, 20);
                request["Accept"] = "application/json";

                var connectionDelegate = new RxTermNSURLConnectionDelegate();
                var connection = new NSUrlConnection(request, connectionDelegate);
                connection.Start();

            } catch (Exception ex) {
                Console.WriteLine("Problem getting data for concept: {0} -- Exception: {1}", rxcui, ex.Message + ex.StackTrace);
            }

            return rxTerm;
        }
		void NSUrlSessionButton_TouchUpInside(object sender, EventArgs args)
		{
			NSUrlSessionConfiguration sessionConfig = NSUrlSessionConfiguration.DefaultSessionConfiguration;
			sessionConfig.AllowsCellularAccess = true;
			sessionConfig.TimeoutIntervalForRequest = 30.0;
			sessionConfig.TimeoutIntervalForResource = 60.0;
			sessionConfig.HttpMaximumConnectionsPerHost = 1;

			NSUrl url = NSUrl.FromString (URLRequestBin);
			NSMutableUrlRequest urlRequest = new NSMutableUrlRequest (url, NSUrlRequestCachePolicy.ReloadIgnoringLocalCacheData, 60.0);
			urlRequest.HttpMethod = "POST";
			urlRequest.Body = NSData.FromString ("data=This is some NSURLSession data");

			NSUrlSession session = NSUrlSession.FromConfiguration(sessionConfig);
			NSUrlSessionDataTask dataTask = session.CreateDataTask (urlRequest);
			dataTask.Resume ();
		}