From f4e2c7f0603fdb0609bf163ee5ea683a44b98d69 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Tue, 20 Mar 2012 21:42:09 +0900 Subject: Added JSON-RPC over WebSocket. Wslay library must be placed under deps/wslay. --- src/HttpServerBodyCommand.cc | 60 ++++---------------------------------------- 1 file changed, 5 insertions(+), 55 deletions(-) (limited to 'src/HttpServerBodyCommand.cc') diff --git a/src/HttpServerBodyCommand.cc b/src/HttpServerBodyCommand.cc index 9e0db7a9..48581532 100644 --- a/src/HttpServerBodyCommand.cc +++ b/src/HttpServerBodyCommand.cc @@ -86,21 +86,6 @@ HttpServerBodyCommand::~HttpServerBodyCommand() e_->deleteSocketForReadCheck(socket_, this); } -namespace { -rpc::RpcResponse -createJsonRpcErrorResponse -(int code, - const std::string& msg, - const SharedHandle& id) -{ - SharedHandle params = Dict::g(); - params->put("code", Integer::g(code)); - params->put("message", msg); - rpc::RpcResponse res(code, params, id); - return res; -} -} // namespace - namespace { std::string getJsonRpcContentType(bool script) { @@ -156,42 +141,6 @@ void HttpServerBodyCommand::addHttpServerResponseCommand() e_->setNoWait(true); } -rpc::RpcResponse -HttpServerBodyCommand::processJsonRpcRequest(const Dict* jsondict) -{ - - SharedHandle id = jsondict->get("id"); - if(!id) { - return createJsonRpcErrorResponse(-32600, "Invalid Request.", Null::g()); - } - const String* methodName = downcast(jsondict->get("method")); - if(!methodName) { - return createJsonRpcErrorResponse(-32600, "Invalid Request.", id); - } - SharedHandle params; - const SharedHandle& tempParams = jsondict->get("params"); - if(downcast(tempParams)) { - params = static_pointer_cast(tempParams); - } else if(!tempParams) { - params = List::g(); - } else { - // TODO No support for Named params - return createJsonRpcErrorResponse(-32602, "Invalid params.", id); - } - rpc::RpcRequest req(methodName->s(), params, id); - req.jsonRpc = true; - SharedHandle method; - try { - method = rpc::RpcMethodFactory::create(req.methodName); - } catch(RecoverableException& e) { - A2_LOG_INFO_EX(EX_EXCEPTION_CAUGHT, e); - return createJsonRpcErrorResponse(-32601, "Method not found.", id); - } - A2_LOG_INFO(fmt("Executing RPC method %s", req.methodName.c_str())); - rpc::RpcResponse res = method->execute(req, e_); - return res; -} - bool HttpServerBodyCommand::execute() { if(e_->getRequestGroupMan()->downloadFinished() || e_->isHaltRequested()) { @@ -242,13 +191,14 @@ bool HttpServerBodyCommand::execute() getCuid()), e); rpc::RpcResponse res - (createJsonRpcErrorResponse(-32700, "Parse error.", Null::g())); + (rpc::createJsonRpcErrorResponse(-32700, "Parse error.", + Null::g())); sendJsonRpcResponse(res, callback); return true; } const Dict* jsondict = downcast(json); if(jsondict) { - rpc::RpcResponse res = processJsonRpcRequest(jsondict); + rpc::RpcResponse res = rpc::processJsonRpcRequest(jsondict, e_); sendJsonRpcResponse(res, callback); } else { const List* jsonlist = downcast(json); @@ -259,14 +209,14 @@ bool HttpServerBodyCommand::execute() eoi = jsonlist->end(); i != eoi; ++i) { const Dict* jsondict = downcast(*i); if(jsondict) { - rpc::RpcResponse r = processJsonRpcRequest(jsondict); + rpc::RpcResponse r = rpc::processJsonRpcRequest(jsondict, e_); results.push_back(r); } } sendJsonRpcBatchResponse(results, callback); } else { rpc::RpcResponse res - (createJsonRpcErrorResponse + (rpc::createJsonRpcErrorResponse (-32600, "Invalid Request.", Null::g())); sendJsonRpcResponse(res, callback); } -- cgit