|
@@ -687,7 +687,7 @@ SDP.prototype.toJingle = function (elem, thecreator) {
|
687
|
687
|
elem.c('parameter', tmp[k]).up();
|
688
|
688
|
}
|
689
|
689
|
}
|
690
|
|
- this.RtcpFbToJingle(this.media[i], elem, mline.fmt[j]); // XEP-0293 -- map a=rtcp-fb
|
|
690
|
+ this.RtcpFbToJingle(i, elem, mline.fmt[j]); // XEP-0293 -- map a=rtcp-fb
|
691
|
691
|
|
692
|
692
|
elem.up();
|
693
|
693
|
}
|
|
@@ -737,7 +737,7 @@ SDP.prototype.toJingle = function (elem, thecreator) {
|
737
|
737
|
}
|
738
|
738
|
|
739
|
739
|
// XEP-0293 -- map a=rtcp-fb:*
|
740
|
|
- this.RtcpFbToJingle(this.media[i], elem, '*');
|
|
740
|
+ this.RtcpFbToJingle(i, elem, '*');
|
741
|
741
|
|
742
|
742
|
// XEP-0294
|
743
|
743
|
if (SDPUtil.find_line(this.media[i], 'a=extmap:')) {
|
|
@@ -770,35 +770,8 @@ SDP.prototype.toJingle = function (elem, thecreator) {
|
770
|
770
|
elem.up(); // end of description
|
771
|
771
|
}
|
772
|
772
|
|
773
|
|
- elem.c('transport', {xmlns: 'urn:xmpp:jingle:transports:ice-udp:1'});
|
774
|
|
- // XEP-0320
|
775
|
|
- var fingerprints = SDPUtil.find_lines(this.media[i], 'a=fingerprint:', this.session);
|
776
|
|
- fingerprints.forEach(function(line) {
|
777
|
|
- tmp = SDPUtil.parse_fingerprint(line);
|
778
|
|
- tmp.xmlns = 'urn:xmpp:tmp:jingle:apps:dtls:0';
|
779
|
|
- // tmp.xmlns = 'urn:xmpp:jingle:apps:dtls:0'; -- FIXME: update receivers first
|
780
|
|
- elem.c('fingerprint').t(tmp.fingerprint);
|
781
|
|
- delete tmp.fingerprint;
|
782
|
|
- line = SDPUtil.find_line(ob.media[i], 'a=setup:', ob.session);
|
783
|
|
- if (line) {
|
784
|
|
- tmp.setup = line.substr(8);
|
785
|
|
- }
|
786
|
|
- elem.attrs(tmp);
|
787
|
|
- elem.up();
|
788
|
|
- });
|
789
|
|
- tmp = SDPUtil.iceparams(this.media[i], this.session);
|
790
|
|
- if (tmp) {
|
791
|
|
- elem.attrs(tmp);
|
792
|
|
- // XEP-0176
|
793
|
|
- if (SDPUtil.find_line(this.media[i], 'a=candidate:', this.session)) { // add any a=candidate lines
|
794
|
|
- lines = SDPUtil.find_lines(this.media[i], 'a=candidate:', this.session);
|
795
|
|
- for (j = 0; j < lines.length; j++) {
|
796
|
|
- tmp = SDPUtil.candidateToJingle(lines[j]);
|
797
|
|
- elem.c('candidate', tmp).up();
|
798
|
|
- }
|
799
|
|
- }
|
800
|
|
- elem.up(); // end of transport
|
801
|
|
- }
|
|
773
|
+ // map ice-ufrag/pwd, dtls fingerprint, candidates
|
|
774
|
+ this.TransportToJingle(i, elem);
|
802
|
775
|
|
803
|
776
|
if (SDPUtil.find_line(this.media[i], 'a=sendrecv', this.session)) {
|
804
|
777
|
elem.attrs({senders: 'both'});
|
|
@@ -819,10 +792,46 @@ SDP.prototype.toJingle = function (elem, thecreator) {
|
819
|
792
|
return elem;
|
820
|
793
|
};
|
821
|
794
|
|
822
|
|
-SDP.prototype.RtcpFbToJingle = function (sdp, elem, payloadtype) { // XEP-0293
|
823
|
|
- var lines = SDPUtil.find_lines(sdp, 'a=rtcp-fb:' + payloadtype);
|
824
|
|
- for (var i = 0; i < lines.length; i++) {
|
825
|
|
- var tmp = SDPUtil.parse_rtcpfb(lines[i]);
|
|
795
|
+SDP.prototype.TransportToJingle = function (mediaindex, elem) {
|
|
796
|
+ var i = mediaindex;
|
|
797
|
+ var tmp;
|
|
798
|
+ var ob = this;
|
|
799
|
+ elem.c('transport');
|
|
800
|
+
|
|
801
|
+ // XEP-0320
|
|
802
|
+ var fingerprints = SDPUtil.find_lines(this.media[mediaindex], 'a=fingerprint:', this.session);
|
|
803
|
+ fingerprints.forEach(function(line) {
|
|
804
|
+ tmp = SDPUtil.parse_fingerprint(line);
|
|
805
|
+ tmp.xmlns = 'urn:xmpp:tmp:jingle:apps:dtls:0';
|
|
806
|
+ // tmp.xmlns = 'urn:xmpp:jingle:apps:dtls:0'; -- FIXME: update receivers first
|
|
807
|
+ elem.c('fingerprint').t(tmp.fingerprint);
|
|
808
|
+ delete tmp.fingerprint;
|
|
809
|
+ line = SDPUtil.find_line(ob.media[mediaindex], 'a=setup:', ob.session);
|
|
810
|
+ if (line) {
|
|
811
|
+ tmp.setup = line.substr(8);
|
|
812
|
+ }
|
|
813
|
+ elem.attrs(tmp);
|
|
814
|
+ elem.up(); // end of fingerprint
|
|
815
|
+ });
|
|
816
|
+ tmp = SDPUtil.iceparams(this.media[mediaindex], this.session);
|
|
817
|
+ if (tmp) {
|
|
818
|
+ tmp.xmlns = 'urn:xmpp:jingle:transports:ice-udp:1';
|
|
819
|
+ elem.attrs(tmp);
|
|
820
|
+ // XEP-0176
|
|
821
|
+ if (SDPUtil.find_line(this.media[mediaindex], 'a=candidate:', this.session)) { // add any a=candidate lines
|
|
822
|
+ var lines = SDPUtil.find_lines(this.media[mediaindex], 'a=candidate:', this.session);
|
|
823
|
+ lines.forEach(function (line) {
|
|
824
|
+ elem.c('candidate', SDPUtil.candidateToJingle(line)).up();
|
|
825
|
+ });
|
|
826
|
+ }
|
|
827
|
+ }
|
|
828
|
+ elem.up(); // end of transport
|
|
829
|
+}
|
|
830
|
+
|
|
831
|
+SDP.prototype.RtcpFbToJingle = function (mediaindex, elem, payloadtype) { // XEP-0293
|
|
832
|
+ var lines = SDPUtil.find_lines(this.media[mediaindex], 'a=rtcp-fb:' + payloadtype);
|
|
833
|
+ lines.forEach(function (line) {
|
|
834
|
+ var tmp = SDPUtil.parse_rtcpfb(line);
|
826
|
835
|
if (tmp.type == 'trr-int') {
|
827
|
836
|
elem.c('rtcp-fb-trr-int', {xmlns: 'urn:xmpp:jingle:apps:rtp:rtcp-fb:0', value: tmp.params[0]});
|
828
|
837
|
elem.up();
|
|
@@ -833,7 +842,7 @@ SDP.prototype.RtcpFbToJingle = function (sdp, elem, payloadtype) { // XEP-0293
|
833
|
842
|
}
|
834
|
843
|
elem.up();
|
835
|
844
|
}
|
836
|
|
- }
|
|
845
|
+ });
|
837
|
846
|
};
|
838
|
847
|
|
839
|
848
|
SDP.prototype.RtcpFbFromJingle = function (elem, payloadtype) { // XEP-0293
|