123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #ifndef _HTTP_CALLROUTER_H_
- #define _HTTP_CALLROUTER_H_
- #include <stdio.h>
- #include <stdlib.h>
- #include "callroute_nodelist.h"
- #include "IHttpFunc.h"
- #include "json/json.h"
- #include "SpBase.h"
- #define REFLECTION(var) #var
- //http_call_info_t
- typedef struct http_call_info_s {
- CSimpleStringA strServerURL;
- CSimpleStringA strAPI;
- CSimpleStringA strTerminalNo;
- CSimpleStringA strQueueName;
- CSimpleStringA strAddClientLevel;
- }http_call_info_t;
- typedef struct node_info_s {
- char strcallernum[RVC_DATALEN];
- char strcallurl[RVC_DATALEN];
- char strassistip[RVC_DATALEN];
- char strport[RVC_DATALEN];
- }node_info_t;
- struct CallRouteHTTPReq : CHTTPReq {
- std::string queueName;
- std::string terminalNo;
- std::string addClientLevel;
- virtual string ToJson() {
- char reqcontent[512] = {0};
- snprintf(reqcontent, 512, "{\"queueName\":\"%s\",\"terminalNo\":\"%s\",\"addClientLevel\":\"%s\"}", queueName.c_str(), terminalNo.c_str(), addClientLevel.c_str());
- return reqcontent;
- }
- };
- struct CallRoute {
- std::string m_accessNum; //接入号 string
- std::string m_branchNo; //分行号 string
- int m_clientLevel; //队列等级 integer(int32)
- std::string m_mediaGateAddress; //媒体网关地址 string
- std::string m_queueName; //队列名 string
- std::string m_terminalNo; //终端号 string
- std::string m_voiceGateAddress; //语音网关地址 string
- std::string m_mediaGateAddressBackUp; //备用媒体网关地址 string
- std::string m_voiceGateAddressBackUp; //备用语音网关地址 string
- };
- struct CallRouteHTTPRet : CHTTPRet {
- std::string m_code;
- CallRoute m_call_route;
- std::string m_errorMsg;
- std::string m_message;
- std::string m_returnCode;
- bool m_success;
- virtual bool Parse(string strData) {
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GrayLaunchResponse: data = %s", strData.c_str());
- Json::Value root;
- Json::Reader reader;
- if (reader.parse(strData, root, false)) {
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("reader parse success!");
- m_success = root[REFLECTION(success)].asBool();
- m_code = root[REFLECTION(code)].asString();
- m_message = root[REFLECTION(message)].asString();
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_message = %s.", m_message.c_str());
- m_returnCode = root[REFLECTION(returnCode)].asString();
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_returnCode = %s.", m_returnCode.c_str());
- m_errorMsg = root[REFLECTION(errorMsg)].asString();
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_errorMsg = %s.", m_errorMsg.c_str());
- if (m_success) {
- m_call_route.m_accessNum = root[REFLECTION(data)][REFLECTION(accessNum)].asString();
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_accessNum = %s.", m_call_route.m_accessNum.c_str());
- m_call_route.m_branchNo = root[REFLECTION(data)][REFLECTION(branchNo)].asString();
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_branchNo = %s.", m_call_route.m_branchNo.c_str());
- m_call_route.m_clientLevel = root[REFLECTION(data)][REFLECTION(clientLevel)].asInt();
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_clientLevel = %d.", m_call_route.m_clientLevel);
- m_call_route.m_mediaGateAddress = root[REFLECTION(data)][REFLECTION(mediaGateAddress)].asString();
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_mediaGateAddress = %s.", m_call_route.m_mediaGateAddress.c_str());
- m_call_route.m_voiceGateAddress = root[REFLECTION(data)][REFLECTION(voiceGateAddress)].asString();
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_voiceGateAddress = %s.", m_call_route.m_voiceGateAddress.c_str());
- m_call_route.m_queueName = root[REFLECTION(data)][REFLECTION(queueName)].asString();
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_queueName = %s.", m_call_route.m_queueName.c_str());
- m_call_route.m_terminalNo = root[REFLECTION(data)][REFLECTION(terminalNo)].asString();
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_terminalNo = %s.", m_call_route.m_terminalNo.c_str());
- m_call_route.m_voiceGateAddressBackUp = root[REFLECTION(data)][REFLECTION(voiceGateAddressBackUp)].asString();
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("voiceGateAddressBackUp = %s.", m_call_route.m_voiceGateAddressBackUp.c_str());
- m_call_route.m_mediaGateAddressBackUp = root[REFLECTION(data)][REFLECTION(mediaGateAddressBackUp)].asString();
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_mediaGateAddressBackUp = %s.", m_call_route.m_mediaGateAddressBackUp.c_str());
- }
- }
- else {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("reader parse failed!");
- m_success = false;
- }
- return m_success;
- }
- };
- node_list_head_t* get_http_callroute_list(http_call_info_t* pinfo, int itimeout, bool bprintdbg);
- #endif
|