protected override Response ForwardRequest(Request incomingCoapRequest) { // check the invariant: the request must have the proxy-uri set if (!incomingCoapRequest.HasOption(OptionType.ProxyUri)) { if (log.IsWarnEnabled) log.Warn("Proxy-uri option not set."); return new Response(StatusCode.BadOption); } // remove the fake uri-path incomingCoapRequest.RemoveOptions(OptionType.UriPath); // HACK // get the proxy-uri set in the incoming coap request Uri proxyUri; try { proxyUri = incomingCoapRequest.ProxyUri; } catch (UriFormatException e) { if (log.IsWarnEnabled) log.Warn("Proxy-uri option malformed: " + e.Message); return new Response(StatusCode.BadOption); } WebRequest httpRequest = null; try { httpRequest = HttpTranslator.GetHttpRequest(incomingCoapRequest); } catch (TranslationException e) { if (log.IsWarnEnabled) log.Warn("Problems during the http/coap translation: " + e.Message); return new Response(StatusCode.BadGateway); } HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse(); DateTime timestamp = DateTime.Now; try { Response coapResponse = HttpTranslator.GetCoapResponse(httpResponse, incomingCoapRequest); coapResponse.Timestamp = timestamp; return coapResponse; } catch (TranslationException e) { if (log.IsWarnEnabled) log.Warn("Problems during the http/coap translation: " + e.Message); return new Response(StatusCode.BadGateway); } }