1 #include "HttpConnection.hpp"
2 #include "JsonFormatter.hpp"
8 #include <Poco/StreamCopier.h>
9 #include <Poco/Net/HTTPResponse.h>
11 using namespace Poco::Net;
13 gde::HttpConnection::HttpConnection(Poco::URI uri)
17 _session.setHost(uri.getHost());
18 _session.setPort(uri.getPort());
19 //_session.setProxy(machine, port);
20 } catch (Poco::Exception& e) {
21 std::cerr << e.displayText() << std::endl;
25 _path = uri.getPathAndQuery();
30 gde::HttpConnection::~HttpConnection()
35 // 1. request (json) --> CommandTO object
36 // 2. command data (json) from CommandTO --> <something>TO
37 // 3. call DAO with <something>TO and obtain another <something>TO
38 // 4. latter <something>TO --> (json) CommandResultTO data
39 // 5. set CommandResultTO code
40 // 6. CommandResultTO --> (json) response
43 gde::HttpConnection::_processRequest(const HTTPRequest& request,
44 const std::string& requestBody)
46 int code = CommandResultTO::OK;
47 std::string message = "";
48 std::string data = "";
50 std::cout << "processRequest: body = " << requestBody << std::endl;
53 std::cout << "Sending request...\n";
54 std::ostream& os = _session.sendRequest((HTTPRequest&)request);
55 // Send request body, if any
56 if (!requestBody.empty()) {
57 std::istringstream iss(requestBody);
58 Poco::StreamCopier::copyStream((std::istream&)iss, os);
61 std::cout << "Getting response...\n";
63 HTTPResponse response;
64 std::istream& rs = _session.receiveResponse(response);
65 std::cout << response.getStatus() << " " << response.getReason() << std::endl;
66 std::ostringstream responseBody;
67 Poco::StreamCopier::copyStream(rs, responseBody);
68 // responseBody contains a CommandResultTO in json format
69 std::cout << "Returning result...\n";
70 return CommandResultTO::fromJson(responseBody.str());
71 } catch (Poco::Exception& e) {
72 std::cerr << e.displayText() << std::endl;
73 return CommandResultTO(CommandResultTO::ERROR);
78 gde::HttpConnection::doGet(const CommandTO& cto)
80 HTTPRequest request(HTTPRequest::HTTP_GET, _path, HTTPMessage::HTTP_1_1);
81 return _processRequest(request, cto.getData());
85 gde::HttpConnection::doPost(const CommandTO& cto)
87 HTTPRequest request(HTTPRequest::HTTP_POST, _path, HTTPMessage::HTTP_1_1);
88 return _processRequest(request, cto.getData());