1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef SINGLE_VER_SERIALIZE_MANAGER_NEW_H 17 #define SINGLE_VER_SERIALIZE_MANAGER_NEW_H 18 19 #include "icommunicator.h" 20 #include "isync_packet.h" 21 #include "message_transform.h" 22 #include "parcel.h" 23 #include "single_ver_data_packet.h" 24 25 namespace DistributedDB { 26 class SingleVerSerializeManager { 27 public: 28 SingleVerSerializeManager(); 29 virtual ~SingleVerSerializeManager(); 30 31 DISABLE_COPY_ASSIGN_MOVE(SingleVerSerializeManager); 32 33 static int Serialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 34 35 static int DeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 36 37 static uint32_t CalculateLen(const Message *inMsg); 38 39 static int RegisterTransformFunc(); 40 private: 41 static bool IsPacketValid(const Message *inMsg); 42 43 static int DataSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 44 static int ControlSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 45 46 static int DataDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 47 static int ControlDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 48 49 static uint32_t CalculateDataLen(const Message *inMsg); 50 static uint32_t CalculateControlLen(const Message *inMsg); 51 52 static int DataPacketSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 53 static int DataPacketSyncerPartSerialization(Parcel &parcel, const DataRequestPacket *packet); 54 static int DataPacketQuerySyncSerialization(Parcel &parcel, const DataRequestPacket *packet); 55 static int DataPacketExtraConditionsSerialization(Parcel &parcel, const DataRequestPacket *packet); 56 static int DataPacketCalculateLen(const Message *inMsg, uint32_t &len); 57 58 static int DataPacketQuerySyncDeSerialization(Parcel &parcel, DataRequestPacket *packet); 59 static int DataPacketCompressDataDeSerialization(Parcel &parcel, DataRequestPacket *packet); 60 static int DataPacketDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 61 static int DataPacketSyncerPartDeSerialization(Parcel &parcel, DataRequestPacket *packet, uint32_t packLen, 62 uint32_t length, uint32_t version); 63 static int DataPacketExtraConditionsDeserialization(Parcel &parcel, DataRequestPacket *packet); 64 65 static int AckPacketCalculateLen(const Message *inMsg, uint32_t &len); 66 static int AckPacketSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 67 static int AckPacketSyncerPartSerializationV1(Parcel &parcel, const DataAckPacket *packet); 68 69 static int AckPacketSyncerPartDeSerializationV1(Parcel &parcel, DataAckPacket &packet); 70 static int AckPacketDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 71 72 static int ControlPacketCalculateLen(const Message *inMsg, uint32_t &len); 73 static int ControlPacketSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 74 static int ControlPacketDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 75 76 static int AckControlPacketCalculateLen(const Message *inMsg, uint32_t &len); 77 static int AckControlPacketSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 78 static int AckControlPacketDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 79 80 static int ControlRequestSerialization(Parcel &parcel, const Message *inMsg); 81 static int ControlRequestDeSerialization(Parcel &parcel, ControlRequestPacket &packet); 82 static int SubscribeCalculateLen(const Message *inMsg, uint32_t &len); 83 static int SubscribeSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 84 static int SubscribeDeSerialization(Parcel &parcel, Message *inMsg, ControlRequestPacket &controlPacket); 85 86 static int RegisterCommunicatorTransformFunc(); 87 static void RegisterInnerTransformFunc(); 88 89 static uint32_t ISyncPacketCalculateLen(const Message *inMsg); 90 static int ISyncPacketSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 91 static int ISyncPacketDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 92 static int BuildISyncPacket(Message *inMsg, ISyncPacket *&packet); 93 94 static std::mutex handlesLock_; 95 static std::map<uint32_t, TransformFunc> messageHandles_; 96 }; 97 } // namespace DistributedDB 98 99 #endif // SINGLE_VER_SERIALIZE_MANAGER_NEW_H