Skip to content

Commit

Permalink
auth: Parse the HTTP URL when the remote backend is initialized
Browse files Browse the repository at this point in the history
(cherry picked from commit a11a87c)
(cherry picked from commit ab14ef9)
  • Loading branch information
rgacogne committed Mar 15, 2019
1 parent 55e2d0c commit 3c2f3a3
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 36 deletions.
83 changes: 47 additions & 36 deletions modules/remotebackend/httpconnector.cc
Expand Up @@ -35,7 +35,22 @@
#endif

HTTPConnector::HTTPConnector(std::map<std::string,std::string> options) {

if (options.find("url") == options.end()) {
throw PDNSException("Cannot find 'url' option in the remote backend HTTP connector's parameters");
}

this->d_url = options.find("url")->second;

try {
YaHTTP::URL url(d_url);
d_host = url.host;
d_port = url.port;
}
catch(const std::exception& e) {
throw PDNSException("Error parsing the 'url' option provided to the remote backend HTTP connector: " + std::string(e.what()));
}

if (options.find("url-suffix") != options.end()) {
this->d_url_suffix = options.find("url-suffix")->second;
} else {
Expand Down Expand Up @@ -334,45 +349,41 @@ int HTTPConnector::send_message(const Json& input) {
delete this->d_socket;
this->d_socket = NULL;

if (req.url.protocol == "unix") {
// connect using unix socket
} else {
// connect using tcp
struct addrinfo *gAddr, *gAddrPtr, hints;
std::string sPort = std::to_string(req.url.port);
memset(&hints,0,sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_flags = AI_ADDRCONFIG;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = 6; // tcp
if ((ec = getaddrinfo(req.url.host.c_str(), sPort.c_str(), &hints, &gAddr)) == 0) {
// try to connect to each address.
gAddrPtr = gAddr;
// connect using tcp
struct addrinfo *gAddr, *gAddrPtr, hints;
std::string sPort = std::to_string(d_port);
memset(&hints,0,sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_flags = AI_ADDRCONFIG;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = 6; // tcp
if ((ec = getaddrinfo(d_host.c_str(), sPort.c_str(), &hints, &gAddr)) == 0) {
// try to connect to each address.
gAddrPtr = gAddr;

while(gAddrPtr) {
try {
d_socket = new Socket(gAddrPtr->ai_family, gAddrPtr->ai_socktype, gAddrPtr->ai_protocol);
d_addr.setSockaddr(gAddrPtr->ai_addr, gAddrPtr->ai_addrlen);
d_socket->connect(d_addr);
d_socket->setNonBlocking();
d_socket->writenWithTimeout(out.str().c_str(), out.str().size(), timeout);
rv = 1;
} catch (NetworkError& ne) {
L<<Logger::Error<<"While writing to HTTP endpoint "<<d_addr.toStringWithPort()<<": "<<ne.what()<<std::endl;
} catch (...) {
L<<Logger::Error<<"While writing to HTTP endpoint "<<d_addr.toStringWithPort()<<": exception caught"<<std::endl;
}

if (rv > -1) break;
delete d_socket;
d_socket = NULL;
gAddrPtr = gAddrPtr->ai_next;

while(gAddrPtr) {
try {
d_socket = new Socket(gAddrPtr->ai_family, gAddrPtr->ai_socktype, gAddrPtr->ai_protocol);
d_addr.setSockaddr(gAddrPtr->ai_addr, gAddrPtr->ai_addrlen);
d_socket->connect(d_addr);
d_socket->setNonBlocking();
d_socket->writenWithTimeout(out.str().c_str(), out.str().size(), timeout);
rv = 1;
} catch (NetworkError& ne) {
L<<Logger::Error<<"While writing to HTTP endpoint "<<d_addr.toStringWithPort()<<": "<<ne.what()<<std::endl;
} catch (...) {
L<<Logger::Error<<"While writing to HTTP endpoint "<<d_addr.toStringWithPort()<<": exception caught"<<std::endl;
}
freeaddrinfo(gAddr);
} else {
L<<Logger::Error<<"Unable to resolve " << req.url.host << ": " << gai_strerror(ec) << std::endl;

if (rv > -1) break;
delete d_socket;
d_socket = NULL;
gAddrPtr = gAddrPtr->ai_next;

}
freeaddrinfo(gAddr);
} else {
L<<Logger::Error<<"Unable to resolve " << d_host << ": " << gai_strerror(ec) << std::endl;
}

return rv;
Expand Down
2 changes: 2 additions & 0 deletions modules/remotebackend/remotebackend.hh
Expand Up @@ -105,6 +105,8 @@ class HTTPConnector: public Connector {
std::string buildMemberListArgs(std::string prefix, const Json& args);
Socket* d_socket;
ComboAddress d_addr;
std::string d_host;
uint16_t d_port;
};

#ifdef REMOTEBACKEND_ZEROMQ
Expand Down

0 comments on commit 3c2f3a3

Please sign in to comment.