Document of c-modernization-kit (porter) 1.0.0
Loading...
Searching...
No Matches
window.h
Go to the documentation of this file.
1
13
14#ifndef WINDOW_H
15#define WINDOW_H
16
17#include <stdint.h>
18
19#include <porter_const.h>
20#include <porter_type.h>
21
29typedef struct
30{
32 uint8_t *valid;
33 uint8_t *payload_pool;
34 uint32_t base_seq;
35 uint32_t next_seq;
36 uint16_t window_size;
37 uint16_t max_payload;
38 uint32_t _pad;
40
41#ifdef __cplusplus
42extern "C"
43{
44#endif /* __cplusplus */
45
46 extern int window_init(PotrWindow *win, uint32_t initial_seq,
47 uint16_t window_size, uint16_t max_payload);
48 extern void window_destroy(PotrWindow *win);
49 extern int window_send_push(PotrWindow *win, const PotrPacket *packet);
50 extern int window_send_full(const PotrWindow *win);
51 extern int window_send_get(const PotrWindow *win, uint32_t seq_num,
52 PotrPacket *packet_out);
53 extern int window_recv_push(PotrWindow *win, const PotrPacket *packet);
54 extern int window_recv_pop(PotrWindow *win, PotrPacket *packet);
55 extern int window_recv_needs_nack(const PotrWindow *win, uint32_t *nack_num);
56 extern void window_recv_skip(PotrWindow *win, uint32_t seq_num);
57 extern void window_recv_reset(PotrWindow *win, uint32_t new_base_seq);
58
59#ifdef __cplusplus
60}
61#endif /* __cplusplus */
62
63#endif /* WINDOW_H */
通信ライブラリの定数ファイル。
通信ライブラリの型定義ファイル。
ネットワーク送受信用パケット構造体。
スライディングウィンドウ管理構造体。
Definition window.h:30
uint32_t base_seq
ウィンドウ先頭の通番。
Definition window.h:34
uint32_t _pad
パディング (構造体サイズを 8 バイト境界に揃える)。
Definition window.h:38
uint16_t max_payload
エントリごとのペイロード最大長 (バイト)。
Definition window.h:37
uint32_t next_seq
送信側: 次に割り当てる通番。受信側: 次に期待する通番。
Definition window.h:35
uint8_t * payload_pool
ペイロードプール (動的確保。window_size × max_payload バイト)。
Definition window.h:33
uint8_t * valid
バッファ有効フラグ配列 (動的確保。window_size バイト)。
Definition window.h:32
PotrPacket * packets
パケットバッファ (動的確保。window_size 要素)。
Definition window.h:31
uint16_t window_size
ウィンドウサイズ (パケット数)。
Definition window.h:36
void window_recv_skip(PotrWindow *win, uint32_t seq_num)
受信ウィンドウで指定通番をスキップして次の通番へ前進させます。
Definition window.c:313
int window_send_push(PotrWindow *win, const PotrPacket *packet)
送信ウィンドウにパケットを積みます。
Definition window.c:141
int window_init(PotrWindow *win, uint32_t initial_seq, uint16_t window_size, uint16_t max_payload)
ウィンドウを初期化します。
Definition window.c:42
void window_destroy(PotrWindow *win)
ウィンドウが保持する動的確保バッファを解放します。
Definition window.c:110
int window_recv_needs_nack(const PotrWindow *win, uint32_t *nack_num)
受信ウィンドウで欠番が発生しているか確認し、NACK 番号を返します。
Definition window.c:336
void window_recv_reset(PotrWindow *win, uint32_t new_base_seq)
受信ウィンドウを新しい基点通番でリセットします。
Definition window.c:378
int window_send_get(const PotrWindow *win, uint32_t seq_num, PotrPacket *packet_out)
送信ウィンドウから指定通番のパケットを取得します (再送用)。
Definition window.c:202
int window_recv_pop(PotrWindow *win, PotrPacket *packet)
受信ウィンドウから順序整列済みパケットを取り出します。
Definition window.c:279
int window_send_full(const PotrWindow *win)
送信ウィンドウが満杯かどうかを返します。
Definition window.c:184
int window_recv_push(PotrWindow *win, const PotrPacket *packet)
受信ウィンドウにパケットを格納します。
Definition window.c:242