@@ -34,6 +34,7 @@ func handleHidRPCMessage(message hidrpc.Message, session *Session) error {
3434}
3535
3636func handleHidRPCHandshake (session * Session ) error {
37+ hidrpc .GetHidRpcLogger ().Debug ().Msg ("handling handshake" )
3738 message , err := hidrpc .NewHandshakeMessage ().Marshal ()
3839 if err != nil {
3940 return err
@@ -50,6 +51,7 @@ func handleKeyboardMacro(message hidrpc.Message) error {
5051 if err != nil {
5152 return err
5253 }
54+ hidrpc .GetHidRpcLogger ().Debug ().Interface ("keyboardMacroReport" , keyboardMacroReport ).Msg ("handling keyboard macro" )
5355 return rpcExecuteKeyboardMacro (keyboardMacroReport .Steps )
5456}
5557
@@ -58,6 +60,7 @@ func handleMouseReport(message hidrpc.Message) error {
5860 if err != nil {
5961 return err
6062 }
63+ hidrpc .GetHidRpcLogger ().Debug ().Interface ("mouseReport" , mouseReport ).Msg ("handling relative mouse" )
6164 return rpcRelMouseReport (mouseReport .DX , mouseReport .DY , mouseReport .Button )
6265}
6366
@@ -66,37 +69,31 @@ func handlePointerReport(message hidrpc.Message) error {
6669 if err != nil {
6770 return err
6871 }
72+ hidrpc .GetHidRpcLogger ().Debug ().Interface ("pointerReport" , pointerReport ).Msg ("handling absolute pointer" )
6973 return rpcAbsMouseReport (pointerReport .X , pointerReport .Y , pointerReport .Button )
7074}
7175
72- func onHidMessage (msg hidQueueMessage , session * Session , queueContext * logging. Context ) {
73- logger := queueContext . With ().Str ("channel" , msg .channel )
76+ func onHidMessage (msg hidQueueMessage , session * Session , index int ) {
77+ logger := hidrpc . GetHidRpcLogger (). With ().Int ( "queueIndex" , index ). Str ("channel" , msg .channel ). Logger ( )
7478 data := msg .Data
7579
76- if logger . IsDebugLevel ( ) {
77- logger = logger . Object ("data" , utils .ByteSlice (data ))
80+ if logging . IsTraceLevel ( & logger ) {
81+ logger . Trace (). Object ("data" , utils .ByteSlice (data )). Msg ( "HID RPC message received" )
7882 }
7983
80- logger .Debug ().Msg ("HID RPC message received" )
81-
8284 if len (data ) < 1 {
83- logger .Int ("length" , len (data )). Warn ( ).Msg ("received empty data in HID RPC message handler" )
85+ logger .Warn (). Int ("length" , len (data )).Msg ("received empty data in HID RPC message handler" )
8486 return
8587 }
8688
8789 var message hidrpc.Message
8890
8991 if err := hidrpc .Unmarshal (data , & message ); err != nil {
90- logger .Err ( err ). Warn ( ).Msg ("failed to unmarshal HID RPC message" )
92+ logger .Warn (). Err ( err ).Msg ("failed to unmarshal HID RPC message" )
9193 return
9294 }
9395
94- if logger .IsDebugLevel () {
95- logger = logger .Str ("message" , message .String ())
96- }
97-
9896 t := time .Now ()
99-
10097 r := make (chan interface {})
10198 go func () {
10299 r <- handleHidRPCMessage (message , session )
@@ -170,9 +167,7 @@ func handleHidRPCKeypressKeepAlive(session *Session) error {
170167}
171168
172169func handleHidRPCKeyboardInput (message hidrpc.Message ) error {
173- logger := hidrpc .GetHidRpcLoggingContext ().
174- With ().
175- Interface ("message" , message )
170+ logger := hidrpc .GetHidRpcLogger ().With ().Interface ("message" , message ).Logger ()
176171
177172 switch message .Type () {
178173 case hidrpc .TypeKeypressReport :
@@ -181,24 +176,23 @@ func handleHidRPCKeyboardInput(message hidrpc.Message) error {
181176 logger .Warn ().Err (err ).Msg ("failed to get keypress report" )
182177 return err
183178 }
179+ logger .Debug ().Interface ("keypressReport" , keypressReport ).Msg ("handling key press" )
184180 return rpcKeypressReport (keypressReport .Key , keypressReport .Press )
185181 case hidrpc .TypeKeyboardReport :
186182 keyboardReport , err := message .KeyboardReport ()
187183 if err != nil {
188184 logger .Warn ().Err (err ).Msg ("failed to get keyboard report" )
189185 return err
190186 }
187+ logger .Debug ().Interface ("keyboardReport" , keyboardReport ).Msg ("handling keyboard" )
191188 return rpcKeyboardReport (keyboardReport .Modifier , keyboardReport .Keys )
192189 }
193190
194191 return fmt .Errorf ("unknown HID RPC message type: %d" , message .Type ())
195192}
196193
197194func reportHidRPC (params any , session * Session ) {
198- logger := hidrpc .GetHidRpcLoggingContext ().
199- With ().
200- Interface ("params" , params ).
201- Interface ("session" , session )
195+ logger := hidrpc .GetHidRpcLogger ().With ().Interface ("params" , params ).Logger ()
202196
203197 if session == nil {
204198 logger .Warn ().Msg ("session is nil, skipping reportHidRPC" )
@@ -229,22 +223,33 @@ func reportHidRPC(params any, session *Session) {
229223 err = fmt .Errorf ("unknown HID RPC message type: %T" , params )
230224 }
231225
232- logger = logger .Bytes ( "message " , message )
226+ logger = logger .With (). Type ( "type " , params ). Logger ( )
233227
234228 if err != nil || message == nil {
235229 logger .Warn ().Err (err ).Msg ("failed to marshal HID RPC message" )
236230 return
237231 }
238232
239233 // fire and forget...
240- logger .Debug ().Msg ("sending HID RPC report" )
241234 go func () {
242- if err := session .HidChannel .Send (message ); err != nil {
243- if errors .Is (err , io .ErrClosedPipe ) {
244- logger .Debug ().Err (err ).Msg ("HID RPC channel closed, skipping reportHidRPC" )
245- return
235+ t := time .Now ()
236+ r := make (chan interface {})
237+ go func () {
238+ logger .Trace ().Msg ("sending HID RPC report" )
239+ r <- session .HidChannel .Send (message )
240+ }()
241+ select {
242+ case <- time .After (1 * time .Second ):
243+ logger .Warn ().Msg ("HID RPC report took too long" )
244+ case err := <- r :
245+ logger .Debug ().Dur ("duration" , time .Since (t )).Msg ("HID RPC report sent" )
246+ if err != nil {
247+ if errors .Is (err .(error ), io .ErrClosedPipe ) {
248+ logger .Warn ().Err (err .(error )).Msg ("HID RPC channel closed, skipping reportHidRPC" )
249+ return
250+ }
251+ logger .Warn ().Err (err .(error )).Msg ("failed to send HID RPC report" )
246252 }
247- logger .Warn ().Err (err ).Msg ("failed to send HID RPC message" )
248253 }
249254 }()
250255}
0 commit comments