Remote hold state is only set "true" inside _processInDialogSdpOffer function that is never triggered during audio calls ( mediaConstraints = { audio: true, video: false } ).
It also fails during video calls as the iterator returns only the first part of the SDP request, which somehow always has the sendrecv sdp direction and doesn't reflect the hold state, and ignores the rest.
It only works fine for pure video calls:
mediaConstraints = { audio: false, video: true }
In that case the SDP request consists of only one part and is handled correctly.
Tested in Chrome and Firefox with JsSIP (v3.8) based clients with Asterisk in backend.