public bool CanReach(RemoteSession session, string remoteUri, TimeSpan timeout) { CouchbaseLiteHttpClientFactory.SetupSslCallback(); var uri = new Uri(remoteUri); try { using (var c = new TcpClient(uri.Host, uri.Port)) { return(true); } } catch (Exception e) { Log.To.Sync.I(TAG, "Didn't get successful connection to {0}", remoteUri); Log.To.Sync.V(TAG, " Cause: ", e); LastError = e; return(false); } }
public bool CanReach(string remoteUri, TimeSpan timeout) { CouchbaseLiteHttpClientFactory.SetupSslCallback(); HttpWebRequest request; var uri = new Uri(remoteUri); var credentials = uri.UserInfo; if (!String.IsNullOrEmpty(credentials)) { remoteUri = string.Format("{0}://{1}{2}", uri.Scheme, uri.Authority, uri.PathAndQuery); request = WebRequest.CreateHttp(remoteUri); request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(credentials))); request.PreAuthenticate = true; } else { request = WebRequest.CreateHttp(remoteUri); } request.AllowWriteStreamBuffering = true; request.Timeout = (int)timeout.TotalMilliseconds; request.Method = "HEAD"; try { using (var response = (HttpWebResponse)request.GetResponse()) { return(true); //We only care that the server responded } } catch (Exception e) { var we = e as WebException; if (we != null && we.Status == WebExceptionStatus.ProtocolError) { return(true); //Getting an HTTP error technically means we can connect } Log.To.Sync.I(TAG, "Didn't get successful connection to {0}", remoteUri); Log.To.Sync.V(TAG, " Cause: ", e); LastError = e; return(false); } }