@@ -54,7 +54,7 @@ type ProtocolOptions struct {
5454 Role ProtocolRole
5555}
5656
57- type MessageHandlerFunc func (Message ) error
57+ type MessageHandlerFunc func (Message , bool ) error
5858type MessageFromCborFunc func (uint , []byte ) (Message , error )
5959
6060func New (config ProtocolConfig ) * Protocol {
@@ -108,6 +108,7 @@ func (p *Protocol) SendError(err error) {
108108
109109func (p * Protocol ) recvLoop () {
110110 leftoverData := false
111+ isResponse := false
111112 for {
112113 var err error
113114 // Don't grab the next segment from the muxer if we still have data in the buffer
@@ -116,6 +117,8 @@ func (p *Protocol) recvLoop() {
116117 segment := <- p .recvChan
117118 // Add segment payload to buffer
118119 p .recvBuffer .Write (segment .Payload )
120+ // Save whether it's a response
121+ isResponse = segment .IsResponse ()
119122 }
120123 leftoverData = false
121124 // Decode message into generic list until we can determine what type of message it is
@@ -140,7 +143,7 @@ func (p *Protocol) recvLoop() {
140143 p .config .ErrorChan <- fmt .Errorf ("%s: received unknown message type: %#v" , p .config .Name , tmpMsg )
141144 }
142145 // Handle message
143- if err := p .handleMessage (msg ); err != nil {
146+ if err := p .handleMessage (msg , isResponse ); err != nil {
144147 p .config .ErrorChan <- err
145148 }
146149 if numBytesRead < p .recvBuffer .Len () {
@@ -183,7 +186,7 @@ func (p *Protocol) getNewState(msg Message) (State, error) {
183186 return newState , nil
184187}
185188
186- func (p * Protocol ) handleMessage (msg Message ) error {
189+ func (p * Protocol ) handleMessage (msg Message , isResponse bool ) error {
187190 // Lock the state to prevent collisions
188191 p .stateMutex .Lock ()
189192 if err := p .checkCurrentState (); err != nil {
@@ -197,5 +200,5 @@ func (p *Protocol) handleMessage(msg Message) error {
197200 p .state = newState
198201 p .stateMutex .Unlock ()
199202 // Call handler function
200- return p .config .MessageHandlerFunc (msg )
203+ return p .config .MessageHandlerFunc (msg , isResponse )
201204}
0 commit comments