# 外側パケットフラグ (PotrPacket.flags)

# 1 カテゴリー

## 1.1 外側パケットフラグ (PotrPacket.flags)

UDP で送受信される外側パケット (PotrPacket) の flags フィールドに設定するフラグです。
ペイロードエレメントのフラグ (ペイロードエレメントフラグ (パックコンテナ内エレメントヘッダー.flags)) とは独立したビット空間で管理します。

# 2 定数、マクロ

## 2.1 POTR_FLAG_DATA

    #define POTR_FLAG_DATA 0x0001U

データパケット (パックコンテナ) であることを示すフラグ。常に設定される。

## 2.2 POTR_FLAG_NACK

    #define POTR_FLAG_NACK 0x0002U

再送要求パケットであることを示すフラグ。ack_num に要求通番を格納する。

## 2.3 POTR_FLAG_PING

    #define POTR_FLAG_PING 0x0004U

ヘルスチェック要求パケットであることを示すフラグ。ペイロードなし。

## 2.4 POTR_FLAG_REJECT

    #define POTR_FLAG_REJECT 0x0008U

再送不能通知パケットであることを示すフラグ。ack_num に再送不能な通番を格納する。

## 2.5 POTR_FLAG_FIN

    #define POTR_FLAG_FIN 0x0010U

正常終了通知パケットであることを示すフラグ。送信者が potrCloseService 時に送出し、受信者は即座に DISCONNECTED へ遷移する。ペイロードなし。

## 2.6 POTR_FLAG_ENCRYPTED

    #define POTR_FLAG_ENCRYPTED 0x0020U

AES-256-GCM 認証タグが付与されていることを示す外側パケットフラグ。
POTR_FLAG_DATA と組み合わせる場合: [ヘッダー 32B][暗号文: packed_len B][GCM 認証タグ: 16B]。
単独で使用する場合 (PING/NACK/REJECT/FIN): ペイロードなし (平文 0B) の
GCM 認証タグのみ (16B) を格納する。[ヘッダー 32B][GCM 認証タグ: 16B]。
いずれの場合もヘッダー全体 (32B) が AAD として認証される。
Nonce (12B) = session_id (4B NBO) + flags (2B NBO) + seq_or_ack_num (4B NBO) + padding (2B 0x00)。
flags には本フラグを含んだ実際の送信フラグ値を使用する。
seq_or_ack_num は DATA/PING/FIN の場合 seq_num、NACK/REJECT の場合 ack_num。