5 #include <boost/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>
27 boost::function<
void(contrail_rapidjson::Document&,
28 boost::system::error_code&, std::string,
int, std::string,
29 std::map<std::string, std::string>*)> cb):
30 conn_(c), uri_(uri), cb_(cb)
73 boost::function<void(contrail_rapidjson::Document&, boost::system::error_code&,
74 std::string,
int, std::string, std::map<std::string, std::string>*)>
89 const char *p = s.c_str();
91 std::cout << std::setfill(
'0') << std::setw(8) << std::hex << a;
93 if( i % 8 == 0 ) std::cout <<
' ';
95 std::cout <<
' ' << std::setfill(
'0') << std::setw(2) <<
96 std::hex << (unsigned) p[i];
101 for (
int i = 0; i < rem && i <
CHR_PER_LN; i++)
111 std::cout << std::dec;
129 std::ostringstream pstrm;
130 pstrm <<
"{\"auth\": {\"passwordCredentials\": {\"username\": \"" <<
135 shared_from_this(), rb, orb, _1, _2));
143 return boost::starts_with(s,
"X-AUTH-TOKEN:");
147 contrail_rapidjson::Document jdoc;
148 jdoc.Parse<0>(rb->
GetBody().c_str());
150 if (!jdoc.IsObject() || !jdoc.HasMember(
"access"))
153 if (!jdoc[
"access"].IsObject() || !jdoc[
"access"].HasMember(
"token"))
156 if (!jdoc[
"access"][
"token"].IsObject())
159 if (!jdoc[
"access"][
"token"].HasMember(
"id"))
162 if (!jdoc[
"access"][
"token"][
"id"].IsString())
165 return jdoc[
"access"][
"token"][
"id"].GetString();
170 boost::system::error_code &ec)
175 contrail_rapidjson::Document jdoc;
176 jdoc.Parse<0>(rb->
GetBody().c_str());
179 if (!token.empty()) {
182 shared_from_this(), _1)),
hdr_.end());
183 hdr_.push_back(std::string(
"X-AUTH-TOKEN: ") + token);
185 false,
true,
hdr_, boost::bind(
187 shared_from_this(), orb, _1, _2));
208 std::vector<std::string> data)
210 if (data.size() > 0) {
211 uri << qadded << key <<
"=";
213 for (std::vector<std::string>::iterator i = data.begin();
214 i != data.end(); i++) {
216 if (i + 1 != data.end())
224 std::vector<std::string> filters, std::vector<std::string> parents,
225 std::vector<std::string> refs, std::vector<std::string> fields)
227 std::ostringstream uri;
229 std::string qadded =
"?";
230 Add2URI(uri, qadded,
"id", ids);
231 Add2URI(uri, qadded,
"filters", filters);
232 Add2URI(uri, qadded,
"parent_id", parents);
233 Add2URI(uri, qadded,
"refs", refs);
234 Add2URI(uri, qadded,
"fields", fields);
240 client_(new
HttpClient(evm_,
"vnc-api http client"))
243 hdr_.push_back(std::string(
244 "Content-Type: application/json; charset=\"UTF-8\""));
245 hdr_.push_back(std::string(
"X-Contrail-Useragent: a7s30:vncapi.cc"));
251 boost::property_tree::ptree pt;
253 boost::property_tree::ini_parser::read_ini(
254 "/etc/contrail/vnc_api_lib.ini", pt);
255 }
catch (
const boost::property_tree::ptree_error &e) {
256 LOG(ERROR,
"Failed to parse /etc/contrail/vnc_api_lib.ini : " <<
269 std::cout <<
"VncApi::Stop\n";
280 std::vector<std::string> filters, std::vector<std::string> parents,
281 std::vector<std::string> refs, std::vector<std::string> fields,
282 boost::function<
void(contrail_rapidjson::Document&,
283 boost::system::error_code &ec, std::string
version,
int status,
285 std::map<std::string, std::string> *headers)> cb)
298 MakeUri(type, ids, filters, parents, refs, fields), cb);
307 boost::system::error_code &ec)
312 std::cout <<
"\n" << str <<
"\nErr: " << ec << std::endl;
324 contrail_rapidjson::Document jdoc;
326 jdoc.Parse<0>(rb->
GetBody().c_str());
std::string GetToken(RespBlock *rb) const
std::vector< std::string > hdr_
int HttpGet(const std::string &path, HttpCb)
void Clear(HttpConnection *c=0)
HttpConnection * CreateConnection(boost::asio::ip::tcp::endpoint)
void hex_dump(std::string s)
void RespHandler(RespBlock *rb, 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)
void AddBody(std::string s)
int HttpPost(const std::string &post_string, const std::string &path, HttpCb)
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 set_use_ssl(bool ssl_flag)
void set_ca_cert(const std::string &ca_cert)
std::vector< std::string > kshdr_
boost::function< void(contrail_rapidjson::Document &, boost::system::error_code &, std::string, int, std::string, std::map< std::string, std::string > *)> cb_
void Add2URI(std::ostringstream &uri, std::string &qadded, std::string key, std::vector< std::string > data)
HttpConnection * GetConnection()
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)
boost::function< void(contrail_rapidjson::Document &, boost::system::error_code &, std::string, int, std::string, std::map< std::string, std::string > *)> GetCallBack()
void RemoveConnection(HttpConnection *)
void set_client_cert(const std::string &client_cert)
static void DeleteServer(TcpServer *server)
void set_client_key(const std::string &client_key)
void set_client_cert_type(const std::string &client_cert_type)
VncApi(EventManager *evm, VncApiConfig *cfg)
#define LOG(_Level, _Msg)
void KsRespHandler(RespBlock *rb, RespBlock *orb, std::string &str, boost::system::error_code &ec)
void Reauthenticate(RespBlock *orb)
std::map< std::string, std::string > * Headers()
bool CondTest(std::string s)