Exemplo n.º 1
0
        protected override async Task <CoapMessage> HandleRequestAsync(ICoapConnectionInformation connectionInformation, CoapMessage message)
        {
            _logger.LogDebug($"New request! {message}");

            var        response  = OicResponseUtility.CreateMessage(OicResponseCode.NotFound, "Not found");
            OicContext context   = null;
            Exception  exception = null;

            if (_options.UseCoreLink && message.GetUri().AbsolutePath.Equals("/.well-known/core", StringComparison.Ordinal))
            {
                return(GenerateCoreLinkResource(message));
            }

            try
            {
                // Create the OiCContext
                context = _application.CreateContext(new OicCoapContext(connectionInformation, message));

                await _application.ProcessRequestAsync(context);

                if (context.Response.ResposeCode != default(OicResponseCode))
                {
                    response = context.Response;
                }
                else
                {
                    // This should only occur during development.
                    var errorMessage = $"{context.GetType()}.{nameof(context.Response)}.{nameof(context.Response.ResposeCode)} was not set!";
                    _logger.LogError(errorMessage);
                    response = OicResponseUtility
                               .CreateMessage(OicResponseCode.InternalServerError, errorMessage);
                }
            }
            catch (Exception ex)
            {
                exception = ex;
                // TODO: Do we want to restrict error messages to developers/logging only?
                response = OicResponseUtility.FromException(ex);
            }
            finally
            {
                _application.DisposeContext <OicCoapContext>(context, exception);
            }

            _logger.LogDebug($"Responding with {response}");
            return(response.ToCoapMessage());
        }