123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952 |
- #include <assert.h>
- #include "Crc64.h"
- #include "CcosLock.h"
- #include "PacketAnalizer.h"
- #include <iostream>
- #include <sstream> // 添加字符串流支持
- #include <cstdint> // 添加标准整数类型头文件
- // 使用标准命名空间
- using namespace std;
- PacketAnalizer::PacketAnalizer(void)
- {
- }
- PacketAnalizer::~PacketAnalizer(void)
- {
- }
- uint32_t PacketAnalizer::MakePacketIdx()
- {
- return Thread_GetUniqTick();
- }
- uint32_t PacketAnalizer::GetPacketIdx(ResDataObject* pObj)
- {
- uint32_t ret = 0;
- try {
- int Idx = (*pObj).GetFirstOf(CCOS_PACK_IDX);
- if (Idx >= 0)
- {
- ret = static_cast<uint32_t>((*pObj)[CCOS_PACK_IDX]);
- }
- }
- catch (ResDataObjectExption& exp)
- {
- cout << exp.what() << endl;
- }
- catch (...)
- {
- }
- return ret;
- }
- bool PacketAnalizer::GetDestinationMachineId(ResDataObject& packet, string& machineId)
- {
- bool ret = false;
- try {
- // 检查目标并分派
- PACKET_TYPE type = PacketAnalizer::GetPacketType(&packet);
- switch (type)
- {
- // 请求:设备总线+进程
- case PACKET_TYPE_REQ:
- if (PacketAnalizer::GetPacketHandleMachineId(&packet, machineId, true))
- {
- return true;
- }
- break;
- // 响应和通知:所有者总线+进程
- case PACKET_TYPE_RES:
- case PACKET_TYPE_NOTIFY:
- if (PacketAnalizer::GetPacketHandleMachineId(&packet, machineId, false))
- {
- return true;
- }
- break;
- default:
- break;
- }
- }
- catch (...)
- {
- }
- return ret;
- }
- bool PacketAnalizer::GetDestinationBusId(ResDataObject& packet, string& busId)
- {
- bool ret = false;
- try {
- // 检查目标并分派
- PACKET_TYPE type = PacketAnalizer::GetPacketType(&packet);
- switch (type)
- {
- // 请求:设备总线+进程
- case PACKET_TYPE_REQ:
- if (PacketAnalizer::GetPacketHandleBusId(&packet, busId, true))
- {
- return true;
- }
- break;
- // 响应和通知:所有者总线+进程
- case PACKET_TYPE_RES:
- case PACKET_TYPE_NOTIFY:
- if (PacketAnalizer::GetPacketHandleBusId(&packet, busId, false))
- {
- return true;
- }
- break;
- default:
- break;
- }
- }
- catch (...)
- {
- }
- return ret;
- }
- bool PacketAnalizer::GetDestinationProcId(ResDataObject& packet, uint64_t& procId)
- {
- bool ret = false;
- try {
- // 检查目标并分派
- PACKET_TYPE type = PacketAnalizer::GetPacketType(&packet);
- switch (type)
- {
- // 请求:设备总线+进程
- case PACKET_TYPE_REQ:
- if (PacketAnalizer::GetPacketHandleProcId(&packet, procId, true))
- {
- return true;
- }
- break;
- // 响应和通知:所有者总线+进程
- case PACKET_TYPE_RES:
- case PACKET_TYPE_NOTIFY:
- if (PacketAnalizer::GetPacketHandleProcId(&packet, procId, false))
- {
- return true;
- }
- break;
- default:
- break;
- }
- }
- catch (...)
- {
- }
- return ret;
- }
- PACKET_TYPE PacketAnalizer::GetPacketType(ResDataObject* pObj)
- {
- int cmd;
- PACKET_TYPE ret = PACKET_TYPE_NONE;
- try {
- cmd = static_cast<int>((*pObj)[CCOS_PACK_TYPE]);
- ret = static_cast<PACKET_TYPE>(cmd);
- if (ret >= 0 && ret < PACKET_TYPE_MAX)
- {
- return ret;
- }
- }
- catch (ResDataObjectExption& exp)
- {
- cout << exp.what() << endl;
- }
- catch (...)
- {
- }
- return PACKET_TYPE_NONE;
- }
- PACKET_CMD PacketAnalizer::GetPacketCmd(ResDataObject* pObj)
- {
- int cmd;
- PACKET_CMD ret = PACKET_CMD_NONE;
- try {
- cmd = static_cast<int>(((*pObj)[CCOS_PACK_CMD]));
- ret = static_cast<PACKET_CMD>(cmd);
- if (ret >= 0 && ret < PACKET_CMD_MAX)
- {
- return ret;
- }
- }
- catch (ResDataObjectExption& exp)
- {
- cout << exp.what() << endl;
- }
- catch (...)
- {
- }
- return PACKET_CMD_NONE;
- }
- ACTION_SYNC_MODE PacketAnalizer::GetPacketSyncMode(ResDataObject* pObj)
- {
- ACTION_SYNC_MODE ret = ACTION_SYNC;
- try {
- ret = static_cast<ACTION_SYNC_MODE>(static_cast<int>((*pObj)[CCOS_PACKET_SYNC]));
- }
- catch (...)
- {
- ret = ACTION_SYNC;
- }
- return ret;
- }
- ResDataObject* PacketAnalizer::GetPacketKeysRes(ResDataObject* pObj)
- {
- try {
- int Idx = (*pObj).GetFirstOf(CCOS_PACK_KEY);
- if (Idx >= 0)
- {
- ResDataObject& Res = (*pObj)[CCOS_PACK_KEY];
- return &Res;
- }
- }
- catch (ResDataObjectExption& exp)
- {
- cout << exp.what() << endl;
- }
- catch (...)
- {
- }
- return NULL;
- }
- string PacketAnalizer::GetPacketPublisher(ResDataObject* pObj)
- {
- std::string key = "";
- try {
- int Idx = (*pObj).GetFirstOf(CCOS_PUBLISH);
- if (Idx >= 0)
- {
- key = static_cast<const char*>((*pObj)[CCOS_PUBLISH]);
- }
- }
- catch (ResDataObjectExption& exp)
- {
- cout << exp.what() << endl;
- key = "";
- }
- catch (...)
- {
- key = "";
- }
- return key;
- }
- std::string PacketAnalizer::GetPacketKey(ResDataObject* pObj)
- {
- std::string key = "";
- try {
- int Idx = (*pObj).GetFirstOf(CCOS_PACK_KEY);
- if (Idx >= 0)
- {
- key = static_cast<const char*>((*pObj)[CCOS_PACK_KEY]);
- }
- }
- catch (ResDataObjectExption& exp)
- {
- cout << exp.what() << endl;
- key = "";
- }
- catch (...)
- {
- key = "";
- }
- return key;
- }
- bool PacketAnalizer::GetPacketHandleExistance(ResDataObject* pPacket)
- {
- bool ret = false;
- try {
- if ((*pPacket).GetFirstOf(CCOS_PACK_HANDLE) >= 0)
- {
- ret = true;
- }
- }
- catch (...)
- {
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::GetPacketHandle(ResDataObject* pPacket, ResDataObject& Handle)
- {
- bool ret = true;
- try {
- Handle = (*pPacket)[CCOS_PACK_HANDLE];
- }
- catch (...)
- {
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::GetPacketHandleBusId(ResDataObject* pPacket, string& BusId, bool dev)
- {
- bool ret = true;
- try {
- if (dev)
- {
- BusId = static_cast<const char*>((*pPacket)[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_DEVID][CCOS_PACK_TARGET_BUSID]);
- }
- else
- {
- BusId = static_cast<const char*>((*pPacket)[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_OWNERID][CCOS_PACK_TARGET_BUSID]);
- }
- }
- catch (...)
- {
- BusId = "";
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::GetPacketHandleMachineId(ResDataObject* pPacket, string& MachineId, bool dev)
- {
- bool ret = true;
- try {
- if (dev)
- {
- MachineId = static_cast<const char*>((*pPacket)[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_DEVID][CCOS_PACK_TARGET_MACHINEID]);
- }
- else
- {
- MachineId = static_cast<const char*>((*pPacket)[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_OWNERID][CCOS_PACK_TARGET_MACHINEID]);
- }
- }
- catch (...)
- {
- MachineId = "";
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::GetPacketHandleProcId(ResDataObject* pPacket, uint64_t& ProcId, bool dev)
- {
- bool ret = true;
- try {
- if (dev)
- {
- ProcId = static_cast<uint64_t>((*pPacket)[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_DEVID][CCOS_PACK_TARGET_PROCID]);
- }
- else
- {
- ProcId = static_cast<uint64_t>((*pPacket)[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_OWNERID][CCOS_PACK_TARGET_PROCID]);
- }
- }
- catch (...)
- {
- ProcId = 0;
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::GetPacketHandleCrc(ResDataObject* pPacket, uint64_t& Crc)
- {
- bool ret = true;
- try {
- Crc = static_cast<uint64_t>((*pPacket)[CCOS_PACK_HANDLE][CCOS_PACKET_HANDLE_KEY]);
- }
- catch (...)
- {
- Crc = 0;
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::GetPacketHandleAddr(ResDataObject* pPacket, uint64_t& Addr, bool dev)
- {
- bool ret = true;
- try {
- if (dev)
- {
- Addr = static_cast<uint64_t>((*pPacket)[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_DEVID][CCOS_PACK_TARGET_ADDR]);
- }
- else
- {
- Addr = static_cast<uint64_t>((*pPacket)[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_OWNERID][CCOS_PACK_TARGET_ADDR]);
- }
- }
- catch (...)
- {
- Addr = 0;
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::MakePacketContextExistance(ResDataObject* pPacket)
- {
- bool ret = false;
- try {
- if ((*pPacket).GetFirstOf(CCOS_PACK_CONTEXT) >= 0)
- {
- ret = true;
- }
- else
- {
- (*pPacket).add(CCOS_PACK_CONTEXT, "");
- ret = true;
- }
- }
- catch (...)
- {
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::GetPacketRoute(ResDataObject* pPacket, CCOS_PACKET_ROUTE& Route)
- {
- bool ret = true;
- Route = CCOS_PACKET_ROUTE_ANY; // 设置默认值
- try {
- Route = static_cast<CCOS_PACKET_ROUTE>(static_cast<int>((*pPacket)[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_ROUTE]));
- }
- catch (...)
- {
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::GetPacketContext(ResDataObject* pPacket, ResDataObject& Context)
- {
- bool ret = true;
- try {
- int Idx = (*pPacket).GetFirstOf(CCOS_PACK_CONTEXT);
- if (Idx >= 0)
- {
- Context = (*pPacket)[Idx];
- }
- }
- catch (...)
- {
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::GetPacketTransaction(ResDataObject* pPacket, string& transaction)
- {
- bool ret = true;
- try {
- int Idx = (*pPacket).GetFirstOf(CCOS_TRANSACTION);
- if (Idx >= 0)
- {
- string id = static_cast<string>((*pPacket)[Idx]);
- transaction = id;
- }
- }
- catch (...)
- {
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::GetPacketRetCode(ResDataObject* pPacket, RET_STATUS& retcode)
- {
- bool ret = true;
- try {
- (retcode) = (RET_STATUS)((int)((*pPacket)[CCOS_PACK_RETURN][CCOS_PACK_CODE]));
- }
- catch (...)
- {
- retcode = RET_FAILED;
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::GetPacketMsgInfo(ResDataObject* pPacket, string& Info)
- {
- bool ret = true;
- try {
- int Idx = (*pPacket)[CCOS_PACK_RETURN].GetFirstOf(CCOS_PACK_MSG);
- if (Idx >= 0)
- {
- Info = static_cast<const char*>(((*pPacket)[CCOS_PACK_RETURN][Idx]));
- }
- }
- catch (...)
- {
- ret = false;
- }
- return ret;
- }
- void PacketAnalizer::MakeRetCode(RET_STATUS retcode, ResDataObject* pObj, const char* pMsg)
- {
- ResDataObject RetObj, SubObj;
- SubObj.add(CCOS_PACK_CODE, static_cast<int>(retcode));
- if (pMsg)
- {
- SubObj.add(CCOS_PACK_MSG, pMsg);
- }
- pObj->update(CCOS_PACK_RETURN, SubObj);
- }
- bool PacketAnalizer::CloneResponse(ResDataObject& Obj, ResDataObject* pReq)
- {
- Obj.clear();
- // 复制索引
- uint32_t Idx = PacketAnalizer::GetPacketIdx(pReq);
- if (Idx)
- {
- Obj.add(CCOS_PACK_IDX, Idx);
- Obj.add(CCOS_PACK_TYPE, static_cast<int>(PACKET_TYPE_RES));
- PACKET_CMD cmd = PacketAnalizer::GetPacketCmd(pReq);
- if (cmd != PACKET_CMD_NONE)
- {
- Obj.add(CCOS_PACK_CMD, static_cast<int>(cmd));
- Obj.add(CCOS_PACK_HANDLE, (*pReq)[CCOS_PACK_HANDLE]);
- string keystr = PacketAnalizer::GetPacketKey(pReq);
- Obj.add(CCOS_PACK_KEY, keystr.c_str());
- Obj.add(CCOS_PACK_CONTEXT, "");
- return true;
- }
- }
- return false;
- }
- bool PacketAnalizer::UpdateOpenRequest(ResDataObject& Req, ResDataObject& MachineId, ResDataObject& busId, uint64_t ProcId, uint64_t Addr)
- {
- try {
- Req[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_DEVID][CCOS_PACK_TARGET_ADDR] = Addr;
- Req[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_DEVID][CCOS_PACK_TARGET_PROCID] = ProcId;
- Req[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_DEVID][CCOS_PACK_TARGET_BUSID] = busId;
- Req[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_DEVID][CCOS_PACK_TARGET_MACHINEID] = MachineId;
- string the_crc = "";
- the_crc += Req[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_OWNERID].encode();
- the_crc += static_cast<const char*>(Req[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_DEVID].encode());
- uint64_t crc = GetCrc64(the_crc.c_str(), static_cast<uint32_t>(the_crc.size()));
- Req[CCOS_PACK_HANDLE][CCOS_PACKET_HANDLE_KEY] = crc;
- return true;
- }
- catch (...)
- {
- }
- return false;
- }
- bool PacketAnalizer::UpdateHandleId(ResDataObject* Obj, uint64_t id)
- {
- (*Obj)[CCOS_PACK_HANDLE][CCOS_PACKET_HANDLE_KEY] = id;
- return true;
- }
- bool PacketAnalizer::GetHandleId(ResDataObject* Obj, uint64_t& Id)
- {
- bool ret = true;
- try {
- Id = static_cast<uint64_t>((*Obj)[CCOS_PACK_HANDLE][CCOS_PACKET_HANDLE_KEY]);
- }
- catch (...)
- {
- Id = 0;
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::UpdateDeviceNotifyResponse(ResDataObject& Notify, ResDataObject& MachineId, ResDataObject& busId, uint64_t ProcId, uint64_t Addr)
- {
- try {
- CcosDevFileHandle handle;
- handle.GetTarget(false)[CCOS_PACK_TARGET_MACHINEID] = static_cast<const char*>(MachineId);
- handle.GetTarget(false)[CCOS_PACK_TARGET_BUSID] = static_cast<const char*>(busId);
- handle.GetTarget(false)[CCOS_PACK_TARGET_PROCID] = ProcId;
- handle.GetTarget(false)[CCOS_PACK_TARGET_ADDR] = Addr;
- ResDataObject handleObj;
- handle.GetResDataObject(handleObj);
- Notify.update(CCOS_PACK_HANDLE, handleObj);
- return true;
- }
- catch (...)
- {
- }
- return false;
- }
- bool PacketAnalizer::UpdatePacketContext(ResDataObject& packet, ResDataObject& Context)
- {
- try {
- packet[CCOS_PACK_CONTEXT] = Context;
- return true;
- }
- catch (...)
- {
- }
- return false;
- }
- bool PacketAnalizer::UpdatePacketTransaction(ResDataObject& packet, string strTransaction)
- {
- try {
- packet.update(CCOS_TRANSACTION, strTransaction.c_str());
- return true;
- }
- catch (...)
- {
- }
- return false;
- }
- bool PacketAnalizer::MakeOpenResponse(ResDataObject& Req, ResDataObject& Res, ResDataObject& DevResource)
- {
- PacketAnalizer::CloneResponse(Res, &Req);
- try {
- Res.update(CCOS_PACK_CONTEXT, DevResource);
- PacketAnalizer::MakeRetCode(RET_SUCCEED, &Res);
- return true;
- }
- catch (...)
- {
- }
- return false;
- }
- void PacketAnalizer::MakeNotifyP2P(ResDataObject& Obj, PACKET_CMD cmd, ResDataObject* pReq, const char* pKey, const char* pContext)
- {
- Obj.clear();
- Obj.update(CCOS_PACK_IDX, PacketAnalizer::MakePacketIdx());
- Obj.update(CCOS_PACK_TYPE, static_cast<int>(PACKET_TYPE_NOTIFY));
- Obj.update(CCOS_PACK_CMD, static_cast<int>(cmd));
- Obj.update(CCOS_PACK_HANDLE, (*pReq)[CCOS_PACK_HANDLE]);
- Obj.update(CCOS_PACK_KEY, pKey);
- Obj.update(CCOS_PACK_CONTEXT, pContext);
- Obj.update(CCOS_PACKET_VER, CCOS_PACKET_VER_NOW);
- }
- bool PacketAnalizer::UpdatePacketRoute(ResDataObject& Obj, CCOS_PACKET_ROUTE Route)
- {
- Obj[CCOS_PACK_HANDLE][CCOS_PACK_HANDLE_ROUTE] = static_cast<int>(Route);
- return true;
- }
- bool PacketAnalizer::UpdateNotifyHandle(ResDataObject& Obj, CcosDevFileHandle& handle)
- {
- ResDataObject handleObj;
- handle.GetResDataObject(handleObj);
- Obj.update(CCOS_PACK_HANDLE, handleObj);
- return true;
- }
- void PacketAnalizer::MakeNotify(ResDataObject& Obj, PACKET_CMD cmd, const char* pKey, const char* pContext)
- {
- Obj.clear();
- Obj.update(CCOS_PACK_IDX, PacketAnalizer::MakePacketIdx());
- Obj.update(CCOS_PACK_TYPE, static_cast<int>(PACKET_TYPE_NOTIFY));
- Obj.update(CCOS_PACK_CMD, static_cast<int>(cmd));
- Obj.update(CCOS_PACK_KEY, pKey);
- Obj.update(CCOS_PACK_CONTEXT, pContext);
- Obj.update(CCOS_PACKET_VER, CCOS_PACKET_VER_NOW);
- }
- void PacketAnalizer::MakeNotify(ResDataObject& Obj, PACKET_CMD cmd, ResDataObject& Key, const ResDataObject& Context)
- {
- Obj.clear();
- Obj.add(CCOS_PACK_IDX, PacketAnalizer::MakePacketIdx());
- Obj.add(CCOS_PACK_TYPE, static_cast<int>(PACKET_TYPE_NOTIFY));
- Obj.add(CCOS_PACK_CMD, static_cast<int>(cmd));
- Obj.add(CCOS_PACK_KEY, Key);
- Obj.add(CCOS_PACK_CONTEXT, const_cast<ResDataObject&>(Context));
- Obj.add(CCOS_PACKET_VER, CCOS_PACKET_VER_NOW);
- }
- void PacketAnalizer::MakeNotify(ResDataObject& Obj, PACKET_CMD cmd, const char* pKey, const ResDataObject& Context)
- {
- Obj.clear();
- Obj.add(CCOS_PACK_IDX, PacketAnalizer::MakePacketIdx());
- Obj.add(CCOS_PACK_TYPE, static_cast<int>(PACKET_TYPE_NOTIFY));
- Obj.add(CCOS_PACK_CMD, static_cast<int>(cmd));
- Obj.add(CCOS_PACK_KEY, pKey);
- Obj.add(CCOS_PACK_CONTEXT, const_cast<ResDataObject&>(Context));
- Obj.add(CCOS_PACKET_VER, CCOS_PACKET_VER_NOW);
- }
- uint32_t PacketAnalizer::MakeActionRequest(ResDataObject& Obj, CcosDevFileHandle& handle, const char* pActionName, ResDataObject& ReqParams, ACTION_SYNC_MODE mode)
- {
- uint32_t tick = PacketAnalizer::MakePacketIdx();
- Obj.clear();
- Obj.add(CCOS_PACK_IDX, tick);
- Obj.add(CCOS_PACK_TYPE, static_cast<int>(PACKET_TYPE_REQ));
- Obj.add(CCOS_PACK_CMD, static_cast<int>(PACKET_CMD_EXE));
- Obj.add(CCOS_PACKET_SYNC, static_cast<int>(mode));
- Obj.add(CCOS_PACKET_VER, CCOS_PACKET_VER_NOW);
- ResDataObject handleObj;
- handle.GetResDataObject(handleObj);
- Obj.add(CCOS_PACK_HANDLE, handleObj);
- Obj.add(CCOS_PACK_KEY, pActionName);
- Obj.add(CCOS_PACK_CONTEXT, ReqParams);
- return tick;
- }
- uint32_t PacketAnalizer::MakeRequest(ResDataObject& Obj, const char* pszReqName, PACKET_CMD cmd, ResDataObject* reqParams)
- {
- DWORD tick = PacketAnalizer::MakePacketIdx();
- Obj.clear();
- Obj.add(CCOS_PACK_IDX, tick);
- Obj.add(CCOS_PACK_TYPE, (int)PACKET_TYPE_REQ);
- Obj.add(CCOS_PACK_CMD, (int)cmd);
- Obj.add(CCOS_PACKET_VER, CCOS_PACKET_VER_NOW);
- Obj.add(CCOS_PACK_KEY, pszReqName);
- Obj.add(CCOS_PACK_CONTEXT, *reqParams);
- return tick;
- }
- uint32_t PacketAnalizer::MakeOpenRequest(ResDataObject& Obj, CcosDevFileHandle& handle, const char* pFilePath)
- {
- uint32_t tick = PacketAnalizer::MakePacketIdx();
- Obj.clear();
- Obj.add(CCOS_PACK_IDX, tick);
- Obj.add(CCOS_PACK_TYPE, static_cast<int>(PACKET_TYPE_REQ));
- Obj.add(CCOS_PACK_CMD, static_cast<int>(PACKET_CMD_OPEN));
- Obj.add(CCOS_PACKET_VER, CCOS_PACKET_VER_NOW);
- ResDataObject handleObj;
- handle.GetResDataObject(handleObj);
- Obj.add(CCOS_PACK_HANDLE, handleObj);
- Obj.add(CCOS_PACK_KEY, pFilePath);
- ResDataObject context;
- context.add(CCOS_RESP_TOPIC, "");
- Obj.add(CCOS_PACK_CONTEXT, context);
- return tick;
- }
- bool PacketAnalizer::MakeResponseByReq(ResDataObject& Response, ResDataObject& Req, RET_STATUS ret, const char* pInfo)
- {
- PacketAnalizer::CloneResponse(Response, &Req);
- PacketAnalizer::MakeRetCode(ret, &Response, pInfo);
- return true;
- }
- bool PacketAnalizer::MakeCloseNotifyByRes(ResDataObject& Response, ResDataObject& Req)
- {
- uint32_t tick = PacketAnalizer::MakePacketIdx();
- Req.clear();
- Req.add(CCOS_PACK_IDX, tick);
- Req.add(CCOS_PACK_TYPE, static_cast<int>(PACKET_TYPE_NOTIFY));
- Req.add(CCOS_PACK_CMD, static_cast<int>(PACKET_CMD_CLOSE));
- Req.add(CCOS_PACK_HANDLE, Response[CCOS_PACK_HANDLE]);
- Req.add(CCOS_PACKET_VER, CCOS_PACKET_VER_NOW);
- return true;
- }
- bool PacketAnalizer::MakeCloseRequestByRes(ResDataObject& Response, ResDataObject& Req)
- {
- uint32_t tick = PacketAnalizer::MakePacketIdx();
- Req.clear();
- Req.add(CCOS_PACK_IDX, tick);
- Req.add(CCOS_PACK_TYPE, static_cast<int>(PACKET_TYPE_REQ));
- Req.add(CCOS_PACK_CMD, static_cast<int>(PACKET_CMD_CLOSE));
- Req.add(CCOS_PACK_HANDLE, Response[CCOS_PACK_HANDLE]);
- return true;
- }
- bool PacketAnalizer::MakeCloseRequest(ResDataObject& Obj, CcosDevFileHandle& handle, PACKET_TYPE Type)
- {
- uint32_t tick = PacketAnalizer::MakePacketIdx();
- Obj.clear();
- Obj.add(CCOS_PACK_IDX, tick);
- Obj.add(CCOS_PACK_TYPE, static_cast<int>(Type));
- Obj.add(CCOS_PACK_CMD, static_cast<int>(PACKET_CMD_CLOSE));
- Obj.add(CCOS_PACKET_VER, CCOS_PACKET_VER_NOW);
- ResDataObject handleObj;
- handle.GetResDataObject(handleObj);
- Obj.add(CCOS_PACK_HANDLE, handleObj);
- return true;
- }
- bool PacketAnalizer::MakeCloseResponse(ResDataObject& Req, ResDataObject& Res)
- {
- PacketAnalizer::CloneResponse(Res, &Req);
- PacketAnalizer::MakeRetCode(RET_SUCCEED, &Res);
- return true;
- }
- bool PacketAnalizer::GetParam(ResDataObject* pReq, unsigned int ParamIdx, ResDataObject& value)
- {
- bool ret = false;
- string parami = "P" + to_string(ParamIdx); // 使用标准库函数生成参数名
- try {
- if ((*pReq)[CCOS_PACK_CONTEXT].GetFirstOf(parami.c_str()) >= 0)
- {
- value = (*pReq)[CCOS_PACK_CONTEXT][parami.c_str()];
- return true;
- }
- }
- catch (...)
- {
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::AddParam(ResDataObject* pRes, unsigned int ParamIdx, ResDataObject& value)
- {
- bool ret = true;
- string parami = "P" + to_string(ParamIdx); // 使用标准库函数生成参数名
- try {
- ret = (*pRes)[CCOS_PACK_CONTEXT].add(parami.c_str(), value);
- }
- catch (...)
- {
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::UpdateParam(ResDataObject* pRes, unsigned int ParamIdx, ResDataObject& value)
- {
- bool ret = true;
- string parami = "P" + to_string(ParamIdx); // 使用标准库函数生成参数名
- try {
- ret = (*pRes)[CCOS_PACK_CONTEXT].update(parami.c_str(), value);
- }
- catch (...)
- {
- ret = false;
- }
- return ret;
- }
- bool PacketAnalizer::UpdatePacketTopic(ResDataObject* Obj, const char* pszTopic, const char* pszClientID)
- {
- Obj->update(CCOS_TOPIC, pszTopic);
- Obj->update(CCOS_PUBLISH, pszClientID);
- return true;
- }
- bool PacketAnalizer::UpdatePacketKey(ResDataObject* Obj, const char* keystr)
- {
- Obj->update(CCOS_PACK_KEY, keystr);
- return true;
- }
- bool PacketAnalizer::UpdateContextTopic(ResDataObject* Obj, const char* pszRespTopic)
- {
- (*Obj)[CCOS_PACK_CONTEXT].update(CCOS_RESP_TOPIC, pszRespTopic);
- return true;
- }
- bool PacketAnalizer::GetContextTopic(ResDataObject* Obj, ResDataObject& topic)
- {
- if ((*Obj).GetFirstOf("ResponseTopic") > 0)
- topic = (*Obj)["ResponseTopic"];
- else
- topic = (*Obj)[CCOS_PACK_CONTEXT][CCOS_RESP_TOPIC];
- return true;
- }
- bool PacketAnalizer::GetPacketTopic(ResDataObject* Obj, ResDataObject& topic)
- {
- if ((*Obj).GetFirstOf(CCOS_TOPIC) > 0)
- topic = (*Obj)[CCOS_TOPIC];
- else
- topic = (*Obj)[CCOS_PACK_CONTEXT][CCOS_RESP_TOPIC];
- return true;
- }
- bool PacketAnalizer::CloneTransaction(ResDataObject* req, ResDataObject* res)
- {
- if ((*req).GetFirstOf("Transaction") > 0)
- res->update("Transaction", (*req)["Transaction"]);
- return true;
- }
- string PacketAnalizer::GetActionTopic(const char* szDevicePath, const char* szAction)
- {
- const char* pPath = szDevicePath;
- if (szDevicePath[0] == '/')
- pPath++;
- stringstream strea;
- strea << pPath << "/Action/" << szAction;
- return strea.str();
- }
|