#include "local_server.hpp" #include #include #include #include #include "mqttclient/mqtt_client.h" #include "common/global.hpp" #include "common/parameter_defination.hpp" #include "dbaccess/sql_db.hpp" #include "common/common_func.hpp" #include "jsonparse/communication_cmd.hpp" extern zlog_category_t *zct; std::string LocalServer::HandleCgi_cmd(std::string &pData) { try { zlog_info(zct,"HandleCgi Data = %s ", pData.c_str()); Json::Features f = Json::Features::strictMode(); Json::Reader recvReader(f); Json::Value recvValue; Json::Value recvBody; if (recvReader.parse(pData, recvValue)) { int cmdType = atoi(recvValue["cmd"].asString().c_str()); std::string cmdBody = ""; if (!recvValue["cmdBody"].isNull()) { recvBody = recvValue["cmdBody"]; Json::FastWriter fw; cmdBody = fw.write(recvBody); } switch (cmdType) { case kLoginUpdateAccount: { Param_01 param; std::string type = recvBody["type"].asString(); if (0 == type.compare("login")) { param.mMode = 0; param.mUserName = recvBody["userName"].asString(); param.mPassWord = recvBody["passWord"].asString(); } else if (0 == type.compare("upDate")) { param.mMode = 1; param.mUserName = recvBody["userName"].asString(); param.mPassWord = recvBody["passWord"].asString(); param.mPassWordNew = recvBody["passWordNew"].asString(); } else { // TODO: add error log here } JsonData jd; std::string data = jd.JsonCmd_Cgi_01(param); return data; } break; case kWebTiming: { Param_02 param; std::string type = recvBody["type"].asString(); if (0 == type.compare("SET")) { param.mMode = 0; param.mTimeStamp = recvBody["timeStamp"].asInt(); param.mSetType = recvBody["setType"].asInt(); } else if (0 == type.compare("GET")) { param.mMode = 1; } JsonData jd; std::string data = jd.JsonCmd_Cgi_02(param); return data; } break; case kWebHWStatus: { JsonData jd; std::string data = jd.JsonCmd_Cgi_07(); return data; } break; case kWebRebootSystem: { JsonData jd; std::string data = jd.JsonCmd_Cgi_08(); system("sync"); sleep(3); system("reboot"); return data; } break; case kGetFeatureData: { JsonData jd; Param_09 param; param.mPackageFlag = recvBody["package"].asInt(); std::string data = jd.JsonCmd_Cgi_09(param); return data; } break; case kGetHistoryFeatureData: { JsonData jd; Param_10 param; param.strDataNode = recvBody["DataNode"].asString(); param.strStatic = recvBody["Static"].asString(); param.straxis = recvBody["Raxis"].asString(); param.mPackageFlag = recvBody["package"].asInt(); param.timeStart = recvBody["timeStart"].asString(); param.timeEnd = recvBody["timeEnd"].asString(); param.MeasurementID = recvBody["MeasurementID"].asString(); std::string data = jd.JsonCmd_Cgi_10(param); return data; } break; case kWebModifyProperty: { Param_20 param; std::string type = recvBody["type"].asString(); if (0 == type.compare("SET")) { param.mMode = 0; param.mDataWatchName = recvBody["SystemInfo"]["dataNodeGatewayName"].asString(); param.mDataWatchAssetId = recvBody["SystemInfo"]["dataNodeGatewayAssetId"].asString(); param.mDataWatchAddedBy = recvBody["SystemInfo"]["dataNodeGatewayAddedBy"].asString(); } else { param.mMode = 1; } JsonData jd; std::string data = jd.JsonCmd_Cgi_20(param); return data; } break; case kWebTimeZone: { Param_22 param; std::string type = recvBody["type"].asString(); param.mCmdSerial = recvValue["cmdSerial"].asString(); if (0 == type.compare("SET")) { param.mMode = 0; param.mTimeZone = recvBody["SystemSettings"]["timezone"].asString(); ZoneConfig(param.mTimeZone); } else { param.mMode = 1; } JsonData jd; std::string data = jd.JsonCmd_Cgi_22(param); return data; } break; case kWebMqttBrokerCfg: { std::string type = recvBody["type"].asString(); Param_23 param; param.mCmdSerial = recvValue["cmdSerial"].asString(); if (0 == type.compare("SET")) { param.mMode = 0; param.mServerIp = recvBody["SystemSettings"]["ServerIpAddress"].asString(); param.mPort = boost::lexical_cast(recvBody["SystemSettings"]["ServerPort"].asInt()); param.mCommMode = recvBody["SystemSettings"]["CommMode"].asString(); param.mUserName = recvBody["SystemSettings"]["UserName"].asString(); param.mPassword = recvBody["SystemSettings"]["Password"].asString(); param.mAPN = recvBody["SystemSettings"]["APN"].asString(); } else { param.mMode = 1; } JsonData jd; std::string data = jd.JsonCmd_Cgi_23(param); return data; } break; case kWebNetworkCfg: { Param_25 param; std::string type = recvBody["type"].asString(); if (0 == type.compare("SET")) { param.mNet = recvBody["net"].asString(); param.mDnsName = recvBody["dnsName"].asString(); param.mGateway = recvBody["gateway"].asString(); param.mHostName = recvBody["hostName"].asString(); param.mIp = recvBody["dataWatchIpAddress"].asString(); param.mSubnetMask = recvBody["subnetMask"].asString(); param.mNetworkPortStatus = recvBody["networkPortStatus"].asString(); param.mMode = 0; } else { param.mMode = 1; } JsonData jd; std::string data = jd.JsonCmd_Cgi_25(param); return data; } break; case kWebGetTransducerInfo: { JsonData jd; Param_26 param; param.mPackageFlag = recvBody["package"].asInt(); std::string data = jd.JsonCmd_Cgi_26(param); return data; } break; case kWebDeleteTransducerInfo: { Param_27 param; param.mDataNodeNo = recvBody["dataNodeNo"].asString(); param.mShortAddr = recvBody["shortAddr"].asString(); param.mMeasurementID = recvBody["MeasurementID"].asString(); param.mType = recvBody["type"].asString(); JsonData jd; std::string data = jd.JsonCmd_Cgi_27(param); return data; } break; case kUpdateTransducerName: { Param_28 param; param.mDataNodeNo = recvBody["dataNodeNo"].asString(); param.mDataNodeName = recvBody["dataNodeName"].asString(); JsonData jd; std::string data = jd.JsonCmd_Cgi_28(param); return data; } break; case kGetTimeDomainWave: { JsonData jd; Param_29 param; param.mChannelId = recvBody["channelId"].asString(); param.mPackageFlag = recvBody["package"].asInt(); param.mDataNodeNo = recvBody["dataNodeNo"].asString(); std::string data = jd.JsonCmd_Cgi_29(param); return data; } break; case kGetFreqDomainWave: { JsonData jd; Param_30 param; param.mChannelId = recvBody["channelId"].asString(); param.mPackageFlag = recvBody["package"].asInt(); param.mDataNodeNo = recvBody["dataNodeNo"].asString(); std::string data = jd.JsonCmd_Cgi_30(param); return data; } break; case kConfigZigbee: { JsonData jd; Param_31 param; std::string data; std::string type = recvBody["type"].asString(); if (0 == type.compare("SET")) { param.mMode = 0; param.mChannelId = recvBody["channel"].asString(); param.mPanID = recvBody["panID"].asString(); data = jd.JsonCmd_Cgi_31(param); sleep(1); system("reboot"); } else { param.mMode = 1; data = jd.JsonCmd_Cgi_31(param); } return data; } break; case kGetEnvolop: { JsonData jd; Param_40 param; param.mChannelId = recvBody["channelId"].asString(); param.mPackageFlag = recvBody["package"].asInt(); param.mDataNodeNo = recvBody["dataNodeNo"].asString(); param.StartFrequency = recvBody["StartFrequency"].asInt(); param.EndFrequency = recvBody["EndFrequency"].asInt(); std::string data = jd.JsonCmd_Cgi_40(param); return data; } break; case kModifyTransducerConfig: { JsonData jd; Param_41 param; std::vector param41; for (size_t i = 0; i < recvBody.size(); i++) { param.mdataNodeNo = recvBody[i]["dataNodeNo"].asString(); param.msamplingRate = recvBody[i]["samplingRate"].asInt(); param.mrange = recvBody[i]["range"].asInt(); param.mAccSampleTime = recvBody[i]["ACCSampleTime"].asInt(); param.mstartBrands = recvBody[i]["startBrands"].asString(); param.mstopBrands = recvBody[i]["stopBrands"].asString(); param.menvelopeBandPass = recvBody[i]["envelopeBandPass"].asString(); param.mviff = recvBody[i]["viff"].asInt(); param.mfaultFrequency = recvBody[i]["faultFrequency"].asString(); param.mdataNodeName = recvBody[i]["dataNodeName"].asString(); param.ZigbeePower = recvBody[i]["ZigbeePower"].asInt(); param.ZigbeeRetry = recvBody[i]["ZigbeeRetry"].asInt(); param.mMeasurementID = recvBody[i]["MeasurementID"].asString(); param.nodeWaveSend = recvBody[i]["nodeWaveSend"].asString(); param.mShortAddr = recvBody[i]["shortAddr"].asString(); param41.push_back(param); } std::string data = jd.JsonCmd_Cgi_41(param41); char whereCon[64] = {0}; sprintf(whereCon, " UpdateFlag <> 1 "); std::string strData = sqlite_db_ctrl::instance().GetNodeConfigureInfor(whereCon); data_publish(strData.c_str(), GlobalConfig::Topic_G.mPubConfig.c_str()); return data; } break; case kWebUpgrade: { JsonData jd; Param_42 param; param.fileName = recvBody["fileName"].asString(); std::string data = jd.JsonCmd_Cgi_42(param); return data; } break; case kGetAllVersionInfo: { JsonData jd; std::string data = jd.JsonCmd_Cgi_50(); return data; } break; case kUpdateInstallPosition: { JsonData jd; Param_51 param; std::string type = recvBody["type"].asString(); if (0 == type.compare("SET")) { param.mMode = 0; param.strGateWayMAC = recvBody["gateWayNo"].asString(); param.strGateWayLocation = recvBody["gateWayLocation"].asString(); } else { param.mMode = 1; } std::string data = jd.JsonCmd_Cgi_51(param); return data; } break; case kWifiOperation: { Param_52 param; param.mCmdSerial = recvValue["cmdSerial"].asString(); std::string type = recvBody["type"].asString(); if (0 == type.compare("SCAN")) { param.mMode = 0; } else if (0 == type.compare("SET")) { param.mMode = 1; param.mSsid = recvBody["ssid"].asString(); param.mPassWord = recvBody["password"].asString(); } else if (0 == type.compare("GET")) { param.mMode = 2; } else if (0 == type.compare("CLEAN")) { param.mMode = 3; } else { // TODO: add error log } JsonData jd; std::string data = jd.JsonCmd_Cgi_52(param); return data; } break; case kUpdateFreqBandEnergyConfig: { JsonData jd; Param_53 param; std::vector param53; for (size_t i = 0; i < recvBody.size(); i++) { param.mdataNodeNo = recvBody[i]["dataNodeNo"].asString(); param.mUpdateKey = recvBody[i]["updateKey"].asString(); param.mUpdateValue = recvBody[i]["updateValue"].asString(); param.mUpdateKey2 = recvBody[i]["updateKey2"].asString(); param.mUpdateValue2 = recvBody[i]["updateValue2"].asString(); param.mUpdateKey3 = recvBody[i]["updateKey3"].asString(); param.mUpdateValue3 = recvBody[i]["updateValue3"].asString(); param53.push_back(param); } std::string data = jd.JsonCmd_Cgi_53(param53); char whereCon[64] = {0}; sprintf(whereCon, "UpdateFlag <> 0 "); std::string strData = sqlite_db_ctrl::instance().GetNodeConfigureInfor(whereCon); data_publish(strData.c_str(), GlobalConfig::Topic_G.mPubConfig.c_str()); return data; } break; case kBackupGatewayInfo: { JsonData jd; Param_54 param; param.mPackageFlag = recvBody["package"].asInt(); std::string data = jd.JsonCmd_Cgi_54(param); return data; } break; case kVelocityTimeDomain: { JsonData jd; Param_55 param; param.mChannelId = recvBody["channelId"].asString(); param.mPackageFlag = recvBody["package"].asInt(); param.mDataNodeNo = recvBody["dataNodeNo"].asString(); std::string data = jd.JsonCmd_Cgi_55(param); return data; } break; case kVelocityFreqDomain: { JsonData jd; Param_56 param; param.mChannelId = recvBody["channelId"].asString(); param.mPackageFlag = recvBody["package"].asInt(); param.mDataNodeNo = recvBody["dataNodeNo"].asString(); std::string data = jd.JsonCmd_Cgi_56(param); return data; } case kEnableZigbeePower: { JsonData jd; Param_57 param; param.mZigbeePowerEnable = recvBody["ZigbeePowerEnable"].asInt(); std::string type = recvBody["type"].asString(); if (0 == type.compare("SET")) { param.mMode = 1; } if (0 == type.compare("GET")) { param.mMode = 0; } std::string data = jd.JsonCmd_Cgi_57(param); return data; } break; case kSchedulingConfiguration:{ JsonData jd; Param_58 param; std::string type = recvBody["type"].asString(); if (0 == type.compare("SET")) { param.mMode = 1; } if (0 == type.compare("GET")) { param.mMode = 0; } param.featureInterVal = recvBody["featureInterVal"].asInt(); param.featureInterTime = recvBody["featureInterTime"].asInt(); param.waveInterVal = recvBody["waveInterVal"].asInt(); param.waveInterTime = recvBody["waveInterTime"].asInt(); param.maxSensorNum = recvBody["maxSensorNum"].asInt(); std::string data = jd.JsonCmd_Cgi_58(param); return data; }break; case kLostRecords:{ JsonData jd; Param_59 param; param.mMode = recvBody["type"].asInt(); param.DataNodeNo = recvBody["DataNodeNo"].asString(); param.straxis = recvBody["Raxis"].asString(); std::string data = jd.JsonCmd_Cgi_59(param); return data; }break; case kTransducerUpgrade:{ JsonData jd; Param_60 param; param.fileName = recvBody["fileName"].asString(); param.product = recvBody["product"].asInt(); param.mShortAddr = recvBody["shortAddr"].asString(); Json::Value recvDataNodeNo = recvBody["DataNodeNo"]; if (recvDataNodeNo.size() > 0) { for (size_t i = 0; i < recvDataNodeNo.size(); i++) { param.dataNodeNo.push_back(recvDataNodeNo[i].asString()); } } std::string data = jd.JsonCmd_Cgi_60(param); return data; }break; case kWaveRecords:{ JsonData jd; Param_61 param; param.straxis = recvBody["Raxis"].asString(); param.mPackageFlag = recvBody["package"].asInt(); param.timeStart = recvBody["timeStart"].asString(); param.timeEnd = recvBody["timeEnd"].asString(); param.MeasurementID = recvBody["MeasurementID"].asString(); std::string data = jd.JsonCmd_Cgi_61(param); return data; }break; case kWaveReceive:{ JsonData jd; Param_62 param; param.mPackageFlag = recvBody["package"].asInt(); param.timeStart = recvBody["timeStart"].asString(); param.timeEnd = recvBody["timeEnd"].asString(); param.MeasurementID = recvBody["MeasurementID"].asString(); std::string data = jd.JsonCmd_Cgi_62(param); return data; }break; case kWaveSend:{ JsonData jd; Param_63 param; param.mMode = recvBody["sub_cmd"].asInt(); param.partial = recvBody["partial"].asBool(); if (param.mMode == 1) { for (const auto &key : recvBody.getMemberNames()) { if (key != "sub_cmd" && key != "partial") { FeatureEntryUploadCfg tmpCfg; char *end_ptr; if (key == "global") { tmpCfg.short_addr = 0; }else{ tmpCfg.short_addr = strtol(key.c_str(), &end_ptr, 16); } Json::Value xyz_status = recvBody[key]; for (size_t i = 0; i < xyz_status.size(); ++i) { if (i == 0) { tmpCfg.x = xyz_status[i].asInt(); } else if (i == 1) { tmpCfg.y = xyz_status[i].asInt(); } else if (i == 2) { tmpCfg.z = xyz_status[i].asInt(); } } param.cfg.push_back(tmpCfg); } } } std::string data = jd.JsonCmd_Cgi_63(param); return data; }break; case kFeatureSend:{ JsonData jd; Param_64 param; param.mMode = recvBody["sub_cmd"].asInt(); param.partial = recvBody["partial"].asBool(); if (param.mMode == 1) { for (const auto &key : recvBody.getMemberNames()) { if (key != "sub_cmd" && key != "partial") { FeatureEntryUploadCfg tmpCfg; char *end_ptr; if (key == "global") { tmpCfg.short_addr = 0; }else{ tmpCfg.short_addr = strtol(key.c_str(), &end_ptr, 16); } Json::Value xyz_status = recvBody[key]; for (size_t i = 0; i < xyz_status.size(); ++i) { if (i == 0) { tmpCfg.x = xyz_status[i].asInt(); } else if (i == 1) { tmpCfg.y = xyz_status[i].asInt(); } else if (i == 2) { tmpCfg.z = xyz_status[i].asInt(); } } param.cfg.push_back(tmpCfg); } } } std::string data = jd.JsonCmd_Cgi_64(param); return data; }break; default: JsonData jd; std::string data = jd.JsonCmd_Cgi_default(); return data; break; } } } catch (...) { Json::Value jsVal; jsVal["success"] = false; jsVal["message"] = "unknown error"; Json::FastWriter fw; return fw.write(jsVal); } zlog_error(zct, "invalid command"); return ""; }