171 lines
4.7 KiB
HTML
171 lines
4.7 KiB
HTML
<!doctype html>
|
|
<title>Test RTCPeerConnection.prototype.addIceCandidate with TCP candidates</title>
|
|
<meta name="timeout" content="long">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="RTCPeerConnection-helper.js"></script>
|
|
<script>
|
|
'use strict';
|
|
|
|
const sdp = `v=0
|
|
o=- 166855176514521964 2 IN IP4 127.0.0.1
|
|
s=-
|
|
t=0 0
|
|
a=msid-semantic:WMS *
|
|
m=audio 9 UDP/TLS/RTP/SAVPF 111
|
|
c=IN IP4 0.0.0.0
|
|
a=rtcp:9 IN IP4 0.0.0.0
|
|
a=ice-ufrag:655Y
|
|
a=ice-pwd:somelongpwdwithenoughrandomness
|
|
a=fingerprint:sha-256 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
|
|
a=setup:actpass
|
|
a=mid:audio1
|
|
a=sendonly
|
|
a=rtcp-mux
|
|
a=rtcp-rsize
|
|
a=rtpmap:111 opus/48000/2
|
|
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
|
|
a=ssrc:1001 cname:some
|
|
`;
|
|
|
|
// DRY: copied from fetch/api/request/request-bad-port.any.js
|
|
const BLOCKED_PORTS_LIST = [
|
|
1, // tcpmux
|
|
7, // echo
|
|
9, // discard
|
|
11, // systat
|
|
13, // daytime
|
|
15, // netstat
|
|
17, // qotd
|
|
19, // chargen
|
|
20, // ftp-data
|
|
21, // ftp
|
|
22, // ssh
|
|
23, // telnet
|
|
25, // smtp
|
|
37, // time
|
|
42, // name
|
|
43, // nicname
|
|
53, // domain
|
|
69, // tftp
|
|
77, // priv-rjs
|
|
79, // finger
|
|
87, // ttylink
|
|
95, // supdup
|
|
101, // hostriame
|
|
102, // iso-tsap
|
|
103, // gppitnp
|
|
104, // acr-nema
|
|
109, // pop2
|
|
110, // pop3
|
|
111, // sunrpc
|
|
113, // auth
|
|
115, // sftp
|
|
117, // uucp-path
|
|
119, // nntp
|
|
123, // ntp
|
|
135, // loc-srv / epmap
|
|
137, // netbios-ns
|
|
139, // netbios-ssn
|
|
143, // imap2
|
|
161, // snmp
|
|
179, // bgp
|
|
389, // ldap
|
|
427, // afp (alternate)
|
|
465, // smtp (alternate)
|
|
512, // print / exec
|
|
513, // login
|
|
514, // shell
|
|
515, // printer
|
|
526, // tempo
|
|
530, // courier
|
|
531, // chat
|
|
532, // netnews
|
|
540, // uucp
|
|
548, // afp
|
|
554, // rtsp
|
|
556, // remotefs
|
|
563, // nntp+ssl
|
|
587, // smtp (outgoing)
|
|
601, // syslog-conn
|
|
636, // ldap+ssl
|
|
989, // ftps-data
|
|
990, // ftps
|
|
993, // ldap+ssl
|
|
995, // pop3+ssl
|
|
1719, // h323gatestat
|
|
1720, // h323hostcall
|
|
1723, // pptp
|
|
2049, // nfs
|
|
3659, // apple-sasl
|
|
4045, // lockd
|
|
5060, // sip
|
|
5061, // sips
|
|
6000, // x11
|
|
6566, // sane-port
|
|
6665, // irc (alternate)
|
|
6666, // irc (alternate)
|
|
6667, // irc (default)
|
|
6668, // irc (alternate)
|
|
6669, // irc (alternate)
|
|
6697, // irc+tls
|
|
10080, // amanda
|
|
];
|
|
|
|
|
|
function candidateForPort(port) {
|
|
return `a=candidate:2983561038 1 tcp 1518214911 127.0.0.1 ${port} typ host tcptype passive generation 0 ufrag 655Y network-id 1 network-cost 10`;
|
|
}
|
|
|
|
promise_test(async t => {
|
|
const pc = new RTCPeerConnection();
|
|
t.add_cleanup(() => pc.close());
|
|
await pc.setRemoteDescription({type: 'offer', sdp: sdp + candidateForPort(8001) + '\n'})
|
|
const answer = await pc.createAnswer();
|
|
await pc.setLocalDescription(answer);
|
|
await waitForConnectionStateChangeWithTimeout(t, pc,
|
|
['failed', 'disconnected'], 1000);
|
|
}, 'TCP candidate aimed at port 8001 accepted');
|
|
|
|
promise_test(async t => {
|
|
const pc = new RTCPeerConnection();
|
|
t.add_cleanup(() => pc.close());
|
|
await pc.setRemoteDescription({type: 'offer', sdp: sdp})
|
|
const answer = await pc.createAnswer();
|
|
await pc.setLocalDescription(answer);
|
|
await pc.addIceCandidate(new RTCIceCandidate({
|
|
candidate: candidateForPort(8001),
|
|
sdpMid: 'audio1'
|
|
}));
|
|
await waitForConnectionStateChangeWithTimeout(
|
|
t, pc, ['failed', 'disconnected'], 1000);
|
|
}, 'TCP addIceCandidate aimed at port 8001 accepted');
|
|
|
|
for (const port of BLOCKED_PORTS_LIST) {
|
|
promise_test(async t => {
|
|
const pc = new RTCPeerConnection();
|
|
t.add_cleanup(() => pc.close());
|
|
await pc.setRemoteDescription({type: 'offer', sdp: sdp + candidateForPort(port) + '\n'})
|
|
const answer = await pc.createAnswer();
|
|
|
|
await pc.setLocalDescription(answer);
|
|
pc.oniceconnectionstatechange = t.unreached_func();
|
|
await new Promise(resolve => t.step_timeout(resolve, 500));
|
|
}, `TCP candidate aimed at Fetch bad port ${port} ignored`);
|
|
}
|
|
|
|
promise_test(async t => {
|
|
const pc = new RTCPeerConnection();
|
|
t.add_cleanup(() => pc.close());
|
|
await pc.setRemoteDescription({type: 'offer', sdp: sdp})
|
|
const answer = await pc.createAnswer();
|
|
await pc.setLocalDescription(answer);
|
|
await pc.addIceCandidate(new RTCIceCandidate({
|
|
candidate: candidateForPort(2049),
|
|
sdpMid: 'audio1'
|
|
}));
|
|
pc.oniceconnectionstatechange = t.unreached_func();
|
|
await new Promise(resolve => t.step_timeout(resolve, 500));
|
|
}, `TCP addIceCandidate aimed at Fetch bad port 2049 ignored`);
|
|
|
|
</script>
|