@@ -32,16 +32,27 @@ func newMailboxSession() *mailboxSession {
3232}
3333
3434func (m * mailboxSession ) start (session * Session ,
35- serverCreator GRPCServerCreator , authData []byte ) error {
35+ serverCreator GRPCServerCreator , authData []byte ,
36+ onUpdate func (sess * Session ) error ) error {
3637
3738 tlsConfig := & tls.Config {}
3839 if session .DevServer {
3940 tlsConfig = & tls.Config {InsecureSkipVerify : true }
4041 }
4142
43+ ecdh := & keychain.PrivKeyECDH {PrivKey : session .LocalPrivateKey }
44+
45+ keys := mailbox .NewConnData (
46+ ecdh , session .RemotePublicKey , session .PairingSecret [:],
47+ authData , func (key * btcec.PublicKey ) error {
48+ session .RemotePublicKey = key
49+ return onUpdate (session )
50+ }, nil ,
51+ )
52+
4253 // Start the mailbox gRPC server.
4354 mailboxServer , err := mailbox .NewServer (
44- session .ServerAddr , session . PairingSecret [:] ,
55+ session .ServerAddr , keys ,
4556 grpc .WithTransportCredentials (credentials .NewTLS (tlsConfig )),
4657 grpc .WithKeepaliveParams (keepalive.ClientParameters {
4758 Time : 2 * time .Minute ,
@@ -51,10 +62,7 @@ func (m *mailboxSession) start(session *Session,
5162 return err
5263 }
5364
54- ecdh := & keychain.PrivKeyECDH {PrivKey : session .LocalPrivateKey }
55- noiseConn := mailbox .NewNoiseGrpcConn (
56- ecdh , authData , session .PairingSecret [:],
57- )
65+ noiseConn := mailbox .NewNoiseGrpcConn (keys )
5866 m .server = serverCreator (grpc .Creds (noiseConn ))
5967
6068 m .wg .Add (1 )
@@ -95,8 +103,8 @@ func NewServer(serverCreator GRPCServerCreator) *Server {
95103 }
96104}
97105
98- func (s * Server ) StartSession (session * Session , authData []byte ) ( chan struct {} ,
99- error ) {
106+ func (s * Server ) StartSession (session * Session , authData []byte ,
107+ onUpdate func ( sess * Session ) error ) ( chan struct {}, error ) {
100108
101109 s .activeSessionsMtx .Lock ()
102110 defer s .activeSessionsMtx .Unlock ()
@@ -112,7 +120,9 @@ func (s *Server) StartSession(session *Session, authData []byte) (chan struct{},
112120 sess := newMailboxSession ()
113121 s .activeSessions [id ] = sess
114122
115- return sess .quit , sess .start (session , s .serverCreator , authData )
123+ return sess .quit , sess .start (
124+ session , s .serverCreator , authData , onUpdate ,
125+ )
116126}
117127
118128func (s * Server ) StopSession (localPublicKey * btcec.PublicKey ) error {
0 commit comments