paras.c 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "sys.h"
  4. #include "file.h"
  5. #include "lock.h"
  6. #include "paras.h"
  7. #include "cascade.h"
  8. #include "dictionary.h"
  9. #include "iniparser.h"
  10. #if 1
  11. #define LOGD log_d
  12. #define LOGE log_e
  13. #define LOGW log_w
  14. #else
  15. #define LOGD printf
  16. #define LOGE printf
  17. #define LOGW printf
  18. #endif
  19. enum {
  20. PARA_CHECK=0,
  21. PARA_READ,
  22. PARA_WRITE,
  23. };
  24. extern GlobalDeviceInfo DFLT_PARAS;
  25. typedef struct {
  26. dictionary *dic;
  27. GlobalDeviceInfo *info;
  28. char path[200];
  29. }paras_handle_t;
  30. static paras_handle_t paraHandle={0};
  31. #if 1
  32. static int proc_prod(dictionary *dic, int op, ProductInfo_t *prod)
  33. {
  34. int r=0;
  35. char *p=NULL;
  36. char temp[100];
  37. char *token=NULL;
  38. if(op==PARA_CHECK) {
  39. if(prod->language>=4) {
  40. LOGE("___ product.language %d is wrong\n", prod->language);
  41. r = -1;
  42. }
  43. if(prod->type>=2) {
  44. LOGE("___ product.type %d is wrong\n", prod->type);
  45. r = -1;
  46. }
  47. if(prod->pwr_type>SmartPDU_Tree_AC_One_B) {
  48. LOGE("___ product.pwr_type %d is wrong\n", prod->pwr_type);
  49. r = -1;
  50. }
  51. return r;
  52. }
  53. else if(op==PARA_WRITE) {
  54. r = proc_prod(dic, PARA_CHECK, prod);
  55. if(r) {
  56. return -1;
  57. }
  58. }
  59. token = "product:id";
  60. if(op==PARA_READ) {
  61. r = iniparser_getint(dic, token, -1);
  62. if(r==-1) {
  63. LOGE("___ iniparser_getint %s failed\n", token);
  64. return -1;
  65. }
  66. prod->id = r;
  67. }
  68. else {
  69. sprintf(temp, "%d", prod->id);
  70. r = iniparser_set(dic, token, temp);
  71. if(r) {
  72. LOGE("___ iniparser_set %s failed\n", token);
  73. return -1;
  74. }
  75. }
  76. token = "product:number";
  77. if(op==PARA_READ) {
  78. p = (char*)iniparser_getstring(dic, token, NULL);
  79. if(!p) {
  80. LOGE("___ iniparser_getstring %s failed\n", token);
  81. return -1;
  82. }
  83. strcpy(prod->number, p);
  84. }
  85. else {
  86. r = iniparser_set(dic, token, prod->number);
  87. if(r) {
  88. LOGE("___ iniparser_set %s failed\n", token);
  89. return -1;
  90. }
  91. }
  92. token = "product:name";
  93. if(op==PARA_READ) {
  94. p = (char*)iniparser_getstring(dic, token, NULL);
  95. if(!p) {
  96. LOGE("___ iniparser_getstring %s failed\n", token);
  97. return -1;
  98. }
  99. strcpy(prod->name, p);
  100. }
  101. else {
  102. r = iniparser_set(dic, token, prod->name);
  103. if(r) {
  104. LOGE("___ iniparser_set %s failed\n", token);
  105. return -1;
  106. }
  107. }
  108. token = "product:type";
  109. if(op==PARA_READ) {
  110. r = iniparser_getint(dic, token, -1);
  111. if(r==-1) {
  112. LOGE("___ iniparser_getint %s failed\n", token);
  113. return -1;
  114. }
  115. prod->type = r;
  116. }
  117. else {
  118. sprintf(temp, "%d", prod->type);
  119. r = iniparser_set(dic, token, temp);
  120. if(r) {
  121. LOGE("___ iniparser_set %s failed\n", token);
  122. return -1;
  123. }
  124. }
  125. token = "product:pwrtype";
  126. if(op==PARA_READ) {
  127. r = iniparser_getint(dic, token, -1);
  128. if(r==-1) {
  129. LOGE("___ iniparser_getint %s failed\n", token);
  130. return -1;
  131. }
  132. prod->pwr_type = r;
  133. }
  134. else {
  135. sprintf(temp, "%d", prod->pwr_type);
  136. r = iniparser_set(dic, token, temp);
  137. if(r) {
  138. LOGE("___ iniparser_set %s failed\n", token);
  139. return -1;
  140. }
  141. }
  142. #if 0
  143. token = "product:version";
  144. if(op==PARA_READ) {
  145. p = (char*)iniparser_getstring(dic, token, NULL);
  146. if(!p) {
  147. LOGE("___ iniparser_getstring %s failed\n", token);
  148. return -1;
  149. }
  150. strcpy(prod->version, p);
  151. }
  152. else {
  153. r = iniparser_set(dic, token, prod->version);
  154. if(r) {
  155. LOGE("___ iniparser_set %s failed\n", token);
  156. return -1;
  157. }
  158. }
  159. #endif
  160. token = "product:language";
  161. if(op==PARA_READ) {
  162. r = iniparser_getint(dic, token, -1);
  163. if(r==-1) {
  164. LOGE("___ iniparser_getint %s failed\n", token);
  165. return -1;
  166. }
  167. prod->language = r;
  168. }
  169. else {
  170. sprintf(temp, "%d", prod->language);
  171. r = iniparser_set(dic, token, temp);
  172. if(r) {
  173. LOGE("___ iniparser_set %s failed\n", token);
  174. return -1;
  175. }
  176. }
  177. token = "product:samptime";
  178. if(op==PARA_READ) {
  179. r = iniparser_getint(dic, token, -1);
  180. if(r==-1) {
  181. LOGE("___ iniparser_getint %s failed\n", token);
  182. return -1;
  183. }
  184. prod->samp_time = r;
  185. }
  186. else {
  187. sprintf(temp, "%d", prod->samp_time);
  188. r = iniparser_set(dic, token, temp);
  189. if(r) {
  190. LOGE("___ iniparser_set %s failed\n", token);
  191. return -1;
  192. }
  193. }
  194. token = "product:savetime";
  195. if(op==PARA_READ) {
  196. r = iniparser_getint(dic, token, -1);
  197. if(r==-1) {
  198. LOGE("___ iniparser_getint %s failed\n", token);
  199. return -1;
  200. }
  201. prod->save_time = r;
  202. }
  203. else {
  204. sprintf(temp, "%d", prod->save_time);
  205. r = iniparser_set(dic, token, temp);
  206. if(r) {
  207. LOGE("___ iniparser_set %s failed\n", token);
  208. return -1;
  209. }
  210. }
  211. token = "product:ph_group";
  212. if(op==PARA_READ) {
  213. r = iniparser_getint(dic, token, -1);
  214. if(r==-1) {
  215. LOGE("___ iniparser_getint %s failed\n", token);
  216. return -1;
  217. }
  218. prod->ph_group = r;
  219. }
  220. else {
  221. sprintf(temp, "%d", prod->ph_group);
  222. r = iniparser_set(dic, token, temp);
  223. if(r) {
  224. LOGE("___ iniparser_set %s failed\n", token);
  225. return -1;
  226. }
  227. }
  228. token = "product:ch_delay";
  229. if(op==PARA_READ) {
  230. r = iniparser_getint(dic, token, -1);
  231. if(r==-1) {
  232. LOGE("___ iniparser_getint %s failed\n", token);
  233. return -1;
  234. }
  235. prod->ch_delay = r;
  236. }
  237. else {
  238. sprintf(temp, "%d", prod->ch_delay);
  239. r = iniparser_set(dic, token, temp);
  240. if(r) {
  241. LOGE("___ iniparser_set %s failed\n", token);
  242. return -1;
  243. }
  244. }
  245. if(op==PARA_READ) {
  246. prod->count = 0;
  247. prod->status[0] = 0;
  248. r = proc_prod(dic, PARA_CHECK, prod);
  249. if(r) {
  250. return -1;
  251. }
  252. }
  253. return 0;
  254. }
  255. static int proc_modbus(dictionary *dic, int op, ModbusInfo_t *mb)
  256. {
  257. int r=0;
  258. char temp[100];
  259. char *p,*token=NULL;
  260. if(op==PARA_CHECK) {
  261. if(mb->mode!=0 && mb->mode!=1) {
  262. LOGE("___ set modbus, mode %d is invalid\n", mb->mode);
  263. r = -1;
  264. }
  265. if(mb->mode==1 && (mb->addr==0 || mb->addr>CASCADE_MAX)) { //slave
  266. LOGE("___ set modbus, slave addr %d is invalid\n", mb->addr);
  267. r = -1;
  268. }
  269. return r;
  270. }
  271. else if (op==PARA_WRITE) {
  272. r = proc_modbus(dic, PARA_CHECK, mb);
  273. if(r) {
  274. return -1;
  275. }
  276. }
  277. token = "modbus:mode";
  278. if(op==PARA_READ) {
  279. r = iniparser_getint(dic, token, -1);
  280. if(r==-1) {
  281. LOGE("___ iniparser_getint %s failed\n", token);
  282. return -1;
  283. }
  284. mb->mode = r;
  285. }
  286. else {
  287. sprintf(temp, "%d", mb->mode);
  288. r = iniparser_set(dic, token, temp);
  289. if(r) {
  290. LOGE("___ iniparser_set %s failed\n", token);
  291. return -1;
  292. }
  293. }
  294. token = "modbus:address";
  295. if(op==PARA_READ) {
  296. r = iniparser_getint(dic, token, -1);
  297. if(r==-1) {
  298. LOGE("___ iniparser_getint %s failed\n", token);
  299. return -1;
  300. }
  301. mb->addr = r;
  302. }
  303. else {
  304. sprintf(temp, "%d", mb->addr);
  305. r = iniparser_set(dic, token, temp);
  306. if(r) {
  307. LOGE("___ iniparser_set %s failed\n", token);
  308. return -1;
  309. }
  310. }
  311. token = "modbus:baudrate";
  312. if(op==PARA_READ) {
  313. r = iniparser_getint(dic, token, -1);
  314. if(r==-1) {
  315. LOGE("___ iniparser_getint %s failed\n", token);
  316. return -1;
  317. }
  318. mb->baudrate = r;
  319. }
  320. else {
  321. sprintf(temp, "%d", mb->baudrate);
  322. r = iniparser_set(dic, token, temp);
  323. if(r) {
  324. LOGE("___ iniparser_set %s failed\n", token);
  325. return -1;
  326. }
  327. }
  328. if(op==PARA_READ) {
  329. r = proc_modbus(dic, PARA_CHECK, mb);
  330. if(r) {
  331. return -1;
  332. }
  333. }
  334. return 0;
  335. }
  336. static int proc_ptotal(dictionary *dic, int op, PowerTotal_t *ptotal)
  337. {
  338. int r=0;
  339. char temp[100];
  340. char *p,*token=NULL;
  341. if(op==PARA_CHECK) {
  342. if(ptotal->voltage<=0) {
  343. LOGE("___ set ptotal, voltage is invalid, must greater than 0\n");
  344. r = -1;
  345. }
  346. if(ptotal->current<=0) {
  347. LOGE("___ set ptotal, current is invalid, must greater than 0\n");
  348. r = -1;
  349. }
  350. if(ptotal->power<=0) {
  351. LOGE("___ set ptotal, power is invalid, must greater than 0\n");
  352. r = -1;
  353. }
  354. if(ptotal->brdMax<=0) {
  355. LOGE("___ set ptotal, brdMax is invalid, must greater than 0\n");
  356. r = -1;
  357. }
  358. return r;
  359. }
  360. else if (op==PARA_WRITE) {
  361. r = proc_ptotal(dic, PARA_CHECK, ptotal);
  362. if(r) {
  363. return -1;
  364. }
  365. }
  366. token = "ptotal:voltage";
  367. if(op==PARA_READ) {
  368. r = iniparser_getint(dic, token, -1);
  369. if(r==-1) {
  370. LOGE("___ iniparser_getint %s failed\n", token);
  371. return -1;
  372. }
  373. ptotal->voltage = r;
  374. }
  375. else {
  376. sprintf(temp, "%d", ptotal->voltage);
  377. r = iniparser_set(dic, token, temp);
  378. if(r) {
  379. LOGE("___ iniparser_set %s failed\n", token);
  380. return -1;
  381. }
  382. }
  383. token = "ptotal:current";
  384. if(op==PARA_READ) {
  385. r = iniparser_getint(dic, token, -1);
  386. if(r==-1) {
  387. LOGE("___ iniparser_getint %s failed\n", token);
  388. return -1;
  389. }
  390. ptotal->current = r;
  391. }
  392. else {
  393. sprintf(temp, "%d", ptotal->current);
  394. r = iniparser_set(dic, token, temp);
  395. if(r) {
  396. LOGE("___ iniparser_set %s failed\n", token);
  397. return -1;
  398. }
  399. }
  400. token = "ptotal:power";
  401. if(op==PARA_READ) {
  402. r = iniparser_getint(dic, token, -1);
  403. if(r==-1) {
  404. LOGE("___ iniparser_getint %s failed\n", token);
  405. return -1;
  406. }
  407. ptotal->power = r;
  408. }
  409. else {
  410. sprintf(temp, "%d", ptotal->power);
  411. r = iniparser_set(dic, token, temp);
  412. if(r) {
  413. LOGE("___ iniparser_set %s failed\n", token);
  414. return -1;
  415. }
  416. }
  417. token = "ptotal:brd_max";
  418. if(op==PARA_READ) {
  419. r = iniparser_getint(dic, token, -1);
  420. if(r==-1) {
  421. LOGE("___ iniparser_getint %s failed\n", token);
  422. return -1;
  423. }
  424. ptotal->brdMax = r;
  425. }
  426. else {
  427. sprintf(temp, "%d", ptotal->brdMax);
  428. r = iniparser_set(dic, token, temp);
  429. if(r) {
  430. LOGE("___ iniparser_set %s failed\n", token);
  431. return -1;
  432. }
  433. }
  434. if(op==PARA_READ) {
  435. r = proc_ptotal(dic, PARA_CHECK, ptotal);
  436. if(r) {
  437. return -1;
  438. }
  439. }
  440. return 0;
  441. }
  442. static int proc_ntp(dictionary *dic, int op, NTPManager *ntp)
  443. {
  444. int r=0;
  445. char temp[100];
  446. char *p,*token=NULL;
  447. if(op==PARA_CHECK) {
  448. if(ntp->mode<0 || ntp->mode>1) {
  449. LOGE("___ set ntp, mode is wrong, correct value is 0/1\n");
  450. r = -1;
  451. }
  452. if(!ntp->ntpName[0]) {
  453. LOGE("___ set ntp, name is null\n");
  454. r = -1;
  455. }
  456. if(!ntp->ntpaddress[0]) {
  457. LOGE("___ set ntp, addr is null\n");
  458. r = -1;
  459. }
  460. if(ntp->tzone>12 || ntp->tzone<-12) {
  461. LOGE("___ set ntp, tzong is wrong, correct range is -12~12\n");
  462. r = -1;
  463. }
  464. return r;
  465. }
  466. else if (op==PARA_WRITE) {
  467. r = proc_ntp(dic, PARA_CHECK, ntp);
  468. if(r) {
  469. return -1;
  470. }
  471. }
  472. token = "ntp:mode";
  473. if(op==PARA_READ) {
  474. r = iniparser_getint(dic, token, -1);
  475. if(r==-1) {
  476. LOGE("___ iniparser_getint %s failed\n", token);
  477. return -1;
  478. }
  479. ntp->mode = r;
  480. }
  481. else {
  482. sprintf(temp, "%d", ntp->mode);
  483. r = iniparser_set(dic, token, temp);
  484. if(r) {
  485. LOGE("___ iniparser_set %s failed\n", token);
  486. return -1;
  487. }
  488. }
  489. token = "ntp:name";
  490. if(op==PARA_READ) {
  491. p = (char*)iniparser_getstring(dic, token, NULL);
  492. if(!p) {
  493. LOGE("___ iniparser_getstring %s failed\n", token);
  494. return -1;
  495. }
  496. strcpy(ntp->ntpName, p);
  497. }
  498. else {
  499. r = iniparser_set(dic, token, ntp->ntpName);
  500. if(r) {
  501. LOGE("___ iniparser_set %s failed\n", token);
  502. return -1;
  503. }
  504. }
  505. token = "ntp:address";
  506. if(op==PARA_READ) {
  507. p = (char*)iniparser_getstring(dic, token, NULL);
  508. if(r==-1) {
  509. LOGE("___ iniparser_getint %s failed\n", token);
  510. return -1;
  511. }
  512. strcpy(ntp->ntpaddress, p);
  513. }
  514. else {
  515. r = iniparser_set(dic, token, ntp->ntpaddress);
  516. if(r) {
  517. LOGE("___ iniparser_set %s failed\n", token);
  518. return -1;
  519. }
  520. }
  521. token = "ntp:port";
  522. if(op==PARA_READ) {
  523. r = iniparser_getint(dic, token, -1);
  524. if(r==-1) {
  525. LOGE("___ iniparser_getint %s failed\n", token);
  526. return -1;
  527. }
  528. ntp->port = r;
  529. }
  530. else {
  531. sprintf(temp, "%d", ntp->port);
  532. r = iniparser_set(dic, token, temp);
  533. if(r) {
  534. LOGE("___ iniparser_set %s failed\n", token);
  535. return -1;
  536. }
  537. }
  538. token = "ntp:tzone";
  539. if(op==PARA_READ) {
  540. r = iniparser_getint(dic, token, -1);
  541. if(r==-1) {
  542. LOGE("___ iniparser_getint %s failed\n", token);
  543. return -1;
  544. }
  545. ntp->tzone = r;
  546. }
  547. else {
  548. sprintf(temp, "%d", ntp->tzone);
  549. r = iniparser_set(dic, token, temp);
  550. if(r) {
  551. LOGE("___ iniparser_set %s failed\n", token);
  552. return -1;
  553. }
  554. }
  555. if(op==PARA_READ) {
  556. ntp->time[0] = 0;
  557. ntp->weekday = 0;
  558. ntp->product_id = 0;
  559. r = proc_ntp(dic, PARA_CHECK, ntp);
  560. if(r) {
  561. return -1;
  562. }
  563. }
  564. return 0;
  565. }
  566. static int proc_snmp(dictionary *dic, int op, SNMPManager *snmp)
  567. {
  568. int r=0;
  569. char temp[100];
  570. char *p,*token=NULL;
  571. if(op==PARA_CHECK) {
  572. if(snmp->mode<0 || snmp->mode>1) {
  573. LOGE("___ set snmp, mode %d is wrong, correct value is 0/1\n", snmp->mode);
  574. r = -1;
  575. }
  576. if(snmp->public[0]) {
  577. LOGE("___ set snmp, no public input\n");
  578. r = -1;
  579. }
  580. if(snmp->trapmode<0 || snmp->trapmode>1) {
  581. LOGE("___ set snmp, trapmode %d is wrong, correct value is 0/1\n", snmp->trapmode);
  582. r = -1;
  583. }
  584. if(sys_ip_check(snmp->nmsIP)==IP_ERR) {
  585. LOGE("___ set snmp, nms ip is invalid\n");
  586. r = -1;
  587. }
  588. if(snmp->version<0 || snmp->version>2) {
  589. LOGE("___ set snmp, version %d is wrong, correct value is 0/1/2\n");
  590. r = -1;
  591. }
  592. if(snmp->version==2) {
  593. if(snmp->crypt.user[0]==0 || strlen(snmp->crypt.user)<8 || strlen(snmp->crypt.user)>32) {
  594. if(snmp->crypt.auth.alg[0]==0) {
  595. LOGE("___ set snmp, crypt user is null\n");
  596. }
  597. else {
  598. LOGE("___ set snmp, crypt user length is wrong, correct range is 8~32 characters(english)\n");
  599. }
  600. r = -1;
  601. }
  602. if(snmp->crypt.auth.alg[0]==0 || strcmp(snmp->crypt.auth.alg, "MD5") ||
  603. strcmp(snmp->crypt.auth.alg, "SHA") ||
  604. strcmp(snmp->crypt.auth.alg, "SHA-224") ||
  605. strcmp(snmp->crypt.auth.alg, "SHA-256") ||
  606. strcmp(snmp->crypt.auth.alg, "SHA-384") ||
  607. strcmp(snmp->crypt.auth.alg, "SHA-512")) {
  608. if(snmp->crypt.auth.alg[0]==0) {
  609. LOGE("___ set snmp, crypt auth algorithm is null\n");
  610. }
  611. else {
  612. LOGE("___ set snmp, crypt auth algorithm %s is wrong, correct value is: MD5/SHA/SHA-224/SHA-256/SHA-384/SHA-512\n");
  613. }
  614. r = -1;
  615. }
  616. if(snmp->crypt.auth.passwd[0]==0 || strlen(snmp->crypt.auth.passwd)<8 || strlen(snmp->crypt.auth.passwd)>32) {
  617. if(snmp->crypt.auth.passwd[0]==0) {
  618. LOGE("___ set snmp, crypt auth password is null\n");
  619. }
  620. else {
  621. LOGE("___ set snmp, crypt auth password length is wrong, correct range is 8~32 characters(english)\n");
  622. }
  623. r = -1;
  624. }
  625. if(snmp->crypt.priv.alg[0]==0 || strcmp(snmp->crypt.priv.alg, "NO") ||
  626. strcmp(snmp->crypt.priv.alg, "DES") ||
  627. strcmp(snmp->crypt.priv.alg, "AES")) {
  628. if(snmp->crypt.priv.alg[0]==0) {
  629. LOGE("___ set snmp, crypt priv algorithm is null\n");
  630. }
  631. else {
  632. LOGE("___ set snmp, crypt priv algorithm %s is wrong, correct value is: NO/DES/AES\n");
  633. }
  634. r = -1;
  635. }
  636. if(snmp->crypt.priv.passwd[0]==0 || strlen(snmp->crypt.priv.passwd)<8 || strlen(snmp->crypt.priv.passwd)>32) {
  637. if(snmp->crypt.priv.passwd[0]==0) {
  638. LOGE("___ set snmp, crypt priv password is null\n");
  639. }
  640. else {
  641. LOGE("___ set snmp, crypt priv password length is wrong, correct range is 8~32 characters(english)\n");
  642. }
  643. r = -1;
  644. }
  645. }
  646. return r;
  647. }
  648. else if (op==PARA_WRITE) {
  649. r = proc_snmp(dic, PARA_CHECK, snmp);
  650. if(r) {
  651. return -1;
  652. }
  653. }
  654. token = "snmp:mode";
  655. if(op==PARA_READ) {
  656. r = iniparser_getint(dic, token, -1);
  657. if(r==-1) {
  658. LOGE("___ iniparser_getint %s failed\n", token);
  659. return -1;
  660. }
  661. snmp->mode = r;
  662. }
  663. else {
  664. sprintf(temp, "%d", snmp->mode);
  665. r = iniparser_set(dic, token, temp);
  666. if(r) {
  667. LOGE("___ iniparser_set %s failed\n", token);
  668. return -1;
  669. }
  670. }
  671. token = "snmp:public";
  672. if(op==PARA_READ) {
  673. p = (char*)iniparser_getstring(dic, token, NULL);
  674. if(!p) {
  675. LOGE("___ iniparser_getstring %s failed\n", token);
  676. return -1;
  677. }
  678. strcpy(snmp->public, p);
  679. }
  680. else {
  681. r = iniparser_set(dic, token, snmp->public);
  682. if(r) {
  683. LOGE("___ iniparser_set %s failed\n", token);
  684. return -1;
  685. }
  686. }
  687. token = "snmp:version";
  688. if(op==PARA_READ) {
  689. r = iniparser_getint(dic, token, -1);
  690. if(r==-1) {
  691. LOGE("___ iniparser_getstring %s failed\n", token);
  692. return -1;
  693. }
  694. snmp->version = r-1;
  695. }
  696. else {
  697. sprintf(temp, "%d", snmp->version+1);
  698. r = iniparser_set(dic, token, temp);
  699. if(r) {
  700. LOGE("___ iniparser_set %s failed\n", token);
  701. return -1;
  702. }
  703. }
  704. if(snmp->version==2) {
  705. token = "snmp:crypt_user";
  706. if(op==PARA_READ) {
  707. p = (char*)iniparser_getstring(dic, token, NULL);
  708. if(!p) {
  709. LOGE("___ iniparser_getstring %s failed\n", token);
  710. return -1;
  711. }
  712. strcpy(snmp->crypt.user, p);
  713. }
  714. else {
  715. r = iniparser_set(dic, token, snmp->crypt.user);
  716. if(r) {
  717. LOGE("___ iniparser_set %s failed\n", token);
  718. return -1;
  719. }
  720. }
  721. token = "snmp:crypt_auth_alg";
  722. if(op==PARA_READ) {
  723. p = (char*)iniparser_getstring(dic, token, NULL);
  724. if(!p) {
  725. LOGE("___ iniparser_getstring %s failed\n", token);
  726. return -1;
  727. }
  728. strcpy(snmp->crypt.auth.alg, p);
  729. }
  730. else {
  731. r = iniparser_set(dic, token, snmp->crypt.auth.alg);
  732. if(r) {
  733. LOGE("___ iniparser_set %s failed\n", token);
  734. return -1;
  735. }
  736. }
  737. token = "snmp:crypt_auth_pwd";
  738. if(op==PARA_READ) {
  739. p = (char*)iniparser_getstring(dic, token, NULL);
  740. if(!p) {
  741. LOGE("___ iniparser_getstring %s failed\n", token);
  742. return -1;
  743. }
  744. strcpy(snmp->crypt.auth.passwd, p);
  745. }
  746. else {
  747. r = iniparser_set(dic, token, snmp->crypt.auth.passwd);
  748. if(r) {
  749. LOGE("___ iniparser_set %s failed\n", token);
  750. return -1;
  751. }
  752. }
  753. token = "snmp:crypt_priv_alg";
  754. if(op==PARA_READ) {
  755. p = (char*)iniparser_getstring(dic, token, NULL);
  756. if(!p) {
  757. LOGE("___ iniparser_getstring %s failed\n", token);
  758. return -1;
  759. }
  760. strcpy(snmp->crypt.priv.alg, p);
  761. }
  762. else {
  763. r = iniparser_set(dic, token, snmp->crypt.priv.alg);
  764. if(r) {
  765. LOGE("___ iniparser_set %s failed\n", token);
  766. return -1;
  767. }
  768. }
  769. token = "snmp:crypt_priv_pwd";
  770. if(op==PARA_READ) {
  771. p = (char*)iniparser_getstring(dic, token, NULL);
  772. if(!p) {
  773. LOGE("___ iniparser_getstring %s failed\n", token);
  774. return -1;
  775. }
  776. strcpy(snmp->crypt.priv.passwd, p);
  777. }
  778. else {
  779. r = iniparser_set(dic, token, snmp->crypt.priv.passwd);
  780. if(r) {
  781. LOGE("___ iniparser_set %s failed\n", token);
  782. return -1;
  783. }
  784. }
  785. }
  786. if(op==PARA_READ) {
  787. r = proc_snmp(dic, PARA_CHECK, snmp);
  788. if(r) {
  789. return -1;
  790. }
  791. }
  792. return 0;
  793. }
  794. static int proc_mqtt(dictionary *dic, int op, mqtt_info_t *info)
  795. {
  796. int r=-1;
  797. char temp[100];
  798. char *p,*token=NULL;
  799. return 0;
  800. }
  801. static int proc_mail(dictionary *dic, int op, mail_info_t *info)
  802. {
  803. int r=-1;
  804. char temp[100];
  805. char *p,*token=NULL;
  806. return 0;
  807. }
  808. static int proc_role(dictionary *dic, int op, RoleInfo *info)
  809. {
  810. int r=-1;
  811. char temp[100];
  812. char *p,*token=NULL;
  813. return 0;
  814. }
  815. static int proc_group(dictionary *dic, int op, GroupInfo *info)
  816. {
  817. int r=-1;
  818. char temp[100];
  819. char *p,*token=NULL;
  820. return 0;
  821. }
  822. static int proc_sensor(dictionary *dic, int op, NTPManager *ntp)
  823. {
  824. return 0;
  825. }
  826. static int proc_power(dictionary *dic, int op, NTPManager *ntp)
  827. {
  828. int r=-1;
  829. char temp[100];
  830. char *p,*token=NULL;
  831. return 0;
  832. }
  833. static int proc_power3(dictionary *dic, int op, NTPManager *ntp)
  834. {
  835. int r=-1;
  836. char temp[100];
  837. char *p,*token=NULL;
  838. return 0;
  839. }
  840. static int proc_breaker(dictionary *dic, int op, NTPManager *ntp)
  841. {
  842. int r=-1;
  843. char temp[100];
  844. char *p,*token=NULL;
  845. return 0;
  846. }
  847. static int proc_alarm(dictionary *dic, int op, NTPManager *ntp)
  848. {
  849. int r=-1;
  850. char temp[100];
  851. char *p,*token=NULL;
  852. return 0;
  853. }
  854. static int proc_timer(dictionary *dic, int op, NTPManager *ntp)
  855. {
  856. int r=-1;
  857. char temp[100];
  858. char *p,*token=NULL;
  859. return 0;
  860. }
  861. /////////////////////////////////////////////////////////////////////////////////
  862. static dictionary* ini_load(char *path, GlobalDeviceInfo *info)
  863. {
  864. int r=-1;
  865. dictionary *dic=iniparser_load(path);
  866. if(dic == NULL){
  867. return NULL;
  868. }
  869. r = proc_prod(dic, PARA_READ, &info->product);
  870. if(r) {
  871. LOGE("___ini_r_dev failed\n");
  872. iniparser_freedict(dic);
  873. return NULL;
  874. }
  875. r = proc_modbus(dic, PARA_READ, &info->cascade);
  876. if(r) {
  877. LOGE("___ini_r_modbus failed\n");
  878. iniparser_freedict(dic);
  879. return NULL;
  880. }
  881. r = proc_ptotal(dic, PARA_READ, &info->ptotal);
  882. if(r) {
  883. LOGE("___ini_r_modbus failed\n");
  884. iniparser_freedict(dic);
  885. return NULL;
  886. }
  887. return dic;
  888. }
  889. static int ini_check(char *path)
  890. {
  891. GlobalDeviceInfo info=DFLT_PARAS;
  892. dictionary *dic=ini_load(path, &info);
  893. if(!dic) {
  894. return -1;
  895. }
  896. iniparser_freedict(dic);
  897. return 0;
  898. }
  899. static int ini_reset(paras_handle_t *h)
  900. {
  901. int r;
  902. FILE *fp=NULL;
  903. char tmp[200];
  904. GlobalDeviceInfo *info=&DFLT_PARAS;
  905. fp = fopen(h->path, "w");
  906. if (fp==NULL) {
  907. LOGE("ini_reset, fopen %s failed\n", h->path);
  908. return -1;
  909. }
  910. fprintf(fp, "[product]\n");
  911. fprintf(fp, "id = \"%d\"\n", info->product.id);
  912. fprintf(fp, "number = \"%s\"\n", info->product.number);
  913. fprintf(fp, "name = \"%s\"\n", info->product.name);
  914. fprintf(fp, "type = \"%d\"\n", info->product.type);
  915. fprintf(fp, "pwrtype = \"%d\"\n", info->product.pwr_type);
  916. //fprintf(fp, "version = %s\\"n", info->product.version);
  917. fprintf(fp, "language = \"%d\"\n", info->product.language);
  918. fprintf(fp, "samptime = \"%d\"\n", info->product.samp_time);
  919. fprintf(fp, "savetime = \"%d\"\n", info->product.save_time);
  920. fprintf(fp, "ph_group = \"%d\"\n", info->product.ph_group);
  921. fprintf(fp, "ch_delay = \"%d\"\n", info->product.ch_delay);
  922. fprintf(fp, "\n");
  923. fprintf(fp, "[modbus]\n");
  924. fprintf(fp, "mode = \"%d\"\n", info->cascade.mode);
  925. fprintf(fp, "address = \"%d\"\n", info->cascade.addr);
  926. fprintf(fp, "baudrate = \"%d\"\n", info->cascade.baudrate);
  927. fprintf(fp, "\n");
  928. fprintf(fp, "[ptotal]\n");
  929. fprintf(fp, "voltage = \"%d\"\n", info->ptotal.voltage);
  930. fprintf(fp, "current = \"%d\"\n", info->ptotal.current);
  931. fprintf(fp, "power = \"%d\"\n", info->ptotal.power);
  932. fprintf(fp, "brd_max = \"%d\"\n", info->ptotal.brdMax);
  933. fprintf(fp, "\n");
  934. fclose(fp);
  935. sys_get_path(tmp, INI_FILE_BAK_NAME);
  936. file_copy(tmp, h->path);
  937. if(h->dic) {
  938. iniparser_freedict(h->dic);
  939. }
  940. h->dic = ini_load(h->path, h->info);
  941. return 0;
  942. }
  943. static int ini_free(paras_handle_t *h)
  944. {
  945. iniparser_freedict(h->dic);
  946. return 0;
  947. }
  948. static int ini_save(paras_handle_t *h)
  949. {
  950. int r=-1;
  951. r = proc_prod(h->dic, PARA_WRITE, &h->info->product);
  952. if(r) {
  953. LOGE("___ini_w_dev failed\n");
  954. return -1;
  955. }
  956. r = proc_modbus(h->dic, PARA_WRITE, &h->info->cascade);
  957. if(r) {
  958. LOGE("___ini_w_modbus failed\n");
  959. return -1;
  960. }
  961. FILE *fp=fopen(h->path, "w");
  962. if(!fp) {
  963. LOGE("___%s open failed\n", h->path);
  964. return -1;
  965. }
  966. iniparser_dump_ini(h->dic, fp);
  967. fclose(fp);
  968. return 0;
  969. }
  970. #endif
  971. static GlobalDeviceInfo *get_info(void)
  972. {
  973. return &__globalDeviceManage._globalDevInfo;
  974. }
  975. ////////////////////////////////////////////////////////////
  976. int paras_init(void)
  977. {
  978. int r=0;
  979. paras_handle_t *h=&paraHandle;
  980. lock_s_hold(LOCK_ID_PARAS);
  981. memset(&paraHandle, 0, sizeof(paraHandle));
  982. h->info = get_info();
  983. sys_get_path(h->path, INI_FILE_NAME);
  984. h->dic = ini_load(h->path, h->info);
  985. if(h->dic==NULL) {
  986. r = ini_reset(h);
  987. }
  988. lock_s_release(LOCK_ID_PARAS);
  989. return r;
  990. }
  991. int paras_deinit(void)
  992. {
  993. int r=0;
  994. paras_handle_t *h=&paraHandle;
  995. lock_s_hold(LOCK_ID_PARAS);
  996. r = ini_free(h);
  997. lock_s_release(LOCK_ID_PARAS);
  998. return 0;
  999. }
  1000. int paras_check(char *path)
  1001. {
  1002. int r=0;
  1003. lock_s_hold(LOCK_ID_PARAS);
  1004. r = ini_check(path);
  1005. lock_s_release(LOCK_ID_PARAS);
  1006. return r;
  1007. }
  1008. int paras_load(char *path)
  1009. {
  1010. int r=-1;
  1011. paras_handle_t *h=&paraHandle;
  1012. lock_s_hold(LOCK_ID_PARAS);
  1013. ini_free(h);
  1014. h->dic = ini_load(path, h->info);
  1015. if(h->dic) r = 0;
  1016. lock_s_release(LOCK_ID_PARAS);
  1017. return r;
  1018. }
  1019. int paras_reset(void)
  1020. {
  1021. int r=0;
  1022. paras_handle_t *h=&paraHandle;
  1023. lock_s_hold(LOCK_ID_PARAS);
  1024. ini_reset(h);
  1025. lock_s_release(LOCK_ID_PARAS);
  1026. return r;
  1027. }
  1028. int paras_copy(char *dst, char *src)
  1029. {
  1030. int r=-1;
  1031. lock_s_hold(LOCK_ID_PARAS);
  1032. r = file_copy(dst, src);
  1033. lock_s_release(LOCK_ID_PARAS);
  1034. return r;
  1035. }
  1036. int paras_save(void)
  1037. {
  1038. int r=0;
  1039. paras_handle_t *h=&paraHandle;
  1040. lock_s_hold(LOCK_ID_PARAS);
  1041. r = ini_save(h);
  1042. lock_s_release(LOCK_ID_PARAS);
  1043. return r;
  1044. }