main.cpp 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751
  1. #include <iostream>
  2. #include "httppost.h"
  3. #include "cwmp.nsmap"
  4. #include "soapcwmpService.h"
  5. #include "plugin/threads.h"
  6. #include <vector>
  7. #include <algorithm>
  8. #include <signal.h>
  9. #include <thread>
  10. #include <fstream>
  11. #include "json.hpp"
  12. #include <mysql++/mysql++.h>
  13. #include <zdb.h>
  14. #define HOST "localhost"
  15. #define USER "acs"
  16. #define PASSWORD "159753"
  17. #define DATABASE "ACS"
  18. #define PORT 3306
  19. using json = nlohmann::json;
  20. int port = 7547;
  21. //int port = 8001;
  22. int POST_handler(struct soap *soap);
  23. struct http_post_handlers http_post_handlers[] = {
  24. {"POST", POST_handler},
  25. {NULL}
  26. };
  27. std::string currentISO8601TimeUTC() {
  28. std::time_t t = std::time(nullptr);
  29. std::ostringstream ss;
  30. ss << std::put_time(std::localtime(&t), "%FT%T %Z");
  31. return ss.str();
  32. }
  33. void handler(int s) {
  34. printf("Sassan Caught SIGPIPE ...\n");
  35. }
  36. void *process_request(void *arg) {
  37. cwmpService *service = (cwmpService *) arg;
  38. THREAD_DETACH(THREAD_ID);
  39. if (service) {
  40. service->serve();
  41. service->destroy(); /* clean up */
  42. delete service;
  43. }
  44. return NULL;
  45. }
  46. //<editor-fold desc="zbx_keys">
  47. std::string zbx_keys[] = {"InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.Uptime",
  48. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.UL_MCS",
  49. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.TX_Power",
  50. "InternetGatewayDevice.DeviceInfo.SoftwareVersion",
  51. "InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.SINR2",
  52. "InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.SINR1",
  53. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.RSRP2",
  54. "InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.RSRQ",
  55. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.RSRQ",
  56. "InternetGatewayDevice.LANDevice.1.LANHostConfigManagement.DHCPServerEnable",
  57. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Setting.Status",
  58. "InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ConnectionStatus",
  59. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.RSRP1",
  60. "InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ExternalIPAddress",
  61. "InternetGatewayDevice.WEB_GUI.Overview.DeviceInfo.IMSI",
  62. "InternetGatewayDevice.WEB_GUI.Overview.DeviceInfo.IMEI",
  63. "InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.EnodeBId",
  64. "InternetGatewayDevice.DeviceInfo.MemoryStatus.Free",
  65. "InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.EnodeBId",
  66. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.DL_MCS",
  67. "InternetGatewayDevice.Time.CurrentLocalTime",
  68. "InternetGatewayDevice.DeviceInfo.ProcessStatus.CPUUsage",
  69. "InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.CellId",
  70. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.BytesSent",
  71. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.BytesReceived",
  72. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.PacketsReceived",
  73. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.PacketsSent",
  74. "InternetGatewayDevice.DeviceInfo.UpTime",
  75. "InternetGatewayDevice.DeviceInfo.X_TGT_IMSI",
  76. "InternetGatewayDevice.WEB_GUI.Network.Network_Mode.WANIPAddress",
  77. "InternetGatewayDevice.WEB_GUI.Network.ScanMode.Settings.PCILock",
  78. "InternetGatewayDevice.WEB_GUI.Overview.LTEStatus.DnsServer",
  79. "InternetGatewayDevice.DeviceInfo.HardwareVersion",
  80. "InternetGatewayDevice.DeviceInfo.Manufacturer",
  81. "InternetGatewayDevice.DeviceInfo.ManufacturerOUI",
  82. "InternetGatewayDevice.DeviceInfo.ModelName",
  83. "InternetGatewayDevice.DeviceInfo.ModelNumber",
  84. "InternetGatewayDevice.DeviceInfo.Description",
  85. "InternetGatewayDevice.DeviceInfo.ProductClass",
  86. "InternetGatewayDevice.DeviceInfo.SerialNumber",
  87. "InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.1.Enable",
  88. "InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.2.Enable",
  89. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Enable",
  90. "InternetGatewayDevice.WEB_GUI.Overview.LTEStatus.DL_DataRate_Current",
  91. "InternetGatewayDevice.WEB_GUI.Overview.LTEStatus.UL_DataRate_Current",
  92. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.PCI",
  93. "InternetGatewayDevice.WEB_GUI.Overview.LANStatus.MacAddress",
  94. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.DL_Frequency",
  95. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.UL_Frequency",
  96. "InternetGatewayDevice.ManagementServer.ConnectionRequestURL",
  97. "InternetGatewayDevice.ManagementServer.PeriodicInformInterval",
  98. "InternetGatewayDevice.LANDevice.1.LANHostConfigManagement.IPInterface.1.IPInterfaceIPAddress"
  99. };
  100. //</editor-fold>
  101. void ZBX_Send(char **Name, char **Value, char **imsi) {
  102. if (!strcmp(*Name, "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.DL_MCS") == 0 or
  103. !strcmp(*Name, "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.UL_MCS") == 0) {
  104. if (!strcmp(*Value, "QPSK")) {
  105. *Value = "4";
  106. } else if (!strcmp(*Value, "QAM8")) {
  107. *Value = "8";
  108. } else if (!strcmp(*Value, "QAM16")) {
  109. *Value = "16";
  110. } else if (!strcmp(*Value, "QAM32")) {
  111. *Value = "32";
  112. } else if (!strcmp(*Value, "QAM64")) {
  113. *Value = "64";
  114. }
  115. std::ofstream zbx_data;
  116. std::string _time{};
  117. time_t second;
  118. second = time(NULL);
  119. std::stringstream strstream;
  120. strstream << second;
  121. strstream >> _time;
  122. zbx_data.open("/var/tmp/zbx_sender-" + _time, std::ios_base::app);
  123. zbx_data << "IMSI-" << *imsi << " " << *Name << " " << second << " \"" << *Value << "\"" << std::endl;
  124. }
  125. }
  126. std::string url_encode(const std::string &value) {
  127. std::ostringstream escaped;
  128. escaped.fill('0');
  129. escaped << std::hex;
  130. for (std::string::const_iterator i = value.begin(), n = value.end(); i != n; ++i) {
  131. std::string::value_type c = (*i);
  132. // Keep alphanumeric and other accepted characters intact
  133. if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') {
  134. escaped << c;
  135. continue;
  136. }
  137. // Any other characters are percent-encoded
  138. escaped << std::uppercase;
  139. escaped << '%' << std::setw(2) << int((unsigned char) c);
  140. escaped << std::nouppercase;
  141. }
  142. return escaped.str();
  143. }
  144. int main() {
  145. signal(SIGPIPE, handler);
  146. std::cout << "TR069 Server Started on Port " << port << "(1.3)...\n" << std::endl;
  147. cwmpService service(SOAP_XML_INDENT);
  148. service.soap->send_timeout = service.soap->recv_timeout = 5;
  149. service.soap->transfer_timeout = 60;
  150. service.soap->keep_alive = 20;
  151. service.soap->tcp_keep_alive = 1;
  152. service.soap->bind_flags |= SO_REUSEADDR;
  153. service.soap->bind_flags |= SO_REUSEPORT;
  154. service.soap->bind_flags |= MSG_NOSIGNAL;
  155. soap_init2(service.soap, SOAP_IO_KEEPALIVE, SOAP_IO_KEEPALIVE);
  156. SOAP_SOCKET m = service.bind(NULL, port, 100); /* master socket */
  157. if (soap_valid_socket(m)) {
  158. while (soap_valid_socket(service.accept())) {
  159. THREAD_TYPE tid;
  160. void *arg = (void *) service.copy();
  161. if (arg)
  162. while (THREAD_CREATE(&tid, (void *(*)(void *)) process_request, arg))
  163. sleep(1);
  164. }
  165. }
  166. service.soap_stream_fault(std::cerr);
  167. service.destroy(); /* clean up */
  168. return 0;
  169. }
  170. int POST_handler(struct soap *soap) {
  171. // struct _cwmp__GetParameterValues *res = soap_new__cwmp__GetParameterValues(soap, -1);
  172. // struct ParameterNames *list = soap_new_ParameterNames(soap, -1);
  173. const char *buf;
  174. size_t len;
  175. buf = soap_http_get_body(soap, &len);
  176. // std::cerr<<"Sassan3 ID: "<<soap->header->cwmp__SupportedCWMPVersions<<std::endl;
  177. // std::cerr<<"Debug1: "<<len<<std::endl;
  178. // std::cerr<<"Debug2: "<<buf<<std::endl;
  179. /* if HTTP has a content type header or a HTTP body is present then return 404 */
  180. if (len == 0) {
  181. std::cerr << "Sassan 204...: " << buf << std::endl;
  182. return 204; // HTTP 400 Bad Request
  183. // }else {
  184. // std::cerr<<"Debug0: "<<buf<<std::endl;
  185. // std::cerr<<"Debug1: "<<len<<std::endl;
  186. // std::cerr<<"Debug2: "<<buf<<std::endl;
  187. }
  188. // if (soap->http_content || soap_http_has_body(soap))
  189. // return 404;
  190. // (void)soap_end_recv(soap);
  191. // /* populate the response with one array item */
  192. // if (res && list)
  193. // {
  194. // list->__size = 1;
  195. // if ((list->__ptrstring = (char**)soap_malloc(soap, list->__size * sizeof(char*))) != NULL)
  196. // {
  197. // list->__ptrstring[0] = soap_strdup(soap, "...");
  198. // res->ParameterNames = list;
  199. // }
  200. // }
  201. // /* send response */
  202. // soap->encodingStyle = "";
  203. // soap_serializeheader(soap);
  204. // soap_serialize__cwmp__GetParameterValues(soap, res);
  205. // if (soap_begin_count(soap))
  206. // return soap->error;
  207. // if (soap->mode & SOAP_IO_LENGTH)
  208. // {
  209. // if (soap_envelope_begin_out(soap)
  210. // || soap_putheader(soap)
  211. // || soap_body_begin_out(soap)
  212. // || soap_put__cwmp__GetParameterValues(soap, res, "cwmp:GetParameterValues", "")
  213. // || soap_body_end_out(soap)
  214. // || soap_envelope_end_out(soap))
  215. // return soap->error;
  216. // };
  217. // if (soap_end_count(soap)
  218. // || soap_response(soap, SOAP_OK)
  219. // || soap_envelope_begin_out(soap)
  220. // || soap_putheader(soap)
  221. // || soap_body_begin_out(soap)
  222. // || soap_put__cwmp__GetParameterValues(soap, res, "cwmp:GetParameterValues", "")
  223. // || soap_body_end_out(soap)
  224. // || soap_envelope_end_out(soap)
  225. // || soap_end_send(soap))
  226. // return soap->error;
  227. // return soap_closesock(soap);
  228. }
  229. int cwmpService::GetParameterNames(struct _cwmp__GetParameterNames *cwmp__GetParameterNames,
  230. struct _cwmp__GetParameterNamesResponse *cwmp__GetParameterNamesResponse) { return SOAP_OK; }
  231. int cwmpService::GetParameterValues(struct _cwmp__GetParameterValues *cwmp__GetParameterValues,
  232. struct _cwmp__GetParameterValuesResponse *cwmp__GetParameterValuesResponse) { return SOAP_OK; }
  233. int cwmpService::SetParameterValues(struct _cwmp__SetParameterValues *cwmp__SetParameterValues,
  234. struct _cwmp__SetParameterValuesResponse *cwmp__SetParameterValuesResponse) {
  235. return SOAP_OK;
  236. }
  237. int cwmpService::SetParameterAttributes(
  238. struct _cwmp__SetParameterAttributes *cwmp__SetParameterAttributes,
  239. struct _cwmp__SetParameterAttributesResponse *cwmp__SetParameterAttributesResponse) { return SOAP_OK; }
  240. int cwmpService::GetParameterAttributes(struct _cwmp__GetParameterAttributes *cwmp__GetParameterAttributes,
  241. struct _cwmp__GetParameterAttributesResponse *cwmp__GetParameterAttributesResponse) { return SOAP_OK; }
  242. int cwmpService::Download(struct _cwmp__Download *cwmp__Download,
  243. struct _cwmp__DownloadResponse *cwmp__DownloadResponse) { return SOAP_OK; }
  244. int cwmpService::Upload(
  245. struct _cwmp__Upload *cwmp__Upload,
  246. struct _cwmp__UploadResponse *cwmp__UploadResponse) { return SOAP_OK; }
  247. int cwmpService::AddObject(
  248. struct _cwmp__AddObject *cwmp__AddObject,
  249. struct _cwmp__AddObjectResponse *cwmp__AddObjectResponse) { return SOAP_OK; }
  250. int cwmpService::DeleteObject(
  251. struct _cwmp__DeleteObject *cwmp__DeleteObject,
  252. struct _cwmp__DeleteObjectResponse *cwmp__DeleteObjectResponse) { return SOAP_OK; }
  253. int cwmpService::GetRPCMethods(
  254. struct _cwmp__GetRPCMethods *cwmp__GetRPCMethods,
  255. struct _cwmp__GetRPCMethodsResponse *cwmp__GetRPCMethodsResponse) { return SOAP_OK; }
  256. int cwmpService::GetParameterValuesResponse(
  257. struct _cwmp__GetParameterValuesResponse *cwmp__GetParameterValuesResponse) { return SOAP_OK; }
  258. int cwmpService::Inform(struct _cwmp__Inform *cwmp__Inform, struct _cwmp__InformResponse *cwmp__InformResponse,
  259. struct soap *soap) {
  260. std::string _id = std::string(cwmp__Inform->DeviceId->OUI) + "-" + std::string(cwmp__Inform->DeviceId->ProductClass)
  261. + "-" + std::string(cwmp__Inform->DeviceId->SerialNumber);
  262. std::cerr << "Inform Recieved from: " << url_encode(_id) << " at " << time(NULL) << std::endl;
  263. char *imsi;
  264. char *ip;
  265. auto timestamp = std::chrono::high_resolution_clock::now();
  266. std::vector<std::thread> th;
  267. std::vector<std::thread> th_acs;
  268. // int indexes[24];
  269. std::vector<int> ind;
  270. std::ofstream outfile;
  271. outfile.open("/var/tmp/tr069/" + url_encode(_id), std::ios::out | std::ios::trunc);
  272. std::ofstream mongoData;
  273. time_t second;
  274. std::string _time;
  275. std::map<std::string, std::string> tr069{};
  276. second = time(NULL);
  277. std::stringstream strstream;
  278. strstream << second;
  279. strstream >> _time;
  280. ip = soap->host;
  281. for (int i = 0; i < cwmp__Inform->ParameterList->__size; ++i) {
  282. char *_Name = cwmp__Inform->ParameterList->__ptrParameterValueStruct[i]->Name;
  283. char *_Value = cwmp__Inform->ParameterList->__ptrParameterValueStruct[i]->Value;
  284. if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.X_TGT_IMSI") == 0) {
  285. imsi = _Value;
  286. break;
  287. }
  288. }
  289. for (int i = 0; i < cwmp__Inform->ParameterList->__size; ++i) {
  290. char *_Name = cwmp__Inform->ParameterList->__ptrParameterValueStruct[i]->Name;
  291. char *_Value = cwmp__Inform->ParameterList->__ptrParameterValueStruct[i]->Value;
  292. outfile << _Name << ": " << _Value << std::endl;
  293. // if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.X_TGT_IMSI") == 0) {
  294. // imsi = _Value;
  295. // }
  296. // if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.Network_Mode.WANIPAddress") == 0) {
  297. // ip = _Value;
  298. // }
  299. std::string cpe = cwmp__Inform->DeviceId->SerialNumber;
  300. auto j = std::find(std::begin(zbx_keys), std::end(zbx_keys), _Name);
  301. if (j != std::end(zbx_keys)) {
  302. if (!strcmp(_Name, "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.DL_MCS") == 0 or
  303. !strcmp(_Name, "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.UL_MCS") == 0) {
  304. if (!strcmp(_Value, "QPSK")) {
  305. _Value = "4";
  306. } else if (!strcmp(_Value, "QAM8")) {
  307. _Value = "8";
  308. } else if (!strcmp(_Value, "QAM16")) {
  309. _Value = "16";
  310. } else if (!strcmp(_Value, "QAM32")) {
  311. _Value = "32";
  312. } else if (!strcmp(_Value, "QAM64")) {
  313. _Value = "64";
  314. }
  315. std::ofstream zbx_data;
  316. std::string _time{};
  317. time_t second;
  318. second = time(NULL);
  319. std::stringstream strstream;
  320. strstream << second;
  321. strstream >> _time;
  322. zbx_data.open("/var/tmp/zbx_sender-" + _time, std::ios_base::app);
  323. zbx_data << "IMSI-" << imsi << " " << _Name << " " << second << " \"" << _Value << "\"" << std::endl;
  324. }
  325. //<editor-fold desc="Map Filler">
  326. if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.HardwareVersion") == 0)
  327. tr069.insert({"HardwareVersion", _Value});
  328. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.SoftwareVersion") == 0)
  329. tr069.insert({"SoftwareVersion", _Value});
  330. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.UpTime") == 0)
  331. tr069.insert({"UpTime", _Value});
  332. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Overview.DeviceInfo.IMEI") == 0)
  333. tr069.insert({"IMEI", _Value});
  334. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.X_TGT_IMSI") == 0)
  335. tr069.insert({"IMSI", _Value});
  336. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.MemoryStatus.Free") == 0)
  337. tr069.insert({"Free", _Value});
  338. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.ProcessStatus.CPUUsage") == 0)
  339. tr069.insert({"CPUUsage", _Value});
  340. else if (std::string(_Name).compare("InternetGatewayDevice.Time.CurrentLocalTime") == 0)
  341. tr069.insert({"CurrentLocalTime", _Value});
  342. else if (std::string(_Name).compare(
  343. "InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.1.Enable") == 0)
  344. tr069.insert({"LAN1Enable", _Value});
  345. else if (std::string(_Name).compare(
  346. "InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.2.Enable") == 0)
  347. tr069.insert({"LAN2Enable", _Value});
  348. else if (std::string(_Name).compare("InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.SINR1") == 0)
  349. tr069.insert({"SINR1", _Value});
  350. else if (std::string(_Name).compare("InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.SINR2") == 0)
  351. tr069.insert({"SINR2", _Value});
  352. else if (std::string(_Name).compare("InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.EnodeBId") ==
  353. 0)
  354. tr069.insert({"EnodeBId", _Value});
  355. else if (std::string(_Name).compare("InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.CellId") == 0)
  356. tr069.insert({"CellId", _Value});
  357. else if (std::string(_Name).compare(
  358. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.BytesSent") == 0)
  359. tr069.insert({"BytesSent", _Value});
  360. else if (std::string(_Name).compare(
  361. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.BytesReceived") == 0)
  362. tr069.insert({"BytesReceived", _Value});
  363. else if (std::string(_Name).compare(
  364. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.PacketsSent") == 0)
  365. tr069.insert({"PacketsSent", _Value});
  366. else if (std::string(_Name).compare(
  367. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.PacketsReceived") == 0)
  368. tr069.insert({"PacketsReceived", _Value});
  369. else if (std::string(_Name).compare(
  370. "InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ConnectionStatus") == 0)
  371. tr069.insert({"ConnectionStatus", _Value});
  372. else if (std::string(_Name).compare(
  373. "InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.Uptime") == 0)
  374. tr069.insert({"Uptime", _Value});
  375. else if (std::string(_Name).compare(
  376. "InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ExternalIPAddress") == 0)
  377. tr069.insert({"ExternalIPAddress", _Value});
  378. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.RSRP1") == 0)
  379. tr069.insert({"RSRP1", _Value});
  380. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.RSRP2") == 0)
  381. tr069.insert({"RSRP2", _Value});
  382. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.TX_Power") ==
  383. 0)
  384. tr069.insert({"TX_Power", _Value});
  385. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.DL_MCS") == 0)
  386. tr069.insert({"DL_MCS", _Value});
  387. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.UL_MCS") == 0)
  388. tr069.insert({"UL_MCS", _Value});
  389. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Setting.Status") ==
  390. 0)
  391. tr069.insert({"LTEStatus", _Value});
  392. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.ScanMode.Settings.PCILock") == 0)
  393. tr069.insert({"PCILock", _Value});
  394. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.Network_Mode.WANIPAddress") == 0)
  395. tr069.insert({"WANIPAddress", _Value});
  396. else if (std::string(_Name).compare("InternetGatewayDevice.ManagementServer.PeriodicInformInterval") == 0)
  397. tr069.insert({"PeriodicInformInterval", _Value});
  398. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Overview.LTEStatus.DnsServer") == 0)
  399. tr069.insert({"DnsServer", _Value});
  400. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Overview.DeviceInfo.IMSI") == 0)
  401. tr069.insert({"IMSI", _Value});
  402. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.Manufacturer") == 0)
  403. tr069.insert({"Manufacturer", _Value});
  404. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.ManufacturerOUI") == 0)
  405. tr069.insert({"OUI", _Value});
  406. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.ModelName") == 0)
  407. tr069.insert({"ModelName", _Value});
  408. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.ModelNumber") == 0)
  409. tr069.insert({"ModelNumber", _Value});
  410. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.Description") == 0)
  411. tr069.insert({"Description", _Value});
  412. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.ProductClass") == 0)
  413. tr069.insert({"ProductClass", _Value});
  414. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.SerialNumber") == 0)
  415. tr069.insert({"SerialNumber", _Value});
  416. else if (std::string(_Name).compare("InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.RSRQ") == 0)
  417. tr069.insert({"RSRQ", _Value});
  418. else if (std::string(_Name).compare(
  419. "InternetGatewayDevice.LANDevice.1.LANHostConfigManagement.DHCPServerEnable") == 0)
  420. tr069.insert({"DHCPServerEnable", _Value});
  421. else if (
  422. std::string(_Name).compare("InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Enable") ==
  423. 0)
  424. tr069.insert({"WANEthernetInterfaceConfigEnable", _Value});
  425. else if (std::string(_Name).compare("InternetGatewayDevice.ManagementServer.ConnectionRequestURL") == 0)
  426. tr069.insert({"ConnectionRequestURL", _Value});
  427. else if (std::string(_Name).compare(
  428. "InternetGatewayDevice.WEB_GUI.Overview.LTEStatus.DL_DataRate_Current") == 0)
  429. tr069.insert({"DL_DataRate_Current", _Value});
  430. else if (std::string(_Name).compare(
  431. "InternetGatewayDevice.WEB_GUI.Overview.LTEStatus.UL_DataRate_Current") == 0)
  432. tr069.insert({"UL_DataRate_Current", _Value});
  433. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.PCI") == 0)
  434. tr069.insert({"PCI", _Value});
  435. else if (std::string(_Name).compare(
  436. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.UL_Frequency") == 0)
  437. tr069.insert({"UL_Frequency", _Value});
  438. else if (std::string(_Name).compare(
  439. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.DL_Frequency") == 0)
  440. tr069.insert({"DL_Frequency", _Value});
  441. else if (std::string(_Name).compare(
  442. "InternetGatewayDevice.LANDevice.1.LANHostConfigManagement.IPInterface.1.IPInterfaceIPAddress") ==
  443. 0)
  444. tr069.insert({"IPInterfaceIPAddress", _Value});
  445. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Overview.LANStatus.MacAddress") == 0)
  446. tr069.insert({"MacAddress", _Value});
  447. // std::cerr<<"Key: "<<cwmp__Inform->ParameterList->__ptrParameterValueStruct[i]->Name<<std::endl;
  448. // std::cerr<<"Value: "<<cwmp__Inform->ParameterList->__ptrParameterValueStruct[i]->Value<<std::endl;
  449. //</editor-fold>
  450. }
  451. }
  452. std::ofstream zbx_data;
  453. zbx_data.open("/var/tmp/zbx_sender-" + _time, std::ios_base::app);
  454. zbx_data << "IMSI-" << imsi << " " << "BytsReceived" << " " << second << " \"" << tr069["BytesReceived"] << "\""
  455. << std::endl;
  456. zbx_data << "IMSI-" << imsi << " " << "BytsSent" << " " << second << " \"" << tr069["BytesSent"] << "\""
  457. << std::endl;
  458. //<editor-fold desc="Json">
  459. std::string ISOTime = currentISO8601TimeUTC();
  460. json tr069_json{};
  461. tr069_json["_id"] = url_encode(_id);
  462. tr069_json["_deviceId"]["_Manufacturer"] = cwmp__Inform->DeviceId->Manufacturer;
  463. tr069_json["_deviceId"]["_OUI"] = cwmp__Inform->DeviceId->OUI;
  464. tr069_json["_deviceId"]["_ProductClass"] = cwmp__Inform->DeviceId->ProductClass;
  465. tr069_json["_deviceId"]["_SerialNumber"] = cwmp__Inform->DeviceId->SerialNumber;
  466. tr069_json["_lastInform"] = ISOTime;
  467. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANConnectionDevice"]["1"]["WANIPConnection"]["1"]["Uptime"]["_value"] = tr069["Uptime"];
  468. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["UL_MCS"]["_value"] = tr069["UL_MCS"];
  469. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["TX_Power"]["_value"] = tr069["TX_Power"];
  470. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["SoftwareVersion"]["_value"] = tr069["SoftwareVersion"];
  471. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["X_TGT_WANNetConfigInfo"]["SINR2"]["_value"] = tr069["SINR2"];
  472. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["X_TGT_WANNetConfigInfo"]["SINR1"]["_value"] = tr069["SINR1"];
  473. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["RSRP2"]["_value"] = tr069["RSRP2"];
  474. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["X_TGT_WANNetConfigInfo"]["RSRQ"]["_value"] = tr069["RSRQ"];
  475. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["RSRQ"]["_value"] = tr069["RSRQ"];
  476. tr069_json["InternetGatewayDevice"]["LANDevice"]["1"]["LANHostConfigManagement"]["DHCPServerEnable"]["_value"] = tr069["DHCPServerEnable"];
  477. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Setting"]["Status"]["_value"] = tr069["LTEStatus"];
  478. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANConnectionDevice"]["1"]["WANIPConnection"]["1"]["ConnectionStatus"]["_value"] = tr069["ConnectionStatus"];
  479. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["RSRP1"]["_value"] = tr069["RSRP1"];
  480. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANConnectionDevice"]["1"]["WANIPConnection"]["1"]["ExternalIPAddress"]["_value"] = tr069["ExternalIPAddress"];
  481. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Overview"]["DeviceInfo"]["IMSI"]["_value"] = tr069["IMSI"];
  482. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Overview"]["DeviceInfo"]["IMEI"]["_value"] = tr069["IMEI"];
  483. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["X_TGT_WANNetConfigInfo"]["EnodeBId"]["_value"] = tr069["EnodeBId"];
  484. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["MemoryStatus"]["Free"]["_value"] = tr069["Free"];
  485. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["X_TGT_WANNetConfigInfo"]["EnodeBId"]["_value"] = tr069["EnodeBId"];
  486. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["DL_MCS"]["_value"] = tr069["DL_MCS"];
  487. tr069_json["InternetGatewayDevice"]["Time"]["CurrentLocalTime"]["_value"] = tr069["CurrentLocalTime"];
  488. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["ProcessStatus"]["CPUUsage"]["_value"] = tr069["CPUUsage"];
  489. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["X_TGT_WANNetConfigInfo"]["CellId"]["_value"] = tr069["CellId"];
  490. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANEthernetInterfaceConfig"]["Stats"]["BytesSent"]["_value"] = tr069["BytesSent"];
  491. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANEthernetInterfaceConfig"]["Stats"]["BytesReceived"]["_value"] = tr069["BytesReceived"];
  492. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANEthernetInterfaceConfig"]["Stats"]["PacketsReceived"]["_value"] = tr069["PacketsReceived"];
  493. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANEthernetInterfaceConfig"]["Stats"]["PacketsSent"]["_value"] = tr069["PacketsSent"];
  494. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["UpTime"]["_value"] = tr069["UpTime"];
  495. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["X_TGT_IMSI"]["_value"] = tr069["IMSI"];
  496. tr069_json["InternetGatewayDevice"]["LANDevice"]["1"]["LANEthernetInterfaceConfig"]["1"]["Enable"]["_value"] = tr069["Enable"];
  497. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["Network_Mode"]["WANIPAddress"]["_value"] = tr069["WANIPAddress"];
  498. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["ScanMode"]["Settings"]["PCILock"]["_value"] = tr069["PCILock"];
  499. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Overview"]["LTEStatus"]["DnsServer"]["_value"] = tr069["DnsServer"];
  500. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["HardwareVersion"]["_value"] = tr069["HardwareVersion"];
  501. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["Manufacturer"]["_value"] = cwmp__Inform->DeviceId->Manufacturer;
  502. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["ManufacturerOUI"]["_value"] = cwmp__Inform->DeviceId->OUI;
  503. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["ModelName"]["_value"] = tr069["ModelName"];
  504. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["ModelNumber"]["_value"] = tr069["ModelNumber"];
  505. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["Description"]["_value"] = tr069["Description"];
  506. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["ProductClass"]["_value"] = cwmp__Inform->DeviceId->ProductClass;
  507. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["SerialNumber"]["_value"] = cwmp__Inform->DeviceId->SerialNumber;
  508. tr069_json["InternetGatewayDevice"]["LANDevice"]["1"]["LANEthernetInterfaceConfig"]["1"]["Enable"]["_value"] = tr069["LAN1Enable"];
  509. tr069_json["InternetGatewayDevice"]["LANDevice"]["1"]["LANEthernetInterfaceConfig"]["2"]["Enable"]["_value"] = tr069["LAN2Enable"];
  510. tr069_json["InternetGatewayDevice"]["ManagementServer"]["ConnectionRequestURL"]["_value"] = tr069["ConnectionRequestURL"];
  511. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANEthernetInterfaceConfig"]["Enable"]["_value"] = tr069["WANEthernetInterfaceConfigEnable"];
  512. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Overview"]["LTEStatus"]["DL_DataRate_Current"]["_value"] = tr069["DL_DataRate_Current"];
  513. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Overview"]["LTEStatus"]["UL_DataRate_Current"]["_value"] = tr069["UL_DataRate_Current"];
  514. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["PCI"]["_value"] = tr069["PCI"];
  515. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Overview"]["LANStatus"]["MacAddress"]["_value"] = tr069["MacAddress"];
  516. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["DL_Frequency"]["_value"] = tr069["DL_Frequency"];
  517. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["UL_Frequency"]["_value"] = tr069["UL_Frequency"];
  518. tr069_json["InternetGatewayDevice"]["LANDevice"]["1"]["IPInterface"]["1"]["IPInterfaceIPAddress"]["_value"] = tr069["IPInterfaceIPAddress"];
  519. tr069_json["InternetGatewayDevice"]["ManagementServer"]["PeriodicInformInterval"]["_value"] = tr069["PeriodicInformInterval"];
  520. //</editor-fold>
  521. std::ofstream json_data;
  522. second = time(NULL);
  523. strstream << second;
  524. strstream >> _time;
  525. json_data.open("/var/tmp/json_data/json-" + _time, std::ios_base::app);
  526. // json_data.open("/var/tmp/json_data/" + url_encode(_id) + "_" + _time, std::ios_base::app);
  527. json_data << tr069_json.dump(4);
  528. mysqlpp::Connection conn(false);
  529. mysqlpp::Query query = conn.query();
  530. try {
  531. conn.connect(DATABASE, HOST, USER, PASSWORD, PORT);
  532. /*
  533. * tr069["SoftwareVersion"]
  534. * tr069["EnodeBId"];
  535. * tr069["PCILock"]
  536. * tr069["CellId"];
  537. * tr069["PeriodicInformInterval"]
  538. */
  539. query <<
  540. "replace into Device_List (IP,IMSI,`datetime`,update_interval,enodeb_id,cell_id,softwareversion,pcilock) values ('" +
  541. std::string(ip) + "','" + imsi + "',NOW()" + "," + tr069["PeriodicInformInterval"] + "," +
  542. tr069["EnodeBId"] + "," + tr069["CellId"] +
  543. "," + tr069["SoftwareVersion"] + "," + tr069["PCILock"] + ")";
  544. query.execute();
  545. } catch (mysqlpp::BadQuery er) { // handle any connection or
  546. std::cerr << "Error on IMSI-" << imsi << " :" << er.what() << std::endl;
  547. }
  548. conn.disconnect();
  549. return SOAP_OK;
  550. }
  551. int cwmpService::FactoryReset(struct _cwmp__FactoryReset *cwmp__factoryReset,
  552. struct _cwmp__FactoryResetResponse *cwmp__factoryResetResponse) { return SOAP_OK; }
  553. int cwmpService::Reboot(struct _cwmp__Reboot *cwmp__Reboot,
  554. struct _cwmp__RebootResponse *cwmp__RebootResponse) { return SOAP_OK; }
  555. int cwmpService::CheckQueue(struct soap *soap, cwmpService *cwmpService1) {
  556. // std::cerr << "IP: " << soap->host << std::endl;
  557. soap->error = 0;
  558. std::string IMSI{}, s, id;
  559. const char *_actionParameters = "";
  560. int action{0};
  561. /*
  562. * {
  563. "FileType":"1",
  564. "URL":"http://172.20.9.24:808/ZLT_P11S_P13-NO_LOGO-P11PLUS-EN_48.3_update_file-all_2019_12_19_20_21_02.zip",
  565. "FilesSize":"4367707",
  566. "SuccessURL":null,
  567. "FailureURL":null
  568. }
  569. */
  570. std::stringstream strValue;
  571. json actionParameters = {};
  572. mysqlpp::Connection conn(false);
  573. mysqlpp::Query query = conn.query();
  574. mysqlpp::Query _query = conn.query();
  575. try {
  576. conn.connect(DATABASE, HOST, USER, PASSWORD, PORT);
  577. query
  578. << "select t.id, d.IMSI , t.action , t.ActionParameters from TaskList as t join Device_List as d on t.IMSI=d.IMSI where d.IP='"
  579. << soap->host
  580. << "' and t.response is null and t.Active=0 and t.`datetime` < NOW() order by id limit 1;";
  581. mysqlpp::StoreQueryResult result = query.store();
  582. if (result.size() == 0)
  583. return soap->error = 204;
  584. mysqlpp::StoreQueryResult::const_iterator it;
  585. for (it = result.begin(); it != result.end(); ++it) {
  586. mysqlpp::Row row = *it;
  587. strValue << row["id"];
  588. strValue >> id;
  589. strValue << row["IMSI"];
  590. strValue >> IMSI;
  591. action = row["action"];
  592. _actionParameters = row["ActionParameters"];
  593. }
  594. // std::cerr<<"Size of result+: "<<result.size()<<std::endl;
  595. s = std::string(_actionParameters);
  596. _query << "update TaskList set Active=1 where id='" << id << "';";
  597. _query.execute();
  598. } catch (mysqlpp::BadQuery er) { // handle any connection or
  599. std::cerr << "Error on CPE with IP: " << soap->host << " :" << er.what() << std::endl;
  600. }
  601. conn.disconnect();
  602. actionParameters = json::parse(s);
  603. if (action == 1) {
  604. try {
  605. std::cerr << "sending download request for " << soap->host << std::endl;
  606. int DelaySeconds = 1;
  607. std::string str = actionParameters["FileType"];
  608. char *FileType = new char[str.length() + 1];
  609. strcpy(FileType, str.c_str());
  610. str = actionParameters["URL"];
  611. char *URL = new char[str.length() + 1];
  612. strcpy(URL, str.c_str());
  613. char *Username = NULL;
  614. char *Password = NULL;
  615. int FileSize = std::stoi(std::string(actionParameters["FilesSize"]));
  616. char *TargetFileName = NULL;
  617. str = actionParameters["SuccessURL"];
  618. char *SuccessURL = new char[str.length() + 1];
  619. strcpy(SuccessURL, str.c_str());
  620. str = actionParameters["FailureURL"];
  621. char *FailureURL = new char[str.length() + 1];
  622. strcpy(FailureURL, str.c_str());
  623. return CustomeDownload(soap, this, DelaySeconds, FileType, URL, Username, Password, FileSize,
  624. TargetFileName,
  625. SuccessURL, FailureURL);
  626. } catch (std::exception ex) { // handle any connection or
  627. std::cerr << "Error on CPE with IP: " << soap->host << " :" << ex.what() << std::endl;
  628. }
  629. }
  630. //
  631. // return CustomeDownload(soap, this, std::__cxx11::string(), std::__cxx11::string(), std::__cxx11::string(),
  632. // std::__cxx11::string(), std::__cxx11::string(), std::__cxx11::string(),
  633. // std::__cxx11::string(),
  634. // std::__cxx11::string(), std::__cxx11::string());
  635. // return soap_closesock(soap);
  636. return soap->error = 204;
  637. }
  638. int cwmpService::CustomeDownloadResponse(struct soap *pSoap, cwmpService *pService) {
  639. std::cerr << "Upgrade Response received." << std::endl;
  640. std::stringstream strValue;
  641. std::string IMSI{}, s, id;
  642. soap->error = 0;
  643. mysqlpp::Connection conn(false);
  644. mysqlpp::Query query = conn.query();
  645. mysqlpp::Query _query = conn.query();
  646. try {
  647. conn.connect(DATABASE, HOST, USER, PASSWORD, PORT);
  648. query
  649. << "select t.id from TaskList as t join Device_List as d on t.IMSI=d.IMSI where d.IP='"
  650. << soap->host << "' and t.response is null and t.Active=1 order by id limit 1;";
  651. mysqlpp::StoreQueryResult result = query.store();
  652. if (result.size() == 0)
  653. return soap->error = 204;
  654. mysqlpp::StoreQueryResult::const_iterator it;
  655. for (it = result.begin(); it != result.end(); ++it) {
  656. mysqlpp::Row row = *it;
  657. strValue << row["id"];
  658. strValue >> id;
  659. }
  660. } catch (mysqlpp::BadQuery er) { // handle any connection or
  661. std::cerr << "Error on CPE with IP: " << soap->host << " :" << er.what() << std::endl;
  662. }
  663. _query << "update TaskList set Response='Done' where id='" << id << "';";
  664. _query.execute();
  665. conn.disconnect();
  666. // struct _cwmp__DownloadResponse cwmp__downloadResponse;
  667. // if ((soap->mode & SOAP_IO_LENGTH)) {
  668. // if (soap_envelope_begin_out(soap)
  669. // || soap_putheader(soap)
  670. // || soap_body_begin_out(soap)
  671. // || soap_put__cwmp__DownloadResponse(soap, &cwmp__downloadResponse, "cwmp:DownloadResponse", "")
  672. // || soap_body_end_out(soap)
  673. // || soap_envelope_end_out(soap))
  674. // return soap->error;
  675. // };
  676. // if (soap_end_count(soap)
  677. // || soap_response(soap, SOAP_OK)
  678. // || soap_envelope_begin_out(soap)
  679. // || soap_putheader(soap)
  680. // || soap_body_begin_out(soap)
  681. // || soap_put__cwmp__DownloadResponse(soap, &cwmp__downloadResponse, "cwmp:DownloadResponse", "")
  682. // || soap_body_end_out(soap)
  683. // || soap_envelope_end_out(soap)
  684. // || soap_end_send(soap))
  685. // return soap->error;
  686. soap->keep_alive = 0;
  687. return soap_closesock(soap);
  688. }