implement stateless handling of Initial packets for the TLS server

This commit is contained in:
Marten Seemann
2017-11-11 08:38:27 +08:00
parent 57c6f3ceb5
commit 25a6dc9654
36 changed files with 1617 additions and 724 deletions

View File

@@ -13,8 +13,8 @@ import (
)
type extensionHandlerClient struct {
params *TransportParameters
paramsChan chan<- TransportParameters
ourParams *TransportParameters
paramsChan chan TransportParameters
initialVersion protocol.VersionNumber
supportedVersions []protocol.VersionNumber
@@ -22,16 +22,17 @@ type extensionHandlerClient struct {
}
var _ mint.AppExtensionHandler = &extensionHandlerClient{}
var _ TLSExtensionHandler = &extensionHandlerClient{}
func newExtensionHandlerClient(
func NewExtensionHandlerClient(
params *TransportParameters,
paramsChan chan<- TransportParameters,
initialVersion protocol.VersionNumber,
supportedVersions []protocol.VersionNumber,
version protocol.VersionNumber,
) *extensionHandlerClient {
) TLSExtensionHandler {
paramsChan := make(chan TransportParameters, 1)
return &extensionHandlerClient{
params: params,
ourParams: params,
paramsChan: paramsChan,
initialVersion: initialVersion,
supportedVersions: supportedVersions,
@@ -46,7 +47,7 @@ func (h *extensionHandlerClient) Send(hType mint.HandshakeType, el *mint.Extensi
data, err := syntax.Marshal(clientHelloTransportParameters{
InitialVersion: uint32(h.initialVersion),
Parameters: h.params.getTransportParameters(),
Parameters: h.ourParams.getTransportParameters(),
})
if err != nil {
return err
@@ -123,3 +124,7 @@ func (h *extensionHandlerClient) Receive(hType mint.HandshakeType, el *mint.Exte
h.paramsChan <- *params
return nil
}
func (h *extensionHandlerClient) GetPeerParams() <-chan TransportParameters {
return h.paramsChan
}