package handshake
import (
"bytes"
"errors"
"fmt"
"github.com/tmc/go-iroh/internal/qng/internal/wire"
"github.com/tmc/go-iroh/internal/qng/quicvarint"
)
const sessionTicketRevision = 5
type sessionTicket struct {
Parameters *wire .TransportParameters
}
func (t *sessionTicket ) Marshal () []byte {
b := make ([]byte , 0 , 256 )
b = quicvarint .Append (b , sessionTicketRevision )
return t .Parameters .MarshalForSessionTicket (b )
}
func (t *sessionTicket ) Unmarshal (b []byte ) error {
rev , l , err := quicvarint .Parse (b )
if err != nil {
return errors .New ("failed to read session ticket revision" )
}
b = b [l :]
if rev != sessionTicketRevision {
return fmt .Errorf ("unknown session ticket revision: %d" , rev )
}
var tp wire .TransportParameters
if err := tp .UnmarshalFromSessionTicket (b ); err != nil {
return fmt .Errorf ("unmarshaling transport parameters from session ticket failed: %s" , err .Error())
}
t .Parameters = &tp
return nil
}
const extraPrefix = "quic-go1"
func addSessionStateExtraPrefix(b []byte ) []byte {
return append ([]byte (extraPrefix ), b ...)
}
func findSessionStateExtraData(extras [][]byte ) []byte {
prefix := []byte (extraPrefix )
for _ , extra := range extras {
if len (extra ) < len (prefix ) || !bytes .Equal (prefix , extra [:len (prefix )]) {
continue
}
return extra [len (prefix ):]
}
return nil
}
The pages are generated with Golds v0.8.4 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .