/// <summary> /// Gets the http request starting from a CoAP request. The method creates /// the HTTP request through its request line. The request line is built with /// the uri coming from the string representing the CoAP method and the uri /// obtained from the proxy-uri option. If a payload is provided, the HTTP /// request encloses an HTTP entity and consequently the content-type is set. /// Finally, the CoAP options are mapped to the HTTP headers. /// </summary> /// <param name="coapRequest">the coap request</param> /// <returns>the http request</returns> /// <exception cref="ArgumentNullException"></exception> /// <exception cref="TranslationException"></exception> public static WebRequest GetHttpRequest(Request coapRequest) { if (coapRequest == null) throw ThrowHelper.ArgumentNull("coapRequest"); Uri proxyUri = null; try { proxyUri = coapRequest.ProxyUri; } catch (UriFormatException e) { throw new TranslationException("Cannot get the proxy-uri from the coap message", e); } if (proxyUri == null) throw new TranslationException("Cannot get the proxy-uri from the coap message"); String coapMethod = coapRequest.Method.ToString(); WebRequest httpRequest = WebRequest.Create(proxyUri); httpRequest.Method = coapMethod; Byte[] payload = coapRequest.Payload; if (payload != null && payload.Length > 0) { Int32 coapContentType = coapRequest.ContentType; String contentTypeString; if (coapContentType == MediaType.Undefined) contentTypeString = "application/octet-stream"; else { coap2httpContentType.TryGetValue(coapContentType, out contentTypeString); if (String.IsNullOrEmpty(contentTypeString)) { contentTypeString = MediaType.ToString(coapContentType); } } httpRequest.ContentType = contentTypeString; Stream dataStream = httpRequest.GetRequestStream(); dataStream.Write(payload, 0, payload.Length); dataStream.Close(); } NameValueCollection headers = GetHttpHeaders(coapRequest.GetOptions()); foreach (String key in headers.AllKeys) { httpRequest.Headers[key] = headers[key]; } return httpRequest; }