mirror of
https://github.com/bjdgyc/anylink.git
synced 2025-08-09 07:49:49 +08:00
添加 github.com/pion/dtls 代码
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
package handshake
|
||||
|
||||
import (
|
||||
"github.com/pion/dtls/v2/pkg/protocol"
|
||||
)
|
||||
|
||||
// MessageHelloVerifyRequest is as follows:
|
||||
//
|
||||
// struct {
|
||||
// ProtocolVersion server_version;
|
||||
// opaque cookie<0..2^8-1>;
|
||||
// } HelloVerifyRequest;
|
||||
//
|
||||
// The HelloVerifyRequest message type is hello_verify_request(3).
|
||||
//
|
||||
// When the client sends its ClientHello message to the server, the server
|
||||
// MAY respond with a HelloVerifyRequest message. This message contains
|
||||
// a stateless cookie generated using the technique of [PHOTURIS]. The
|
||||
// client MUST retransmit the ClientHello with the cookie added.
|
||||
//
|
||||
// https://tools.ietf.org/html/rfc6347#section-4.2.1
|
||||
type MessageHelloVerifyRequest struct {
|
||||
Version protocol.Version
|
||||
Cookie []byte
|
||||
}
|
||||
|
||||
// Type returns the Handshake Type
|
||||
func (m MessageHelloVerifyRequest) Type() Type {
|
||||
return TypeHelloVerifyRequest
|
||||
}
|
||||
|
||||
// Marshal encodes the Handshake
|
||||
func (m *MessageHelloVerifyRequest) Marshal() ([]byte, error) {
|
||||
if len(m.Cookie) > 255 {
|
||||
return nil, errCookieTooLong
|
||||
}
|
||||
|
||||
out := make([]byte, 3+len(m.Cookie))
|
||||
out[0] = m.Version.Major
|
||||
out[1] = m.Version.Minor
|
||||
out[2] = byte(len(m.Cookie))
|
||||
copy(out[3:], m.Cookie)
|
||||
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// Unmarshal populates the message from encoded data
|
||||
func (m *MessageHelloVerifyRequest) Unmarshal(data []byte) error {
|
||||
if len(data) < 3 {
|
||||
return errBufferTooSmall
|
||||
}
|
||||
m.Version.Major = data[0]
|
||||
m.Version.Minor = data[1]
|
||||
cookieLength := data[2]
|
||||
if len(data) < (int(cookieLength) + 3) {
|
||||
return errBufferTooSmall
|
||||
}
|
||||
m.Cookie = make([]byte, cookieLength)
|
||||
|
||||
copy(m.Cookie, data[3:3+cookieLength])
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user