public void CreateResponseAuth() { CFHTTPMessage response = null; var done = false; var taskCompletionSource = new TaskCompletionSource <CFHTTPMessage> (); // the following code has to be in a diff thread, else, we are blocking the current loop, not cool // perform a request so that we fail in the auth, then create the auth object and check the count TestRuntime.RunAsync(DateTime.Now.AddSeconds(30), async() => { using (var request = CFHTTPMessage.CreateRequest( new Uri(NetworkResources.Httpbin.GetStatusCodeUrl(HttpStatusCode.Unauthorized)), "GET", null)) { request.SetBody(Array.Empty <byte> ()); // empty body, we are not interested using (var stream = CFStream.CreateForHTTPRequest(request)) { Assert.IsNotNull(stream, "Null stream"); // we are only interested in the completed event stream.ClosedEvent += (sender, e) => { taskCompletionSource.SetResult(stream.GetResponseHeader()); done = true; }; // enable events and run in the current loop stream.EnableEvents(CFRunLoop.Main, CFRunLoop.ModeDefault); stream.Open(); response = await taskCompletionSource.Task; } } }, () => done); using (var auth = CFHTTPAuthentication.CreateFromResponse(response)) { Assert.NotNull(auth, "Null Auth"); Assert.IsTrue(auth.IsValid, "Auth is valid"); Assert.That(TestRuntime.CFGetRetainCount(auth.Handle), Is.EqualTo((nint)1), "RetainCount"); } }
CFHTTPMessage CreateRequest(HttpRequestMessage request) { var message = CFHTTPMessage.CreateRequest( request.RequestUri, request.Method.Method, request.Version); SetupRequest(request, message); if ((auth == null) || (Credentials == null) || !PreAuthenticate) { return(message); } if (!auth.AppliesToRequest(message)) { return(message); } var method = auth.GetMethod(); var credential = Credentials.GetCredential(request.RequestUri, method); if (credential == null) { return(message); } message.ApplyCredentials(auth, credential); return(message); }
public void CreateRequest10() { using (var m = CFHTTPMessage.CreateRequest(new Uri("http://www.xamarin.com"), "GET", new Version(1, 0))) { Assert.That(m.Handle, Is.Not.EqualTo(IntPtr.Zero), "Handle"); Assert.False(m.IsHeaderComplete, "IsHeaderComplete"); Assert.True(m.IsRequest, "IsRequest"); Assert.Throws <InvalidOperationException> (delegate { var x = m.ResponseStatusCode; }, "ResponseStatusCode"); Assert.Throws <InvalidOperationException> (delegate { var x = m.ResponseStatusLine; }, "ResponseStatusLine"); Assert.That(m.Version.ToString(), Is.EqualTo("1.0"), "Version"); } }
CFHTTPMessage CreateWebRequestAsync(HttpRequestMessage request) { var req = CFHTTPMessage.CreateRequest(request.RequestUri, request.Method.Method, request.Version); // TODO: /* * if (wr.ProtocolVersion == HttpVersion.Version10) { * wr.KeepAlive = request.Headers.ConnectionKeepAlive; * } else { * wr.KeepAlive = request.Headers.ConnectionClose != true; * } * * if (useDefaultCredentials) { * wr.UseDefaultCredentials = true; * } else { * wr.Credentials = credentials; * } * * if (useProxy) { * wr.Proxy = proxy; * } */ if (cookies != null) { string cookieHeader = cookies.GetCookieHeader(request.RequestUri); if (cookieHeader != "") { req.SetHeaderFieldValue("Cookie", cookieHeader); } } foreach (var header in request.Headers) { foreach (var value in header.Value) { req.SetHeaderFieldValue(header.Key, value); } } if (request.Content != null) { foreach (var header in request.Content.Headers) { foreach (var value in header.Value) { req.SetHeaderFieldValue(header.Key, value); } } } return(req); }
public void CreateRequest10() { using (var m = CFHTTPMessage.CreateRequest(NetworkResources.XamarinUri, "GET", new Version(1, 0))) { Assert.That(m.Handle, Is.Not.EqualTo(IntPtr.Zero), "Handle"); Assert.False(m.IsHeaderComplete, "IsHeaderComplete"); Assert.True(m.IsRequest, "IsRequest"); Assert.Throws <InvalidOperationException> (delegate { var x = m.ResponseStatusCode; }, "ResponseStatusCode"); Assert.Throws <InvalidOperationException> (delegate { var x = m.ResponseStatusLine; }, "ResponseStatusLine"); Assert.That(m.Version.ToString(), Is.EqualTo("1.0"), "Version"); Assert.That(TestRuntime.CFGetRetainCount(m.Handle), Is.EqualTo((nint)1), "RetainCount"); } }
public static WebResponseStream Create(Uri uri, HttpMethod method, Version version) { using (var req = CFHTTPMessage.CreateRequest(uri, method.Method, version)) return(Create(req)); }