Abstract TLS client for more generic-purposed use.
This commit is contained in:
@@ -100,6 +100,7 @@ namespace Cryville.Common.Network {
|
||||
}
|
||||
|
||||
protected bool GetProxy(ref string host, ref int port) {
|
||||
// TODO use winhttp.dll
|
||||
if (Environment.OSVersion.Platform == PlatformID.Win32NT) {
|
||||
var reg = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings");
|
||||
var proxyEnable = (int)reg.GetValue("ProxyEnable");
|
||||
|
@@ -32,7 +32,7 @@ namespace Cryville.Common.Network {
|
||||
return string.Format("<{0} {1} {2}>", HttpVersion, StatusCode, ReasonPhase);
|
||||
}
|
||||
|
||||
internal static bool ParseHeader(BinaryReader reader, Dictionary<string,string> headers) {
|
||||
internal static bool ParseHeader(BinaryReader reader, Dictionary<string, string> headers) {
|
||||
// TODO Multiline header
|
||||
var header = ReadLine(reader);
|
||||
if (header == "") return false;
|
||||
|
@@ -1,14 +1,13 @@
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace Cryville.Common.Network {
|
||||
public class HttpsClient : HttpClient {
|
||||
readonly TlsTcpClient _tlsTcpClient;
|
||||
readonly TlsClient _tlsClient;
|
||||
|
||||
protected override Stream Stream {
|
||||
get {
|
||||
return _tlsTcpClient.Stream;
|
||||
return _tlsClient.Stream;
|
||||
}
|
||||
}
|
||||
protected override string WindowsProxyProtocolName {
|
||||
@@ -18,16 +17,16 @@ namespace Cryville.Common.Network {
|
||||
}
|
||||
|
||||
public HttpsClient(Uri baseUri) : base(baseUri, 443) {
|
||||
_tlsTcpClient = new TlsTcpClient(TcpClient, baseUri.Host);
|
||||
_tlsClient = new TlsClient(RawTcpStream, baseUri.Host);
|
||||
}
|
||||
|
||||
public override void Connect() {
|
||||
base.Connect();
|
||||
_tlsTcpClient.Connect();
|
||||
_tlsClient.Connect();
|
||||
}
|
||||
|
||||
public override void Close() {
|
||||
_tlsTcpClient.Close();
|
||||
_tlsClient.Close();
|
||||
base.Close();
|
||||
}
|
||||
}
|
||||
|
@@ -5,16 +5,16 @@ using Org.BouncyCastle.Tls.Crypto.Impl.BC;
|
||||
using System.Collections;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using BcTlsClient = Org.BouncyCastle.Tls.TlsClient;
|
||||
|
||||
namespace Cryville.Common.Network {
|
||||
public class TlsTcpClient {
|
||||
public class TlsClient {
|
||||
readonly TlsClientProtocol _protocol;
|
||||
readonly TlsClient _tlsClient;
|
||||
readonly BcTlsClient _tlsClient;
|
||||
public Stream Stream { get; private set; }
|
||||
public TlsTcpClient(TcpClient tcpClient, string hostname) {
|
||||
_protocol = new TlsClientProtocol(tcpClient.GetStream());
|
||||
public TlsClient(Stream baseStream, string hostname) {
|
||||
_protocol = new TlsClientProtocol(baseStream);
|
||||
_tlsClient = new InternalTlsClient(hostname, new BcTlsCrypto(new SecureRandom()));
|
||||
}
|
||||
|
Reference in New Issue
Block a user