スライディングウィンドウ管理モジュール。
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 )ウィンドウが保持する動的確保バッファを解放します。
static uint16_t win_index ( const PotrWindow *win, uint32_t seq )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 を返します。
void window_recv_skip ( PotrWindow *win, uint32_t seq_num )受信ウィンドウで指定通番をスキップして次の通番へ前進させます。
REJECT 受信時に欠落パケットを「配信済み」として扱い、後続パケットの配信を 継続するために使用します。seq_num が next_seq と一致しない場合は何もしません。
int window_recv_needs_nack ( const PotrWindow *win, uint32_t *nack_num )受信ウィンドウで欠番が発生しているか確認し、NACK 番号を返します。
欠番がある場合は 1、ない場合は 0 を返します。
void window_recv_reset ( PotrWindow *win, uint32_t new_base_seq )受信ウィンドウを新しい基点通番でリセットします。
全スロットを無効化し、base_seq / next_seq を new_base_seq に設定します。
バッファの再確保は行いません。
RAW モードでギャップを検出してセッションをリセットする際に使用します。