http_callrouter.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GrayLaunchResponse: data = %s", strData.c_str());
  54. Json::Value root;
  55. Json::Reader reader;
  56. if (reader.parse(strData, root, false)) {
  57. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("reader parse success!");
  58. m_success = root[REFLECTION(success)].asBool();
  59. m_code = root[REFLECTION(code)].asString();
  60. m_message = root[REFLECTION(message)].asString();
  61. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_message = %s.", m_message.c_str());
  62. m_returnCode = root[REFLECTION(returnCode)].asString();
  63. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_returnCode = %s.", m_returnCode.c_str());
  64. m_errorMsg = root[REFLECTION(errorMsg)].asString();
  65. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_errorMsg = %s.", m_errorMsg.c_str());
  66. if (m_success) {
  67. m_call_route.m_accessNum = root[REFLECTION(data)][REFLECTION(accessNum)].asString();
  68. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_accessNum = %s.", m_call_route.m_accessNum.c_str());
  69. m_call_route.m_branchNo = root[REFLECTION(data)][REFLECTION(branchNo)].asString();
  70. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_branchNo = %s.", m_call_route.m_branchNo.c_str());
  71. m_call_route.m_clientLevel = root[REFLECTION(data)][REFLECTION(clientLevel)].asInt();
  72. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_clientLevel = %d.", m_call_route.m_clientLevel);
  73. m_call_route.m_mediaGateAddress = root[REFLECTION(data)][REFLECTION(mediaGateAddress)].asString();
  74. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_mediaGateAddress = %s.", m_call_route.m_mediaGateAddress.c_str());
  75. m_call_route.m_voiceGateAddress = root[REFLECTION(data)][REFLECTION(voiceGateAddress)].asString();
  76. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_voiceGateAddress = %s.", m_call_route.m_voiceGateAddress.c_str());
  77. m_call_route.m_queueName = root[REFLECTION(data)][REFLECTION(queueName)].asString();
  78. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_queueName = %s.", m_call_route.m_queueName.c_str());
  79. m_call_route.m_terminalNo = root[REFLECTION(data)][REFLECTION(terminalNo)].asString();
  80. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_terminalNo = %s.", m_call_route.m_terminalNo.c_str());
  81. m_call_route.m_voiceGateAddressBackUp = root[REFLECTION(data)][REFLECTION(voiceGateAddressBackUp)].asString();
  82. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("voiceGateAddressBackUp = %s.", m_call_route.m_voiceGateAddressBackUp.c_str());
  83. m_call_route.m_mediaGateAddressBackUp = root[REFLECTION(data)][REFLECTION(mediaGateAddressBackUp)].asString();
  84. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_mediaGateAddressBackUp = %s.", m_call_route.m_mediaGateAddressBackUp.c_str());
  85. }
  86. }
  87. else {
  88. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("reader parse failed!");
  89. m_success = false;
  90. }
  91. return m_success;
  92. }
  93. };
  94. node_list_head_t* get_http_callroute_list(http_call_info_t* pinfo, int itimeout, bool bprintdbg);
  95. #endif