Program Listing for File ForwardOpenRequest.cpp

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

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

#include "ForwardOpenRequest.h"

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

namespace eipScanner {
namespace cip {
namespace connectionManager {

    using utils::Buffer;

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

    ForwardOpenRequest::~ForwardOpenRequest() = default;

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

        CipUint o2tNetworkConnectionParams = static_cast<CipUint>(_connectionParameters.o2tNetworkConnectionParams);
        CipUint t2oNetworkConnectionParams = static_cast<CipUint>(_connectionParameters.t2oNetworkConnectionParams);

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

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

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