Browse Source

js remote console && remote connector

cl-refactor
Marek Kotewicz 10 years ago
parent
commit
6d87e226e0
  1. 8
      cmake/EthDependencies.cmake
  2. 16
      cmake/FindCURL.cmake
  3. 2
      libjsconsole/CMakeLists.txt
  4. 48
      libjsconsole/CURLRequest.cpp
  5. 38
      libjsconsole/CURLRequest.h
  6. 5
      libjsconsole/JSRemoteConsole.cpp
  7. 22
      libjsconsole/JSRemoteConsole.h
  8. 2
      libjsconsole/JSV8Connector.h
  9. 22
      libjsconsole/JSV8RemoteConnector.cpp
  10. 30
      libjsconsole/JSV8RemoteConnector.h

8
cmake/EthDependencies.cmake

@ -103,11 +103,11 @@ if (GMP_FOUND)
message(" - gmp lib : ${GMP_LIBRARIES}")
endif()
# curl is only requried for tests
# TODO specify min curl version, on windows we are currently using 7.29
# m_curl is only requried for tests
# TODO specify min m_curl version, on windows we are currently using 7.29
find_package (CURL)
message(" - curl header: ${CURL_INCLUDE_DIRS}")
message(" - curl lib : ${CURL_LIBRARIES}")
message(" - m_curl header: ${CURL_INCLUDE_DIRS}")
message(" - m_curl lib : ${CURL_LIBRARIES}")
# cpuid required for eth
find_package (Cpuid)

16
cmake/FindCURL.cmake

@ -1,26 +1,26 @@
# Find CURL
#
# Find the curl includes and library
# Find the m_curl includes and library
#
# if you nee to add a custom library search path, do it via via CMAKE_PREFIX_PATH
#
# This module defines
# CURL_INCLUDE_DIRS, where to find header, etc.
# CURL_LIBRARIES, the libraries needed to use curl.
# CURL_FOUND, If false, do not try to use curl.
# CURL_LIBRARIES, the libraries needed to use m_curl.
# CURL_FOUND, If false, do not try to use m_curl.
# only look in default directories
find_path(
CURL_INCLUDE_DIR
NAMES curl/curl.h
DOC "curl include dir"
NAMES m_curl/m_curl.h
DOC "m_curl include dir"
)
find_library(
CURL_LIBRARY
# names from cmake's FindCURL
NAMES curl curllib libcurl_imp curllib_static libcurl
DOC "curl library"
NAMES m_curl curllib libcurl_imp curllib_static libcurl
DOC "m_curl library"
)
set(CURL_INCLUDE_DIRS ${CURL_INCLUDE_DIR})
@ -34,7 +34,7 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
find_library(
CURL_LIBRARY_DEBUG
NAMES curld libcurld
DOC "curl debug library"
DOC "m_curl debug library"
)
set(CURL_LIBRARIES optimized ${CURL_LIBRARIES} debug ${CURL_LIBRARY_DEBUG})

2
libjsconsole/CMakeLists.txt

@ -14,6 +14,7 @@ include_directories(BEFORE ${V8_INCLUDE_DIRS})
include_directories(BEFORE ..)
include_directories(${READLINE_INCLUDE_DIRS})
include_directories(${JSON_RPC_CPP_INCLUDE_DIRS})
include_directories(${CURL_INCLUDE_DIRS})
set(EXECUTABLE jsconsole)
@ -28,3 +29,4 @@ target_link_libraries(${EXECUTABLE} web3jsonrpc)
install( TARGETS ${EXECUTABLE} RUNTIME DESTINATION bin ARCHIVE DESTINATION lib LIBRARY DESTINATION lib )
install( FILES ${HEADERS} DESTINATION include/${EXECUTABLE} )

48
libjsconsole/CURLRequest.cpp

@ -0,0 +1,48 @@
//
// Created by Marek Kotewicz on 15/06/15.
//
#include "CURLRequest.h"
using namespace std;
static size_t write_data(void *buffer, size_t elementSize, size_t numberOfElements, void *userp)
{
static_cast<stringstream *>(userp)->write((const char *)buffer, elementSize * numberOfElements);
return elementSize * numberOfElements;
}
void CURLRequest::commonCURLPreparation()
{
m_resultBuffer.str("");
curl_easy_setopt(m_curl, CURLOPT_URL, (m_url + "?").c_str());
curl_easy_setopt(m_curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(m_curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(m_curl, CURLOPT_WRITEDATA, &m_resultBuffer);
}
std::tuple<long, string> CURLRequest::commonCURLPerform()
{
CURLcode res = curl_easy_perform(m_curl);
if (res != CURLE_OK) {
throw runtime_error(curl_easy_strerror(res));
}
long httpCode = 0;
curl_easy_getinfo(m_curl, CURLINFO_RESPONSE_CODE, &httpCode);
return make_tuple(httpCode, m_resultBuffer.str());
}
std::tuple<long, string> CURLRequest::post()
{
commonCURLPreparation();
curl_easy_setopt(m_curl, CURLOPT_POSTFIELDS, m_body.c_str());
struct curl_slist *headerList = NULL;
headerList = curl_slist_append(headerList, "Content-Type: application/json");
curl_easy_setopt(m_curl, CURLOPT_HTTPHEADER, headerList);
auto result = commonCURLPerform();
curl_slist_free_all(headerList);
return result;
}

38
libjsconsole/CURLRequest.h

@ -0,0 +1,38 @@
//
// Created by Marek Kotewicz on 15/06/15.
//
// based on http://stackoverflow.com/questions/1011339/how-do-you-make-a-http-request-with-c/27026683#27026683
#include <stdio.h>
#include <sstream>
#include <unordered_map>
#include <curl/curl.h>
class CURLRequest
{
public:
CURLRequest(): m_curl(curl_easy_init()) {};
~CURLRequest()
{
if (m_curl)
curl_easy_cleanup(m_curl);
}
void setUrl(std::string _url) { m_url = _url; }
void setBody(std::string _body) { m_body = _body; }
std::tuple<long, std::string> post();
private:
std::string m_url;
std::string m_body;
CURL* m_curl;
std::stringstream m_resultBuffer;
void commonCURLPreparation();
std::tuple<long, std::string> commonCURLPerform();
};

5
libjsconsole/JSRemoteConsole.cpp

@ -0,0 +1,5 @@
//
// Created by Marek Kotewicz on 15/06/15.
//
#include "JSRemoteConsole.h"

22
libjsconsole/JSRemoteConsole.h

@ -0,0 +1,22 @@
//
// Created by Marek Kotewicz on 15/06/15.
//
#pragma once
#include <libjsengine/JSV8Engine.h>
#include <libjsengine/JSV8Printer.h>
#include "JSConsole.h"
namespace dev
{
namespace eth
{
class JSRemoteConsole: public JSConsole<JSV8Engine, JSV8Printer>
{
};
}
}

2
libjsconsole/JSV8Connector.h

@ -43,7 +43,7 @@ public:
bool SendResponse(std::string const& _response, void* _addInfo = nullptr);
// implement JSV8RPC interface
void onSend(char const* payload);
void onSend(char const* _payload);
};
}

22
libjsconsole/JSV8RemoteConnector.cpp

@ -0,0 +1,22 @@
//
// Created by Marek Kotewicz on 15/06/15.
//
#include "JSV8RemoteConnector.h"
#include "CURLRequest.h"
using namespace std;
using namespace dev;
using namespace dev::eth;
void JSV8RemoteConnector::onSend(char const* _payload)
{
CURLRequest request;
request.setUrl(m_url);
request.setBody(_payload);
long code;
string response;
tie(code, response) = request.post();
(void)code;
m_lastResponse = response.c_str();
}

30
libjsconsole/JSV8RemoteConnector.h

@ -0,0 +1,30 @@
//
// Created by Marek Kotewicz on 15/06/15.
//
#pragma once
#include <string>
#include <libjsengine/JSV8RPC.h>
namespace dev
{
namespace eth
{
class JSV8RemoteConnector : public JSV8RPC
{
public:
JSV8RemoteConnector(JSV8Engine const& _engine, std::string _url): JSV8RPC(_engine), m_url(_url) {}
virtual ~JSV8RemoteConnector();
// implement JSV8RPC interface
void onSend(char const* _payload);
private:
std::string m_url;
};
}
}
Loading…
Cancel
Save