private static XmlHttpResponse ExecuteProvisionLocalClientToLocalHub( XmlHttpRequest xmlHttpRequest, X509Certificate2 clientCert) { var hubHttpKeyUri = DiscoverRootCertIfNeeded(HttpKeyUri.BuildHttpKeyUri(xmlHttpRequest.url), clientCert); ThaliClientToDeviceHubUtilities.ProvisionThaliClient( hubHttpKeyUri.ServerPublicKey, hubHttpKeyUri.Host, hubHttpKeyUri.Port, clientCert); return new XmlHttpResponse { status = 200, transactionId = xmlHttpRequest.transactionId, responseText = hubHttpKeyUri.AbsoluteUri }; }
public static object ProcessHostError(string errorMessage, XmlHttpRequest xmlHttpRequest) { var xmlHttpResponse = new XmlHttpResponse { transactionId = xmlHttpRequest != null ? xmlHttpRequest.transactionId : null, status = 502, responseText = errorMessage }; xmlHttpResponse.headers.Add("content-type", "text/plain"); return xmlHttpResponse; }
private static XmlHttpResponse ExecuteProvisionLocalHubToRemoteHub( XmlHttpRequest xmlHttpRequest, X509Certificate2 clientCert) { var remoteHubHttpKeyUri = DiscoverRootCertIfNeeded(HttpKeyUri.BuildHttpKeyUri(xmlHttpRequest.url), clientCert); var localHubHttpKeyUri = HttpKeyUri.BuildHttpKeyUri(xmlHttpRequest.requestText); ThaliClientToDeviceHubUtilities.ProvisionKeyInPrincipalDatabase(remoteHubHttpKeyUri.ServerPublicKey, remoteHubHttpKeyUri.Host, remoteHubHttpKeyUri.Port, localHubHttpKeyUri.ServerPublicKey, clientCert); return new XmlHttpResponse { status = 200, transactionId = xmlHttpRequest.transactionId, responseText = remoteHubHttpKeyUri.AbsoluteUri }; }
private static XmlHttpResponse ProxyRequest( XmlHttpRequest xmlHttpRequest, X509Certificate2 clientCert) { var httpKeyUri = HttpKeyUri.BuildHttpKeyUri(xmlHttpRequest.url); HttpWebRequest webRequest = ThaliClientToDeviceHubUtilities.CreateThaliWebRequest(httpKeyUri, clientCert); webRequest.Method = xmlHttpRequest.method; // There are multiple headers that cannot be set directly via webRequest.Headers. I only catch // two below that seem of some reasonable use. foreach (var headerNameValue in xmlHttpRequest.headers) { if (headerNameValue.Key.Equals("Accept", StringComparison.OrdinalIgnoreCase)) { webRequest.Accept = headerNameValue.Value; } else if (headerNameValue.Key.Equals("Content-Type", StringComparison.OrdinalIgnoreCase)) { webRequest.ContentType = headerNameValue.Value; } else { webRequest.Headers.Add(headerNameValue.Key, headerNameValue.Value); } } if (string.IsNullOrWhiteSpace(xmlHttpRequest.requestText)) { return ProcessResponse(xmlHttpRequest.transactionId, webRequest); } var bodyAsBytes = Encoding.UTF8.GetBytes(xmlHttpRequest.requestText); webRequest.GetRequestStream().Write(bodyAsBytes, 0, bodyAsBytes.Count()); var response = ProcessResponse(xmlHttpRequest.transactionId, webRequest); return response; }