@@ -136,11 +136,7 @@ func NewSshUdpClient(opts *UdpClientOptions) (*SshUdpClient, error) {
136136 return nil , err
137137 }
138138
139- mtu := uint16 (0 )
140- if opts .ProxyClient != nil {
141- mtu = opts .ProxyClient .GetMaxDatagramSize ()
142- }
143- udpClient .protoClient , err = newProtoClient (tsshdAddr , opts .ServerInfo , mtu , opts .ConnectTimeout )
139+ udpClient .protoClient , err = newProtoClient (udpClient , opts , tsshdAddr )
144140 if err != nil {
145141 return nil , err
146142 }
@@ -426,6 +422,10 @@ func (c *SshUdpClient) GetLastReconnectError() error {
426422// GetMaxDatagramSize returns the maximum payload size (in bytes) that
427423// can be sent in a single datagram over this SshUdpClient.
428424func (c * SshUdpClient ) GetMaxDatagramSize () uint16 {
425+ return getMaxDatagramSizeFunc (c )
426+ }
427+
428+ var getMaxDatagramSizeFunc = func (c * SshUdpClient ) uint16 {
429429 return c .protoClient .getUdpForwarder ().conn .GetMaxDatagramSize ()
430430}
431431
@@ -519,6 +519,12 @@ func (c *SshUdpClient) keepAlive(intervalTime time.Duration) {
519519 }
520520}
521521
522+ func (c * SshUdpClient ) isBusStreamInited () bool {
523+ c .busMutex .Lock ()
524+ defer c .busMutex .Unlock ()
525+ return c .busStream != nil
526+ }
527+
522528func (c * SshUdpClient ) sendBusCommand (command string ) error {
523529 c .busMutex .Lock ()
524530 defer c .busMutex .Unlock ()
@@ -556,6 +562,8 @@ func (c *SshUdpClient) handleBusEvent() {
556562 c .handleAliveEvent ()
557563 case "discard" :
558564 c .handleDiscardEvent ()
565+ case "rekey" :
566+ c .handleRekeyEvent ()
559567 default :
560568 if err := handleUnknownEvent (c .busStream , command ); err != nil {
561569 c .warning ("handle bus command [%s] failed: %v. You may need to upgrade tssh." , command , err )
@@ -665,6 +673,19 @@ func (c *SshUdpClient) handleDiscardEvent() {
665673 }
666674}
667675
676+ func (c * SshUdpClient ) handleRekeyEvent () {
677+ var msg rekeyMessage
678+ if err := recvMessage (c .busStream , & msg ); err != nil {
679+ c .warning ("recv rekey message failed: %v" , err )
680+ return
681+ }
682+
683+ if err := c .protoClient .handleRekeyEvent (& msg ); err != nil {
684+ c .warning ("rekey failed: %v" , err )
685+ return
686+ }
687+ }
688+
668689// SshUdpSession represents a connection to a remote command or shell
669690type SshUdpSession struct {
670691 id uint64
0 commit comments