#ifndef _HTTP_CALLROUTER_H_ #define _HTTP_CALLROUTER_H_ #include #include #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() { return CSimpleStringA::Format("{\"queueName\":\"%s\",\"terminalNo\":\"%s\",\"addClientLevel\":\"%s\"}", queueName.c_str(), terminalNo.c_str(), addClientLevel.c_str()).GetData(); } }; 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) { Json::Value root; Json::Reader reader; if (reader.parse(strData, root, false)) { m_success = root[REFLECTION(success)].asBool(); m_code = root[REFLECTION(code)].asString(); m_message = root[REFLECTION(message)].asString(); m_returnCode = root[REFLECTION(returnCode)].asString(); m_errorMsg = root[REFLECTION(errorMsg)].asString(); if (m_success) { m_call_route.m_accessNum = root[REFLECTION(data)][REFLECTION(accessNum)].asString(); m_call_route.m_branchNo = root[REFLECTION(data)][REFLECTION(branchNo)].asString(); m_call_route.m_clientLevel = root[REFLECTION(data)][REFLECTION(clientLevel)].asInt(); m_call_route.m_mediaGateAddress = root[REFLECTION(data)][REFLECTION(mediaGateAddress)].asString(); m_call_route.m_voiceGateAddress = root[REFLECTION(data)][REFLECTION(voiceGateAddress)].asString(); m_call_route.m_queueName = root[REFLECTION(data)][REFLECTION(queueName)].asString(); m_call_route.m_terminalNo = root[REFLECTION(data)][REFLECTION(terminalNo)].asString(); m_call_route.m_voiceGateAddressBackUp = root[REFLECTION(data)][REFLECTION(voiceGateAddressBackUp)].asString(); m_call_route.m_mediaGateAddressBackUp = root[REFLECTION(data)][REFLECTION(mediaGateAddressBackUp)].asString(); } } 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