// // License type: BSD 3-Clause License // License copy: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE // // Created by Stephane Bourque on 2021-03-04. // Arilia Wireless Inc. // // #include #include "OpenAPIRequest.h" #include "Poco/Net/HTTPSClientSession.h" #include #include #include #include #include #include "Utils.h" #include "Daemon.h" namespace OpenWifi { OpenAPIRequestGet::OpenAPIRequestGet( std::string ServiceType, std::string EndPoint, Types::StringPairVec & QueryData, uint64_t msTimeout): Type_(std::move(ServiceType)), EndPoint_(std::move(EndPoint)), QueryData_(QueryData), msTimeout_(msTimeout) { } int OpenAPIRequestGet::Do(Poco::JSON::Object::Ptr &ResponseObject) { try { auto Services = Daemon()->GetServices(Type_); for(auto const &Svc:Services) { Poco::URI URI(Svc.PrivateEndPoint); Poco::Net::HTTPSClientSession Session(URI.getHost(), URI.getPort()); URI.setPath(EndPoint_); for (const auto &qp : QueryData_) URI.addQueryParameter(qp.first, qp.second); std::string Path(URI.getPathAndQuery()); Session.setTimeout(Poco::Timespan(msTimeout_/1000, msTimeout_ % 1000)); Poco::Net::HTTPRequest Request(Poco::Net::HTTPRequest::HTTP_GET, Path, Poco::Net::HTTPMessage::HTTP_1_1); Request.add("X-API-KEY", Svc.AccessKey); Session.sendRequest(Request); Poco::Net::HTTPResponse Response; std::istream &is = Session.receiveResponse(Response); if(Response.getStatus()==Poco::Net::HTTPResponse::HTTP_OK) { Poco::JSON::Parser P; ResponseObject = P.parse(is).extract(); } return Response.getStatus(); } } catch (const Poco::Exception &E) { std::cerr << E.displayText() << std::endl; } return -1; } }