File: RTCPeerConnection-addTcpIceCandidate.html

package info (click to toggle)
firefox 143.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,617,328 kB
  • sloc: cpp: 7,478,492; javascript: 6,417,157; ansic: 3,720,058; python: 1,396,372; xml: 627,523; asm: 438,677; java: 186,156; sh: 63,477; makefile: 19,171; objc: 13,059; perl: 12,983; yacc: 4,583; cs: 3,846; pascal: 3,405; lex: 1,720; ruby: 1,003; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 53; csh: 10
file content (171 lines) | stat: -rw-r--r-- 4,790 bytes parent folder | download | duplicates (14)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<!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>