TUN-1673: Conflate Hello and Connect RPCs

This commit is contained in:
Chung-Ting Huang
2019-04-01 13:50:30 -05:00
parent 6804a5ff9d
commit 80d3d989eb
3 changed files with 157 additions and 648 deletions

View File

@@ -73,46 +73,6 @@ func UnmarshalRegistrationOptions(s tunnelrpc.RegistrationOptions) (*Registratio
return p, err
}
type ServerHello struct {
ConnectResult *ConnectResult
CloudflaredID uuid.UUID
}
// CapnpServerHello is ServerHello respresented in Cap'n Proto build-in types
type CapnpServerHello struct {
ConnectResult *ConnectResult
CloudflaredID []byte
}
func MarshalServerHello(s tunnelrpc.CapnpServerHello, p *ServerHello) error {
cloudflaredIDBytes, err := p.CloudflaredID.MarshalBinary()
if err != nil {
return err
}
capnpServerHello := &CapnpServerHello{
ConnectResult: p.ConnectResult,
CloudflaredID: cloudflaredIDBytes,
}
return pogs.Insert(tunnelrpc.CapnpServerHello_TypeID, s.Struct, capnpServerHello)
}
func UnmarshalServerHello(s tunnelrpc.CapnpServerHello) (*ServerHello, error) {
p := new(CapnpServerHello)
err := pogs.Extract(p, tunnelrpc.CapnpServerHello_TypeID, s.Struct)
if err != nil {
return nil, err
}
cloudflaredID, err := uuid.FromBytes(p.CloudflaredID)
if err != nil {
log.Errorf("fail to unmarshal %+v", p.CloudflaredID)
return nil, err
}
return &ServerHello{
ConnectResult: p.ConnectResult,
CloudflaredID: cloudflaredID,
}, nil
}
type ConnectResult struct {
Err *ConnectError
ServerInfo ServerInfo
@@ -129,8 +89,9 @@ func UnmarshalConnectResult(s tunnelrpc.ConnectResult) (*ConnectResult, error) {
}
type ConnectError struct {
Cause string
RetryAfter time.Duration
Cause string
RetryAfter time.Duration
ShouldRetry bool
}
func MarshalConnectError(s tunnelrpc.ConnectError, p *ConnectError) error {
@@ -166,26 +127,11 @@ func UnmarshalServerInfo(s tunnelrpc.ServerInfo) (*ServerInfo, error) {
return p, err
}
type HelloParameters struct {
OriginCert []byte
Tags []Tag
NumPreviousAttempts uint8
}
func MarshalHelloParameters(s tunnelrpc.HelloParameters, p *HelloParameters) error {
return pogs.Insert(tunnelrpc.HelloParameters_TypeID, s.Struct, p)
}
func UnmarshalHelloParameters(s tunnelrpc.HelloParameters) (*HelloParameters, error) {
p := new(HelloParameters)
err := pogs.Extract(p, tunnelrpc.HelloParameters_TypeID, s.Struct)
return p, err
}
type ConnectParameters struct {
OriginCert []byte
CloudflaredID uuid.UUID
NumPreviousAttempts uint8
Tags []Tag
}
// CapnpConnectParameters is ConnectParameters represented in Cap'n Proto build-in types
@@ -193,6 +139,7 @@ type CapnpConnectParameters struct {
OriginCert []byte
CloudflaredID []byte
NumPreviousAttempts uint8
Tags []Tag
}
func MarshalConnectParameters(s tunnelrpc.CapnpConnectParameters, p *ConnectParameters) error {
@@ -229,7 +176,6 @@ type TunnelServer interface {
RegisterTunnel(ctx context.Context, originCert []byte, hostname string, options *RegistrationOptions) (*TunnelRegistration, error)
GetServerInfo(ctx context.Context) (*ServerInfo, error)
UnregisterTunnel(ctx context.Context, gracePeriodNanoSec int64) error
Hello(ctx context.Context, parameters *HelloParameters) (*ServerHello, error)
Connect(ctx context.Context, paramaters *ConnectParameters) (*ConnectResult, error)
}
@@ -290,27 +236,6 @@ func (i TunnelServer_PogsImpl) UnregisterTunnel(p tunnelrpc.TunnelServer_unregis
return i.impl.UnregisterTunnel(p.Ctx, gracePeriodNanoSec)
}
func (i TunnelServer_PogsImpl) Hello(p tunnelrpc.TunnelServer_hello) error {
parameters, err := p.Params.Parameters()
if err != nil {
return err
}
pogsParameters, err := UnmarshalHelloParameters(parameters)
if err != nil {
return err
}
server.Ack(p.Options)
serverHello, err := i.impl.Hello(p.Ctx, pogsParameters)
if err != nil {
return err
}
result, err := p.Results.NewResult()
if err != nil {
return err
}
return MarshalServerHello(result, serverHello)
}
func (i TunnelServer_PogsImpl) Connect(p tunnelrpc.TunnelServer_connect) error {
paramaters, err := p.Params.Parameters()
if err != nil {
@@ -391,28 +316,6 @@ func (c TunnelServer_PogsClient) UnregisterTunnel(ctx context.Context, gracePeri
return err
}
func (c TunnelServer_PogsClient) Hello(ctx context.Context,
parameters *HelloParameters,
) (*ServerHello, error) {
client := tunnelrpc.TunnelServer{Client: c.Client}
promise := client.Hello(ctx, func(p tunnelrpc.TunnelServer_hello_Params) error {
helloParameters, err := p.NewParameters()
if err != nil {
return err
}
err = MarshalHelloParameters(helloParameters, parameters)
if err != nil {
return err
}
return nil
})
retval, err := promise.Result().Struct()
if err != nil {
return nil, err
}
return UnmarshalServerHello(retval)
}
func (c TunnelServer_PogsClient) Connect(ctx context.Context,
parameters *ConnectParameters,
) (*ConnectResult, error) {