drachtio-srf 4.4.64 → 4.4.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/lib/srf.js +18 -11
  2. package/package.json +1 -1
package/lib/srf.js CHANGED
@@ -27,6 +27,8 @@ DialogState.Cancelled = 'cancelled';
27
27
  DialogDirection.Initiator = 'initiator';
28
28
  DialogDirection.Recipient = 'recipient';
29
29
 
30
+ const sleepFor = async(ms) => await new Promise((resolve) => setTimeout(resolve, ms));
31
+
30
32
  const noncopyableHdrs = ['via', 'from', 'to', 'call-id', 'cseq', 'contact', 'content-length', 'content-type'];
31
33
  function copyAllHeaders(msg, obj) {
32
34
  if (msg) Object.keys(msg.headers).forEach((h) => {
@@ -833,37 +835,42 @@ class Srf extends Emitter {
833
835
  let remoteSdpB, translatedRemoteSdpB ;
834
836
 
835
837
  /* returns a Promise that resolves with the sdp to use responding to the A leg */
836
- function generateSdpA(res) {
838
+ const generateSdpA = async(res) => {
837
839
  debug('createB2BUA: generateSdpA');
838
840
 
839
841
  const sdpB = res.body ;
840
842
  if (res.getParsedHeader('CSeq').method === 'SUBSCRIBE' || !sdpB) {
841
- return Promise.resolve(sdpB) ;
843
+ return sdpB ;
842
844
  }
843
845
 
844
846
  if (remoteSdpB && remoteSdpB === sdpB) {
845
847
  // called again with same remote SDP, return previous result
846
- return Promise.resolve(translatedRemoteSdpB) ;
848
+ if (translatedRemoteSdpB) return translatedRemoteSdpB;
849
+
850
+ /* race condition: we are still producing the translatedSdp from 183 */
851
+ await sleepFor(100);
852
+ if (translatedRemoteSdpB) return translatedRemoteSdpB;
853
+ await sleepFor(500);
854
+ if (translatedRemoteSdpB) return translatedRemoteSdpB;
855
+ await sleepFor(1000);
856
+ return translatedRemoteSdpB;
847
857
  }
848
858
 
849
859
  remoteSdpB = sdpB ;
850
860
  if (!opts.localSdpA) {
851
861
  // passthru B leg SDP
852
- return Promise.resolve(translatedRemoteSdpB = sdpB);
862
+ return translatedRemoteSdpB = sdpB;
853
863
  }
854
864
  else if ('function' === typeof opts.localSdpA) {
855
865
  // call function that returns either the sdp, or a Promise that resolves to the sdp
856
- const p = opts.localSdpA(sdpB, res);
857
- if (typeof p === 'string') return Promise.resolve(translatedRemoteSdpB = p);
858
- return p
859
- .then((sdpA) => translatedRemoteSdpB = sdpA)
860
- .catch((err) => Promise.reject(err));
866
+ const sdpA = await opts.localSdpA(sdpB, res);
867
+ return translatedRemoteSdpB = sdpA;
861
868
  }
862
869
  else {
863
870
  // insert provided SDP
864
- return Promise.resolve(translatedRemoteSdpB = opts.localSdpA) ;
871
+ return translatedRemoteSdpB = opts.localSdpA ;
865
872
  }
866
- }
873
+ };
867
874
 
868
875
  /* uac request sent, set handler to propagate CANCEL from A leg if we get it */
869
876
  function handleUACSent(err, uacReq) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drachtio-srf",
3
- "version": "4.4.64",
3
+ "version": "4.4.65",
4
4
  "description": "drachtio signaling resource framework",
5
5
  "main": "lib/srf.js",
6
6
  "scripts": {