Program Listing for File EncapsPacket.h

Return to documentation for file (src/eip/EncapsPacket.h)

//
// Created by Aleksey Timin on 11/16/19.
//

#ifndef EIPSCANNER_EIP_ENCAPSPACKET_H
#define EIPSCANNER_EIP_ENCAPSPACKET_H

#include <cstddef>
#include <cstdint>
#include <vector>

#include "cip/Types.h"
#include <vector>

namespace eipScanner {
namespace eip {
    enum class EncapsCommands : cip::CipUint {
        NOP = 0,
        LIST_SERVICES = 0x0004,
        LIST_IDENTITY = 0x0063,
        LIST_INTERFACES = 0x0064,
        REGISTER_SESSION = 0x0065,
        UN_REGISTER_SESSION =0x0066,
        SEND_RR_DATA = 0x006F,
        SEND_UNIT_DATA = 0x0070,
        INDICATE_STATUS = 0x0072,
        CANCEL = 0x0073
    };

    enum class EncapsStatusCodes : cip::CipUdint {
        SUCCESS = 0x0000,
        UNSUPPORTED_COMMAND = 0x0001,
        INSUFFICIENT_MEMORY = 0x0002,
        INVALID_FORMAT_OR_DATA = 0x0003,
        INVALID_SESSION_HANDLE = 0x0064,
        UNSUPPORTED_PROTOCOL_VERSION = 0x0069
    };

    class EncapsPacket {
    public:
        static const size_t HEADER_SIZE = 24;
        static size_t getLengthFromHeader(const std::vector<uint8_t>& data);

        EncapsPacket();
        ~EncapsPacket();
        std::vector<uint8_t> pack() const;
        void expand(const std::vector<uint8_t>& data);

        // Getters & setters
        EncapsCommands getCommand() const;
        void setCommand(EncapsCommands command);

        cip::CipUint getLength() const;

        cip::CipUdint getSessionHandle() const;
        void setSessionHandle(cip::CipUdint sessionHandle);

        EncapsStatusCodes getStatusCode() const;
        void setStatusCode(EncapsStatusCodes statusCode);

        const std::vector<uint8_t> &getData() const;
        void setData(const std::vector<uint8_t> &data);


    private:
    public:
        bool operator==(const EncapsPacket &rhs) const;

        bool operator!=(const EncapsPacket &rhs) const;

    private:
        EncapsCommands _command;
        cip::CipUint _length;
        cip::CipUdint _sessionHandle;
        EncapsStatusCodes _statusCode;
        std::vector<uint8_t> _context;
        cip::CipUdint _options;
        std::vector<uint8_t> _data;
    };
}
}


#endif  // EIPSCANNER_EIP_ENCAPSPACKET_H