main.cpp 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  1. #include <iostream>
  2. #include "cwmp.nsmap"
  3. #include "httppost.h"
  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 <iomanip>
  13. using json = nlohmann::json;
  14. int port = 7547;
  15. //int port = 8001;
  16. int POST_handler(struct soap *soap);
  17. struct http_post_handlers http_post_handlers[] = {
  18. {"POST", POST_handler},
  19. {NULL}
  20. };
  21. std::string currentISO8601TimeUTC() {
  22. std::time_t t = std::time(nullptr);
  23. std::ostringstream ss;
  24. ss << std::put_time(std::localtime(&t), "%FT%T %Z");
  25. return ss.str();
  26. }
  27. void handler(int s) {
  28. printf("Sassan Caught SIGPIPE ...\n");
  29. }
  30. void *process_request(void *arg) {
  31. cwmpService *service = (cwmpService *) arg;
  32. THREAD_DETACH(THREAD_ID);
  33. if (service) {
  34. service->serve();
  35. service->destroy(); /* clean up */
  36. delete service;
  37. }
  38. return NULL;
  39. }
  40. //<editor-fold desc="zbx_keys">
  41. std::string zbx_keys[] = {"InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.Uptime",
  42. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.UL_MCS",
  43. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.TX_Power",
  44. "InternetGatewayDevice.DeviceInfo.SoftwareVersion",
  45. "InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.SINR2",
  46. "InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.SINR1",
  47. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.RSRP2",
  48. "InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.RSRQ",
  49. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.RSRQ",
  50. "InternetGatewayDevice.LANDevice.1.LANHostConfigManagement.DHCPServerEnable",
  51. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Setting.Status",
  52. "InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ConnectionStatus",
  53. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.RSRP1",
  54. "InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ExternalIPAddress",
  55. "InternetGatewayDevice.WEB_GUI.Overview.DeviceInfo.IMSI",
  56. "InternetGatewayDevice.WEB_GUI.Overview.DeviceInfo.IMEI",
  57. "InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.EnodeBId",
  58. "InternetGatewayDevice.DeviceInfo.MemoryStatus.Free",
  59. "InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.EnodeBId",
  60. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.DL_MCS",
  61. "InternetGatewayDevice.Time.CurrentLocalTime",
  62. "InternetGatewayDevice.DeviceInfo.ProcessStatus.CPUUsage",
  63. "InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.CellId",
  64. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.BytesSent",
  65. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.BytesReceived",
  66. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.PacketsReceived",
  67. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.PacketsSent",
  68. "InternetGatewayDevice.DeviceInfo.UpTime",
  69. "InternetGatewayDevice.DeviceInfo.X_TGT_IMSI",
  70. "InternetGatewayDevice.WEB_GUI.Network.Network_Mode.WANIPAddress",
  71. "InternetGatewayDevice.WEB_GUI.Network.ScanMode.Settings.PCILock",
  72. "InternetGatewayDevice.WEB_GUI.Overview.LTEStatus.DnsServer",
  73. "InternetGatewayDevice.DeviceInfo.HardwareVersion",
  74. "InternetGatewayDevice.DeviceInfo.Manufacturer",
  75. "InternetGatewayDevice.DeviceInfo.ManufacturerOUI",
  76. "InternetGatewayDevice.DeviceInfo.ModelName",
  77. "InternetGatewayDevice.DeviceInfo.ModelNumber",
  78. "InternetGatewayDevice.DeviceInfo.Description",
  79. "InternetGatewayDevice.DeviceInfo.ProductClass",
  80. "InternetGatewayDevice.DeviceInfo.SerialNumber",
  81. "InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.1.Enable",
  82. "InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.2.Enable",
  83. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Enable",
  84. "InternetGatewayDevice.WEB_GUI.Overview.LTEStatus.DL_DataRate_Current",
  85. "InternetGatewayDevice.WEB_GUI.Overview.LTEStatus.UL_DataRate_Current",
  86. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.PCI",
  87. "InternetGatewayDevice.WEB_GUI.Overview.LANStatus.MacAddress",
  88. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.DL_Frequency",
  89. "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.UL_Frequency",
  90. "InternetGatewayDevice.ManagementServer.ConnectionRequestURL"
  91. };
  92. //</editor-fold>
  93. void ZBX_Send(char **Name, char **Value, char **imsi) {
  94. if (!strcmp(*Name, "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.DL_MCS") == 0 or
  95. !strcmp(*Name, "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.UL_MCS") == 0) {
  96. if (!strcmp(*Value, "QPSK")) {
  97. *Value = "4";
  98. } else if (!strcmp(*Value, "QAM8")) {
  99. *Value = "8";
  100. } else if (!strcmp(*Value, "QAM16")) {
  101. *Value = "16";
  102. } else if (!strcmp(*Value, "QAM32")) {
  103. *Value = "32";
  104. } else if (!strcmp(*Value, "QAM64")) {
  105. *Value = "64";
  106. }
  107. std::ofstream zbx_data;
  108. std::string _time{};
  109. time_t second;
  110. second = time(NULL);
  111. std::stringstream strstream;
  112. strstream << second;
  113. strstream >> _time;
  114. zbx_data.open("/var/tmp/zbx_sender-"+_time, std::ios_base::app);
  115. zbx_data << "IMSI-" << *imsi << " " << *Name << " " << second << " \"" << *Value << "\"" << std::endl;
  116. }
  117. }
  118. std::string url_encode(const std::string &value) {
  119. std::ostringstream escaped;
  120. escaped.fill('0');
  121. escaped << std::hex;
  122. for (std::string::const_iterator i = value.begin(), n = value.end(); i != n; ++i) {
  123. std::string::value_type c = (*i);
  124. // Keep alphanumeric and other accepted characters intact
  125. if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') {
  126. escaped << c;
  127. continue;
  128. }
  129. // Any other characters are percent-encoded
  130. escaped << std::uppercase;
  131. escaped << '%' << std::setw(2) << int((unsigned char) c);
  132. escaped << std::nouppercase;
  133. }
  134. return escaped.str();
  135. }
  136. int main() {
  137. signal(SIGPIPE, handler);
  138. std::cout << "TR069 Server Started on Port " << port << "(1.1.1)...\n" << std::endl;
  139. cwmpService service(SOAP_XML_INDENT);
  140. service.soap->send_timeout = service.soap->recv_timeout = 5;
  141. service.soap->transfer_timeout = 60;
  142. service.soap->keep_alive = 20;
  143. service.soap->tcp_keep_alive = 1;
  144. service.soap->bind_flags |= SO_REUSEADDR;
  145. service.soap->bind_flags |= SO_REUSEPORT;
  146. service.soap->bind_flags |= MSG_NOSIGNAL;
  147. soap_init2(service.soap, SOAP_IO_KEEPALIVE, SOAP_IO_KEEPALIVE);
  148. SOAP_SOCKET m = service.bind(NULL, port, 100); /* master socket */
  149. if (soap_valid_socket(m)) {
  150. while (soap_valid_socket(service.accept())) {
  151. THREAD_TYPE tid;
  152. void *arg = (void *) service.copy();
  153. if (arg)
  154. while (THREAD_CREATE(&tid, (void *(*)(void *)) process_request, arg))
  155. sleep(1);
  156. }
  157. }
  158. service.soap_stream_fault(std::cerr);
  159. service.destroy(); /* clean up */
  160. return 0;
  161. }
  162. int POST_handler(struct soap *soap) {
  163. // struct _cwmp__GetParameterValues *res = soap_new__cwmp__GetParameterValues(soap, -1);
  164. // struct ParameterNames *list = soap_new_ParameterNames(soap, -1);
  165. const char *buf;
  166. size_t len;
  167. buf = soap_http_get_body(soap, &len);
  168. // std::cerr<<"Sassan3 ID: "<<soap->header->cwmp__SupportedCWMPVersions<<std::endl;
  169. // std::cerr<<"Debug1: "<<len<<std::endl;
  170. // std::cerr<<"Debug2: "<<buf<<std::endl;
  171. /* if HTTP has a content type header or a HTTP body is present then return 404 */
  172. if (len == 0) {
  173. std::cerr << "Sassan 204...: " << buf << std::endl;
  174. return 204; // HTTP 400 Bad Request
  175. // }else {
  176. // std::cerr<<"Debug0: "<<buf<<std::endl;
  177. // std::cerr<<"Debug1: "<<len<<std::endl;
  178. // std::cerr<<"Debug2: "<<buf<<std::endl;
  179. }
  180. // if (soap->http_content || soap_http_has_body(soap))
  181. // return 404;
  182. // (void)soap_end_recv(soap);
  183. // /* populate the response with one array item */
  184. // if (res && list)
  185. // {
  186. // list->__size = 1;
  187. // if ((list->__ptrstring = (char**)soap_malloc(soap, list->__size * sizeof(char*))) != NULL)
  188. // {
  189. // list->__ptrstring[0] = soap_strdup(soap, "...");
  190. // res->ParameterNames = list;
  191. // }
  192. // }
  193. // /* send response */
  194. // soap->encodingStyle = "";
  195. // soap_serializeheader(soap);
  196. // soap_serialize__cwmp__GetParameterValues(soap, res);
  197. // if (soap_begin_count(soap))
  198. // return soap->error;
  199. // if (soap->mode & SOAP_IO_LENGTH)
  200. // {
  201. // if (soap_envelope_begin_out(soap)
  202. // || soap_putheader(soap)
  203. // || soap_body_begin_out(soap)
  204. // || soap_put__cwmp__GetParameterValues(soap, res, "cwmp:GetParameterValues", "")
  205. // || soap_body_end_out(soap)
  206. // || soap_envelope_end_out(soap))
  207. // return soap->error;
  208. // };
  209. // if (soap_end_count(soap)
  210. // || soap_response(soap, SOAP_OK)
  211. // || soap_envelope_begin_out(soap)
  212. // || soap_putheader(soap)
  213. // || soap_body_begin_out(soap)
  214. // || soap_put__cwmp__GetParameterValues(soap, res, "cwmp:GetParameterValues", "")
  215. // || soap_body_end_out(soap)
  216. // || soap_envelope_end_out(soap)
  217. // || soap_end_send(soap))
  218. // return soap->error;
  219. // return soap_closesock(soap);
  220. }
  221. int cwmpService::GetParameterNames(struct _cwmp__GetParameterNames *cwmp__GetParameterNames,
  222. struct _cwmp__GetParameterNamesResponse *cwmp__GetParameterNamesResponse) { return SOAP_OK; }
  223. int cwmpService::GetParameterValues(struct _cwmp__GetParameterValues *cwmp__GetParameterValues,
  224. struct _cwmp__GetParameterValuesResponse *cwmp__GetParameterValuesResponse) { return SOAP_OK; }
  225. int cwmpService::SetParameterValues(struct _cwmp__SetParameterValues *cwmp__SetParameterValues,
  226. struct _cwmp__SetParameterValuesResponse *cwmp__SetParameterValuesResponse) { return SOAP_OK; }
  227. int cwmpService::SetParameterAttributes(
  228. struct _cwmp__SetParameterAttributes *cwmp__SetParameterAttributes,
  229. struct _cwmp__SetParameterAttributesResponse *cwmp__SetParameterAttributesResponse) { return SOAP_OK; }
  230. int cwmpService::GetParameterAttributes(struct _cwmp__GetParameterAttributes *cwmp__GetParameterAttributes,
  231. struct _cwmp__GetParameterAttributesResponse *cwmp__GetParameterAttributesResponse) { return SOAP_OK; }
  232. int cwmpService::Download(struct _cwmp__Download *cwmp__Download,
  233. struct _cwmp__DownloadResponse *cwmp__DownloadResponse) { return SOAP_OK; }
  234. int cwmpService::Upload(
  235. struct _cwmp__Upload *cwmp__Upload,
  236. struct _cwmp__UploadResponse *cwmp__UploadResponse) { return SOAP_OK; }
  237. int cwmpService::AddObject(
  238. struct _cwmp__AddObject *cwmp__AddObject,
  239. struct _cwmp__AddObjectResponse *cwmp__AddObjectResponse) { return SOAP_OK; }
  240. int cwmpService::DeleteObject(
  241. struct _cwmp__DeleteObject *cwmp__DeleteObject,
  242. struct _cwmp__DeleteObjectResponse *cwmp__DeleteObjectResponse) { return SOAP_OK; }
  243. int cwmpService::GetRPCMethods(
  244. struct _cwmp__GetRPCMethods *cwmp__GetRPCMethods,
  245. struct _cwmp__GetRPCMethodsResponse *cwmp__GetRPCMethodsResponse) { return SOAP_OK; }
  246. int cwmpService::GetParameterValuesResponse(
  247. struct _cwmp__GetParameterValuesResponse *cwmp__GetParameterValuesResponse) { return SOAP_OK; }
  248. int cwmpService::Inform(struct _cwmp__Inform *cwmp__Inform,
  249. struct _cwmp__InformResponse *cwmp__InformResponse) {
  250. std::string _id = std::string(cwmp__Inform->DeviceId->OUI) + "-" + std::string(cwmp__Inform->DeviceId->ProductClass)
  251. + "-" + std::string(cwmp__Inform->DeviceId->SerialNumber);
  252. std::cerr << "Inform Recieved from: " << url_encode(_id) << " at " << time(NULL) << std::endl;
  253. char *imsi;
  254. auto timestamp = std::chrono::high_resolution_clock::now();
  255. std::vector<std::thread> th;
  256. std::vector<std::thread> th_acs;
  257. // int indexes[24];
  258. std::vector<int> ind;
  259. std::ofstream mongoData;
  260. time_t second;
  261. std::string _time;
  262. std::map<std::string, std::string> tr069{};
  263. second = time(NULL);
  264. std::stringstream strstream;
  265. strstream << second;
  266. strstream >> _time;
  267. for (int i = 0; i < cwmp__Inform->ParameterList->__size; ++i) {
  268. char *_Name = cwmp__Inform->ParameterList->__ptrParameterValueStruct[i]->Name;
  269. char *_Value = cwmp__Inform->ParameterList->__ptrParameterValueStruct[i]->Value;
  270. if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.X_TGT_IMSI")==0) {
  271. imsi = _Value;
  272. }
  273. std::string cpe = cwmp__Inform->DeviceId->SerialNumber;
  274. auto j = std::find(std::begin(zbx_keys), std::end(zbx_keys),_Name);
  275. if (j != std::end(zbx_keys)) {
  276. // th.push_back(std::thread(ZBX_Send, &_Name,&_Value, &imsi));
  277. // ind.push_back(i);
  278. // th.push_back(std::thread(ZBX_Send, &cwmp__Inform->ParameterList->__ptrParameterValueStruct[i]->Name,
  279. // &cwmp__Inform->ParameterList->__ptrParameterValueStruct[i]->Value, &imsi));
  280. if (!strcmp(_Name, "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.DL_MCS") == 0 or
  281. !strcmp(_Name, "InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.UL_MCS") == 0) {
  282. if (!strcmp(_Value, "QPSK")) {
  283. _Value = "4";
  284. } else if (!strcmp(_Value, "QAM8")) {
  285. _Value = "8";
  286. } else if (!strcmp(_Value, "QAM16")) {
  287. _Value = "16";
  288. } else if (!strcmp(_Value, "QAM32")) {
  289. _Value = "32";
  290. } else if (!strcmp(_Value, "QAM64")) {
  291. _Value = "64";
  292. }
  293. std::ofstream zbx_data;
  294. std::string _time{};
  295. time_t second;
  296. second = time(NULL);
  297. std::stringstream strstream;
  298. strstream << second;
  299. strstream >> _time;
  300. zbx_data.open("/var/tmp/zbx_sender-" + _time, std::ios_base::app);
  301. zbx_data << "IMSI-" << imsi << " " << _Name << " " << second << " \"" << _Value << "\"" << std::endl;
  302. }
  303. //<editor-fold desc="Map Filler">
  304. if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.HardwareVersion") == 0)
  305. tr069.insert({"HardwareVersion", _Value});
  306. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.SoftwareVersion") == 0)
  307. tr069.insert({"SoftwareVersion", _Value});
  308. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.UpTime") == 0)
  309. tr069.insert({"UpTime", _Value});
  310. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Overview.DeviceInfo.IMEI") == 0)
  311. tr069.insert({"IMEI", _Value});
  312. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.X_TGT_IMSI") == 0)
  313. tr069.insert({"IMSI", _Value});
  314. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.MemoryStatus.Free") == 0)
  315. tr069.insert({"Free", _Value});
  316. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.ProcessStatus.CPUUsage") == 0)
  317. tr069.insert({"CPUUsage", _Value});
  318. else if (std::string(_Name).compare("InternetGatewayDevice.Time.CurrentLocalTime") == 0)
  319. tr069.insert({"CurrentLocalTime", _Value});
  320. else if (std::string(_Name).compare("InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.1.Enable") == 0)
  321. tr069.insert({"LAN1Enable", _Value});
  322. else if (std::string(_Name).compare("InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.2.Enable") == 0)
  323. tr069.insert({"LAN2Enable", _Value});
  324. else if (std::string(_Name).compare("InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.SINR1") == 0)
  325. tr069.insert({"SINR1", _Value});
  326. else if (std::string(_Name).compare("InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.SINR2") == 0)
  327. tr069.insert({"SINR2", _Value});
  328. else if (std::string(_Name).compare("InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.EnodeBId") ==
  329. 0)
  330. tr069.insert({"EnodeBId", _Value});
  331. else if (std::string(_Name).compare("InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.CellId") == 0)
  332. tr069.insert({"CellId", _Value});
  333. else if (std::string(_Name).compare(
  334. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.BytesSent") == 0)
  335. tr069.insert({"BytesSent", _Value});
  336. else if (std::string(_Name).compare(
  337. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.BytesReceived") == 0)
  338. tr069.insert({"BytesReceived", _Value});
  339. else if (std::string(_Name).compare(
  340. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.PacketsSent") == 0)
  341. tr069.insert({"PacketsSent", _Value});
  342. else if (std::string(_Name).compare(
  343. "InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Stats.PacketsReceived") == 0)
  344. tr069.insert({"PacketsReceived", _Value});
  345. else if (std::string(_Name).compare(
  346. "InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ConnectionStatus") == 0)
  347. tr069.insert({"ConnectionStatus", _Value});
  348. else if (std::string(_Name).compare(
  349. "InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.Uptime") == 0)
  350. tr069.insert({"Uptime", _Value});
  351. else if (std::string(_Name).compare(
  352. "InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ExternalIPAddress") == 0)
  353. tr069.insert({"ExternalIPAddress", _Value});
  354. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.RSRP1") == 0)
  355. tr069.insert({"RSRP1", _Value});
  356. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.RSRP2") == 0)
  357. tr069.insert({"RSRP2", _Value});
  358. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.TX_Power") ==
  359. 0)
  360. tr069.insert({"TX_Power", _Value});
  361. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.DL_MCS") == 0)
  362. tr069.insert({"DL_MCS", _Value});
  363. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.UL_MCS") == 0)
  364. tr069.insert({"UL_MCS", _Value});
  365. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Setting.Status") ==
  366. 0)
  367. tr069.insert({"LTEStatus", _Value});
  368. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.ScanMode.Settings.PCILock") == 0)
  369. tr069.insert({"PCILock", _Value});
  370. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.Network_Mode.WANIPAddress") == 0)
  371. tr069.insert({"WANIPAddress", _Value});
  372. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Overview.LTEStatus.DnsServer") == 0)
  373. tr069.insert({"DnsServer", _Value});
  374. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Overview.DeviceInfo.IMSI") == 0)
  375. tr069.insert({"IMSI", _Value});
  376. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.Manufacturer") == 0)
  377. tr069.insert({"Manufacturer", _Value});
  378. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.ManufacturerOUI") == 0)
  379. tr069.insert({"OUI", _Value});
  380. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.ModelName") == 0)
  381. tr069.insert({"ModelName", _Value});
  382. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.ModelNumber") == 0)
  383. tr069.insert({"ModelNumber", _Value});
  384. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.Description") == 0)
  385. tr069.insert({"Description", _Value});
  386. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.ProductClass") == 0)
  387. tr069.insert({"ProductClass", _Value});
  388. else if (std::string(_Name).compare("InternetGatewayDevice.DeviceInfo.SerialNumber") == 0)
  389. tr069.insert({"SerialNumber", _Value});
  390. else if (std::string(_Name).compare("InternetGatewayDevice.WANDevice.1.X_TGT_WANNetConfigInfo.RSRQ") == 0)
  391. tr069.insert({"RSRQ", _Value});
  392. else if (std::string(_Name).compare("InternetGatewayDevice.LANDevice.1.LANHostConfigManagement.DHCPServerEnable") == 0)
  393. tr069.insert({"DHCPServerEnable", _Value});
  394. else if (std::string(_Name).compare("InternetGatewayDevice.WANDevice.1.WANEthernetInterfaceConfig.Enable") == 0)
  395. tr069.insert({"WANEthernetInterfaceConfigEnable", _Value});
  396. else if (std::string(_Name).compare("InternetGatewayDevice.ManagementServer.ConnectionRequestURL") == 0)
  397. tr069.insert({"ConnectionRequestURL", _Value});
  398. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Overview.LTEStatus.DL_DataRate_Current") == 0)
  399. tr069.insert({"DL_DataRate_Current", _Value});
  400. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Overview.LTEStatus.UL_DataRate_Current") == 0)
  401. tr069.insert({"UL_DataRate_Current", _Value});
  402. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.PCI") == 0)
  403. tr069.insert({"PCI", _Value});
  404. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.UL_Frequency") == 0)
  405. tr069.insert({"UL_Frequency", _Value});
  406. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Network.LTE_Setting.Status.DL_Frequency") == 0)
  407. tr069.insert({"DL_Frequency", _Value});
  408. else if (std::string(_Name).compare("InternetGatewayDevice.WEB_GUI.Overview.LANStatus.MacAddress") == 0)
  409. tr069.insert({"MacAddress", _Value});
  410. // std::cerr<<"Key: "<<cwmp__Inform->ParameterList->__ptrParameterValueStruct[i]->Name<<std::endl;
  411. // std::cerr<<"Value: "<<cwmp__Inform->ParameterList->__ptrParameterValueStruct[i]->Value<<std::endl;
  412. //</editor-fold>
  413. }
  414. }
  415. for (auto &t : th) {
  416. t.join();
  417. }
  418. //<editor-fold desc="Json">
  419. std::string ISOTime=currentISO8601TimeUTC();
  420. json tr069_json{};
  421. tr069_json["_id"]=url_encode(_id);
  422. tr069_json["_deviceId"]["_Manufacturer"]=cwmp__Inform->DeviceId->Manufacturer;
  423. tr069_json["_deviceId"]["_OUI"]=cwmp__Inform->DeviceId->OUI ;
  424. tr069_json["_deviceId"]["_ProductClass"]=cwmp__Inform->DeviceId->ProductClass;
  425. tr069_json["_deviceId"]["_SerialNumber"]=cwmp__Inform->DeviceId->SerialNumber;
  426. tr069_json["_lastInform"]=ISOTime;
  427. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANConnectionDevice"]["1"]["WANIPConnection"]["1"]["Uptime"]["_value"]=tr069["Uptime"] ;
  428. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["UL_MCS"]["_value"]=tr069["UL_MCS"] ;
  429. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["TX_Power"]["_value"]=tr069["TX_Power"] ;
  430. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["SoftwareVersion"]["_value"]=tr069["SoftwareVersion"] ;
  431. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["X_TGT_WANNetConfigInfo"]["SINR2"]["_value"]=tr069["SINR2"] ;
  432. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["X_TGT_WANNetConfigInfo"]["SINR1"]["_value"]=tr069["SINR1"] ;
  433. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["RSRP2"]["_value"]=tr069["RSRP2"] ;
  434. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["X_TGT_WANNetConfigInfo"]["RSRQ"]["_value"]=tr069["RSRQ"] ;
  435. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["RSRQ"]["_value"]=tr069["RSRQ"] ;
  436. tr069_json["InternetGatewayDevice"]["LANDevice"]["1"]["LANHostConfigManagement"]["DHCPServerEnable"]["_value"]=tr069["DHCPServerEnable"] ;
  437. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Setting"]["Status"]["_value"]=tr069["LTEStatus"] ;
  438. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANConnectionDevice"]["1"]["WANIPConnection"]["1"]["ConnectionStatus"]["_value"]=tr069["ConnectionStatus"] ;
  439. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["RSRP1"]["_value"]=tr069["RSRP1"] ;
  440. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANConnectionDevice"]["1"]["WANIPConnection"]["1"]["ExternalIPAddress"]["_value"]=tr069["ExternalIPAddress"] ;
  441. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Overview"]["DeviceInfo"]["IMSI"]["_value"]=tr069["IMSI"] ;
  442. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Overview"]["DeviceInfo"]["IMEI"]["_value"]=tr069["IMEI"] ;
  443. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["X_TGT_WANNetConfigInfo"]["EnodeBId"]["_value"]=tr069["EnodeBId"] ;
  444. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["MemoryStatus"]["Free"]["_value"]=tr069["Free"] ;
  445. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["X_TGT_WANNetConfigInfo"]["EnodeBId"]["_value"]=tr069["EnodeBId"] ;
  446. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["DL_MCS"]["_value"]=tr069["DL_MCS"] ;
  447. tr069_json["InternetGatewayDevice"]["Time"]["CurrentLocalTime"]["_value"]=tr069["CurrentLocalTime"] ;
  448. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["ProcessStatus"]["CPUUsage"]["_value"]=tr069["CPUUsage"] ;
  449. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["X_TGT_WANNetConfigInfo"]["CellId"]["_value"]=tr069["CellId"] ;
  450. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANEthernetInterfaceConfig"]["Stats"]["BytesSent"]["_value"]=tr069["BytesSent"] ;
  451. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANEthernetInterfaceConfig"]["Stats"]["BytesReceived"]["_value"]=tr069["BytesReceived"] ;
  452. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANEthernetInterfaceConfig"]["Stats"]["PacketsReceived"]["_value"]=tr069["PacketsReceived"] ;
  453. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANEthernetInterfaceConfig"]["Stats"]["PacketsSent"]["_value"]=tr069["PacketsSent"] ;
  454. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["UpTime"]["_value"]=tr069["UpTime"] ;
  455. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["X_TGT_IMSI"]["_value"]=tr069["IMSI"] ;
  456. tr069_json["InternetGatewayDevice"]["LANDevice"]["1"]["LANEthernetInterfaceConfig"]["1"]["Enable"]["_value"]=tr069["Enable"] ;
  457. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["Network_Mode"]["WANIPAddress"]["_value"]=tr069["WANIPAddress"] ;
  458. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["ScanMode"]["Settings"]["PCILock"]["_value"]=tr069["PCILock"] ;
  459. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Overview"]["LTEStatus"]["DnsServer"]["_value"]=tr069["DnsServer"] ;
  460. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["HardwareVersion"]["_value"]=tr069["HardwareVersion"] ;
  461. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["Manufacturer"]["_value"]=cwmp__Inform->DeviceId->Manufacturer;
  462. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["ManufacturerOUI"]["_value"]=cwmp__Inform->DeviceId->OUI;
  463. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["ModelName"]["_value"]=tr069["ModelName"] ;
  464. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["ModelNumber"]["_value"]=tr069["ModelNumber"] ;
  465. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["Description"]["_value"]=tr069["Description"] ;
  466. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["ProductClass"]["_value"]=cwmp__Inform->DeviceId->ProductClass;
  467. tr069_json["InternetGatewayDevice"]["DeviceInfo"]["SerialNumber"]["_value"]=cwmp__Inform->DeviceId->SerialNumber;
  468. tr069_json["InternetGatewayDevice"]["LANDevice"]["1"]["LANEthernetInterfaceConfig"]["1"]["Enable"]["_value"]=tr069["LAN1Enable"] ;
  469. tr069_json["InternetGatewayDevice"]["LANDevice"]["1"]["LANEthernetInterfaceConfig"]["2"]["Enable"]["_value"]=tr069["LAN2Enable"] ;
  470. tr069_json["InternetGatewayDevice"]["ManagementServer"]["ConnectionRequestURL"]["_value"]=tr069["ConnectionRequestURL"] ;
  471. tr069_json["InternetGatewayDevice"]["WANDevice"]["1"]["WANEthernetInterfaceConfig"]["Enable"]["_value"]=tr069["WANEthernetInterfaceConfigEnable"] ;
  472. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Overview"]["LTEStatus"]["DL_DataRate_Current"]["_value"]=tr069["DL_DataRate_Current"] ;
  473. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Overview"]["LTEStatus"]["UL_DataRate_Current"]["_value"]=tr069["UL_DataRate_Current"] ;
  474. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["PCI"]["_value"]=tr069["PCI"] ;
  475. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Overview"]["LANStatus"]["MacAddress"]["_value"]=tr069["MacAddress"] ;
  476. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["DL_Frequency"]["_value"]=tr069["DL_Frequency"] ;
  477. tr069_json["InternetGatewayDevice"]["WEB_GUI"]["Network"]["LTE_Setting"]["Status"]["UL_Frequency"]["_value"]=tr069["UL_Frequency"] ;
  478. //</editor-fold>
  479. std::ofstream json_data;
  480. // time_t second;
  481. second = time(NULL);
  482. strstream << second;
  483. strstream >> _time;
  484. json_data.open("/var/tmp/json_data/"+url_encode(_id)+"_"+_time, std::ios_base::app);
  485. json_data <<tr069_json.dump(4);
  486. //
  487. // for(auto elem : tr069)
  488. // {
  489. // std::cerr<<elem.first<<"\t"<<elem.second<<std::endl;
  490. // }
  491. // std::cerr<< "Size: "<<tr069.size()<<std::endl;
  492. return SOAP_OK;
  493. }