5 #include <boost/bind/bind.hpp>
6 #include <boost/function.hpp>
10 #include "base/test/task_test_util.h"
18 #include <rapidjson/stringbuffer.h>
19 #include <boost/algorithm/string.hpp>
20 #include <boost/algorithm/string/predicate.hpp>
21 #include <boost/property_tree/ini_parser.hpp>
22 #include <boost/property_tree/ptree.hpp>
26 using namespace boost::placeholders;
29 boost::function<
void(contrail_rapidjson::Document&,
30 boost::system::error_code&, std::string,
int, std::string,
31 std::map<std::string, std::string>*)> cb):
32 conn_(c), uri_(uri), cb_(cb)
75 boost::function<void(contrail_rapidjson::Document&, boost::system::error_code&,
76 std::string,
int, std::string, std::map<std::string, std::string>*)>
91 const char *p = s.c_str();
93 std::cout << std::setfill(
'0') << std::setw(8) << std::hex << a;
95 if( i % 8 == 0 ) std::cout <<
' ';
97 std::cout <<
' ' << std::setfill(
'0') << std::setw(2) <<
98 std::hex << (unsigned) p[i];
103 for (
int i = 0; i < rem && i <
CHR_PER_LN; i++)
113 std::cout << std::dec;
131 std::ostringstream pstrm;
132 pstrm <<
"{\"auth\": {\"passwordCredentials\": {\"username\": \"" <<
137 shared_from_this(), rb, orb, _1, _2));
145 return boost::starts_with(s,
"X-AUTH-TOKEN:");
149 contrail_rapidjson::Document jdoc;
150 jdoc.Parse<0>(rb->
GetBody().c_str());
152 if (!jdoc.IsObject() || !jdoc.HasMember(
"access"))
155 if (!jdoc[
"access"].IsObject() || !jdoc[
"access"].HasMember(
"token"))
158 if (!jdoc[
"access"][
"token"].IsObject())
161 if (!jdoc[
"access"][
"token"].HasMember(
"id"))
164 if (!jdoc[
"access"][
"token"][
"id"].IsString())
167 return jdoc[
"access"][
"token"][
"id"].GetString();
172 boost::system::error_code &ec)
177 contrail_rapidjson::Document jdoc;
178 jdoc.Parse<0>(rb->
GetBody().c_str());
181 if (!token.empty()) {
184 shared_from_this(), _1)),
hdr_.end());
185 hdr_.push_back(std::string(
"X-AUTH-TOKEN: ") + token);
187 false,
true,
hdr_, boost::bind(
189 shared_from_this(), orb, _1, _2));
210 std::vector<std::string> data)
212 if (data.size() > 0) {
213 uri << qadded << key <<
"=";
215 for (std::vector<std::string>::iterator i = data.begin();
216 i != data.end(); i++) {
218 if (i + 1 != data.end())
226 std::vector<std::string> filters, std::vector<std::string> parents,
227 std::vector<std::string> refs, std::vector<std::string> fields)
229 std::ostringstream uri;
231 std::string qadded =
"?";
232 Add2URI(uri, qadded,
"id", ids);
233 Add2URI(uri, qadded,
"filters", filters);
234 Add2URI(uri, qadded,
"parent_id", parents);
235 Add2URI(uri, qadded,
"refs", refs);
236 Add2URI(uri, qadded,
"fields", fields);
242 client_(new
HttpClient(evm_,
"vnc-api http client"))
245 hdr_.push_back(std::string(
246 "Content-Type: application/json; charset=\"UTF-8\""));
247 hdr_.push_back(std::string(
"X-Contrail-Useragent: a7s30:vncapi.cc"));
253 boost::property_tree::ptree pt;
255 boost::property_tree::ini_parser::read_ini(
256 "/etc/contrail/vnc_api_lib.ini", pt);
257 }
catch (
const boost::property_tree::ptree_error &e) {
258 LOG(ERROR,
"Failed to parse /etc/contrail/vnc_api_lib.ini : " <<
271 std::cout <<
"VncApi::Stop\n";
282 std::vector<std::string> filters, std::vector<std::string> parents,
283 std::vector<std::string> refs, std::vector<std::string> fields,
284 boost::function<
void(contrail_rapidjson::Document&,
285 boost::system::error_code &ec, std::string
version,
int status,
287 std::map<std::string, std::string> *headers)> cb)
300 MakeUri(
type, ids, filters, parents, refs, fields), cb);
309 boost::system::error_code &ec)
314 std::cout <<
"\n" << str <<
"\nErr: " << ec << std::endl;
326 contrail_rapidjson::Document jdoc;
328 jdoc.Parse<0>(rb->
GetBody().c_str());
HttpConnection * CreateConnection(boost::asio::ip::tcp::endpoint)
void RemoveConnection(HttpConnection *)
std::map< std::string, std::string > * Headers()
void set_ca_cert(const std::string &ca_cert)
int HttpGet(const std::string &path, HttpCb)
void set_client_cert(const std::string &client_cert)
void set_use_ssl(bool ssl_flag)
int HttpPost(const std::string &post_string, const std::string &path, HttpCb)
void set_client_cert_type(const std::string &client_cert_type)
void set_client_key(const std::string &client_key)
HttpConnection * GetConnection()
boost::function< void(contrail_rapidjson::Document &, boost::system::error_code &, std::string, int, std::string, std::map< std::string, std::string > *)> cb_
RespBlock(HttpConnection *c, std::string uri, boost::function< void(contrail_rapidjson::Document &, boost::system::error_code &, std::string, int, std::string, std::map< std::string, std::string > *)> cb)
void Clear(HttpConnection *c=0)
boost::function< void(contrail_rapidjson::Document &, boost::system::error_code &, std::string, int, std::string, std::map< std::string, std::string > *)> GetCallBack()
void AddBody(std::string s)
static void DeleteServer(TcpServer *server)
bool CondTest(std::string s)
std::string MakeUri(std::string type, std::vector< std::string > ids, std::vector< std::string > filters, std::vector< std::string > parents, std::vector< std::string > refs, std::vector< std::string > fields)
void RespHandler(RespBlock *rb, std::string &str, boost::system::error_code &ec)
void Add2URI(std::ostringstream &uri, std::string &qadded, std::string key, std::vector< std::string > data)
void Reauthenticate(RespBlock *orb)
void KsRespHandler(RespBlock *rb, RespBlock *orb, std::string &str, boost::system::error_code &ec)
void GetConfig(std::string type, std::vector< std::string > ids, std::vector< std::string > filters, std::vector< std::string > parents, std::vector< std::string > refs, std::vector< std::string > fields, boost::function< void(contrail_rapidjson::Document &, boost::system::error_code &ec, std::string version, int status, std::string reason, std::map< std::string, std::string > *headers)> cb)
std::vector< std::string > hdr_
VncApi(EventManager *evm, VncApiConfig *cfg)
void hex_dump(std::string s)
std::string GetToken(RespBlock *rb) const
std::vector< std::string > kshdr_
#define LOG(_Level, _Msg)