Ejemplo n.º 1
0
        // HttpServer
        private override void processRequest(CryptoNote.HttpRequest req, CryptoNote.HttpResponse resp)
        {
            try
            {
                logger.functorMethod(Logging.Level.TRACE) << "HTTP request came: \n" << req;

                if (req.getUrl() == "/json_rpc")
                {
                    std::istringstream jsonInputStream = new std::istringstream(req.getBody());
                    Common.JsonValue   jsonRpcRequest  = new Common.JsonValue();
                    Common.JsonValue   jsonRpcResponse = new Common.JsonValue(Common.JsonValue.OBJECT);

                    try
                    {
                        jsonInputStream >> jsonRpcRequest.functorMethod;
                    }
                    catch (System.Exception)
                    {
                        logger.functorMethod(Logging.Level.DEBUGGING) << "Couldn't parse request: \"" << req.getBody() << "\"";
                        makeJsonParsingErrorResponse(ref jsonRpcResponse.functorMethod);
                        resp.setStatus(CryptoNote.HttpResponse.STATUS_200);
                        resp.setBody(jsonRpcResponse.toString());
                        return;
                    }

                    processJsonRpcRequest(jsonRpcRequest.functorMethod, jsonRpcResponse.functorMethod);

                    std::ostringstream jsonOutputStream = new std::ostringstream();
                    jsonOutputStream << jsonRpcResponse.functorMethod;

                    if (config.serviceConfig.corsHeader != "")
                    {
                        resp.addHeader("Access-Control-Allow-Origin", config.serviceConfig.corsHeader);
                    }

                    resp.setStatus(CryptoNote.HttpResponse.STATUS_200);
                    resp.setBody(jsonOutputStream.str());
                }
                else
                {
                    logger.functorMethod(Logging.Level.WARNING) << "Requested url \"" << req.getUrl() << "\" is not found";
                    resp.setStatus(CryptoNote.HttpResponse.STATUS_404);
                    return;
                }
            }
            catch (System.Exception e)
            {
                logger.functorMethod(Logging.Level.WARNING) << "Error while processing http request: " << e.Message;
                resp.setStatus(CryptoNote.HttpResponse.STATUS_500);
            }
        }