fwadminproc.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #include "fwadminproc.h"
  2. #include <iostream>
  3. fwadminproc::fwadminproc()
  4. {
  5. mpfwdb = new fwdb();
  6. }
  7. fwadminproc::~fwadminproc()
  8. {
  9. delete mpfwdb;
  10. }
  11. iv::queryrpcReply fwadminproc::ProcReq(const iv::queryrpcReq * req)
  12. {
  13. iv::queryrpcReply xreply;
  14. switch (req->ntype()) {
  15. case iv::CommonRPCType::LOGIN:
  16. xreply = ProcLogin(req);
  17. break;
  18. case iv::CommonRPCType::USERADMIN:
  19. xreply = ProcAdminUser(req);
  20. break;
  21. default:
  22. break;
  23. }
  24. return xreply;
  25. }
  26. iv::queryrpcReply fwadminproc::ProcLogin(const iv::queryrpcReq *req)
  27. {
  28. iv::queryrpcReply xreply;
  29. iv::fw::loginreq xloginreq;
  30. iv::fw::loginreply xloginreply;
  31. if(xloginreq.ParseFromArray(req->data().data(),req->ndatasize()))
  32. {
  33. std::string strerrorcode = "username or password error.";
  34. int nauth = mpfwdb->CheckAuth(xloginreq.username(),xloginreq.password(),strerrorcode);
  35. xloginreply.set_nauth(nauth);
  36. if(nauth == 0)
  37. {
  38. xloginreply.set_errstr(strerrorcode);
  39. }
  40. }
  41. else
  42. {
  43. xloginreply.set_nauth(0);
  44. xloginreply.set_errstr("Parse Request Fail.");
  45. }
  46. xreply.set_ntype(iv::CommonRPCType::LOGIN);
  47. int ndatasize = xloginreply.ByteSize();
  48. std::shared_ptr<char> pstr_ptr = std::shared_ptr<char>(new char[ndatasize]);
  49. if(xloginreply.SerializeToArray(pstr_ptr.get(),ndatasize))
  50. {
  51. xreply.set_ndatasize(ndatasize);
  52. xreply.set_data(pstr_ptr.get(),ndatasize);
  53. }
  54. else
  55. {
  56. std::cout<<"fwadminproc::ProcLogin "<<std::endl;
  57. }
  58. return xreply;
  59. }
  60. iv::queryrpcReply fwadminproc::ProcAdminUser(const iv::queryrpcReq *req)
  61. {
  62. iv::queryrpcReply xreply;
  63. iv::fw::adminreq xadminreq;
  64. iv::fw::adminreply xadminreply;
  65. if(xadminreq.ParseFromArray(req->data().data(),req->ndatasize()))
  66. {
  67. std::string strerrorcode = "username or password error.";
  68. switch (xadminreq.admintype()) {
  69. case iv::fw::ADMINREQ_TYPE::ADDUSER:
  70. {
  71. int nauth = mpfwdb->AddUser(xadminreq.username(),xadminreq.password(),strerrorcode);
  72. xadminreply.set_nresult(nauth);
  73. if(nauth == 0)
  74. {
  75. xadminreply.set_errstr(strerrorcode);
  76. }
  77. }
  78. break;
  79. case iv::fw::ADMINREQ_TYPE::QUERYUSER:
  80. break;
  81. default:
  82. break;
  83. }
  84. }
  85. else
  86. {
  87. xadminreply.set_nresult(0);
  88. xadminreply.set_errstr("Parse Request Fail.");
  89. }
  90. xreply.set_ntype(iv::CommonRPCType::USERADMIN);
  91. int ndatasize = xadminreply.ByteSize();
  92. std::shared_ptr<char> pstr_ptr = std::shared_ptr<char>(new char[ndatasize]);
  93. if(xadminreply.SerializeToArray(pstr_ptr.get(),ndatasize))
  94. {
  95. xreply.set_ndatasize(ndatasize);
  96. xreply.set_data(pstr_ptr.get(),ndatasize);
  97. }
  98. else
  99. {
  100. std::cout<<"fwadminproc::xadminreply Serialxze fail "<<std::endl;
  101. }
  102. return xreply;
  103. }