Document of c-modernization-kit (porter) 1.0.0

Loading...
Searching...
No Matches
potrContext.h
Go to the documentation of this file.
1
16
17#ifndef POTR_CONTEXT_H
18#define POTR_CONTEXT_H
19
20#include <stdint.h>
21
22#include <porter_type.h>
23
24#include "protocol/window.h"
25#include "infra/compress/compress.h"
26#include "infra/crypto/crypto.h"
27#include "infra/potrSendQueue.h"
28
29#ifndef _WIN32
30 #include <pthread.h>
31 #include <netinet/in.h>
32 typedef int PotrSocket;
33 typedef pthread_t PotrThread;
34 typedef pthread_mutex_t PotrMutex;
35 typedef pthread_cond_t PotrCondVar;
36 #define POTR_INVALID_SOCKET (-1)
37#else /* _WIN32 */
38 #include <winsock2.h>
39 #include <ws2tcpip.h>
40 typedef SOCKET PotrSocket;
41 typedef HANDLE PotrThread;
42 typedef CRITICAL_SECTION PotrMutex;
43 typedef CONDITION_VARIABLE PotrCondVar;
44 #define POTR_INVALID_SOCKET INVALID_SOCKET
45#endif /* _WIN32 */
46
48 static inline int potr_is_tcp_type(PotrType t)
49{
50 return t == POTR_TYPE_TCP || t == POTR_TYPE_TCP_BIDIR;
51}
52
54 static inline int potr_is_raw_type(PotrType t)
55{
56 return t == POTR_TYPE_UNICAST_RAW ||
57 t == POTR_TYPE_MULTICAST_RAW ||
58 t == POTR_TYPE_BROADCAST_RAW;
59}
60
62 static inline PotrType potr_raw_base_type(PotrType t)
63{
64 switch (t)
65 {
66 case POTR_TYPE_UNICAST_RAW: return POTR_TYPE_UNICAST;
67 case POTR_TYPE_MULTICAST_RAW: return POTR_TYPE_MULTICAST;
68 case POTR_TYPE_BROADCAST_RAW: return POTR_TYPE_BROADCAST;
69 case POTR_TYPE_UNICAST:
70 case POTR_TYPE_MULTICAST:
71 case POTR_TYPE_BROADCAST:
72 case POTR_TYPE_UNICAST_BIDIR:
73 case POTR_TYPE_UNICAST_BIDIR_N1:
74 case POTR_TYPE_TCP:
75 case POTR_TYPE_TCP_BIDIR:
76 default: return t;
77 }
78}
79
81#define POTR_NACK_DEDUP_SLOTS 8U
82
84 typedef struct
85{
86 uint32_t ack_num;
87 uint32_t _pad;
88 uint64_t time_ms;
89} PotrNackDedupEntry;
90
98 typedef struct PotrPeerContext_
99{
100 PotrPeerId peer_id;
101 int active;
102
103 /* 自セッション (このピア宛の送信に使用) */
104 uint32_t session_id;
105 uint32_t _pad_session;
106 int64_t session_tv_sec;
107 int32_t session_tv_nsec;
108
109 /* ピアセッション追跡 */
110 uint32_t peer_session_id;
111 int64_t peer_session_tv_sec;
112 int32_t peer_session_tv_nsec;
113 int peer_session_known;
114
115 /* 送受信ウィンドウ (ピアごと独立) */
116 PotrWindow send_window;
117 PotrMutex send_window_mutex;
118 PotrWindow recv_window;
119
120 /* フラグメント結合 (ピアごと独立) */
121 uint8_t *frag_buf;
122 size_t frag_buf_len;
123 int frag_compressed;
124
125 /* ヘルスチェック */
126 volatile int health_alive;
127 int64_t last_recv_tv_sec;
128 int32_t last_recv_tv_nsec;
129 uint32_t _pad_nack_dedup;
130
131 /* NACK 重複抑制 */
132 PotrNackDedupEntry nack_dedup_buf[POTR_NACK_DEDUP_SLOTS];
133 uint8_t nack_dedup_next;
134 uint8_t _pad_reorder[3];
135
136 /* リオーダーバッファタイムアウト管理 */
137 int reorder_pending;
138 uint32_t reorder_nack_num;
139 uint32_t _pad_reorder_dl;
140 int64_t reorder_deadline_sec;
141 int32_t reorder_deadline_nsec;
142
143 /* マルチパス: ピアごとの送信先 (recvfrom で学習)
144 * インデックスは ctx->sock[] / src_addr[] と直接対応する。
145 * 未使用スロットは dest_addr[k].sin_family == 0 (AF_UNSPEC) で判定する。 */
146 struct sockaddr_in dest_addr[POTR_MAX_PATH];
147 int n_paths;
148 int64_t path_last_recv_sec[POTR_MAX_PATH];
149 int32_t path_last_recv_nsec[POTR_MAX_PATH];
150} PotrPeerContext;
151
155 struct PotrContext_
156{
157 PotrRecvCallback callback;
158 PotrThread recv_thread[POTR_MAX_PATH];
159 PotrThread health_thread[POTR_MAX_PATH];
160 PotrMutex health_mutex[POTR_MAX_PATH];
161 PotrCondVar health_wakeup[POTR_MAX_PATH];
162 PotrServiceDef service;
163 PotrGlobalConfig global;
164 PotrWindow send_window;
165 PotrMutex send_window_mutex;
166 PotrWindow recv_window;
167
168 /* マルチパス: ソケット配列 */
169 PotrSocket sock[POTR_MAX_PATH];
170 int n_path;
171
172 volatile int running[POTR_MAX_PATH];
173 volatile int health_running[POTR_MAX_PATH];
174 volatile int health_alive;
175 PotrRole role;
176
177 /* 解決済みアドレス (各パス分) */
178 struct in_addr src_addr_resolved[POTR_MAX_PATH];
179 struct in_addr dst_addr_resolved[POTR_MAX_PATH];
180 struct sockaddr_in dest_addr[POTR_MAX_PATH];
181
182 /* 自セッション識別子 (potrOpenService 時に決定) */
183 uint32_t session_id;
184 int64_t session_tv_sec;
185 int32_t session_tv_nsec;
186
187 /* 相手セッション追跡 (受信者が使用) */
188 uint32_t peer_session_id;
189 int64_t peer_session_tv_sec;
190 int32_t peer_session_tv_nsec;
191 int peer_session_known;
192
193 /* 受信者: パスごとの送信者ポートキャッシュ (src_port=0 対応) */
194 uint16_t peer_port[POTR_MAX_PATH];
195
196 /* ヘルスチェック: 最終受信時刻 (受信者が使用。CLOCK_MONOTONIC 基準)。 */
197 int32_t last_recv_tv_nsec;
198 uint32_t _pad_lastrecv;
199 int64_t last_recv_tv_sec;
200
201 /* 受信者: パスごとの最終受信時刻 (パス単位の peer_port クリア用。CLOCK_MONOTONIC 基準)。 */
202 int64_t path_last_recv_sec[POTR_MAX_PATH];
203 int32_t path_last_recv_nsec[POTR_MAX_PATH];
204
205 size_t frag_buf_len;
206 int frag_compressed;
207 uint32_t _pad_frag;
208 uint8_t *frag_buf;
209 uint8_t *compress_buf;
210 size_t compress_buf_size;
211 uint8_t *crypto_buf;
212 size_t crypto_buf_size;
213 uint8_t *recv_buf;
214 uint8_t *send_wire_buf;
215
216 /* 非同期送信 (POTR_ROLE_SENDER のみ使用) */
217 PotrThread send_thread;
218 volatile int send_thread_running;
219 uint32_t _pad_send_thread;
220 volatile uint64_t last_send_ms;
221
222 /* 送信者: NACK 重複抑制リングバッファ */
223 PotrNackDedupEntry nack_dedup_buf[POTR_NACK_DEDUP_SLOTS];
224 uint8_t nack_dedup_next;
225 uint8_t _pad_nack_dedup[7];
226
227 /* 受信者: リオーダーバッファタイムアウト管理 (reorder_timeout_ms > 0 のときのみ使用) */
228 int reorder_pending;
229 uint32_t reorder_nack_num;
230 int64_t reorder_deadline_sec;
231 int32_t reorder_deadline_nsec;
232 uint32_t _pad_reorder;
233
234 PotrSendQueue send_queue;
235
236 /* N:1 マルチピアモード専用フィールド (is_multi_peer == 1 のときのみ有効) */
237 int is_multi_peer;
238 uint32_t _pad_multi_peer;
239 PotrPeerContext *peers;
240 int max_peers;
241 int n_peers;
242 PotrMutex peers_mutex;
243 uint32_t next_peer_id;
244
245 /* --- TCP 接続管理 (POTR_TYPE_TCP / POTR_TYPE_TCP_BIDIR のみ有効) --- */
246 PotrSocket tcp_listen_sock[POTR_MAX_PATH];
247 PotrSocket tcp_conn_fd[POTR_MAX_PATH];
248 volatile int tcp_active_paths;
249 uint32_t _pad_tcp_connected[2];
250 PotrMutex tcp_send_mutex[POTR_MAX_PATH];
251
252 /* recv_window 保護 (TCP v2: 複数 recv スレッドが同一 recv_window にアクセスするため) */
253 PotrMutex recv_window_mutex;
254
255 /* connect/accept スレッド */
256 PotrThread connect_thread[POTR_MAX_PATH];
257 volatile int connect_thread_running[POTR_MAX_PATH];
258
259 /* 切断通知 (recv/health スレッド → connect スレッドへの通知) */
260 PotrMutex tcp_state_mutex;
261 PotrCondVar tcp_state_cv;
262
263 /* PING 応答追跡 (SENDER health スレッドが参照、TCP recv スレッドが更新) */
264 volatile uint64_t tcp_last_ping_recv_ms[POTR_MAX_PATH];
265
266 /* PING 要求到着追跡 (RECEIVER recv スレッドが参照・更新。RECEIVER 側 PING 到着タイムアウト監視に使用) */
267 volatile uint64_t tcp_last_ping_req_recv_ms[POTR_MAX_PATH];
268
269 /* 送信バッファ満杯ログ抑制 (TCP v2 送信スレッド用) */
270 int buf_full_suppress_cnt[POTR_MAX_PATH];
271
272 /* TCP セッション確立排他制御 (RECEIVER TCP のみ使用)。
273 * 複数 path の accept スレッドが並行して session_id 判定を行う際の競合を防ぐ。
274 * potr_connect_thread_start で初期化、potr_connect_thread_stop で破棄する。 */
275 PotrMutex session_establish_mutex;
276
277 /* TCP 先読みバッファ (path ごと)。
278 * accept スレッドが session 判定のために読み取った最初の 1 パケット分のバイト列を
279 * recv スレッドに引き渡す。accept スレッドが書き込み後に recv スレッドを起動するため
280 * 書き込み→起動→読み出しの順序が保証され、mutex は不要。
281 * recv スレッドは起動直後に先読みパケットを処理し tcp_first_pkt_len[i] を 0 に戻す。 */
282 uint8_t *tcp_first_pkt_buf[POTR_MAX_PATH];
283 size_t tcp_first_pkt_len[POTR_MAX_PATH];
284};
285
286#endif /* POTR_CONTEXT_H */
compress.h
データ圧縮・解凍モジュールの内部ヘッダー。
crypto.h
データ暗号化・復号モジュールの内部ヘッダー。
POTR_MAX_PATH
#define POTR_MAX_PATH
マルチパスの最大パス数。
Definition porter_const.h:100
porter_type.h
通信ライブラリの型定義ファイル。
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
PotrRole
PotrRole
役割種別。
Definition porter_type.h:114
PotrPeerId
uint32_t PotrPeerId
ピア識別子。
Definition porter_type.h:32
PotrPeerContext
struct PotrPeerContext_ PotrPeerContext
N:1 モードにおける個別ピアのコンテキスト。
potr_is_raw_type
static int potr_is_raw_type(PotrType t)
RAW 系通信種別 (POTR_TYPE_*_RAW) か判定する。
Definition potrContext.h:54
POTR_NACK_DEDUP_SLOTS
#define POTR_NACK_DEDUP_SLOTS
NACK 重複抑制リングバッファのスロット数 (POTR_MAX_PATH × 2)。
Definition potrContext.h:81
PotrSocket
int PotrSocket
Definition potrContext.h:32
potr_raw_base_type
static PotrType potr_raw_base_type(PotrType t)
RAW 系通信種別をベース通信種別に変換する (非 RAW 型はそのまま返す)。
Definition potrContext.h:62
PotrThread
pthread_t PotrThread
Definition potrContext.h:33
potr_is_tcp_type
static int potr_is_tcp_type(PotrType t)
TCP 通信種別 (POTR_TYPE_TCP / POTR_TYPE_TCP_BIDIR) か判定する。
Definition potrContext.h:48
potrSendQueue.h
非同期送信キューの型定義と操作関数。
PotrCondVar
pthread_cond_t PotrCondVar
Definition potrSendQueue.h:33
PotrMutex
pthread_mutex_t PotrMutex
Definition potrSendQueue.h:32
PotrContext_
セッションコンテキスト構造体。PotrHandle の実体。
Definition potrContext.h:156
PotrContext_::session_id
uint32_t session_id
自セッション識別子 (乱数)。
Definition potrContext.h:183
PotrContext_::tcp_active_paths
volatile int tcp_active_paths
アクティブ TCP path 数 (0 = 全切断)。
Definition potrContext.h:248
PotrContext_::_pad_frag
uint32_t _pad_frag
パディング (frag_buf を 8 バイト境界に揃える)。
Definition potrContext.h:207
PotrContext_::callback
PotrRecvCallback callback
受信コールバック。
Definition potrContext.h:157
PotrContext_::_pad_tcp_connected
uint32_t _pad_tcp_connected[2]
パディング (tcp_send_mutex を 8 バイト境界に揃える。8 バイト確保)。
Definition potrContext.h:249
PotrContext_::tcp_last_ping_req_recv_ms
volatile uint64_t tcp_last_ping_req_recv_ms[POTR_MAX_PATH]
TCP PING 要求最終受信時刻 (ms, CLOCK_MONOTONIC 基準)。path ごと。接続確立時に現在時刻で初期化。
Definition potrContext.h:267
PotrContext_::global
PotrGlobalConfig global
グローバル設定。
Definition potrContext.h:163
PotrContext_::tcp_last_ping_recv_ms
volatile uint64_t tcp_last_ping_recv_ms[POTR_MAX_PATH]
TCP PING 応答最終受信時刻 (ms, CLOCK_MONOTONIC 基準)。path ごと。接続確立時に現在時刻で初期化。
Definition potrContext.h:264
PotrContext_::dst_addr_resolved
struct in_addr dst_addr_resolved[POTR_MAX_PATH]
解決済み宛先 IPv4 アドレス (unicast のみ)。
Definition potrContext.h:179
PotrContext_::compress_buf_size
size_t compress_buf_size
compress_buf のサイズ (バイト)。
Definition potrContext.h:210
PotrContext_::send_thread
PotrThread send_thread
送信スレッドハンドル。
Definition potrContext.h:217
PotrContext_::_pad_multi_peer
uint32_t _pad_multi_peer
パディング (peers を 8 バイト境界に揃える)。
Definition potrContext.h:238
PotrContext_::frag_buf
uint8_t * frag_buf
フラグメント結合バッファ (動的確保。max_message_size バイト)。
Definition potrContext.h:208
PotrContext_::health_wakeup
PotrCondVar health_wakeup[POTR_MAX_PATH]
ヘルスチェックスレッドを即時起床させる条件変数 (path ごと)。
Definition potrContext.h:161
PotrContext_::send_window_mutex
PotrMutex send_window_mutex
send_window 保護用ミューテックス (送信スレッド・ヘルスチェックスレッド・受信スレッドが競合するため)。
Definition potrContext.h:165
PotrContext_::peer_session_tv_sec
int64_t peer_session_tv_sec
追跡中の相手セッション開始時刻 秒部。
Definition potrContext.h:189
PotrContext_::reorder_nack_num
uint32_t reorder_nack_num
待機中の欠番通番。
Definition potrContext.h:229
PotrContext_::peer_session_tv_nsec
int32_t peer_session_tv_nsec
追跡中の相手セッション開始時刻 ナノ秒部。
Definition potrContext.h:190
PotrContext_::src_addr_resolved
struct in_addr src_addr_resolved[POTR_MAX_PATH]
解決済み送信元 IPv4 アドレス。
Definition potrContext.h:178
PotrContext_::session_tv_nsec
int32_t session_tv_nsec
自セッション開始時刻 ナノ秒部。
Definition potrContext.h:185
PotrContext_::role
PotrRole role
役割 (POTR_ROLE_SENDER / POTR_ROLE_RECEIVER)。
Definition potrContext.h:175
PotrContext_::crypto_buf
uint8_t * crypto_buf
暗号化・復号用一時バッファ (動的確保)。
Definition potrContext.h:211
PotrContext_::send_queue
PotrSendQueue send_queue
非同期送信キュー。
Definition potrContext.h:234
PotrContext_::compress_buf
uint8_t * compress_buf
圧縮・解凍用一時バッファ (動的確保)。
Definition potrContext.h:209
PotrContext_::recv_buf
uint8_t * recv_buf
受信バッファ / 再送 wire 組立バッファ (動的確保。PACKET_HEADER_SIZE + max_payload バイト)。
Definition potrContext.h:213
PotrContext_::send_wire_buf
uint8_t * send_wire_buf
送信 wire 組立バッファ (動的確保。PACKET_HEADER_SIZE + max_payload バイト)。送信スレッドのみ使用。
Definition potrContext.h:214
PotrContext_::running
volatile int running[POTR_MAX_PATH]
受信スレッド実行フラグ (1: 実行中, 0: 停止)。path ごと。
Definition potrContext.h:172
PotrContext_::last_send_ms
volatile uint64_t last_send_ms
最終パケット送信時刻 (データ or PING、ms、単調増加)。0 = 未送信。
Definition potrContext.h:220
PotrContext_::health_alive
volatile int health_alive
疎通状態 (1: alive, 0: dead/未接続)。UDP 用。受信者が管理。
Definition potrContext.h:174
PotrContext_::frag_buf_len
size_t frag_buf_len
フラグメント結合バッファの現在のデータ長 (バイト)。
Definition potrContext.h:205
PotrContext_::recv_thread
PotrThread recv_thread[POTR_MAX_PATH]
受信スレッドハンドル (path ごと)。
Definition potrContext.h:158
PotrContext_::_pad_reorder
uint32_t _pad_reorder
パディング (send_queue を 8 バイト境界に揃える)。
Definition potrContext.h:232
PotrContext_::peer_session_id
uint32_t peer_session_id
追跡中の相手セッション識別子。
Definition potrContext.h:188
PotrContext_::tcp_first_pkt_len
size_t tcp_first_pkt_len[POTR_MAX_PATH]
先読みパケットのバイト数 (0: 先読みなし)。
Definition potrContext.h:283
PotrContext_::tcp_send_mutex
PotrMutex tcp_send_mutex[POTR_MAX_PATH]
TCP send() 排他制御 (path ごと)。送信スレッド・ヘルスチェックスレッド・recv スレッド競合防止。
Definition potrContext.h:250
PotrContext_::_pad_nack_dedup
uint8_t _pad_nack_dedup[7]
パディング (reorder フィールドを 4 バイト境界に揃える)。
Definition potrContext.h:225
PotrContext_::reorder_deadline_nsec
int32_t reorder_deadline_nsec
タイムアウト期限 ナノ秒部。
Definition potrContext.h:231
PotrContext_::reorder_deadline_sec
int64_t reorder_deadline_sec
タイムアウト期限 秒部 (CLOCK_MONOTONIC)。
Definition potrContext.h:230
PotrContext_::path_last_recv_nsec
int32_t path_last_recv_nsec[POTR_MAX_PATH]
パスごとの最終受信時刻 ナノ秒部。
Definition potrContext.h:203
PotrContext_::frag_compressed
int frag_compressed
フラグメント受信中の圧縮フラグ (非 0: 圧縮あり)。
Definition potrContext.h:206
PotrContext_::tcp_state_mutex
PotrMutex tcp_state_mutex
tcp_state_cv 保護用ミューテックス。tcp_active_paths のカウンタ更新も保護。
Definition potrContext.h:260
PotrContext_::session_establish_mutex
PotrMutex session_establish_mutex
Definition potrContext.h:275
PotrContext_::tcp_listen_sock
PotrSocket tcp_listen_sock[POTR_MAX_PATH]
RECEIVER: listen ソケット (path ごと)。
Definition potrContext.h:246
PotrContext_::is_multi_peer
int is_multi_peer
1: N:1 モード (src_addr/src_port 省略), 0: 1:1 モード。
Definition potrContext.h:237
PotrContext_::n_peers
int n_peers
現在の接続ピア数。
Definition potrContext.h:241
PotrContext_::connect_thread_running
volatile int connect_thread_running[POTR_MAX_PATH]
connect スレッド実行フラグ (1: 実行中, 0: 停止)。path ごと。
Definition potrContext.h:257
PotrContext_::buf_full_suppress_cnt
int buf_full_suppress_cnt[POTR_MAX_PATH]
path ごとの送信バッファ満杯ログ抑制カウンタ (0: 抑制なし、1-10: 抑制中)。
Definition potrContext.h:270
PotrContext_::service
PotrServiceDef service
サービス定義。
Definition potrContext.h:162
PotrContext_::health_thread
PotrThread health_thread[POTR_MAX_PATH]
ヘルスチェックスレッドハンドル (path ごと、送信者のみ)。
Definition potrContext.h:159
PotrContext_::peer_port
uint16_t peer_port[POTR_MAX_PATH]
各パスで観測した送信者ポート (NBO)。0 = 未観測。
Definition potrContext.h:194
PotrContext_::health_mutex
PotrMutex health_mutex[POTR_MAX_PATH]
ヘルスチェックスレッド停止用ミューテックス (path ごと)。
Definition potrContext.h:160
PotrContext_::crypto_buf_size
size_t crypto_buf_size
crypto_buf のサイズ (バイト)。
Definition potrContext.h:212
PotrContext_::peers_mutex
PotrMutex peers_mutex
ピアテーブル保護用ミューテックス。
Definition potrContext.h:242
PotrContext_::tcp_first_pkt_buf
uint8_t * tcp_first_pkt_buf[POTR_MAX_PATH]
先読みパケットバッファ (動的確保、PACKET_HEADER_SIZE + max_payload バイト)。
Definition potrContext.h:282
PotrContext_::sock
PotrSocket sock[POTR_MAX_PATH]
各パスの UDP ソケット。
Definition potrContext.h:169
PotrContext_::peer_session_known
int peer_session_known
相手セッションが初期化済みか (0: 未初期化)。
Definition potrContext.h:191
PotrContext_::connect_thread
PotrThread connect_thread[POTR_MAX_PATH]
SENDER: connect スレッド。RECEIVER: accept スレッド。path ごと。
Definition potrContext.h:256
PotrContext_::health_running
volatile int health_running[POTR_MAX_PATH]
ヘルスチェックスレッド実行フラグ (1: 実行中, 0: 停止)。path ごと。
Definition potrContext.h:173
PotrContext_::send_window
PotrWindow send_window
送信バッファ (過去 N パケット保持。NACK 再送・REJECT 判定に使用)。
Definition potrContext.h:164
PotrContext_::send_thread_running
volatile int send_thread_running
送信スレッド実行フラグ (1: 実行中, 0: 停止)。
Definition potrContext.h:218
PotrContext_::max_peers
int max_peers
ピアテーブルサイズ (service.max_peers から取得)。
Definition potrContext.h:240
PotrContext_::_pad_send_thread
uint32_t _pad_send_thread
パディング (last_send_ms を 8 バイト境界に揃える)。
Definition potrContext.h:219
PotrContext_::tcp_state_cv
PotrCondVar tcp_state_cv
切断通知・reconnect sleep の中断用条件変数。
Definition potrContext.h:261
PotrContext_::path_last_recv_sec
int64_t path_last_recv_sec[POTR_MAX_PATH]
パスごとの最終受信時刻 秒部。0 = 未受信。
Definition potrContext.h:202
PotrContext_::nack_dedup_next
uint8_t nack_dedup_next
次に書き込むスロットインデックス。
Definition potrContext.h:224
PotrContext_::next_peer_id
uint32_t next_peer_id
次に発行するピア ID (単調増加、初期値 1)。
Definition potrContext.h:243
PotrContext_::reorder_pending
int reorder_pending
リオーダー待機中か (1: 待機中、0: 待機なし)。
Definition potrContext.h:228
PotrContext_::recv_window_mutex
PotrMutex recv_window_mutex
recv_window 保護用ミューテックス。
Definition potrContext.h:253
PotrContext_::dest_addr
struct sockaddr_in dest_addr[POTR_MAX_PATH]
送信先ソケットアドレス (送信者が sendto に使用)。
Definition potrContext.h:180
PotrContext_::_pad_lastrecv
uint32_t _pad_lastrecv
パディング (last_recv_tv_sec を 8 バイト境界に揃える)。
Definition potrContext.h:198
PotrContext_::recv_window
PotrWindow recv_window
受信ウィンドウ (順序整列・欠番検出)。
Definition potrContext.h:166
PotrContext_::session_tv_sec
int64_t session_tv_sec
自セッション開始時刻 秒部。
Definition potrContext.h:184
PotrContext_::n_path
int n_path
有効パス数。
Definition potrContext.h:170
PotrContext_::peers
PotrPeerContext * peers
ピアテーブル (動的確保。max_peers エントリ)。
Definition potrContext.h:239
PotrContext_::tcp_conn_fd
PotrSocket tcp_conn_fd[POTR_MAX_PATH]
アクティブ TCP 接続 fd (path ごと)。
Definition potrContext.h:247
PotrContext_::last_recv_tv_nsec
int32_t last_recv_tv_nsec
最終受信時刻 ナノ秒部。
Definition potrContext.h:197
PotrContext_::nack_dedup_buf
PotrNackDedupEntry nack_dedup_buf[POTR_NACK_DEDUP_SLOTS]
NACK 重複抑制エントリ配列。
Definition potrContext.h:223
PotrContext_::last_recv_tv_sec
int64_t last_recv_tv_sec
最終受信時刻 秒部。0 = 未受信。
Definition potrContext.h:199
PotrGlobalConfig
グローバル設定。
Definition porter_type.h:177
PotrNackDedupEntry
NACK 重複抑制バッファの 1 エントリ。
Definition potrContext.h:85
PotrNackDedupEntry::time_ms
uint64_t time_ms
処理時刻 (ms、単調増加)。0 = 未使用スロット。
Definition potrContext.h:88
PotrNackDedupEntry::_pad
uint32_t _pad
パディング (time_ms を 8 バイト境界に揃える)。
Definition potrContext.h:87
PotrNackDedupEntry::ack_num
uint32_t ack_num
再送または REJECT した ack_num。
Definition potrContext.h:86
PotrPeerContext_
N:1 モードにおける個別ピアのコンテキスト。
Definition potrContext.h:99
PotrPeerContext_::_pad_reorder
uint8_t _pad_reorder[3]
パディング (reorder_pending を 4 バイト境界に揃える)。
Definition potrContext.h:134
PotrPeerContext_::reorder_pending
int reorder_pending
リオーダー待機中 (1: 待機中, 0: 待機なし)。
Definition potrContext.h:137
PotrPeerContext_::nack_dedup_next
uint8_t nack_dedup_next
次に書き込むスロット。
Definition potrContext.h:133
PotrPeerContext_::send_window
PotrWindow send_window
送信ウィンドウ (NACK 再送用)。
Definition potrContext.h:116
PotrPeerContext_::last_recv_tv_nsec
int32_t last_recv_tv_nsec
最終受信時刻 ナノ秒部。
Definition potrContext.h:128
PotrPeerContext_::reorder_deadline_nsec
int32_t reorder_deadline_nsec
タイムアウト期限 ナノ秒部。
Definition potrContext.h:141
PotrPeerContext_::frag_buf_len
size_t frag_buf_len
現在のデータ長。
Definition potrContext.h:122
PotrPeerContext_::frag_compressed
int frag_compressed
圧縮フラグ (非 0: 圧縮あり)。
Definition potrContext.h:123
PotrPeerContext_::session_tv_nsec
int32_t session_tv_nsec
自セッション開始時刻 ナノ秒部。
Definition potrContext.h:107
PotrPeerContext_::reorder_deadline_sec
int64_t reorder_deadline_sec
タイムアウト期限 秒部 (CLOCK_MONOTONIC)。
Definition potrContext.h:140
PotrPeerContext_::session_tv_sec
int64_t session_tv_sec
自セッション開始時刻 秒部。
Definition potrContext.h:106
PotrPeerContext_::active
int active
1: 有効スロット, 0: 空き。
Definition potrContext.h:101
PotrPeerContext_::frag_buf
uint8_t * frag_buf
フラグメント結合バッファ (動的確保)。
Definition potrContext.h:121
PotrPeerContext_::last_recv_tv_sec
int64_t last_recv_tv_sec
最終受信時刻 秒部 (CLOCK_MONOTONIC)。0 = 未受信。
Definition potrContext.h:127
PotrPeerContext_::recv_window
PotrWindow recv_window
受信ウィンドウ (順序整列)。
Definition potrContext.h:118
PotrPeerContext_::_pad_nack_dedup
uint32_t _pad_nack_dedup
パディング (nack_dedup_buf を 8 バイト境界に揃える)。
Definition potrContext.h:129
PotrPeerContext_::_pad_session
uint32_t _pad_session
パディング (session_tv_sec を 8 バイト境界に揃える)。
Definition potrContext.h:105
PotrPeerContext_::n_paths
int n_paths
アクティブパス数。ループ境界には使わず管理カウンタとして使用する。
Definition potrContext.h:147
PotrPeerContext_::nack_dedup_buf
PotrNackDedupEntry nack_dedup_buf[POTR_NACK_DEDUP_SLOTS]
NACK 重複抑制バッファ。
Definition potrContext.h:132
PotrPeerContext_::reorder_nack_num
uint32_t reorder_nack_num
待機中の欠番通番。
Definition potrContext.h:138
PotrPeerContext_::peer_session_tv_sec
int64_t peer_session_tv_sec
追跡中のピアセッション開始時刻 秒部。
Definition potrContext.h:111
PotrPeerContext_::health_alive
volatile int health_alive
疎通状態 (1: alive, 0: dead/未接続)。
Definition potrContext.h:126
PotrPeerContext_::dest_addr
struct sockaddr_in dest_addr[POTR_MAX_PATH]
送信先ソケットアドレス (インデックス = ctx->sock[] の添字)。未使用スロットは sin_family == 0。
Definition potrContext.h:146
PotrPeerContext_::peer_session_id
uint32_t peer_session_id
追跡中のピアセッション識別子。
Definition potrContext.h:110
PotrPeerContext_::session_id
uint32_t session_id
自セッション識別子 (乱数)。
Definition potrContext.h:104
PotrPeerContext_::peer_id
PotrPeerId peer_id
外部公開用ピア識別子 (単調増加カウンタから付与)。
Definition potrContext.h:100
PotrPeerContext_::path_last_recv_sec
int64_t path_last_recv_sec[POTR_MAX_PATH]
パスごとの最終受信時刻 秒部。未使用スロットは 0。
Definition potrContext.h:148
PotrPeerContext_::peer_session_known
int peer_session_known
ピアセッションが初期化済みか (0: 未初期化)。
Definition potrContext.h:113
PotrPeerContext_::_pad_reorder_dl
uint32_t _pad_reorder_dl
パディング (reorder_deadline_sec を 8 バイト境界に揃える)。
Definition potrContext.h:139
PotrPeerContext_::send_window_mutex
PotrMutex send_window_mutex
send_window 保護 (送信・受信・ヘルスチェックスレッド競合)。
Definition potrContext.h:117
PotrPeerContext_::peer_session_tv_nsec
int32_t peer_session_tv_nsec
追跡中のピアセッション開始時刻 ナノ秒部。
Definition potrContext.h:112
PotrPeerContext_::path_last_recv_nsec
int32_t path_last_recv_nsec[POTR_MAX_PATH]
パスごとの最終受信時刻 ナノ秒部。
Definition potrContext.h:149
PotrSendQueue
非同期送信キュー。
Definition potrSendQueue.h:72
PotrServiceDef
サービス定義。
Definition porter_type.h:130
PotrWindow
スライディングウィンドウ管理構造体。
Definition window.h:30
window.h
スライディングウィンドウ管理モジュールの内部ヘッダー。