http_callrouter.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. return CSimpleStringA::Format("{\"queueName\":\"%s\",\"terminalNo\":\"%s\",\"addClientLevel\":\"%s\"}", queueName.c_str(), terminalNo.c_str(), addClientLevel.c_str()).GetData();
  30. }
  31. };
  32. struct CallRoute {
  33. std::string m_accessNum; //接入号 string
  34. std::string m_branchNo; //分行号 string
  35. int m_clientLevel; //队列等级 integer(int32)
  36. std::string m_mediaGateAddress; //媒体网关地址 string
  37. std::string m_queueName; //队列名 string
  38. std::string m_terminalNo; //终端号 string
  39. std::string m_voiceGateAddress; //语音网关地址 string
  40. std::string m_mediaGateAddressBackUp; //备用媒体网关地址 string
  41. std::string m_voiceGateAddressBackUp; //备用语音网关地址 string
  42. };
  43. struct CallRouteHTTPRet : CHTTPRet {
  44. std::string m_code;
  45. CallRoute m_call_route;
  46. std::string m_errorMsg;
  47. std::string m_message;
  48. std::string m_returnCode;
  49. bool m_success;
  50. virtual bool Parse(string strData) {
  51. Json::Value root;
  52. Json::Reader reader;
  53. if (reader.parse(strData, root, false)) {
  54. m_success = root[REFLECTION(success)].asBool();
  55. m_code = root[REFLECTION(code)].asString();
  56. m_message = root[REFLECTION(message)].asString();
  57. m_returnCode = root[REFLECTION(returnCode)].asString();
  58. m_errorMsg = root[REFLECTION(errorMsg)].asString();
  59. if (m_success) {
  60. m_call_route.m_accessNum = root[REFLECTION(data)][REFLECTION(accessNum)].asString();
  61. m_call_route.m_branchNo = root[REFLECTION(data)][REFLECTION(branchNo)].asString();
  62. m_call_route.m_clientLevel = root[REFLECTION(data)][REFLECTION(clientLevel)].asInt();
  63. m_call_route.m_mediaGateAddress = root[REFLECTION(data)][REFLECTION(mediaGateAddress)].asString();
  64. m_call_route.m_voiceGateAddress = root[REFLECTION(data)][REFLECTION(voiceGateAddress)].asString();
  65. m_call_route.m_queueName = root[REFLECTION(data)][REFLECTION(queueName)].asString();
  66. m_call_route.m_terminalNo = root[REFLECTION(data)][REFLECTION(terminalNo)].asString();
  67. m_call_route.m_voiceGateAddressBackUp = root[REFLECTION(data)][REFLECTION(voiceGateAddressBackUp)].asString();
  68. m_call_route.m_mediaGateAddressBackUp = root[REFLECTION(data)][REFLECTION(mediaGateAddressBackUp)].asString();
  69. }
  70. }
  71. else {
  72. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("reader parse failed!");
  73. m_success = false;
  74. }
  75. return m_success;
  76. }
  77. };
  78. node_list_head_t* get_http_callroute_list(http_call_info_t* pinfo, int itimeout, bool bprintdbg);
  79. #endif