diff options
Diffstat (limited to 'Mono.Nat/Upnp/Messages/UpnpMessage.cs')
| -rw-r--r-- | Mono.Nat/Upnp/Messages/UpnpMessage.cs | 61 |
1 files changed, 12 insertions, 49 deletions
diff --git a/Mono.Nat/Upnp/Messages/UpnpMessage.cs b/Mono.Nat/Upnp/Messages/UpnpMessage.cs index 44c16eec6..54cca4494 100644 --- a/Mono.Nat/Upnp/Messages/UpnpMessage.cs +++ b/Mono.Nat/Upnp/Messages/UpnpMessage.cs @@ -31,6 +31,7 @@ using System.Net; using System.IO; using System.Text; using System.Globalization; +using MediaBrowser.Common.Net; namespace Mono.Nat.Upnp { @@ -44,17 +45,16 @@ namespace Mono.Nat.Upnp this.device = device; } - protected WebRequest CreateRequest(string upnpMethod, string methodParameters, out byte[] body) + protected HttpRequestOptions CreateRequest(string upnpMethod, string methodParameters) { string ss = "http://" + this.device.HostEndPoint.ToString() + this.device.ControlUrl; NatUtility.Log("Initiating request to: {0}", ss); - Uri location = new Uri(ss); - HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(location); - req.KeepAlive = false; - req.Method = "POST"; - req.ContentType = "text/xml; charset=\"utf-8\""; - req.Headers.Add("SOAPACTION", "\"" + device.ServiceType + "#" + upnpMethod + "\""); + var req = new HttpRequestOptions(); + req.Url = ss; + req.EnableKeepAlive = false; + req.RequestContentType = "text/xml; charset=\"utf-8\""; + req.RequestHeaders.Add("SOAPACTION", "\"" + device.ServiceType + "#" + upnpMethod + "\""); string bodyString = "<s:Envelope " + "xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" " @@ -67,54 +67,17 @@ namespace Mono.Nat.Upnp + "</s:Body>" + "</s:Envelope>\r\n\r\n"; - body = System.Text.Encoding.UTF8.GetBytes(bodyString); + req.RequestContentBytes = System.Text.Encoding.UTF8.GetBytes(bodyString); return req; } - public static MessageBase Decode(UpnpNatDevice device, string message) - { - XmlNode node; - XmlDocument doc = new XmlDocument(); - doc.LoadXml(message); - - XmlNamespaceManager nsm = new XmlNamespaceManager(doc.NameTable); - - // Error messages should be found under this namespace - nsm.AddNamespace("errorNs", "urn:schemas-upnp-org:control-1-0"); - nsm.AddNamespace("responseNs", device.ServiceType); - - // Check to see if we have a fault code message. - if ((node = doc.SelectSingleNode("//errorNs:UPnPError", nsm)) != null) { - string errorCode = node["errorCode"] != null ? node["errorCode"].InnerText : ""; - string errorDescription = node["errorDescription"] != null ? node["errorDescription"].InnerText : ""; - - return new ErrorMessage(Convert.ToInt32(errorCode, CultureInfo.InvariantCulture), errorDescription); - } - - if ((doc.SelectSingleNode("//responseNs:AddPortMappingResponse", nsm)) != null) - return new CreatePortMappingResponseMessage(); + public abstract HttpRequestOptions Encode(); - if ((doc.SelectSingleNode("//responseNs:DeletePortMappingResponse", nsm)) != null) - return new DeletePortMapResponseMessage(); - - if ((node = doc.SelectSingleNode("//responseNs:GetExternalIPAddressResponse", nsm)) != null) { - string newExternalIPAddress = node["NewExternalIPAddress"] != null ? node["NewExternalIPAddress"].InnerText : ""; - return new GetExternalIPAddressResponseMessage(newExternalIPAddress); - } - - if ((node = doc.SelectSingleNode("//responseNs:GetGenericPortMappingEntryResponse", nsm)) != null) - return new GetGenericPortMappingEntryResponseMessage(node, true); - - if ((node = doc.SelectSingleNode("//responseNs:GetSpecificPortMappingEntryResponse", nsm)) != null) - return new GetGenericPortMappingEntryResponseMessage(node, false); - - NatUtility.Log("Unknown message returned. Please send me back the following XML:"); - NatUtility.Log(message); - return null; + public virtual string Method + { + get { return "POST"; } } - public abstract WebRequest Encode(out byte[] body); - internal static void WriteFullElement(XmlWriter writer, string element, string value) { writer.WriteStartElement(element); |
