Document of c-modernization-kit (porter) 1.0.0

Loading...
Searching...
No Matches
porter_type.h
Go to the documentation of this file.
1
13
14#ifndef PORTER_TYPE_H
15#define PORTER_TYPE_H
16
17#include <stddef.h>
18#include <stdint.h>
19
20#include <porter_const.h>
21
32 typedef uint32_t PotrPeerId;
33
84 typedef enum
85{
86 POTR_TYPE_UNICAST_RAW = 1,
87 POTR_TYPE_MULTICAST_RAW = 2,
88 POTR_TYPE_BROADCAST_RAW = 3,
89
90 POTR_TYPE_UNICAST = 4,
91 POTR_TYPE_MULTICAST = 5,
92 POTR_TYPE_BROADCAST = 6,
93
94 POTR_TYPE_UNICAST_BIDIR = 7,
95
96 POTR_TYPE_UNICAST_BIDIR_N1 = 8,
97
98 POTR_TYPE_TCP = 9,
99
100 POTR_TYPE_TCP_BIDIR = 10,
101
102 /* POTR_TYPE_TCP_BIDIR_N1 = 11, */
103} PotrType;
104
113 typedef enum
114{
115 POTR_ROLE_SENDER = 1,
116 POTR_ROLE_RECEIVER = 2,
117} PotrRole;
118
129 typedef struct
130{
131 int64_t service_id;
132 PotrType type;
133
134 /* POTR_TYPE_UNICAST */
135 uint16_t dst_port;
136
137 /* POTR_TYPE_MULTICAST / POTR_TYPE_BROADCAST */
138 uint16_t src_port;
139
140 /* POTR_TYPE_MULTICAST */
141 uint8_t ttl;
142 uint8_t _pad[3];
143 uint32_t pack_wait_ms;
144
145 char multicast_group[POTR_MAX_ADDR_LEN];
146 char broadcast_addr[POTR_MAX_ADDR_LEN];
147
148 /* マルチパス対応 (src_addr は全通信種別、dst_addr は unicast のみ有効) */
149 char src_addr[POTR_MAX_PATH][POTR_MAX_ADDR_LEN];
150 char dst_addr[POTR_MAX_PATH][POTR_MAX_ADDR_LEN];
151
152 /* 暗号化設定 (AES-256-GCM) */
153 uint8_t encrypt_key[POTR_CRYPTO_KEY_SIZE];
154 int encrypt_enabled;
155
156 /* N:1 モード設定 */
157 uint32_t max_peers;
158
159 /* サービス単位のヘルスチェック上書き (0 = グローバル値を使用) */
160 uint32_t health_interval_ms;
161 uint32_t health_timeout_ms;
162
163 /* TCP 固有フィールド (POTR_TYPE_TCP / POTR_TYPE_TCP_BIDIR 以外では無視) */
164 uint32_t reconnect_interval_ms;
165 uint32_t connect_timeout_ms;
166} PotrServiceDef;
167
176 typedef struct
177{
178 uint16_t window_size;
179 uint16_t max_payload;
180 uint32_t health_interval_ms;
181 uint32_t health_timeout_ms;
182 uint32_t reorder_timeout_ms;
183 uint32_t max_message_size;
184 uint32_t send_queue_depth;
185 uint32_t tcp_health_interval_ms;
186 uint32_t tcp_health_timeout_ms;
187} PotrGlobalConfig;
188
215 typedef struct
216{
217 int64_t service_id;
218 int64_t session_tv_sec;
219 uint32_t session_id;
220 int32_t session_tv_nsec;
221 uint32_t seq_num;
222 uint32_t ack_num;
223 uint16_t flags;
224 uint16_t payload_len;
225 uint32_t _reserved;
226 const uint8_t *payload;
227} PotrPacket;
228
238 typedef struct PotrContext_ *PotrHandle;
239
251 typedef uint32_t PotrPeerId;
252
258#define POTR_PEER_NA ((PotrPeerId)0U)
261#define POTR_PEER_ALL ((PotrPeerId)UINT32_MAX)
265
283 typedef enum
284{
285 POTR_EVENT_DATA = 0,
286 POTR_EVENT_CONNECTED = 1,
287 POTR_EVENT_DISCONNECTED = 2,
288} PotrEvent;
289
308 typedef void (*PotrRecvCallback)(int64_t service_id, PotrPeerId peer_id,
309 PotrEvent event,
310 const void *data, size_t len);
311
332 typedef enum
333{
334 POTR_TRACE_CRITICAL = 0,
335 POTR_TRACE_ERROR = 1,
336 POTR_TRACE_WARNING = 2,
337 POTR_TRACE_INFO = 3,
338 POTR_TRACE_VERBOSE = 4,
339 POTR_TRACE_NONE = 5,
340} PotrLogLevel;
341
342#endif /* PORTER_TYPE_H */
POTR_CRYPTO_KEY_SIZE
#define POTR_CRYPTO_KEY_SIZE
AES-256-GCM 鍵サイズ (バイト)。設定ファイルの encrypt_key に 64 文字 hex で指定する。
Definition porter_const.h:85
POTR_MAX_ADDR_LEN
#define POTR_MAX_ADDR_LEN
アドレス文字列の最大長 (バイト、終端 NUL を含む)。
Definition porter_const.h:93
POTR_MAX_PATH
#define POTR_MAX_PATH
マルチパスの最大パス数。
Definition porter_const.h:100
porter_const.h
通信ライブラリの定数ファイル。
PotrLogLevel
PotrLogLevel
ログレベル。
Definition porter_type.h:333
POTR_TRACE_ERROR
@ POTR_TRACE_ERROR
エラー。操作の失敗を記録。TRACE_LV_ERROR (1) と同値。
Definition porter_type.h:335
POTR_TRACE_NONE
@ POTR_TRACE_NONE
ログ出力無効。TRACE_LV_NONE (5) と同値。
Definition porter_type.h:339
POTR_TRACE_INFO
@ POTR_TRACE_INFO
情報。TRACE_LV_INFO (3) と同値。
Definition porter_type.h:337
POTR_TRACE_VERBOSE
@ POTR_TRACE_VERBOSE
詳細情報 (デバッグ)。TRACE_LV_VERBOSE (4) と同値。
Definition porter_type.h:338
POTR_TRACE_CRITICAL
@ POTR_TRACE_CRITICAL
致命的エラー。回復不能な障害を記録。TRACE_LV_CRITICAL (0) と同値。
Definition porter_type.h:334
POTR_TRACE_WARNING
@ POTR_TRACE_WARNING
警告。回復可能な異常を記録。TRACE_LV_WARNING (2) と同値。
Definition porter_type.h:336
PotrRecvCallback
void(* PotrRecvCallback)(int64_t service_id, PotrPeerId peer_id, PotrEvent event, const void *data, size_t len)
受信コールバック関数型 (全通信種別共通)。
Definition porter_type.h:308
PotrType
PotrType
通信種別。
Definition porter_type.h:85
POTR_TYPE_BROADCAST_RAW
@ POTR_TYPE_BROADCAST_RAW
1:N 通信 RAW モード (UDP ブロードキャスト)。
Definition porter_type.h:88
POTR_TYPE_BROADCAST
@ POTR_TYPE_BROADCAST
1:N 通信 (UDP ブロードキャスト)。
Definition porter_type.h:92
POTR_TYPE_UNICAST_BIDIR_N1
@ POTR_TYPE_UNICAST_BIDIR_N1
N:1 双方向通信 (UDP ユニキャスト)。
Definition porter_type.h:96
POTR_TYPE_UNICAST
@ POTR_TYPE_UNICAST
1:1 通信 (UDP ユニキャスト)。
Definition porter_type.h:90
POTR_TYPE_MULTICAST_RAW
@ POTR_TYPE_MULTICAST_RAW
1:N 通信 RAW モード (UDP マルチキャスト)。
Definition porter_type.h:87
POTR_TYPE_TCP_BIDIR
@ POTR_TYPE_TCP_BIDIR
TCP 双方向通信 (両端が potrSend 可)。
Definition porter_type.h:100
POTR_TYPE_TCP
@ POTR_TYPE_TCP
TCP ユニキャスト通信 (単方向: SENDER のみ potrSend 可)。
Definition porter_type.h:98
POTR_TYPE_UNICAST_RAW
@ POTR_TYPE_UNICAST_RAW
1:1 通信 RAW モード (UDP ユニキャスト)。
Definition porter_type.h:86
POTR_TYPE_UNICAST_BIDIR
@ POTR_TYPE_UNICAST_BIDIR
双方向 1:1 通信 (UDP ユニキャスト)。
Definition porter_type.h:94
POTR_TYPE_MULTICAST
@ POTR_TYPE_MULTICAST
1:N 通信 (UDP マルチキャスト)。
Definition porter_type.h:91
PotrHandle
struct PotrContext_ * PotrHandle
セッションハンドル。
Definition porter_type.h:238
PotrRole
PotrRole
役割種別。
Definition porter_type.h:114
POTR_ROLE_SENDER
@ POTR_ROLE_SENDER
送信者。
Definition porter_type.h:115
POTR_ROLE_RECEIVER
@ POTR_ROLE_RECEIVER
受信者。
Definition porter_type.h:116
PotrPeerId
uint32_t PotrPeerId
ピア識別子。
Definition porter_type.h:32
PotrEvent
PotrEvent
受信イベント種別。
Definition porter_type.h:284
POTR_EVENT_DISCONNECTED
@ POTR_EVENT_DISCONNECTED
切断を検知 (タイムアウト / FIN 受信 / REJECT 受信)。data=NULL, len=0。
Definition porter_type.h:287
POTR_EVENT_CONNECTED
@ POTR_EVENT_CONNECTED
送信者からの疎通を初検知 or 復帰。data=NULL, len=0。
Definition porter_type.h:286
POTR_EVENT_DATA
@ POTR_EVENT_DATA
データ受信。data/len に内容が格納される。
Definition porter_type.h:285
PotrContext_
セッションコンテキスト構造体。PotrHandle の実体。
Definition potrContext.h:156
PotrGlobalConfig
グローバル設定。
Definition porter_type.h:177
PotrGlobalConfig::tcp_health_interval_ms
uint32_t tcp_health_interval_ms
TCP 通信種別の PING 送信間隔 (ミリ秒)。DATA 送信頻度に関わらず定期的に PING を送信。0 = 無効。設定ファイルキー: tcp_health_interval_ms。
Definition porter_type.h:185
PotrGlobalConfig::window_size
uint16_t window_size
スライディングウィンドウサイズ (パケット数)。
Definition porter_type.h:178
PotrGlobalConfig::reorder_timeout_ms
uint32_t reorder_timeout_ms
受信ウィンドウ欠番検出後、NACK または切断を遅延する時間 (ミリ秒)。マルチパスや近距離 WAN での追い越し吸収用。0 = 即時 (デフォルト)。推奨値: LAN/マルチパス=10〜30 ms、遠...
Definition porter_type.h:182
PotrGlobalConfig::send_queue_depth
uint32_t send_queue_depth
非同期送信キューの最大エントリ数。デフォルト: POTR_SEND_QUEUE_DEPTH。
Definition porter_type.h:184
PotrGlobalConfig::tcp_health_timeout_ms
uint32_t tcp_health_timeout_ms
TCP 通信種別の PING 応答待機タイムアウト (ミリ秒)。SENDER 側で使用。0 = 無効。設定ファイルキー: tcp_health_timeout_ms。
Definition porter_type.h:186
PotrGlobalConfig::max_payload
uint16_t max_payload
最大ペイロード長 (バイト)。
Definition porter_type.h:179
PotrGlobalConfig::health_interval_ms
uint32_t health_interval_ms
UDP 通信種別の PING 送信間隔 (ミリ秒)。最終 DATA/PING 送信から本値が経過したら PING 送信。0 = 無効。設定ファイルキー: udp_health_interval_ms。
Definition porter_type.h:180
PotrGlobalConfig::health_timeout_ms
uint32_t health_timeout_ms
UDP 通信種別の受信タイムアウト (ミリ秒)。RECEIVER 側で使用。0 = 無効。設定ファイルキー: udp_health_timeout_ms。
Definition porter_type.h:181
PotrGlobalConfig::max_message_size
uint32_t max_message_size
1 回の potrSend で送信できる最大メッセージ長 (バイト)。デフォルト: POTR_MAX_MESSAGE_SIZE。
Definition porter_type.h:183
PotrPacket
ネットワーク送受信用パケット構造体。
Definition porter_type.h:216
PotrPacket::_reserved
uint32_t _reserved
パディング (payload ポインタを 8 バイト境界に揃える)。
Definition porter_type.h:225
PotrPacket::ack_num
uint32_t ack_num
再送要求番号 / 再送不能通番 (NBO)。NACK では要求通番、REJECT では再送不能通番を格納する。
Definition porter_type.h:222
PotrPacket::session_tv_sec
int64_t session_tv_sec
セッション開始時刻 秒部 (NBO)。struct timespec の tv_sec 相当。
Definition porter_type.h:218
PotrPacket::session_id
uint32_t session_id
セッション識別子 (NBO)。potrOpenService 時に決定する乱数。
Definition porter_type.h:219
PotrPacket::flags
uint16_t flags
パケット種別フラグ (POTR_FLAG_*) (NBO)。
Definition porter_type.h:223
PotrPacket::payload
const uint8_t * payload
ペイロードデータへのポインタ (読み取り専用)。ウィンドウプールまたは受信バッファ内を指す。
Definition porter_type.h:226
PotrPacket::session_tv_nsec
int32_t session_tv_nsec
セッション開始時刻 ナノ秒部 (NBO)。struct timespec の tv_nsec 相当。
Definition porter_type.h:220
PotrPacket::seq_num
uint32_t seq_num
通番。送信側が付与する連番 (NBO)。
Definition porter_type.h:221
PotrPacket::service_id
int64_t service_id
サービス識別子 (NBO)。受信時に照合する。
Definition porter_type.h:217
PotrPacket::payload_len
uint16_t payload_len
ペイロード長 (バイト) (NBO)。
Definition porter_type.h:224
PotrServiceDef
サービス定義。
Definition porter_type.h:130
PotrServiceDef::src_port
uint16_t src_port
送信者の送信元 bind ポート番号。0 = OS 自動選定。(全通信種別で省略可)
Definition porter_type.h:138
PotrServiceDef::health_interval_ms
uint32_t health_interval_ms
グローバルの udp/tcp_health_interval_ms をサービス単位で上書きする。0 = グローバル値を使用。
Definition porter_type.h:160
PotrServiceDef::ttl
uint8_t ttl
マルチキャスト TTL。(multicast のみ)
Definition porter_type.h:141
PotrServiceDef::encrypt_enabled
int encrypt_enabled
非 0 のとき暗号化有効。設定ファイルに有効な encrypt_key が存在するときに 1 に設定される。
Definition porter_type.h:154
PotrServiceDef::dst_port
uint16_t dst_port
宛先ポート番号。サービスの識別子。受信者の bind ポート / 送信者の送信先ポート。(全通信種別で必須)
Definition porter_type.h:135
PotrServiceDef::_pad
uint8_t _pad[3]
パディング (pack_wait_ms を 4 バイト境界に揃える)。
Definition porter_type.h:142
PotrServiceDef::src_addr
char src_addr[POTR_MAX_PATH][POTR_MAX_ADDR_LEN]
送信元アドレス [0]=src_addr1 〜 [3]=src_addr4。送信者は bind / 送信インターフェース、受信者は送信元フィルタ。(全通信種別で必須)
Definition porter_type.h:149
PotrServiceDef::multicast_group
char multicast_group[POTR_MAX_ADDR_LEN]
マルチキャストグループアドレス。(multicast のみ)
Definition porter_type.h:145
PotrServiceDef::type
PotrType type
通信種別。
Definition porter_type.h:132
PotrServiceDef::service_id
int64_t service_id
サービス ID。
Definition porter_type.h:131
PotrServiceDef::pack_wait_ms
uint32_t pack_wait_ms
パッキング待ち時間 (ミリ秒)。最初の送信要求からこの時間だけ待ち合わせ、複数メッセージを 1 パケットにまとめる。0 = 即時送信 (パッキング待ちなし)。パケット容量が満杯になった場合はタイマーを無...
Definition porter_type.h:143
PotrServiceDef::connect_timeout_ms
uint32_t connect_timeout_ms
SENDER TCP 接続タイムアウト (ms)。0 = OS デフォルト。デフォルト: POTR_DEFAULT_CONNECT_TIMEOUT_MS。
Definition porter_type.h:165
PotrServiceDef::dst_addr
char dst_addr[POTR_MAX_PATH][POTR_MAX_ADDR_LEN]
宛先アドレス [0]=dst_addr1 〜 [3]=dst_addr4。送信者は送信先、受信者は bind アドレス。(unicast のみ)
Definition porter_type.h:150
PotrServiceDef::max_peers
uint32_t max_peers
N:1 モード時の最大同時接続ピア数。省略時: 1024。1:1 モードでは無視される。
Definition porter_type.h:157
PotrServiceDef::broadcast_addr
char broadcast_addr[POTR_MAX_ADDR_LEN]
ブロードキャスト宛先アドレス。省略時は 255.255.255.255。(broadcast のみ)
Definition porter_type.h:146
PotrServiceDef::encrypt_key
uint8_t encrypt_key[POTR_CRYPTO_KEY_SIZE]
AES-256-GCM 事前共有鍵 (32 バイト)。encrypt_enabled が 0 の場合は未使用。
Definition porter_type.h:153
PotrServiceDef::reconnect_interval_ms
uint32_t reconnect_interval_ms
SENDER 自動再接続間隔 (ms)。0 = 再接続なし。デフォルト: POTR_DEFAULT_RECONNECT_INTERVAL_MS。
Definition porter_type.h:164
PotrServiceDef::health_timeout_ms
uint32_t health_timeout_ms
グローバルの udp/tcp_health_timeout_ms をサービス単位で上書きする。0 = グローバル値を使用。
Definition porter_type.h:161