スライディングウィンドウ管理モジュールの内部ヘッダー。
c-modernization-kit sample team
1.0.0
2026/03/04
Copyright (C) CompanyName, Ltd. 2026. All rights reserved.
int window_init ( PotrWindow *win, uint32_t initial_seq, uint16_t window_size, uint16_t max_payload )ウィンドウを初期化します。
サイズが既存と同一の場合は状態をリセットするのみで再確保は行いません。
異なるサイズの場合は既存バッファを解放して再確保します。
成功時は POTR_SUCCESS、malloc 失敗時は POTR_ERROR を返します。
void window_destroy ( PotrWindow *win )ウィンドウが保持する動的確保バッファを解放します。
int window_send_push ( PotrWindow *win, const PotrPacket *packet )送信ウィンドウにパケットを積みます。
成功時は POTR_SUCCESS、ウィンドウ満杯の場合は POTR_ERROR を返します。
int window_send_full ( const PotrWindow *win )送信ウィンドウが満杯かどうかを返します。
満杯の場合は 1、空きがある場合は 0 を返します。
int window_send_get ( const PotrWindow *win, uint32_t seq_num, PotrPacket *packet_out )送信ウィンドウから指定通番のパケットを取得します (再送用)。
成功時は POTR_SUCCESS、エントリが存在しない場合は POTR_ERROR を返します。
int window_recv_push ( PotrWindow *win, const PotrPacket *packet )受信ウィンドウにパケットを格納します。
通番が受信ウィンドウ内であればバッファリングします。
追い越し (順序外到着) にも対応します。
成功時は POTR_SUCCESS、ウィンドウ外の場合は POTR_ERROR を返します。
int window_recv_pop ( PotrWindow *win, PotrPacket *packet )受信ウィンドウから順序整列済みパケットを取り出します。
取り出せた場合は POTR_SUCCESS、次のパケットが未着の場合は POTR_ERROR を返します。
int window_recv_needs_nack ( const PotrWindow *win, uint32_t *nack_num )受信ウィンドウで欠番が発生しているか確認し、NACK 番号を返します。
欠番がある場合は 1、ない場合は 0 を返します。
void window_recv_skip ( PotrWindow *win, uint32_t seq_num )受信ウィンドウで指定通番をスキップして次の通番へ前進させます。
REJECT 受信時に欠落パケットを「配信済み」として扱い、後続パケットの配信を 継続するために使用します。seq_num が next_seq と一致しない場合は何もしません。
void window_recv_reset ( PotrWindow *win, uint32_t new_base_seq )受信ウィンドウを新しい基点通番でリセットします。
全スロットを無効化し、base_seq / next_seq を new_base_seq に設定します。
バッファの再確保は行いません。
RAW モードでギャップを検出してセッションをリセットする際に使用します。
struct PotrWindow {
PotrPacket *packets;
uint8_t *valid;
uint8_t *payload_pool;
uint32_t base_seq;
uint32_t next_seq;
uint16_t window_size;
uint16_t max_payload;
uint32_t _pad;
}スライディングウィンドウ管理構造体。
パケットバッファ・有効フラグ・ペイロードプールは動的確保する。
window_init() で確保し、window_destroy() で解放すること。
PotrPacket *packets;パケットバッファ (動的確保。window_size 要素)。
uint8_t *valid;バッファ有効フラグ配列 (動的確保。window_size バイト)。
uint8_t *payload_pool;ペイロードプール (動的確保。window_size × max_payload バイト)。
uint32_t base_seq;ウィンドウ先頭の通番。
uint32_t next_seq;送信側: 次に割り当てる通番。受信側: 次に期待する通番。
uint16_t window_size;ウィンドウサイズ (パケット数)。
uint16_t max_payload;エントリごとのペイロード最大長 (バイト)。
uint32_t _pad;パディング (構造体サイズを 8 バイト境界に揃える)。