Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 5th, 2012  |  syntax: C++  |  size: 8.69 KB  |  hits: 18  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /**
  2.  * @file drupal.cpp
  3.  * @brief A brief description
  4.  *
  5.  * A longer description.
  6.  *
  7.  * @author sgerbino
  8.  */
  9.  
  10. #include "drupal.h"
  11.  
  12. namespace nodelink {
  13.  
  14.         drupal::drupal(std::string s) {
  15.                 set_url(s);
  16.                 init();
  17.         }
  18.  
  19.         drupal::~drupal() {
  20.  
  21.         }
  22.  
  23.         void drupal::set_url(std::string s) {
  24.                 url = s;
  25.         }
  26.  
  27.         std::string drupal::get_url() {
  28.                 return url;
  29.         }
  30.  
  31.         void drupal::set_sessid(std::string s) {
  32.                 sessid = s;
  33.         }
  34.  
  35.         std::string drupal::get_sessid() {
  36.                 return sessid;
  37.         }
  38.  
  39.         void drupal::init() {
  40.                 system_connect();
  41.         }
  42.  
  43.         bool drupal::user_login(std::string u, std::string p) {
  44.                 try {
  45.                         std::cout << "calling: user.login" << std::endl;
  46.                         std::string const method("user.login");
  47.                         xmlrpc_c::value result;
  48.                         xmlrpc_c::paramList pl;
  49.                         pl.add(xmlrpc_c::value_string(u));
  50.                         pl.add(xmlrpc_c::value_string(p));
  51.                         conn.call(url, method, pl, &result);
  52.                         xmlrpc_c::value_struct b = xmlrpc_c::value_struct(result);
  53.                         std::map<std::string, xmlrpc_c::value> m(
  54.                                         static_cast<std::map<std::string, xmlrpc_c::value> >(b));
  55.                         print_r(m, 0);
  56.                 }
  57.                 catch (std::exception &e) {
  58.                         std::cout << "Error: " << e.what() << std::endl;
  59.                 }
  60.                 catch (...) {
  61.                         std::cout << "Error" << std::endl;
  62.                 }
  63.                 return false;
  64.         }
  65.  
  66.         void drupal::system_connect() {
  67.                 xmlrpc_c::value result;
  68.                 try {
  69.                         std::cout << "calling: system.connect" << std::endl;
  70.                         std::string method("system.connect");
  71.                         conn.call(url, method, "ii", &result);
  72.                         xmlrpc_c::value_struct b = xmlrpc_c::value_struct(result);
  73.                         std::map<std::string, xmlrpc_c::value> m(
  74.                                         static_cast<std::map<std::string, xmlrpc_c::value> >(b));
  75.                         print_r(m, 0);
  76.                         std::map<std::string, xmlrpc_c::value>::iterator iter = m.find("sessid");
  77.                         xmlrpc_c::value_string str_val = xmlrpc_c::value_string(iter->second);
  78.                         set_sessid(str_val);
  79.                 }
  80.                 catch (std::exception const& e) {
  81.                         std::cerr << "Error: " << e.what() << std::endl;
  82.                 }
  83.                 catch (...) {
  84.                         std::cerr << "Error: " << std::endl;
  85.                 }
  86.         }
  87.  
  88.         void drupal::print_ar(std::vector<xmlrpc_c::value> vector, int depth) {
  89.                 for (unsigned int i = 0; i < vector.size(); i++) {
  90.                         for (int index = 0; index < depth; index++) {
  91.                                                 std::cout << "  ";
  92.                                         }
  93.                         switch (vector[i].type()) {
  94.                                 case xmlrpc_c::value::TYPE_STRING: {
  95.                                         xmlrpc_c::value_string str_val = xmlrpc_c::value_string(vector[i]);
  96.                                         std::string s = str_val;
  97.                                         std::cout << i << " => (string) \"" << s << "\","
  98.                                                         << std::endl;
  99.                                 }
  100.                                         break;
  101.                                 case xmlrpc_c::value::TYPE_STRUCT: {
  102.                                         std::cout << i << " => struct( " << std::endl;
  103.                                         xmlrpc_c::value_struct struct_val = xmlrpc_c::value_struct(
  104.                                                         vector[i]);
  105.                                         std::map<std::string, xmlrpc_c::value> struct_map =
  106.                                                         static_cast<std::map<std::string, xmlrpc_c::value> >(struct_val);
  107.                                         // Recursion.
  108.                                         print_r(struct_map, depth + 1);
  109.                                         for (int i = 0; i < depth; i++) {
  110.                                                 std::cout << "  ";
  111.                                         }
  112.                                         std::cout << ")," << std::endl;
  113.                                 }
  114.                                         break;
  115.                                 case xmlrpc_c::value::TYPE_DOUBLE: {
  116.                                         xmlrpc_c::value_double d = xmlrpc_c::value_string(vector[i]);
  117.                                         double dub = d;
  118.                                         std::cout << i << " => (double) " << dub << ","
  119.                                                         << std::endl;
  120.                                 }
  121.                                         break;
  122.                                 case xmlrpc_c::value::TYPE_BOOLEAN: {
  123.                                         xmlrpc_c::value_boolean boolean_val = xmlrpc_c::value_boolean(
  124.                                                         vector[i]);
  125.                                         std::string boole = boolean_val ? "true" : "false";
  126.                                         std::cout << i << " => (bool) " << boole << ","
  127.                                                         << std::endl;
  128.                                 }
  129.                                         break;
  130.                                 case xmlrpc_c::value::TYPE_ARRAY: {
  131.                                         std::cout << i << " => array( " << std::endl;
  132.                                         xmlrpc_c::value_array array_val = xmlrpc_c::value_array(vector[i]);
  133.                                         std::vector<xmlrpc_c::value> v = array_val.vectorValueValue();
  134.                                         print_ar(v, depth + 1);
  135.                                         for (int i = 0; i < depth; i++) {
  136.                                                 std::cout << "  ";
  137.                                         }
  138.                                         std::cout << ")," << std::endl;
  139.                                 }
  140.                                         break;
  141.                                 case xmlrpc_c::value::TYPE_DATETIME: {
  142.                                         xmlrpc_c::value_array date_val = xmlrpc_c::value_datetime(
  143.                                                         vector[i]);
  144.                                         std::cout << i << " => (datetime) " << date_val.cValue()
  145.                                                         << "," << std::endl;
  146.                                 }
  147.                                         break;
  148.                                 case xmlrpc_c::value::TYPE_INT: {
  149.                                         xmlrpc_c::value_int int_val = xmlrpc_c::value_int(vector[i]);
  150.                                         int z = int_val;
  151.                                         std::cout << i << " => (int) " << z << "," << std::endl;
  152.                                 }
  153.                                         break;
  154.                                 case xmlrpc_c::value::TYPE_C_PTR: {
  155.                                         std::cout << i << " => " << "?" << "," << std::endl;
  156.                                         // What the hell do I do with this?
  157.                                 }
  158.                                         break;
  159.                                 case xmlrpc_c::value::TYPE_BYTESTRING: {
  160.                                         xmlrpc_c::value_bytestring byte_val = xmlrpc_c::value_bytestring(
  161.                                                         vector[i]);
  162.                                         std::cout << i << " => (bytestring) ?" << "," << std::endl;
  163.                                 }
  164.                                         break;
  165.                                 case xmlrpc_c::value::TYPE_I8: {
  166.                                         xmlrpc_c::value_i8 i8_val = xmlrpc_c::value_i8(vector[i]);
  167.                                         std::cout << i << " => " << i8_val.cValue() << ","
  168.                                                         << std::endl;
  169.                                 }
  170.                                         break;
  171.                                 case xmlrpc_c::value::TYPE_NIL: {
  172.                                         xmlrpc_c::value_nil nil_val = xmlrpc_c::value_nil(vector[i]);
  173.                                         std::cout << i << " => " << nil_val.cValue() << ","
  174.                                                         << std::endl;
  175.                                 }
  176.                                         break;
  177.                                 case xmlrpc_c::value::TYPE_DEAD: {
  178.                                         std::cout << i << " => (dead) ?" << "," << std::endl;
  179.                                         // What the hell do I do with this?
  180.                                 }
  181.                                         break;
  182.                         }
  183.                 }
  184.         }
  185.         void drupal::print_r(std::map<std::string, xmlrpc_c::value> m , int depth) {
  186.                 for (std::map<std::string, xmlrpc_c::value>::iterator iter = m.begin();
  187.                                 iter != m.end(); ++iter) {
  188.                         for (int i = 0; i < depth; i++) {
  189.                                 std::cout << "  ";
  190.                         }
  191.                         switch (iter->second.type()) {
  192.                                 case xmlrpc_c::value::TYPE_STRING: {
  193.                                         xmlrpc_c::value_string str_val = xmlrpc_c::value_string(iter->second);
  194.                                         std::string s = str_val;
  195.                                         std::cout << iter->first << " => (string) \"" << s << "\","
  196.                                                         << std::endl;
  197.                                 }
  198.                                         break;
  199.                                 case xmlrpc_c::value::TYPE_STRUCT: {
  200.                                         std::cout << iter->first << " => struct( " << std::endl;
  201.                                         xmlrpc_c::value_struct struct_val = xmlrpc_c::value_struct(
  202.                                                         iter->second);
  203.                                         std::map<std::string, xmlrpc_c::value> struct_map =
  204.                                                         static_cast<std::map<std::string, xmlrpc_c::value> >(struct_val);
  205.                                         // Recursion.
  206.                                         print_r(struct_map, depth + 1);
  207.                                         for (int i = 0; i < depth; i++) {
  208.                                                 std::cout << "  ";
  209.                                         }
  210.                                         std::cout << ")," << std::endl;
  211.                                 }
  212.                                         break;
  213.                                 case xmlrpc_c::value::TYPE_DOUBLE: {
  214.                                         xmlrpc_c::value_double d = xmlrpc_c::value_string(iter->second);
  215.                                         double dub = d;
  216.                                         std::cout << iter->first << " => (double) " << dub << ","
  217.                                                         << std::endl;
  218.                                 }
  219.                                         break;
  220.                                 case xmlrpc_c::value::TYPE_BOOLEAN: {
  221.                                         xmlrpc_c::value_boolean boolean_val = xmlrpc_c::value_boolean(
  222.                                                         iter->second);
  223.                                         std::string boole = boolean_val ? "true" : "false";
  224.                                         std::cout << iter->first << " => (bool) " << boole << ","
  225.                                                         << std::endl;
  226.                                 }
  227.                                         break;
  228.                                 case xmlrpc_c::value::TYPE_ARRAY: {
  229.                                         std::cout << iter->first << " => array( " << std::endl;
  230.                                         xmlrpc_c::value_array array_val = xmlrpc_c::value_array(iter->second);
  231.                                         std::vector<xmlrpc_c::value> v = array_val.vectorValueValue();
  232.                                         print_ar(v, depth + 1);
  233.                                         for (int i = 0; i < depth; i++) {
  234.                                                 std::cout << "  ";
  235.                                         }
  236.                                         std::cout << ")," << std::endl;
  237.                                 }
  238.                                         break;
  239.                                 case xmlrpc_c::value::TYPE_DATETIME: {
  240.                                         xmlrpc_c::value_array date_val = xmlrpc_c::value_datetime(
  241.                                                         iter->second);
  242.                                         std::cout << iter->first << " => (datetime) " << date_val.cValue()
  243.                                                         << "," << std::endl;
  244.                                 }
  245.                                         break;
  246.                                 case xmlrpc_c::value::TYPE_INT: {
  247.                                         xmlrpc_c::value_int int_val = xmlrpc_c::value_int(iter->second);
  248.                                         int z = int_val;
  249.                                         std::cout << iter->first << " => (int) " << z << "," << std::endl;
  250.                                 }
  251.                                         break;
  252.                                 case xmlrpc_c::value::TYPE_C_PTR: {
  253.                                         std::cout << iter->first << " => " << "?" << "," << std::endl;
  254.                                         // What the hell do I do with this?
  255.                                 }
  256.                                         break;
  257.                                 case xmlrpc_c::value::TYPE_BYTESTRING: {
  258.                                         xmlrpc_c::value_bytestring byte_val = xmlrpc_c::value_bytestring(
  259.                                                         iter->second);
  260.                                         std::cout << iter->first << " => (bytestring) ?" << "," << std::endl;
  261.                                 }
  262.                                         break;
  263.                                 case xmlrpc_c::value::TYPE_I8: {
  264.                                         xmlrpc_c::value_i8 i8_val = xmlrpc_c::value_i8(iter->second);
  265.                                         std::cout << iter->first << " => " << i8_val.cValue() << ","
  266.                                                         << std::endl;
  267.                                 }
  268.                                         break;
  269.                                 case xmlrpc_c::value::TYPE_NIL: {
  270.                                         xmlrpc_c::value_nil nil_val = xmlrpc_c::value_nil(iter->second);
  271.                                         std::cout << iter->first << " => " << nil_val.cValue() << ","
  272.                                                         << std::endl;
  273.                                 }
  274.                                         break;
  275.                                 case xmlrpc_c::value::TYPE_DEAD: {
  276.                                         std::cout << iter->first << " => (dead) ?" << "," << std::endl;
  277.                                         // What the hell do I do with this?
  278.                                 }
  279.                                         break;
  280.                         }
  281.                 }
  282.         }
  283. } /* namespace nodelink */