mirror of
https://github.com/netbirdio/netbird.git
synced 2026-09-15 03:09:06 +02:00
Move the signaling protocol out of the peer package into client/internal/peer/signaling: OfferAnswer, IceCredentials, Handshaker and Signaler. Break the peer<->signaling cycle by giving the Handshaker a plain Config and an ICEWorker interface instead of *Conn/*WorkerICE, and by passing the relay manager directly rather than the relay worker. Combine the ICE worker's local-credentials and session-id accessors into a single Credentials() returning a Credentials struct. Move the ICE session id to the ice package as ice.SessionID, since it identifies an ICE agent session and is minted there alongside GenerateICECredentials; signaling only carries it.
48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
package ice
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"io"
|
|
)
|
|
|
|
const sessionIDSize = 5
|
|
|
|
type SessionID string
|
|
|
|
// NewSessionID generates a new session ID for distinguishing sessions
|
|
func NewSessionID() (SessionID, error) {
|
|
b := make([]byte, sessionIDSize)
|
|
if _, err := io.ReadFull(rand.Reader, b); err != nil {
|
|
return "", fmt.Errorf("failed to generate session ID: %w", err)
|
|
}
|
|
return SessionID(hex.EncodeToString(b)), nil
|
|
}
|
|
|
|
func SessionIDFromBytes(b []byte) (SessionID, error) {
|
|
if len(b) != sessionIDSize {
|
|
return "", fmt.Errorf("invalid session ID length: %d", len(b))
|
|
}
|
|
return SessionID(hex.EncodeToString(b)), nil
|
|
}
|
|
|
|
// Bytes returns the raw bytes of the session ID for protobuf serialization
|
|
func (id SessionID) Bytes() ([]byte, error) {
|
|
if len(id) == 0 {
|
|
return nil, fmt.Errorf("ICE session ID is empty")
|
|
}
|
|
b, err := hex.DecodeString(string(id))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("invalid ICE session ID encoding: %w", err)
|
|
}
|
|
if len(b) != sessionIDSize {
|
|
return nil, fmt.Errorf("invalid ICE session ID length: expected %d bytes, got %d", sessionIDSize, len(b))
|
|
}
|
|
return b, nil
|
|
}
|
|
|
|
func (id SessionID) String() string {
|
|
return string(id)
|
|
}
|