N:1 モード用ピアテーブル管理の実装。
c-modernization-kit sample team
1.0.0
2026/03/23
Copyright (C) CompanyName, Ltd. 2026. All rights reserved.
static void peer_generate_session ( PotrPeerContext *peer )static PotrPeerId allocate_peer_id ( struct PotrContext_ *ctx )void peer_send_fin ( struct PotrContext_ *ctx, PotrPeerContext *peer )ピアの全パスへ FIN パケットを送信する。
ピアの dest_addr[] に対して FIN パケットを直接 sendto する。呼び出し元は peers_mutex を取得してから呼び出すこと。
int peer_table_init ( struct PotrContext_ *ctx )ピアテーブルを初期化する。
ctx->peers を max_peers 分確保し、peers_mutex を初期化する。
ctx->max_peers, ctx->n_peers, ctx->next_peer_id を設定する。
成功時は POTR_SUCCESS、失敗時は POTR_ERROR。
void peer_table_destroy ( struct PotrContext_ *ctx )ピアテーブルを破棄する。
全アクティブピアに FIN を送信し、リソースを解放する。
peers_mutex を解放する。
PotrPeerContext *peer_find_by_session ( struct PotrContext_ *ctx, uint32_t session_id, int64_t session_tv_sec, int32_t session_tv_nsec )session_triplet でピアを検索する。
ピアテーブルを線形探索し、session_id / session_tv_sec / session_tv_nsec が 一致するアクティブなエントリを返す。
呼び出し元は peers_mutex を取得してから呼び出すこと。
見つかった場合はピアコンテキストへのポインタ、見つからない場合は NULL。
PotrPeerContext *peer_find_by_id ( struct PotrContext_ *ctx, PotrPeerId peer_id )peer_id でピアを検索する。
呼び出し元は peers_mutex を取得してから呼び出すこと。
見つかった場合はピアコンテキストへのポインタ、見つからない場合は NULL。
PotrPeerContext *peer_create ( struct PotrContext_ *ctx, const struct sockaddr_in *sender_addr, int path_idx )新規ピアを作成する。
空きスロットを確保し、session_id/session_tv を生成してウィンドウを初期化する。
送信元アドレスを dest_addr[path_idx] に記録し、n_paths を 1 に設定する。
dest_addr[] のインデックスは ctx->sock[] / src_addr[] と直接対応する。
path_last_recv_sec[path_idx] は後続の n1_update_path_recv() 呼び出しで設定される。
max_peers 超過時はログエラー後 NULL を返す。
呼び出し元は peers_mutex を取得してから呼び出すこと。
成功時はピアコンテキストへのポインタ、失敗時は NULL。
void peer_path_clear ( struct PotrContext_ *ctx, PotrPeerContext *peer, int path_idx )ピアの特定パスをクリアしてスロットを未使用に戻す。
dest_addr[path_idx] をゼロクリアし、path_last_recv_sec/nsec をリセット後 n_paths を減算する。
タイムアウト・TCP FIN/RST などパス断の発生源によらず共通して呼び出す。
呼び出し元は peers_mutex を取得してから呼び出すこと。
void peer_free ( struct PotrContext_ *ctx, PotrPeerContext *peer )ピアリソースを解放してスロットをクリアする。
ウィンドウ破棄・frag_buf 解放・send_window_mutex 解放・スロットクリアを行う。
呼び出し元は peers_mutex を取得してから呼び出すこと。
FIN の送信は呼び出し元が行うこと (本関数は送信しない)。
#define POTR_MUTEX_INIT ( m )
pthread_mutex_init((m), NULL)#define POTR_MUTEX_DESTROY ( m )
pthread_mutex_destroy(m)