http_callrouter.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #ifndef _HTTP_CALLROUTER_H_
  2. #define _HTTP_CALLROUTER_H_
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include "callroute_nodelist.h"
  6. #include "IHttpFunc.h"
  7. #include "json/json.h"
  8. #include "SpBase.h"
  9. #define REFLECTION(var) #var
  10. //http_call_info_t
  11. typedef struct http_call_info_s {
  12. CSimpleStringA strServerURL;
  13. CSimpleStringA strAPI;
  14. CSimpleStringA strTerminalNo;
  15. CSimpleStringA strQueueName;
  16. CSimpleStringA strAddClientLevel;
  17. }http_call_info_t;
  18. typedef struct node_info_s {
  19. char strcallernum[RVC_DATALEN];
  20. char strcallurl[RVC_DATALEN];
  21. char strassistip[RVC_DATALEN];
  22. char strport[RVC_DATALEN];
  23. }node_info_t;
  24. struct CallRouteHTTPReq : CHTTPReq {
  25. std::string queueName;
  26. std::string terminalNo;
  27. std::string addClientLevel;
  28. virtual string ToJson() {
  29. char reqcontent[512] = {0};
  30. snprintf(reqcontent, 512, "{\"queueName\":\"%s\",\"terminalNo\":\"%s\",\"addClientLevel\":\"%s\"}", queueName.c_str(), terminalNo.c_str(), addClientLevel.c_str());
  31. return reqcontent;
  32. }
  33. };
  34. struct CallRoute {
  35. std::string m_accessNum; //接入号 string
  36. std::string m_branchNo; //分行号 string
  37. int m_clientLevel; //队列等级 integer(int32)
  38. std::string m_mediaGateAddress; //媒体网关地址 string
  39. std::string m_queueName; //队列名 string
  40. std::string m_terminalNo; //终端号 string
  41. std::string m_voiceGateAddress; //语音网关地址 string
  42. std::string m_mediaGateAddressBackUp; //备用媒体网关地址 string
  43. std::string m_voiceGateAddressBackUp; //备用语音网关地址 string
  44. };
  45. struct CallRouteHTTPRet : CHTTPRet {
  46. std::string m_code;
  47. CallRoute m_call_route;
  48. std::string m_errorMsg;
  49. std::string m_message;
  50. std::string m_returnCode;
  51. bool m_success;
  52. virtual bool Parse(string strData) {
  53. Json::Value root;
  54. Json::Reader reader;
  55. if (reader.parse(strData, root, false)) {
  56. m_success = root[REFLECTION(success)].asBool();
  57. m_code = root[REFLECTION(code)].asString();
  58. m_message = root[REFLECTION(message)].asString();
  59. m_returnCode = root[REFLECTION(returnCode)].asString();
  60. m_errorMsg = root[REFLECTION(errorMsg)].asString();
  61. if (m_success) {
  62. m_call_route.m_accessNum = root[REFLECTION(data)][REFLECTION(accessNum)].asString();
  63. m_call_route.m_branchNo = root[REFLECTION(data)][REFLECTION(branchNo)].asString();
  64. m_call_route.m_clientLevel = root[REFLECTION(data)][REFLECTION(clientLevel)].asInt();
  65. m_call_route.m_mediaGateAddress = root[REFLECTION(data)][REFLECTION(mediaGateAddress)].asString();
  66. m_call_route.m_voiceGateAddress = root[REFLECTION(data)][REFLECTION(voiceGateAddress)].asString();
  67. m_call_route.m_queueName = root[REFLECTION(data)][REFLECTION(queueName)].asString();
  68. m_call_route.m_terminalNo = root[REFLECTION(data)][REFLECTION(terminalNo)].asString();
  69. m_call_route.m_voiceGateAddressBackUp = root[REFLECTION(data)][REFLECTION(voiceGateAddressBackUp)].asString();
  70. m_call_route.m_mediaGateAddressBackUp = root[REFLECTION(data)][REFLECTION(mediaGateAddressBackUp)].asString();
  71. }
  72. }
  73. else {
  74. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("reader parse failed!");
  75. m_success = false;
  76. }
  77. return m_success;
  78. }
  79. };
  80. node_list_head_t* get_http_callroute_list(http_call_info_t* pinfo, int itimeout, bool bprintdbg);
  81. #endif