#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() { 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