package iroh

import (
	
	

	
)

// HandshakeRejectError rejects a completed handshake with an application close
// code and reason.
type HandshakeRejectError struct {
	Code   uint64
	Reason string
}

// Error implements error.
func ( *HandshakeRejectError) () string {
	return fmt.Sprintf("reject handshake: code %d: %s", .Code, .Reason)
}

// RejectHandshake rejects a completed handshake with code and reason.
func ( uint64,  string) error {
	return &HandshakeRejectError{Code: , Reason: }
}

// EndpointHooks observes and can reject outbound dials and completed
// handshakes.
type EndpointHooks interface {
	BeforeConnect(ctx context.Context, addr netaddr.EndpointAddr, alpn string) error
	AfterHandshake(ctx context.Context, conn *Conn) error
}

type noopHooks struct{}

func (noopHooks) (context.Context, netaddr.EndpointAddr, string) error { return nil }

func (noopHooks) (context.Context, *Conn) error { return nil }