クライアントの送信元 IP とポートは、固定長の 38 オクテットのヘッダーにエンコードされ、プロキシされる各 UDP データグラムのペイロード先頭に、次の形式で付加されます。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Number | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
| |
+ +
| |
+ Client Address +
| |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
| |
+ +
| |
+ Proxy Address +
| |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | Client Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Proxy Port | Payload... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ヘッダーの内容は次のとおりです。
SPP 用に 0x56EC が設定される 16 ビットの固定値です。このフィールドで SPP プロトコルと、38 バイトの SPP ヘッダーを識別してください。
プロキシされる UDP データグラムの送信元、つまりクライアントの 128 ビットアドレスです。クライアントが IPv6 を使った場合は IPv6 アドレス、IPv4 クライアントの場合は IPv4 マップ済み IPv6 アドレス(RFC 4291 ↗ を参照)です。
プロキシされる UDP データグラムの受信者、つまりプロキシの 128 ビットアドレスです。解釈方法は Client Address と同じです。
プロキシされる UDP データグラムの 16 ビット送信元ポート番号です。つまり、クライアントがデータグラムを送出した UDP ポート番号です。
プロキシされる UDP データグラムの 16 ビット宛先ポート番号です。つまり、プロキシがデータグラムを受信した UDP ポート番号です。
ヘッダーに続く、データグラムが運ぶデータです。 マジックナンバー、アドレス、ポート番号はネットワークバイトオーダーでエンコードされます。
ヘッダーを表す対応する C 構造体は次のとおりです。
struct {
uint16_t magic;
uint8_t client_addr[16];
uint8_t proxy_addr[16];
uint16_t client_port;
uint16_t proxy_port;
};