X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Fcommon%2Faddress_helper.cc;fp=src%2Fceph%2Fsrc%2Fcommon%2Faddress_helper.cc;h=8f625f8db4d1fed50f0be9ae0607668aa3636760;hb=812ff6ca9fcd3e629e49d4328905f33eee8ca3f5;hp=0000000000000000000000000000000000000000;hpb=15280273faafb77777eab341909a3f495cf248d9;p=stor4nfv.git diff --git a/src/ceph/src/common/address_helper.cc b/src/ceph/src/common/address_helper.cc new file mode 100644 index 0000000..8f625f8 --- /dev/null +++ b/src/ceph/src/common/address_helper.cc @@ -0,0 +1,42 @@ +/* + * address_helper.cc + * + * Created on: Oct 27, 2013 + * Author: matt + */ + +#include + +#include "common/address_helper.h" +#include "boost/regex.hpp" + +using namespace std; + +// decode strings like "tcp://:" +int entity_addr_from_url(entity_addr_t *addr /* out */, const char *url) +{ + using namespace boost; + using std::endl; + + regex expr("(tcp|rdma)://([^:]*):([\\d]+)"); + cmatch m; + + if (regex_match(url, m, expr)) { + string host(m[2].first, m[2].second); + string port(m[3].first, m[3].second); + addrinfo hints; + memset(&hints, 0, sizeof(hints)); + hints.ai_family = PF_UNSPEC; + addrinfo *res; + int error = getaddrinfo(host.c_str(), NULL, &hints, &res); + if (! error) { + addr->set_sockaddr((sockaddr*)res->ai_addr); + addr->set_port(std::atoi(port.c_str())); + freeaddrinfo(res); + return 0; + } + } + + return 1; +} +