package tls
import "io"
type ISessionTicketExtension interface {
TLSExtension
Initializable
InitializeByUtls (session *SessionState , ticket []byte )
GetSession () *SessionState
GetTicket () []byte
}
type SessionTicketExtension struct {
Session *SessionState
Ticket []byte
Initialized bool
}
func (e *SessionTicketExtension ) writeToUConn (uc *UConn ) error {
uc .HandshakeState .Hello .TicketSupported = true
return nil
}
func (e *SessionTicketExtension ) Len () int {
return 4 + len (e .Ticket )
}
func (e *SessionTicketExtension ) Read (b []byte ) (int , error ) {
if len (b ) < e .Len () {
return 0 , io .ErrShortBuffer
}
extBodyLen := e .Len () - 4
b [0 ] = byte (extensionSessionTicket >> 8 )
b [1 ] = byte (extensionSessionTicket )
b [2 ] = byte (extBodyLen >> 8 )
b [3 ] = byte (extBodyLen )
if extBodyLen > 0 {
copy (b [4 :], e .Ticket )
}
return e .Len (), io .EOF
}
func (e *SessionTicketExtension ) IsInitialized () bool {
return e .Initialized
}
func (e *SessionTicketExtension ) InitializeByUtls (session *SessionState , ticket []byte ) {
uAssert (!e .Initialized , "tls: InitializeByUtls failed: the SessionTicketExtension is initialized" )
uAssert (session .version == VersionTLS12 && session != nil && ticket != nil , "tls: InitializeByUtls failed: the session is not a tls 1.2 session" )
e .Session = session
e .Ticket = ticket
e .Initialized = true
}
func (e *SessionTicketExtension ) UnmarshalJSON (_ []byte ) error {
return nil
}
func (e *SessionTicketExtension ) Write (_ []byte ) (int , error ) {
return 0 , nil
}
func (e *SessionTicketExtension ) GetSession () *SessionState {
return e .Session
}
func (e *SessionTicketExtension ) GetTicket () []byte {
return e .Ticket
}
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 .