Program Listing for File LargeForwardOpenRequest.cpp

Return to documentation for file (src/cip/connectionManager/LargeForwardOpenRequest.cpp)

//
// Created by Vincent Prince on 05/22/20.
//

#include "LargeForwardOpenRequest.h"

#include <utility>
#include <assert.h>
#include "utils/Buffer.h"

namespace eipScanner {
namespace cip {
namespace connectionManager {

    using utils::Buffer;

    LargeForwardOpenRequest::LargeForwardOpenRequest(ConnectionParameters params)
        : _connectionParameters{std::move(params)} {
    }

    LargeForwardOpenRequest::~LargeForwardOpenRequest() = default;

    std::vector<uint8_t> LargeForwardOpenRequest::pack() const {
        const size_t size = 40;
        Buffer buffer(size);
        CipUsint reserved = 0;

        buffer << _connectionParameters.priorityTimeTick
            << _connectionParameters.timeoutTicks
            << _connectionParameters.o2tNetworkConnectionId
            << _connectionParameters.t2oNetworkConnectionId
            << _connectionParameters.connectionSerialNumber
            << _connectionParameters.originatorVendorId
            << _connectionParameters.originatorSerialNumber
            << _connectionParameters.connectionTimeoutMultiplier
            << reserved << reserved << reserved
            << _connectionParameters.o2tRPI
            << _connectionParameters.o2tNetworkConnectionParams
            << _connectionParameters.t2oRPI
            << _connectionParameters.t2oNetworkConnectionParams
            << _connectionParameters.transportTypeTrigger
            << _connectionParameters.connectionPathSize;

        assert(buffer.size() == size);

        buffer << _connectionParameters.connectionPath;
        return buffer.data();
    }
}
}
}