47 uint16_t window_size, uint16_t max_payload);
uint32_t base_seq
ウィンドウ先頭の通番。
uint32_t _pad
パディング (構造体サイズを 8 バイト境界に揃える)。
uint16_t max_payload
エントリごとのペイロード最大長 (バイト)。
uint32_t next_seq
送信側: 次に割り当てる通番。受信側: 次に期待する通番。
uint8_t * payload_pool
ペイロードプール (動的確保。window_size × max_payload バイト)。
uint8_t * valid
バッファ有効フラグ配列 (動的確保。window_size バイト)。
PotrPacket * packets
パケットバッファ (動的確保。window_size 要素)。
uint16_t window_size
ウィンドウサイズ (パケット数)。
void window_recv_skip(PotrWindow *win, uint32_t seq_num)
受信ウィンドウで指定通番をスキップして次の通番へ前進させます。
int window_send_push(PotrWindow *win, const PotrPacket *packet)
送信ウィンドウにパケットを積みます。
int window_init(PotrWindow *win, uint32_t initial_seq, uint16_t window_size, uint16_t max_payload)
ウィンドウを初期化します。
void window_destroy(PotrWindow *win)
ウィンドウが保持する動的確保バッファを解放します。
int window_recv_needs_nack(const PotrWindow *win, uint32_t *nack_num)
受信ウィンドウで欠番が発生しているか確認し、NACK 番号を返します。
void window_recv_reset(PotrWindow *win, uint32_t new_base_seq)
受信ウィンドウを新しい基点通番でリセットします。
int window_send_get(const PotrWindow *win, uint32_t seq_num, PotrPacket *packet_out)
送信ウィンドウから指定通番のパケットを取得します (再送用)。
int window_recv_pop(PotrWindow *win, PotrPacket *packet)
受信ウィンドウから順序整列済みパケットを取り出します。
int window_send_full(const PotrWindow *win)
送信ウィンドウが満杯かどうかを返します。
int window_recv_push(PotrWindow *win, const PotrPacket *packet)
受信ウィンドウにパケットを格納します。