From 937f9718f8339b151a0f38a0a757fbecef5812ed Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 30 Dec 2012 17:16:53 -0800 Subject: [PATCH] Support paths for subscribe via json-rpc. --- src/cpp/ripple/CallRPC.cpp | 5 +++-- src/cpp/ripple/CallRPC.h | 2 +- src/cpp/ripple/RPC.h | 2 +- src/cpp/ripple/RPCSub.cpp | 10 ++-------- src/cpp/ripple/RPCSub.h | 1 + src/cpp/ripple/rpc.cpp | 6 ++++-- 6 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index c04f1cdf6..4b5b46816 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -537,6 +537,7 @@ int commandLineRPC(const std::vector& vCmd) theConfig.RPC_PORT, theConfig.RPC_USER, theConfig.RPC_PASSWORD, + "", jvRequest.isMember("method") // Allow parser to rewrite method. ? jvRequest["method"].asString() : vCmd[0], @@ -597,7 +598,7 @@ int commandLineRPC(const std::vector& vCmd) return nRet; } -Json::Value callRPC(const std::string& strIp, const int iPort, const std::string& strUsername, const std::string& strPassword, const std::string& strMethod, const Json::Value& params) +Json::Value callRPC(const std::string& strIp, const int iPort, const std::string& strUsername, const std::string& strPassword, const std::string& strPath, const std::string& strMethod, const Json::Value& params) { // Connect to localhost if (!theConfig.QUIET) @@ -618,7 +619,7 @@ Json::Value callRPC(const std::string& strIp, const int iPort, const std::string // Send request std::string strRequest = JSONRPCRequest(strMethod, params, Json::Value(1)); cLog(lsDEBUG) << "send request " << strMethod << " : " << strRequest << std::endl; - std::string strPost = createHTTPPost(strRequest, mapRequestHeaders); + std::string strPost = createHTTPPost(strPath, strRequest, mapRequestHeaders); stream << strPost << std::flush; // std::cerr << "post " << strPost << std::endl; diff --git a/src/cpp/ripple/CallRPC.h b/src/cpp/ripple/CallRPC.h index 9b9ca8396..18f25eedb 100644 --- a/src/cpp/ripple/CallRPC.h +++ b/src/cpp/ripple/CallRPC.h @@ -41,7 +41,7 @@ public: }; extern int commandLineRPC(const std::vector& vCmd); -extern Json::Value callRPC(const std::string& strIp, const int iPort, const std::string& strUsername, const std::string& strPassword, const std::string& strMethod, const Json::Value& params); +extern Json::Value callRPC(const std::string& strIp, const int iPort, const std::string& strUsername, const std::string& strPassword, const std::string& strPath, const std::string& strMethod, const Json::Value& params); #endif diff --git a/src/cpp/ripple/RPC.h b/src/cpp/ripple/RPC.h index 7d0406a20..61d42a6be 100644 --- a/src/cpp/ripple/RPC.h +++ b/src/cpp/ripple/RPC.h @@ -29,7 +29,7 @@ enum http_status_type extern std::string JSONRPCRequest(const std::string& strMethod, const Json::Value& params, const Json::Value& id); -extern std::string createHTTPPost(const std::string& strMsg, +extern std::string createHTTPPost(const std::string& strPath, const std::string& strMsg, const std::map& mapRequestHeaders); extern int ReadHTTP(std::basic_istream& stream, diff --git a/src/cpp/ripple/RPCSub.cpp b/src/cpp/ripple/RPCSub.cpp index 35ec7b719..871803e2d 100644 --- a/src/cpp/ripple/RPCSub.cpp +++ b/src/cpp/ripple/RPCSub.cpp @@ -10,9 +10,8 @@ RPCSub::RPCSub(const std::string& strUrl, const std::string& strUsername, const : mUrl(strUrl), mUsername(strUsername), mPassword(strPassword) { std::string strScheme; - std::string strPath; - if (!parseUrl(strUrl, strScheme, mIp, mPort, strPath)) + if (!parseUrl(strUrl, strScheme, mIp, mPort, mPath)) { throw std::runtime_error("Failed to parse url."); } @@ -20,11 +19,6 @@ RPCSub::RPCSub(const std::string& strUrl, const std::string& strUsername, const { throw std::runtime_error("Only http is supported."); } - else if (!strPath.empty()) - { - // XXX FIXME: support path - throw std::runtime_error("Only empty path is supported."); - } mSeq = 1; } @@ -64,7 +58,7 @@ void RPCSub::sendThread() // Drop result. try { - (void) callRPC(mIp, mPort, mUsername, mPassword, "event", jvEvent); + (void) callRPC(mIp, mPort, mUsername, mPassword, mPath, "event", jvEvent); } catch (const std::exception& e) { diff --git a/src/cpp/ripple/RPCSub.h b/src/cpp/ripple/RPCSub.h index 1ab72c917..8cca3e7f5 100644 --- a/src/cpp/ripple/RPCSub.h +++ b/src/cpp/ripple/RPCSub.h @@ -17,6 +17,7 @@ class RPCSub : public InfoSub int mPort; std::string mUsername; std::string mPassword; + std::string mPath; int mSeq; // Next id to allocate. diff --git a/src/cpp/ripple/rpc.cpp b/src/cpp/ripple/rpc.cpp index 97731b763..5b80d3e65 100644 --- a/src/cpp/ripple/rpc.cpp +++ b/src/cpp/ripple/rpc.cpp @@ -39,11 +39,13 @@ Json::Value JSONRPCError(int code, const std::string& message) // and to be compatible with other JSON-RPC implementations. // -std::string createHTTPPost(const std::string& strMsg, const std::map& mapRequestHeaders) +std::string createHTTPPost(const std::string& strPath, const std::string& strMsg, const std::map& mapRequestHeaders) { std::ostringstream s; - s << "POST / HTTP/1.1\r\n" + s << "POST " + << (strPath.empty() ? "/" : strPath) + << " HTTP/1.1\r\n" << "User-Agent: " SYSTEM_NAME "-json-rpc/" << FormatFullVersion() << "\r\n" << "Host: 127.0.0.1\r\n" << "Content-Type: application/json\r\n"