pion

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 24, 2026 License: AGPL-3.0 Imports: 23 Imported by: 0

Documentation

Overview

Package pion реализует порт ports.P2P поверх ICE + DTLS + SCTP (ADR-043, путь B+: без pion/webrtc и без медиастека).

Спецификация — photon-core/docs/p2p-session.md, написана до этого кода. Аутентификация peer'а — ADR-041, signaling — ADR-042, жизненный цикл — ADR-044, однонаправленные потоки — ADR-016.

Ни один тип Pion не пересекает границу порта: наружу идут []byte, ports.PublicKey, ports.Session/Connection/Stream и ports.Endpoint (ADR-043 §0).

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Adapter

type Adapter struct {
	// contains filtered or unexported fields
}

Adapter реализует ports.P2P.

Владеет ресурсами СОГЛАСОВАНИЯ; ресурсами установленного соединения владеет session. Поэтому Close() не закрывает уже установленные сессии — прямое требование порта (ADR-044 §8).

func New

func New(cfg Config) (*Adapter, error)

func (*Adapter) AcceptOffer

func (a *Adapter) AcceptOffer(ctx context.Context, peer ports.PublicKey, offer []byte) ([]byte, ports.Session, error)

AcceptOffer — шаг 2 отвечающего. Session возвращается ДО установления (ADR-044 §1): её методы блокируются до исхода.

func (*Adapter) Close

func (a *Adapter) Close() error

Close прекращает НОВЫЕ согласования и освобождает их ресурсы. Уже установленные Session не закрывает — прямое требование порта; общий ресурс живёт, пока жива последняя сессия (ADR-044 §8). Идемпотентен.

func (*Adapter) CompleteSession

func (a *Adapter) CompleteSession(ctx context.Context, peer ports.PublicKey, answer []byte) (ports.Session, error)

CompleteSession — шаг 3 инициатора.

func (*Adapter) CreateOffer

func (a *Adapter) CreateOffer(ctx context.Context, peer ports.PublicKey) ([]byte, error)

CreateOffer — шаг 1 инициатора.

type Config

type Config struct {
	// Identity и Self — ключ устройства, которым подписывается handshake
	// ADR-041. Приватный ключ не покидает адаптер и никуда не передаётся
	// (ADR-021).
	Identity ports.Identity
	Self     ports.IdentityPair

	// STUNTURN — адреса вида "stun:host:port" / "turn:host:port".
	// Учётные данные TURN задаются здесь же (TURNUser/TURNPass): конкретный
	// сервер — конфигурация развёртывания, а не предмет заморозки
	// (ADR-043 §1).
	STUNTURN []string
	TURNUser string
	TURNPass string

	// ForceRelay исключает host- и srflx-кандидатов, оставляя только relay.
	// Нужен для acceptance-проверки relay-пути: без него TURN может быть
	// настроен и ни разу не использован, а прогон выглядел бы проверкой
	// relay, не будучи ею (p2p-session.md §10.2).
	ForceRelay bool

	// EstablishTimeout — обязательный потолок согласования (ADR-044 §3).
	// Без него зависание неотличимо от медленной сети.
	EstablishTimeout time.Duration

	// PeerLossTimeout — сколько тишины на ICE после установления означает,
	// что собеседник исчез без закрытия (убит процесс, пропала сеть). По
	// истечении сессия переходит в отказ: заблокированные чтения и запись
	// возвращают ошибку, ресурсы сессии освобождаются. Ноль — умолчания
	// pion/ice (5 с до disconnected и ещё 25 с до failed). Значение —
	// конфигурация развёртывания, не порт: порт фиксирует лишь, что исход
	// терминален (ADR-044).
	PeerLossTimeout time.Duration
	// contains filtered or unexported fields
}

Config — параметры адаптера.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
⌂ 换网址