62 lines
1.9 KiB
C++
62 lines
1.9 KiB
C++
#ifndef MESSAGE_HELPER_H_INCLUDED
|
|
#define MESSAGE_HELPER_H_INCLUDED
|
|
|
|
#include <cinttypes>
|
|
#include <QByteArray>
|
|
#include <QByteArrayList>
|
|
#include <QString>
|
|
|
|
class MessageHelper {
|
|
public:
|
|
enum PacketType : std::uint8_t {
|
|
POS_ECR = 0,
|
|
// POS_EXT = 1,
|
|
MESSAGE_RECEIVED_POSITIVE_ACK = 0x0A,
|
|
MESSAGE_RECEIVED_NEGATIVE_ACK = 0x0F
|
|
// POS_HOST_FORMAT_1_ENCRYPTED = 0x11,
|
|
// POS_HOST_FORMAT_1_UNENCRYPTED = 0x21
|
|
};
|
|
|
|
enum AsyncPosCommand : std::uint8_t {
|
|
LOGIN = 0,
|
|
LOGOUT = 1
|
|
};
|
|
|
|
explicit MessageHelper(QString const &posID = "T-TPS-SELF2002in",
|
|
QString const &apak = "8AC304380E0E476BA2558B75DB9E2516");
|
|
explicit MessageHelper(QByteArray const &posID, QString const &apak);
|
|
~MessageHelper();
|
|
|
|
|
|
void createRawPacket(PacketType PacketType,
|
|
QByteArray const &encryptedPacketId,
|
|
QByteArray const &message);
|
|
|
|
bool insertEncryptedPacketID(QByteArray const &encryptedPacketID);
|
|
|
|
QByteArrayList createLoginMessageChunksToSend(char etx);
|
|
QByteArrayList createLogoutMessageChunksToSend(char etx);
|
|
QByteArrayList const &createMessageChunksToSend(AsyncPosCommand cmd, char etx);
|
|
|
|
// private:
|
|
|
|
QByteArray m_posID;
|
|
QByteArray m_apak;
|
|
uint8_t m_posIDLength;
|
|
QByteArray m_messageHeaderPrefix;
|
|
QByteArray m_rawPacket; // without leading STX and trailing [ETX(1/2), LRC]
|
|
QByteArray m_loginMessage;
|
|
QByteArray m_logoutMessage;
|
|
QByteArrayList m_messageChunkList;
|
|
|
|
bool setMessageHeaderPacketType(PacketType packetType);
|
|
bool createMessageHeaderPrefix(PacketType packetType, QByteArray const &encryptedPacketID);
|
|
void createLoginMessage();
|
|
void createLogoutMessage();
|
|
|
|
static QByteArray const &mask(QByteArray &messageChunk);
|
|
static QByteArray const &unMask(QByteArray &messageChunk);
|
|
};
|
|
|
|
#endif // MESSAGE_HELPER_H_INCLUDED
|