Files
Jungfraujoch/common/JfjochTCP.h

52 lines
1.2 KiB
C++

// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
// SPDX-License-Identifier: GPL-3.0-only
#pragma once
#include <cstdint>
constexpr uint32_t JFJOCH_TCP_MAGIC = 0x4A464A54; // JFJT
constexpr uint32_t JFJOCH_TCP_VERSION = 2;
enum class TCPFrameType : uint16_t {
START = 1,
DATA = 2,
CALIBRATION = 3,
END = 4,
ACK = 5,
CANCEL = 6,
KEEPALIVE = 7,
};
enum class TCPAckCode : uint16_t {
None = 0,
StartFailed = 1,
DataWriteFailed = 2,
EndFailed = 3,
DiskQuotaExceeded = 4,
NoSpaceLeft = 5,
PermissionDenied = 6,
IoError = 7,
ProtocolError = 8
};
constexpr uint32_t TCP_ACK_FLAG_OK = 1u << 0;
constexpr uint32_t TCP_ACK_FLAG_FATAL = 1u << 1;
constexpr uint32_t TCP_ACK_FLAG_HAS_ERROR_TEXT = 1u << 2;
struct alignas(64) TcpFrameHeader {
uint32_t magic = JFJOCH_TCP_MAGIC;
uint16_t version = JFJOCH_TCP_VERSION ;
uint16_t type = 0;
uint64_t image_number = 0;
uint64_t payload_size = 0;
uint32_t socket_number = 0;
uint32_t flags = 0;
uint64_t run_number = 0;
uint32_t ack_processed_images = 0;
uint16_t ack_code = 0;
uint16_t ack_for = 0;
uint64_t reserved[2] = {0, 0};
};