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 <mutex> 20 #include "icommunicator.h" 21 #include "isync_packet.h" 22 #include "message_transform.h" 23 #include "parcel.h" 24 #include "single_ver_data_packet.h" 25 26 namespace DistributedDB { 27 class SingleVerSerializeManager { 28 public: 29 SingleVerSerializeManager(); 30 virtual ~SingleVerSerializeManager(); 31 32 DISABLE_COPY_ASSIGN_MOVE(SingleVerSerializeManager); 33 34 static int Serialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 35 36 static int DeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 37 38 static uint32_t CalculateLen(const Message *inMsg); 39 40 static int RegisterTransformFunc(); 41 private: 42 static bool IsPacketValid(const Message *inMsg); 43 44 static int DataSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 45 static int ControlSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 46 47 static int DataDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 48 static int ControlDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 49 50 static uint32_t CalculateDataLen(const Message *inMsg); 51 static uint32_t CalculateControlLen(const Message *inMsg); 52 53 static int DataPacketSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 54 static int DataPacketSyncerPartSerialization(Parcel &parcel, const DataRequestPacket *packet); 55 static int DataPacketQuerySyncSerialization(Parcel &parcel, const DataRequestPacket *packet); 56 static int DataPacketExtraConditionsSerialization(Parcel &parcel, const DataRequestPacket *packet); 57 static int DataPacketCalculateLen(const Message *inMsg, uint32_t &len); 58 static int DataPacketInnerSerialization(const DataRequestPacket *packet, Parcel &parcel); 59 60 static int DataPacketQuerySyncDeSerialization(Parcel &parcel, DataRequestPacket *packet); 61 static int DataPacketCompressDataDeSerialization(Parcel &parcel, DataRequestPacket *packet); 62 static int DataPacketDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 63 static int DataPacketSyncerPartDeSerialization(Parcel &parcel, DataRequestPacket *packet, uint32_t packLen, 64 uint32_t length, uint32_t version); 65 static int DataPacketExtraConditionsDeserialization(Parcel &parcel, DataRequestPacket *packet); 66 static int DataPacketInnerDeSerialization(DataRequestPacket *packet, Parcel &parcel); 67 68 static int AckPacketCalculateLen(const Message *inMsg, uint32_t &len); 69 static int AckPacketSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 70 static int AckPacketSyncerPartSerializationV1(Parcel &parcel, const DataAckPacket *packet); 71 72 static int AckPacketSyncerPartDeSerializationV1(Parcel &parcel, DataAckPacket &packet); 73 static int AckPacketDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 74 75 static int ControlPacketCalculateLen(const Message *inMsg, uint32_t &len); 76 static int ControlPacketSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 77 static int ControlPacketDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 78 79 static int AckControlPacketCalculateLen(const Message *inMsg, uint32_t &len); 80 static int AckControlPacketSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 81 static int AckControlPacketDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 82 83 static int ControlRequestSerialization(Parcel &parcel, const Message *inMsg); 84 static int ControlRequestDeSerialization(Parcel &parcel, ControlRequestPacket &packet); 85 static int SubscribeCalculateLen(const Message *inMsg, uint32_t &len); 86 static int SubscribeSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 87 static int SubscribeDeSerialization(Parcel &parcel, Message *inMsg, ControlRequestPacket &controlPacket); 88 89 static int RegisterCommunicatorTransformFunc(); 90 static void RegisterInnerTransformFunc(); 91 92 static uint32_t ISyncPacketCalculateLen(const Message *inMsg); 93 static int ISyncPacketSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 94 static int ISyncPacketDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 95 static int BuildISyncPacket(Message *inMsg, ISyncPacket *&packet); 96 97 static std::mutex handlesLock_; 98 static std::map<uint32_t, TransformFunc> messageHandles_; 99 }; 100 } // namespace DistributedDB 101 102 #endif // SINGLE_VER_SERIALIZE_MANAGER_NEW_H