99 "github.com/jetkvm/kvm/internal/hidrpc"
1010 "github.com/jetkvm/kvm/internal/logging"
1111 "github.com/jetkvm/kvm/internal/usbgadget"
12- "github.com/rs/zerolog "
12+ "github.com/jetkvm/kvm/internal/utils "
1313)
1414
1515func handleHidRPCMessage (message hidrpc.Message , session * Session ) error {
@@ -69,30 +69,30 @@ func handlePointerReport(message hidrpc.Message) error {
6969 return rpcAbsMouseReport (pointerReport .X , pointerReport .Y , pointerReport .Button )
7070}
7171
72- func onHidMessage (msg hidQueueMessage , session * Session ) {
72+ func onHidMessage (msg hidQueueMessage , session * Session , queueContext * logging.Context ) {
73+ logger := queueContext .With ().Str ("channel" , msg .channel )
7374 data := msg .Data
7475
75- scopedLogger := logging .GetSubsystemLogger ("hidrpc" ).
76- With ().
77- Str ("channel" , msg .channel ).
78- Bytes ("data" , data ).
79- Logger ()
80- scopedLogger .Debug ().Msg ("HID RPC message received" )
76+ if logger .IsDebugLevel () {
77+ logger = logger .Object ("data" , utils .ByteSlice (data ))
78+ }
79+
80+ logger .Debug ().Msg ("HID RPC message received" )
8181
8282 if len (data ) < 1 {
83- scopedLogger . Warn (). Int ("length" , len (data )).Msg ("received empty data in HID RPC message handler" )
83+ logger . Int ("length" , len (data )). Warn ( ).Msg ("received empty data in HID RPC message handler" )
8484 return
8585 }
8686
8787 var message hidrpc.Message
8888
8989 if err := hidrpc .Unmarshal (data , & message ); err != nil {
90- scopedLogger . Warn (). Err ( err ).Msg ("failed to unmarshal HID RPC message" )
90+ logger . Err ( err ). Warn ( ).Msg ("failed to unmarshal HID RPC message" )
9191 return
9292 }
9393
94- if scopedLogger . GetLevel () <= zerolog . DebugLevel {
95- scopedLogger = scopedLogger . With (). Str ("descr " , message .String ()). Logger ( )
94+ if logger . IsDebugLevel () {
95+ logger = logger . Str ("message " , message .String ())
9696 }
9797
9898 t := time .Now ()
@@ -103,11 +103,11 @@ func onHidMessage(msg hidQueueMessage, session *Session) {
103103 }()
104104 select {
105105 case <- time .After (1 * time .Second ):
106- scopedLogger .Warn ().Msg ("HID RPC message timed out " )
106+ logger .Warn ().Msg ("HID RPC message took too long " )
107107 case err := <- r :
108- scopedLogger .Debug ().Dur ("duration" , time .Since (t )).Msg ("HID RPC message handled" )
108+ logger .Debug ().Dur ("duration" , time .Since (t )).Msg ("HID RPC message handled" )
109109 if err != nil {
110- scopedLogger .Warn ().Err (err .(error )).Msg ("failed to handle HID RPC message" )
110+ logger .Warn ().Err (err .(error )).Msg ("failed to handle HID RPC message" )
111111 }
112112 }
113113}
@@ -117,12 +117,10 @@ func onHidMessage(msg hidQueueMessage, session *Session) {
117117// macOS default: 15 * 15 = 225ms https://discussions.apple.com/thread/1316947?sortBy=rank
118118// Linux default: 250ms https://man.archlinux.org/man/kbdrate.8.en
119119// Windows default: 1s `HKEY_CURRENT_USER\Control Panel\Accessibility\Keyboard Response\AutoRepeatDelay`
120-
121120const expectedRate = 50 * time .Millisecond // expected keepalive interval
122121const maxLateness = 50 * time .Millisecond // max jitter we'll tolerate OR jitter budget
123122const baseExtension = expectedRate + maxLateness // 100ms extension on perfect tick
124-
125- const maxStaleness = 225 * time .Millisecond // discard ancient packets outright
123+ const maxStaleness = 225 * time .Millisecond // discard ancient packets outright
126124
127125func handleHidRPCKeypressKeepAlive (session * Session ) error {
128126 session .keepAliveJitterLock .Lock ()
@@ -172,19 +170,23 @@ func handleHidRPCKeypressKeepAlive(session *Session) error {
172170}
173171
174172func handleHidRPCKeyboardInput (message hidrpc.Message ) error {
175- context := logging .GetSubsystemLogger ("hidrpc" ).With ().Interface ("message" , message )
173+ logger := hidrpc .GetHidRpcLoggingContext ().
174+ With ().
175+ Interface ("message" , message )
176176
177177 switch message .Type () {
178178 case hidrpc .TypeKeypressReport :
179179 keypressReport , err := message .KeypressReport ()
180180 if err != nil {
181- return logging .LogWarnE (context , err , "failed to get keypress report" )
181+ logger .Warn ().Err (err ).Msg ("failed to get keypress report" )
182+ return err
182183 }
183184 return rpcKeypressReport (keypressReport .Key , keypressReport .Press )
184185 case hidrpc .TypeKeyboardReport :
185186 keyboardReport , err := message .KeyboardReport ()
186187 if err != nil {
187- return logging .LogWarnE (context , err , "failed to get keyboard report" )
188+ logger .Warn ().Err (err ).Msg ("failed to get keyboard report" )
189+ return err
188190 }
189191 return rpcKeyboardReport (keyboardReport .Modifier , keyboardReport .Keys )
190192 }
@@ -193,7 +195,10 @@ func handleHidRPCKeyboardInput(message hidrpc.Message) error {
193195}
194196
195197func reportHidRPC (params any , session * Session ) {
196- logger := logging .GetSubsystemLogger ("hidrpc" )
198+ logger := hidrpc .GetHidRpcLoggingContext ().
199+ With ().
200+ Interface ("params" , params ).
201+ Interface ("session" , session )
197202
198203 if session == nil {
199204 logger .Warn ().Msg ("session is nil, skipping reportHidRPC" )
@@ -224,15 +229,16 @@ func reportHidRPC(params any, session *Session) {
224229 err = fmt .Errorf ("unknown HID RPC message type: %T" , params )
225230 }
226231
232+ logger = logger .Bytes ("message" , message )
233+
227234 if err != nil || message == nil {
228235 logger .Warn ().Err (err ).Msg ("failed to marshal HID RPC message" )
229236 return
230237 }
231238
232239 // fire and forget...
240+ logger .Debug ().Msg ("sending HID RPC report" )
233241 go func () {
234- logger .Debug ().Bytes ("message" , message ).Msg ("executing keyboard macro" )
235-
236242 if err := session .HidChannel .Send (message ); err != nil {
237243 if errors .Is (err , io .ErrClosedPipe ) {
238244 logger .Debug ().Err (err ).Msg ("HID RPC channel closed, skipping reportHidRPC" )
0 commit comments