Commit 27d8b327 by guanghui.cui

ods连接异常和非法数据处理

parent 2f638ccc
......@@ -626,6 +626,23 @@ bool JsonModule::getInitBackData(IN const char* inJson,OUT std::string& outJson)
return false;
}
bool JsonModule::isInitBackValid(IN const char* inJson)
{
rapidjson::Document document; // 定义一个Document对象
document.Parse(inJson); // 解析,Parse()无返回值,也不会抛异常
if (document.HasParseError()) // 通过HasParseError()来判断解析是否成功
{
LOG(ERROR) << "isInitBackValid JSON parse error:" << document.GetParseError() << ":" << document.GetErrorOffset();
return false;
}
if (document.HasMember("code"))
{
return true;
}
return false;
}
bool JsonModule::getPosResponseData(int status, const std::string &msg, std::string &result)
{
rapidjson::StringBuffer buffer;
......
......@@ -30,6 +30,12 @@ public:
* */
bool getInitBackData(IN const char* inJson,OUT std::string& outJson);
/* 功能:获取ODS初始化返回数据是否合法
* 参数:[1]返回json数据
* 返回:是否正确格式
* */
bool isInitBackValid(IN const char* inJson);
/* 功能:判断是否是心跳包
* 参数:[1]待判断数据
* 返回:1:心跳包 2:非心跳包 3:非法数据
......
......@@ -18,7 +18,7 @@
INITIALIZE_EASYLOGGINGPP
#define VERSION "1.0.5 Beta2" //版本号
#define VERSION "1.0.5 Beta4" //版本号
std::string g_init_data;
std::string g_init_data_ods_back;
......@@ -158,13 +158,16 @@ void* listen_pos_func(void* arg)
TCPClient ods;
if( ods.doConnect(ods_recv_port, ods_ip.c_str()) )
{
ods.setSocketTimeout(60); //设置超时
if( ods.send(requestOdsData) )
{
std::string tmp;
if( ods.receive(tmp) )
{
LOG(INFO)<<"REQ ODS ===>> PLUGIN:"<<tmp.data();
jsonTool.getPosResponseData(tmp,posRequestData, responseData);
if (!jsonTool.getPosResponseData(tmp, posRequestData, responseData)) {
jsonTool.getPosResponseData(101, "receive data from [ODS] invalid!", responseData);
}
}else
{
jsonTool.getPosResponseData(101, "receive data from [ODS] failed!", responseData);
......@@ -318,6 +321,10 @@ int main(int argc,char *argv[])
ods.receive(odsPushData);
g_init_data_ods_back=odsPushData;
LOG(INFO)<<"INIT ODS ===>> PLUGIN:"<<odsPushData.data();
if (odsPushData.empty()|| !jsonTool.isInitBackValid(odsPushData.data())) {
LOG(INFO) << "invalid data,close connect";
ods.close(); //当连接到负载均衡,并没有和ods建立连接的时候。返回值为空,所以应该关闭重新连接
}
int count=0;
while(!bInitDone){
LOG(INFO)<<"wait for init done";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment