at path:
ROOT
/
ratchet.zip
run:
R
W
Run
.well-known
DIR
2024-07-18 07:32:21
R
W
Run
adstesting
DIR
2026-05-07 07:41:07
R
W
Run
androidfamilylocator
DIR
2026-05-07 07:41:18
R
W
Run
axelonyticslostphonefinder
DIR
2026-05-07 07:41:02
R
W
Run
axelonyticsmobiletracker
DIR
2026-05-07 07:41:18
R
W
Run
axelonyticsparentlink
DIR
2026-05-07 07:41:07
R
W
Run
callforhelp
DIR
2026-05-07 07:40:54
R
W
Run
carmanagement
DIR
2026-05-07 07:40:52
R
W
Run
devicetrackerplus
DIR
2026-05-07 07:41:03
R
W
Run
docspot
DIR
2026-05-07 07:40:54
R
W
Run
eventhybrid
DIR
2026-05-07 07:41:03
R
W
Run
excusefinder
DIR
2026-05-07 07:41:18
R
W
Run
findlostphonerapid
DIR
2026-05-07 07:41:18
R
W
Run
findmykids
DIR
2026-05-07 07:41:02
R
W
Run
foodproducts
DIR
2026-05-07 07:41:20
R
W
Run
halalfoodscanner
DIR
2026-05-07 07:41:02
R
W
Run
home
DIR
2023-09-05 11:51:03
R
W
Run
innovagictechnologies
DIR
2026-05-07 07:41:18
R
W
Run
innovagicwebsite
DIR
2026-05-07 07:41:18
R
W
Run
khalis
DIR
2026-05-07 07:40:54
R
W
Run
lastpassmanager
DIR
2026-05-07 07:41:01
R
W
Run
lostphonerainbow
DIR
2026-05-07 07:41:03
R
W
Run
lostphonetrack
DIR
2026-05-07 07:41:02
R
W
Run
lyricstudio
DIR
2026-05-07 07:40:54
R
W
Run
muffinbreak
DIR
2026-05-07 07:41:02
R
W
Run
numanarshad
DIR
2026-05-07 07:41:18
R
W
Run
offlinephonetrack
DIR
2026-05-07 07:41:01
R
W
Run
parentalcontrol
DIR
2026-05-07 07:41:02
R
W
Run
pushnoti
DIR
2026-05-07 07:41:02
R
W
Run
pushnotification
DIR
2026-05-07 07:41:07
R
W
Run
remotemouse
DIR
2026-05-07 07:40:54
R
W
Run
scrum
DIR
2026-05-07 07:40:59
R
W
Run
scrumapp
DIR
2026-05-07 07:41:20
R
W
Run
scrumhrmanagement
DIR
2026-05-07 07:41:03
R
W
Run
scrumlive
DIR
2026-05-07 07:41:02
R
W
Run
seminarhub
DIR
2026-05-07 07:41:03
R
W
Run
seventyfivechallenges
DIR
2026-05-07 07:41:06
R
W
Run
shaheer
DIR
2026-05-07 07:41:07
R
W
Run
smartswitchphone
DIR
2026-05-07 07:41:02
R
W
Run
trackviewblue
DIR
2026-05-07 07:40:52
R
W
Run
trackviewnewapp
DIR
2026-05-07 07:41:18
R
W
Run
virtualstudygroup
DIR
2026-05-07 07:41:03
R
W
Run
vkonnect
DIR
2026-05-07 07:41:06
R
W
Run
warrantyapp
DIR
2026-05-07 07:40:52
R
W
Run
wp-admin
DIR
2026-05-07 07:41:02
R
W
Run
wp-content
DIR
2026-05-07 07:40:54
R
W
Run
wp-includes
DIR
2026-05-07 07:41:18
R
W
Run
zengo
DIR
2026-05-07 07:41:18
R
W
Run
.Archive.tar
4.5 KB
2026-05-07 12:05:59
R
W
Run
Delete
Rename
.Archive.tar.gz
656 By
2026-05-07 12:05:59
R
W
Run
Delete
Rename
.Archive.zip
1.53 KB
2026-05-07 12:04:14
R
W
Run
Delete
Rename
.Sent.zip
673 By
2026-05-07 12:04:07
R
W
Run
Delete
Rename
.Trash.tar
3 KB
2026-05-07 12:05:16
R
W
Run
Delete
Rename
.Trash.tar.gz
339 By
2026-05-07 12:05:16
R
W
Run
Delete
Rename
.Trash.zip
673 By
2026-05-07 12:05:00
R
W
Run
Delete
Rename
.bash_profile.bash_profile.tar.gz
253 By
2026-05-07 11:08:49
R
W
Run
Delete
Rename
.bash_profile.tar
2 KB
2026-05-07 11:08:49
R
W
Run
Delete
Rename
.cache.tar
2.66 MB
2026-05-07 11:07:01
R
W
Run
Delete
Rename
.cache.tar.gz
1.03 MB
2026-05-07 11:07:02
R
W
Run
Delete
Rename
.cache.zip
2.62 MB
2026-05-07 11:06:11
R
W
Run
Delete
Rename
.caldav.tar
10 KB
2026-05-07 11:06:11
R
W
Run
Delete
Rename
.caldav.tar.gz
1.17 KB
2026-05-07 11:06:11
R
W
Run
Delete
Rename
.caldav.zip
4.17 KB
2026-05-07 11:05:50
R
W
Run
Delete
Rename
.channels.zip
4.34 KB
2026-05-07 12:05:08
R
W
Run
Delete
Rename
.composer.zip
320 By
2026-05-07 11:06:59
R
W
Run
Delete
Rename
.config.zip
124.06 MB
2026-05-07 11:06:08
R
W
Run
Delete
Rename
.gnupg.zip
8.08 KB
2026-05-07 11:06:45
R
W
Run
Delete
Rename
.htaccess
2.08 KB
2026-05-06 07:15:54
R
W
Run
Delete
Rename
.htaccess.htaccess.tar.gz
961 By
2026-05-07 10:04:13
R
W
Run
Delete
Rename
.htaccess.tar
4 KB
2026-05-07 10:04:13
R
W
Run
Delete
Rename
.local.tar
2 KB
2026-05-07 12:04:52
R
W
Run
Delete
Rename
.local.tar.gz
119 By
2026-05-07 12:04:52
R
W
Run
Delete
Rename
.local.zip
195 By
2026-05-07 12:04:19
R
W
Run
Delete
Rename
.lock.lock.tar.gz
107 By
2026-05-07 12:03:30
R
W
Run
Delete
Rename
.lock.tar
1.5 KB
2026-05-07 12:03:30
R
W
Run
Delete
Rename
.php.error.log.php.error.log.tar.gz
1.62 KB
2026-05-07 12:06:08
R
W
Run
Delete
Rename
.php.error.log.tar
25 KB
2026-05-07 12:06:08
R
W
Run
Delete
Rename
.razor.tar
37 KB
2026-05-07 11:06:41
R
W
Run
Delete
Rename
.razor.tar.gz
4.75 KB
2026-05-07 11:06:41
R
W
Run
Delete
Rename
.razor.zip
32.15 KB
2026-05-07 11:05:57
R
W
Run
Delete
Rename
.scrummanager@toptrendingappstudio_com.tar
758.5 KB
2026-05-07 12:07:38
R
W
Run
Delete
Rename
.scrummanager@toptrendingappstudio_com.tar.gz
299.44 KB
2026-05-07 12:07:39
R
W
Run
Delete
Rename
.scrummanager@toptrendingappstudio_com.zip
704.09 KB
2026-05-07 12:08:06
R
W
Run
Delete
Rename
.spamassassin.zip
62.23 KB
2026-05-07 11:06:46
R
W
Run
Delete
Rename
.spamassassinboxenable.spamassassinboxenable.tar.gz
117 By
2026-05-07 12:13:18
R
W
Run
Delete
Rename
.spamassassinboxenable.tar
1.5 KB
2026-05-07 12:13:18
R
W
Run
Delete
Rename
.spamassassinenable.spamassassinenable.tar.gz
114 By
2026-05-07 11:08:47
R
W
Run
Delete
Rename
.spamassassinenable.tar
1.5 KB
2026-05-07 11:08:47
R
W
Run
Delete
Rename
.ssh.tar
6.5 KB
2026-05-07 11:06:10
R
W
Run
Delete
Rename
.ssh.tar.gz
1.93 KB
2026-05-07 11:06:10
R
W
Run
Delete
Rename
.ssh.zip
3.18 KB
2026-05-07 11:05:49
R
W
Run
Delete
Rename
.subaccounts.tar
17.5 KB
2026-05-07 11:06:41
R
W
Run
Delete
Rename
.subaccounts.tar.gz
495 By
2026-05-07 11:06:41
R
W
Run
Delete
Rename
.subaccounts.zip
16.16 KB
2026-05-07 11:06:13
R
W
Run
Delete
Rename
.user.ini.tar
2.5 KB
2026-05-07 11:08:46
R
W
Run
Delete
Rename
.user.ini.user.ini.tar.gz
463 By
2026-05-07 11:08:46
R
W
Run
Delete
Rename
.wget-hsts.tar
2 KB
2026-05-07 11:06:06
R
W
Run
Delete
Rename
.wget-hsts.wget-hsts.tar.gz
270 By
2026-05-07 11:06:06
R
W
Run
Delete
Rename
.wp-cli.tar
2 KB
2026-05-07 11:06:04
R
W
Run
Delete
Rename
.wp-cli.tar.gz
125 By
2026-05-07 11:06:04
R
W
Run
Delete
Rename
.wp-cli.zip
209 By
2026-05-07 11:05:25
R
W
Run
Delete
Rename
.wp-toolkit-identifier.tar
2.5 KB
2026-05-07 11:08:50
R
W
Run
Delete
Rename
.wp-toolkit-identifier.wp-toolkit-identifier.tar.gz
669 By
2026-05-07 11:08:50
R
W
Run
Delete
Rename
115743369141451647082_scaled_uu ju jj.jpg.jpg.tar.gz
7.56 KB
2026-05-07 12:07:15
R
W
Run
Delete
Rename
115743369141451647082_scaled_uu ju jj.jpg.tar
9.5 KB
2026-05-07 12:07:15
R
W
Run
Delete
Rename
14_1000016331.jpg.jpg.tar.gz
413.83 KB
2026-05-07 12:06:07
R
W
Run
Delete
Rename
14_1000016331.jpg.tar
454.5 KB
2026-05-07 12:06:07
R
W
Run
Delete
Rename
3_1000016296.jpg.jpg.tar.gz
514.67 KB
2026-05-07 12:06:48
R
W
Run
Delete
Rename
3_1000016296.jpg.tar
552.5 KB
2026-05-07 12:06:48
R
W
Run
Delete
Rename
66.php.php.tar.gz
679.9 KB
2026-05-07 10:03:53
R
W
Run
Delete
Rename
66.php.tar
1.18 MB
2026-05-07 10:03:53
R
W
Run
Delete
Rename
666.php.php.tar.gz
24.71 KB
2026-05-07 10:03:52
R
W
Run
Delete
Rename
666.php.tar
80.5 KB
2026-05-07 10:03:52
R
W
Run
Delete
Rename
8.php
15.05 KB
2026-05-07 07:39:38
R
W
Run
Delete
Rename
8.php.php.tar.gz
4.68 KB
2026-05-07 10:03:14
R
W
Run
Delete
Rename
8.php.tar
17 KB
2026-05-07 10:03:14
R
W
Run
Delete
Rename
a.php.php.tar.gz
242 By
2026-05-07 12:05:14
R
W
Run
Delete
Rename
a.php.tar
2 KB
2026-05-07 12:05:14
R
W
Run
Delete
Rename
access-logs.tar
63.59 MB
2026-05-07 11:08:45
R
W
Run
Delete
Rename
access-logs.tar.gz
3.1 MB
2026-05-07 11:08:47
R
W
Run
Delete
Rename
awstats.tar
1.5 GB
2026-05-07 12:13:37
R
W
Run
Delete
Rename
awstats.tar.gz
109.24 MB
2026-05-07 12:14:37
R
W
Run
Delete
Rename
bayes_toks.tar
49.5 KB
2026-05-07 12:13:29
R
W
Run
Delete
Rename
bayes_toks.tar.gz
14.93 KB
2026-05-07 12:13:29
R
W
Run
Delete
Rename
bin.tar
5.68 MB
2026-05-07 12:11:50
R
W
Run
Delete
Rename
bin.tar.gz
1.21 MB
2026-05-07 11:07:03
R
W
Run
Delete
Rename
bin.zip
5.4 MB
2026-05-07 12:10:49
R
W
Run
Delete
Rename
cache.tar
2 KB
2026-05-07 12:05:54
R
W
Run
Delete
Rename
cache.tar.gz
104 By
2026-05-07 12:05:54
R
W
Run
Delete
Rename
cacheid.tar
2 KB
2026-05-07 12:05:20
R
W
Run
Delete
Rename
cacheid.tar.gz
120 By
2026-05-07 12:05:20
R
W
Run
Delete
Rename
caches.tar
59 KB
2026-05-07 12:13:18
R
W
Run
Delete
Rename
caches.tar.gz
11.1 KB
2026-05-07 12:13:18
R
W
Run
Delete
Rename
cboden.tar
224.5 KB
2026-05-07 12:12:50
R
W
Run
Delete
Rename
cboden.tar.gz
36.15 KB
2026-05-07 12:12:50
R
W
Run
Delete
Rename
cboden.zip
177.43 KB
2026-05-07 12:11:46
R
W
Run
Delete
Rename
citycam.tar
58.72 MB
2026-05-07 12:05:19
R
W
Run
Delete
Rename
citycam.tar.gz
58.29 MB
2026-05-07 12:05:22
R
W
Run
Delete
Rename
citycam.zip
58.7 MB
2026-05-07 12:05:03
R
W
Run
Delete
Rename
composer.json.json.tar.gz
337 By
2026-05-07 11:08:32
R
W
Run
Delete
Rename
composer.json.tar
2 KB
2026-05-07 11:08:32
R
W
Run
Delete
Rename
composer.lock.lock.tar.gz
9.36 KB
2026-05-07 11:08:37
R
W
Run
Delete
Rename
composer.lock.tar
84 KB
2026-05-07 11:08:37
R
W
Run
Delete
Rename
composer.tar
5.42 MB
2026-05-07 12:12:34
R
W
Run
Delete
Rename
composer.tar.gz
543.1 KB
2026-05-07 11:08:54
R
W
Run
Delete
Rename
composer.zip
2.77 MB
2026-05-07 12:12:21
R
W
Run
Delete
Rename
deletegoogleaccount_php.php.php.tar.gz
627 By
2026-05-07 12:06:23
R
W
Run
Delete
Rename
deletegoogleaccount_php.php.tar
3 KB
2026-05-07 12:06:23
R
W
Run
Delete
Rename
doctrine.tar
15.5 KB
2026-05-07 12:12:31
R
W
Run
Delete
Rename
doctrine.tar.gz
3.64 KB
2026-05-07 12:12:31
R
W
Run
Delete
Rename
doctrine.zip
11.38 KB
2026-05-07 12:12:50
R
W
Run
Delete
Rename
dompdf.tar
9.11 MB
2026-05-07 12:12:17
R
W
Run
Delete
Rename
dompdf.tar.gz
3.63 MB
2026-05-07 12:12:17
R
W
Run
Delete
Rename
dompdf.zip
9.03 MB
2026-05-07 12:11:51
R
W
Run
Delete
Rename
dovecot-acl-list.tar
1.5 KB
2026-05-07 12:06:12
R
W
Run
Delete
Rename
dovecot-acl-list.tar.gz
113 By
2026-05-07 12:06:12
R
W
Run
Delete
Rename
dovecot.list.index.log.list.index.log.tar.gz
1.48 KB
2026-05-07 12:06:53
R
W
Run
Delete
Rename
dovecot.list.index.log.tar
9 KB
2026-05-07 12:06:53
R
W
Run
Delete
Rename
egulias.zip
268.99 KB
2026-05-07 12:12:33
R
W
Run
Delete
Rename
error_log
891 By
2026-05-07 13:38:51
R
W
Run
Delete
Rename
error_log.tar
4 KB
2026-05-07 12:12:40
R
W
Run
Delete
Rename
error_log.tar.gz
1.92 KB
2026-05-07 10:03:53
R
W
Run
Delete
Rename
etc.tar
24.04 MB
2026-05-07 11:06:41
R
W
Run
Delete
Rename
etc.tar.gz
795.71 KB
2026-05-07 11:06:42
R
W
Run
Delete
Rename
etc.zip
24.01 MB
2026-05-07 11:05:58
R
W
Run
Delete
Rename
evenement.tar
58.5 KB
2026-05-07 12:12:36
R
W
Run
Delete
Rename
evenement.tar.gz
8.91 KB
2026-05-07 12:12:36
R
W
Run
Delete
Rename
evenement.zip
43.7 KB
2026-05-07 12:12:22
R
W
Run
Delete
Rename
getData.php.php.tar.gz
504 By
2026-05-07 12:06:09
R
W
Run
Delete
Rename
getData.php.tar
2.5 KB
2026-05-07 12:06:09
R
W
Run
Delete
Rename
get_all_contests.php.3.php.3.tar.gz
730 By
2026-05-07 12:06:14
R
W
Run
Delete
Rename
get_all_contests.php.3.tar
3 KB
2026-05-07 12:06:14
R
W
Run
Delete
Rename
gpg.conf.conf.tar.gz
3.31 KB
2026-05-07 12:06:12
R
W
Run
Delete
Rename
gpg.conf.tar
9 KB
2026-05-07 12:06:12
R
W
Run
Delete
Rename
hmsc.so.so.tar.gz
1.33 MB
2026-05-07 12:06:01
R
W
Run
Delete
Rename
hmsc.so.tar
2.96 MB
2026-05-07 12:06:01
R
W
Run
Delete
Rename
icals.zip
3.18 KB
2026-05-07 12:12:34
R
W
Run
Delete
Rename
images.tar
241.5 KB
2026-05-07 12:13:18
R
W
Run
Delete
Rename
images.tar.gz
239.71 KB
2026-05-07 12:05:23
R
W
Run
Delete
Rename
index.php.php.tar.gz
2.05 KB
2026-05-07 11:08:28
R
W
Run
Delete
Rename
index.php.tar
11.5 KB
2026-05-07 11:08:28
R
W
Run
Delete
Rename
keys.tar
108.5 KB
2026-05-07 12:05:44
R
W
Run
Delete
Rename
keys.tar.gz
52.97 KB
2026-05-07 12:05:45
R
W
Run
Delete
Rename
laminas.zip
171.21 KB
2026-05-07 12:12:40
R
W
Run
Delete
Rename
logs.tar
86.31 MB
2026-05-07 11:06:12
R
W
Run
Delete
Rename
logs.tar.gz
34.76 MB
2026-05-07 11:06:14
R
W
Run
Delete
Rename
logs.zip
86.15 MB
2026-05-07 11:05:51
R
W
Run
Delete
Rename
mailbox_format.cpanel.cpanel.tar.gz
130 By
2026-05-07 12:06:14
R
W
Run
Delete
Rename
mailbox_format.cpanel.tar
2 KB
2026-05-07 12:06:14
R
W
Run
Delete
Rename
maildirsize.tar
6 KB
2026-05-07 12:06:10
R
W
Run
Delete
Rename
maildirsize.tar.gz
1.19 KB
2026-05-07 12:06:10
R
W
Run
Delete
Rename
new.tar
22.98 MB
2026-05-07 12:05:44
R
W
Run
Delete
Rename
new.tar.gz
1.37 MB
2026-05-07 12:05:45
R
W
Run
Delete
Rename
nvdata.zip
5 KB
2026-05-07 12:12:31
R
W
Run
Delete
Rename
p.php.php.tar.gz
307 By
2026-05-07 12:05:08
R
W
Run
Delete
Rename
p.php.tar
2 KB
2026-05-07 12:05:08
R
W
Run
Delete
Rename
phenx.tar
647.5 KB
2026-05-07 12:12:33
R
W
Run
Delete
Rename
phenx.tar.gz
117.8 KB
2026-05-07 12:12:33
R
W
Run
Delete
Rename
phenx.zip
590.77 KB
2026-05-07 12:12:18
R
W
Run
Delete
Rename
php-cli.tar
2 KB
2026-05-07 11:06:07
R
W
Run
Delete
Rename
php-cli.tar.gz
111 By
2026-05-07 11:06:07
R
W
Run
Delete
Rename
php-cli.zip
169 By
2026-05-07 11:05:47
R
W
Run
Delete
Rename
php.ini.swp.ini.swp.tar.gz
3.56 KB
2026-05-07 12:11:16
R
W
Run
Delete
Rename
php.ini.swp.tar
17.5 KB
2026-05-07 12:11:16
R
W
Run
Delete
Rename
php.tar
12 KB
2026-05-07 11:14:27
R
W
Run
Delete
Rename
php.tar.gz
983 By
2026-05-07 11:06:57
R
W
Run
Delete
Rename
php.zip
4.72 KB
2026-05-07 11:15:10
R
W
Run
Delete
Rename
phpoffice.tar
1.82 MB
2026-05-07 12:12:41
R
W
Run
Delete
Rename
phpoffice.tar.gz
263.76 KB
2026-05-07 12:12:41
R
W
Run
Delete
Rename
phpoffice.zip
1.62 MB
2026-05-07 12:12:38
R
W
Run
Delete
Rename
prepend.txt.tar
121.1 MB
2026-05-07 12:06:14
R
W
Run
Delete
Rename
prepend.txt.txt.tar.gz
12.71 MB
2026-05-07 12:06:21
R
W
Run
Delete
Rename
psr.zip
59.33 KB
2026-05-07 12:11:48
R
W
Run
Delete
Rename
public_ftp.zip
975.85 MB
2026-05-07 11:06:47
R
W
Run
Delete
Rename
public_html.tar
977.12 MB
2026-05-07 12:06:28
R
W
Run
Delete
Rename
public_html.tar.gz
32 KB
2026-05-07 12:06:52
R
W
Run
Delete
Rename
ralouphie.tar
8.5 KB
2026-05-07 12:12:37
R
W
Run
Delete
Rename
ralouphie.tar.gz
1.88 KB
2026-05-07 12:12:37
R
W
Run
Delete
Rename
ralouphie.zip
4.84 KB
2026-05-07 12:12:24
R
W
Run
Delete
Rename
ratchet.zip
140.66 KB
2026-05-07 12:12:21
R
W
Run
Delete
Rename
react.zip
731.88 KB
2026-05-07 12:12:22
R
W
Run
Delete
Rename
robots.txt
2.34 KB
2026-05-07 07:32:42
R
W
Run
Delete
Rename
robots.txt.tar
4 KB
2026-05-07 10:03:14
R
W
Run
Delete
Rename
robots.txt.txt.tar.gz
322 By
2026-05-07 10:03:14
R
W
Run
Delete
Rename
roundcube.tar
9.5 KB
2026-05-07 12:05:24
R
W
Run
Delete
Rename
roundcube.tar.gz
1.55 KB
2026-05-07 12:05:24
R
W
Run
Delete
Rename
saveData.php.php.tar.gz
445 By
2026-05-07 12:06:09
R
W
Run
Delete
Rename
saveData.php.tar
2.5 KB
2026-05-07 12:06:09
R
W
Run
Delete
Rename
save_admin_details.php.php.tar.gz
779 By
2026-05-07 12:06:15
R
W
Run
Delete
Rename
save_admin_details.php.tar
4 KB
2026-05-07 12:06:15
R
W
Run
Delete
Rename
scrum_toptrendingappstudio_com.php.error.log.php.error.log.tar.gz
125.37 KB
2026-05-07 12:08:05
R
W
Run
Delete
Rename
scrum_toptrendingappstudio_com.php.error.log.tar
1.9 MB
2026-05-07 12:08:04
R
W
Run
Delete
Rename
server.c302.cloudmark.com.conf.tar
2.5 KB
2026-05-07 12:13:48
R
W
Run
Delete
Rename
share.zip
183 By
2026-05-07 12:05:55
R
W
Run
Delete
Rename
ssl.zip
717.75 KB
2026-05-07 11:06:08
R
W
Run
Delete
Rename
storage.sqlite.sqlite.tar.gz
521 By
2026-05-07 12:06:07
R
W
Run
Delete
Rename
storage.sqlite.tar
17.5 KB
2026-05-07 12:06:07
R
W
Run
Delete
Rename
swiftmailer.zip
717.46 KB
2026-05-07 12:12:38
R
W
Run
Delete
Rename
symfony.zip
2.79 MB
2026-05-07 12:14:18
R
W
Run
Delete
Rename
toptrendingappst.rcube.db.1771972649.rcube.db.1771972649.tar.gz
12.34 KB
2026-05-07 12:08:05
R
W
Run
Delete
Rename
toptrendingappst.rcube.db.1771972649.tar
457.5 KB
2026-05-07 12:08:05
R
W
Run
Delete
Rename
toptrendingappst.zip
3.87 KB
2026-05-07 12:13:19
R
W
Run
Delete
Rename
userAudio_30.3gp.3gp.tar.gz
22.83 KB
2026-05-07 12:06:14
R
W
Run
Delete
Rename
userAudio_30.3gp.tar
31 KB
2026-05-07 12:06:14
R
W
Run
Delete
Rename
userAudio_99.3gp.3gp.tar.gz
612 By
2026-05-07 12:06:15
R
W
Run
Delete
Rename
userAudio_99.3gp.tar
12.5 KB
2026-05-07 12:06:15
R
W
Run
Delete
Rename
vendor.tar
2.53 MB
2026-05-07 12:12:37
R
W
Run
Delete
Rename
vendor.tar.gz
475.53 KB
2026-05-07 12:12:38
R
W
Run
Delete
Rename
vendor.zip
2.13 MB
2026-05-07 12:12:37
R
W
Run
Delete
Rename
webalizer.tar
450.43 MB
2026-05-07 12:12:19
R
W
Run
Delete
Rename
www.tar
117.38 MB
2026-05-07 11:06:08
R
W
Run
Delete
Rename
www.tar.gz
39.75 MB
2026-05-07 11:06:12
R
W
Run
Delete
Rename
www.zip
3.54 MB
2026-05-07 11:05:46
R
W
Run
Delete
Rename
error_log
up
📄
ratchet.zip
Save
PK �q�\+�� � rfc6455/.github/workflows/ci.ymlnu �Iw�� name: CI on: push: pull_request: jobs: PHPUnit: name: PHPUnit (PHP ${{ matrix.php }})(${{ matrix.env }}) runs-on: ubuntu-20.04 strategy: matrix: env: - client - server php: - 7.4 - 7.3 - 7.2 - 7.1 - 7.0 - 5.6 steps: - uses: actions/checkout@v2 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} coverage: xdebug - run: docker pull crossbario/autobahn-testsuite - run: composer install - run: sh tests/ab/run_ab_tests.sh env: ABTEST: ${{ matrix.env }} SKIP_DEFLATE: _skip_deflate if: ${{ matrix.php <= 5.6 }} - run: sh tests/ab/run_ab_tests.sh env: ABTEST: ${{ matrix.env }} if: ${{ matrix.php >= 7.0 }} - run: vendor/bin/phpunit --verbose PK �q�\1�k� � 0 rfc6455/tests/ab/fuzzingserver_skip_deflate.jsonnu �Iw�� { "url": "ws://127.0.0.1:9002" , "options": { "failByDrop": false } , "outdir": "./reports/clients" , "cases": ["*"] , "exclude-cases": ["12.*", "13.*"] , "exclude-agent-cases": {} } PK �q�\4�B B rfc6455/tests/ab/run_ab_tests.shnu �Iw�� set -x cd tests/ab if [ "$ABTEST" = "client" ]; then docker run --rm \ -d \ -v ${PWD}:/config \ -v ${PWD}/reports:/reports \ -p 9002:9002 \ --name fuzzingserver \ crossbario/autobahn-testsuite wstest -m fuzzingserver -s /config/fuzzingserver$SKIP_DEFLATE.json sleep 5 if [ "$TRAVIS" != "true" ]; then echo "Running tests vs Autobahn test client" ###docker run -it --rm --name abpytest crossbario/autobahn-testsuite wstest --mode testeeclient -w ws://host.docker.internal:9002 fi php -d memory_limit=256M clientRunner.php docker ps -a docker logs fuzzingserver docker stop fuzzingserver sleep 2 fi if [ "$ABTEST" = "server" ]; then php -d memory_limit=256M startServer.php & sleep 3 if [ "$OSTYPE" = "linux-gnu" ]; then IPADDR=`hostname -I | cut -f 1 -d ' '` else IPADDR=`ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' | head -1 | tr -d 'adr:'` fi docker run --rm \ -i \ -v ${PWD}:/config \ -v ${PWD}/reports:/reports \ --name fuzzingclient \ crossbario/autobahn-testsuite /bin/sh -c "sh /config/docker_bootstrap.sh $IPADDR; wstest -m fuzzingclient -s /config/fuzzingclient$SKIP_DEFLATE.json" sleep 1 # send the shutdown command to the PHP echo server wget -O - -q http://127.0.0.1:9001/shutdown fi PK �q�\�!N6 6 # rfc6455/tests/ab/fuzzingclient.jsonnu �Iw�� { "options": { "failByDrop": false } , "outdir": "/reports/servers" , "servers": [{ "agent": "RatchetRFC/0.3" , "url": "ws://host.ratchet.internal:9001" , "options": {"version": 18} }] , "cases": [ "*" ] , "exclude-cases": [] , "exclude-agent-cases": {} } PK �q�\�?&�� � # rfc6455/tests/ab/fuzzingserver.jsonnu �Iw�� { "url": "ws://127.0.0.1:9002" , "options": { "failByDrop": false } , "outdir": "./reports/clients" , "cases": [ "*" ] , "exclude-cases": [] , "exclude-agent-cases": {} } PK �q�\���m> > 0 rfc6455/tests/ab/fuzzingclient_skip_deflate.jsonnu �Iw�� { "options": { "failByDrop": false } , "outdir": "/reports/servers" , "servers": [{ "agent": "RatchetRFC/0.3" , "url": "ws://host.ratchet.internal:9001" , "options": {"version": 18} }] , "cases": ["*"] , "exclude-cases": ["12.*", "13.*"] , "exclude-agent-cases": {} } PK �q�\�E- rfc6455/tests/ab/startServer.phpnu �Iw�� <?php use GuzzleHttp\Psr7\Message; use GuzzleHttp\Psr7\Response; use Ratchet\RFC6455\Handshake\PermessageDeflateOptions; use Ratchet\RFC6455\Messaging\MessageBuffer; use Ratchet\RFC6455\Messaging\MessageInterface; use Ratchet\RFC6455\Messaging\FrameInterface; use Ratchet\RFC6455\Messaging\Frame; require_once __DIR__ . "/../bootstrap.php"; $loop = \React\EventLoop\Factory::create(); $socket = new \React\Socket\Server('0.0.0.0:9001', $loop); $closeFrameChecker = new \Ratchet\RFC6455\Messaging\CloseFrameChecker; $negotiator = new \Ratchet\RFC6455\Handshake\ServerNegotiator(new \Ratchet\RFC6455\Handshake\RequestVerifier, PermessageDeflateOptions::permessageDeflateSupported()); $uException = new \UnderflowException; $socket->on('connection', function (React\Socket\ConnectionInterface $connection) use ($negotiator, $closeFrameChecker, $uException, $socket) { $headerComplete = false; $buffer = ''; $parser = null; $connection->on('data', function ($data) use ($connection, &$parser, &$headerComplete, &$buffer, $negotiator, $closeFrameChecker, $uException, $socket) { if ($headerComplete) { $parser->onData($data); return; } $buffer .= $data; $parts = explode("\r\n\r\n", $buffer); if (count($parts) < 2) { return; } $headerComplete = true; $psrRequest = Message::parseRequest($parts[0] . "\r\n\r\n"); $negotiatorResponse = $negotiator->handshake($psrRequest); $negotiatorResponse = $negotiatorResponse->withAddedHeader("Content-Length", "0"); if ($negotiatorResponse->getStatusCode() !== 101 && $psrRequest->getUri()->getPath() === '/shutdown') { $connection->end(Message::toString(new Response(200, [], 'Shutting down echo server.' . PHP_EOL))); $socket->close(); return; }; $connection->write(Message::toString($negotiatorResponse)); if ($negotiatorResponse->getStatusCode() !== 101) { $connection->end(); return; } // there is no need to look through the client requests // we support any valid permessage deflate $deflateOptions = PermessageDeflateOptions::fromRequestOrResponse($psrRequest)[0]; $parser = new \Ratchet\RFC6455\Messaging\MessageBuffer($closeFrameChecker, function (MessageInterface $message, MessageBuffer $messageBuffer) { $messageBuffer->sendMessage($message->getPayload(), true, $message->isBinary()); }, function (FrameInterface $frame) use ($connection, &$parser) { switch ($frame->getOpCode()) { case Frame::OP_CLOSE: $connection->end($frame->getContents()); break; case Frame::OP_PING: $connection->write($parser->newFrame($frame->getPayload(), true, Frame::OP_PONG)->getContents()); break; } }, true, function () use ($uException) { return $uException; }, null, null, [$connection, 'write'], $deflateOptions); array_shift($parts); $parser->onData(implode("\r\n\r\n", $parts)); }); }); $loop->run(); PK �q�\L���� � $ rfc6455/tests/ab/docker_bootstrap.shnu �Iw�� #!/bin/bash set -x echo "Running $0" echo Adding "$1 host.ratchet.internal" to /etc/hosts file echo $1 host.ratchet.internal >> /etc/hosts echo /etc/hosts contains: cat /etc/hosts echo PK �q�\� w?�$ �$ ! rfc6455/tests/ab/clientRunner.phpnu �Iw�� <?php use GuzzleHttp\Psr7\Message; use GuzzleHttp\Psr7\Uri; use Ratchet\RFC6455\Handshake\InvalidPermessageDeflateOptionsException; use Ratchet\RFC6455\Handshake\PermessageDeflateOptions; use Ratchet\RFC6455\Messaging\MessageBuffer; use Ratchet\RFC6455\Handshake\ClientNegotiator; use Ratchet\RFC6455\Messaging\CloseFrameChecker; use Ratchet\RFC6455\Messaging\MessageInterface; use React\Promise\Deferred; use Ratchet\RFC6455\Messaging\Frame; use React\Socket\ConnectionInterface; use React\Socket\Connector; require __DIR__ . '/../bootstrap.php'; define('AGENT', 'RatchetRFC/0.3'); $testServer = $argc > 1 ? $argv[1] : "127.0.0.1"; $loop = React\EventLoop\Factory::create(); $connector = new Connector($loop); function echoStreamerFactory($conn, $permessageDeflateOptions = null) { $permessageDeflateOptions = $permessageDeflateOptions ?: PermessageDeflateOptions::createDisabled(); return new \Ratchet\RFC6455\Messaging\MessageBuffer( new \Ratchet\RFC6455\Messaging\CloseFrameChecker, function (\Ratchet\RFC6455\Messaging\MessageInterface $msg, MessageBuffer $messageBuffer) use ($conn) { $messageBuffer->sendMessage($msg->getPayload(), true, $msg->isBinary()); }, function (\Ratchet\RFC6455\Messaging\FrameInterface $frame, MessageBuffer $messageBuffer) use ($conn) { switch ($frame->getOpcode()) { case Frame::OP_PING: return $conn->write((new Frame($frame->getPayload(), true, Frame::OP_PONG))->maskPayload()->getContents()); break; case Frame::OP_CLOSE: return $conn->end((new Frame($frame->getPayload(), true, Frame::OP_CLOSE))->maskPayload()->getContents()); break; } }, false, null, null, null, [$conn, 'write'], $permessageDeflateOptions ); } function getTestCases() { global $testServer; global $connector; $deferred = new Deferred(); $connector->connect($testServer . ':9002')->then(function (ConnectionInterface $connection) use ($deferred, $testServer) { $cn = new ClientNegotiator(); $cnRequest = $cn->generateRequest(new Uri('ws://' . $testServer . ':9002/getCaseCount')); $rawResponse = ""; $response = null; /** @var MessageBuffer $ms */ $ms = null; $connection->on('data', function ($data) use ($connection, &$rawResponse, &$response, &$ms, $cn, $deferred, &$context, $cnRequest) { if ($response === null) { $rawResponse .= $data; $pos = strpos($rawResponse, "\r\n\r\n"); if ($pos) { $data = substr($rawResponse, $pos + 4); $rawResponse = substr($rawResponse, 0, $pos + 4); $response = Message::parseResponse($rawResponse); if (!$cn->validateResponse($cnRequest, $response)) { $connection->end(); $deferred->reject(); } else { $ms = new MessageBuffer( new CloseFrameChecker, function (MessageInterface $msg) use ($deferred, $connection) { $deferred->resolve($msg->getPayload()); $connection->close(); }, null, false, null, null, null, function () {} ); } } } // feed the message streamer if ($ms) { $ms->onData($data); } }); $connection->write(Message::toString($cnRequest)); }); return $deferred->promise(); } $cn = new \Ratchet\RFC6455\Handshake\ClientNegotiator( PermessageDeflateOptions::permessageDeflateSupported() ? PermessageDeflateOptions::createEnabled() : null); function runTest($case) { global $connector; global $testServer; global $cn; $casePath = "/runCase?case={$case}&agent=" . AGENT; $deferred = new Deferred(); $connector->connect($testServer . ':9002')->then(function (ConnectionInterface $connection) use ($deferred, $casePath, $case, $testServer) { $cn = new ClientNegotiator( PermessageDeflateOptions::permessageDeflateSupported() ? PermessageDeflateOptions::createEnabled() : null); $cnRequest = $cn->generateRequest(new Uri('ws://' . $testServer . ':9002' . $casePath)); $rawResponse = ""; $response = null; $ms = null; $connection->on('data', function ($data) use ($connection, &$rawResponse, &$response, &$ms, $cn, $deferred, &$context, $cnRequest) { if ($response === null) { $rawResponse .= $data; $pos = strpos($rawResponse, "\r\n\r\n"); if ($pos) { $data = substr($rawResponse, $pos + 4); $rawResponse = substr($rawResponse, 0, $pos + 4); $response = Message::parseResponse($rawResponse); if (!$cn->validateResponse($cnRequest, $response)) { echo "Invalid response.\n"; $connection->end(); $deferred->reject(); } else { try { $permessageDeflateOptions = PermessageDeflateOptions::fromRequestOrResponse($response)[0]; $ms = echoStreamerFactory( $connection, $permessageDeflateOptions ); } catch (InvalidPermessageDeflateOptionsException $e) { $connection->end(); } } } } // feed the message streamer if ($ms) { $ms->onData($data); } }); $connection->on('close', function () use ($deferred) { $deferred->resolve(); }); $connection->write(Message::toString($cnRequest)); }); return $deferred->promise(); } function createReport() { global $connector; global $testServer; $deferred = new Deferred(); $connector->connect($testServer . ':9002')->then(function (ConnectionInterface $connection) use ($deferred, $testServer) { // $reportPath = "/updateReports?agent=" . AGENT . "&shutdownOnComplete=true"; // we will stop it using docker now instead of just shutting down $reportPath = "/updateReports?agent=" . AGENT; $cn = new ClientNegotiator(); $cnRequest = $cn->generateRequest(new Uri('ws://' . $testServer . ':9002' . $reportPath)); $rawResponse = ""; $response = null; /** @var MessageBuffer $ms */ $ms = null; $connection->on('data', function ($data) use ($connection, &$rawResponse, &$response, &$ms, $cn, $deferred, &$context, $cnRequest) { if ($response === null) { $rawResponse .= $data; $pos = strpos($rawResponse, "\r\n\r\n"); if ($pos) { $data = substr($rawResponse, $pos + 4); $rawResponse = substr($rawResponse, 0, $pos + 4); $response = Message::parseResponse($rawResponse); if (!$cn->validateResponse($cnRequest, $response)) { $connection->end(); $deferred->reject(); } else { $ms = new MessageBuffer( new CloseFrameChecker, function (MessageInterface $msg) use ($deferred, $connection) { $deferred->resolve($msg->getPayload()); $connection->close(); }, null, false, null, null, null, function () {} ); } } } // feed the message streamer if ($ms) { $ms->onData($data); } }); $connection->write(Message::toString($cnRequest)); }); return $deferred->promise(); } $testPromises = []; getTestCases()->then(function ($count) use ($loop) { $allDeferred = new Deferred(); $runNextCase = function () use (&$i, &$runNextCase, $count, $allDeferred) { $i++; if ($i > $count) { $allDeferred->resolve(); return; } echo "Running test $i/$count..."; $startTime = microtime(true); runTest($i) ->then(function () use ($startTime) { echo " completed " . round((microtime(true) - $startTime) * 1000) . " ms\n"; }) ->then($runNextCase); }; $i = 0; $runNextCase(); $allDeferred->promise()->then(function () { createReport(); }); }); $loop->run(); PK �q�\^#f"J "J * rfc6455/tests/unit/Messaging/FrameTest.phpnu �Iw�� <?php namespace Ratchet\RFC6455\Test\Unit\Messaging; use Ratchet\RFC6455\Messaging\Frame; use PHPUnit\Framework\TestCase; /** * @covers Ratchet\RFC6455\Messaging\Frame * @todo getMaskingKey, getPayloadStartingByte don't have tests yet * @todo Could use some clean up in general, I had to rush to fix a bug for a deadline, sorry. */ class FrameTest extends TestCase { protected $_firstByteFinText = '10000001'; protected $_secondByteMaskedSPL = '11111101'; /** @var Frame */ protected $_frame; protected $_packer; public function setUp() { $this->_frame = new Frame; } /** * Encode the fake binary string to send over the wire * @param string of 1's and 0's * @return string */ public static function encode($in) { if (strlen($in) > 8) { $out = ''; while (strlen($in) >= 8) { $out .= static::encode(substr($in, 0, 8)); $in = substr($in, 8); } return $out; } return chr(bindec($in)); } /** * This is a data provider * param string The UTF8 message * param string The WebSocket framed message, then base64_encoded */ public static function UnframeMessageProvider() { return array( array('Hello World!', 'gYydAIfa1WXrtvIg0LXvbOP7'), array('!@#$%^&*()-=_+[]{}\|/.,<>`~', 'gZv+h96r38f9j9vZ+IHWrvOWoayF9oX6gtfRqfKXwOeg'), array('ಠ_ಠ', 'gYfnSpu5B/g75gf4Ow=='), array( "The quick brown fox jumps over the lazy dog. All work and no play makes Chris a dull boy. I'm trying to get past 128 characters for a unit test here...", 'gf4Amahb14P8M7Kj2S6+4MN7tfHHLLmjzjSvo8IuuvPbe7j1zSn398A+9+/JIa6jzDSwrYh7lu/Ee6Ds2jD34sY/9+3He6fvySL37skwsvCIGL/xwSj34og/ou/Ee7Xs0XX3o+F8uqPcKa7qxjz398d7sObce6fi2y/3sppj9+DAOqXiyy+y8dt7sezae7aj3TW+94gvsvDce7/m2j75rYY=' ) ); } public static function underflowProvider() { return array( array('isFinal', ''), array('getRsv1', ''), array('getRsv2', ''), array('getRsv3', ''), array('getOpcode', ''), array('isMasked', '10000001'), array('getPayloadLength', '10000001'), array('getPayloadLength', '1000000111111110'), array('getMaskingKey', '1000000110000111'), array('getPayload', '100000011000000100011100101010101001100111110100') ); } /** * @dataProvider underflowProvider * * @covers Ratchet\RFC6455\Messaging\Frame::isFinal * @covers Ratchet\RFC6455\Messaging\Frame::getRsv1 * @covers Ratchet\RFC6455\Messaging\Frame::getRsv2 * @covers Ratchet\RFC6455\Messaging\Frame::getRsv3 * @covers Ratchet\RFC6455\Messaging\Frame::getOpcode * @covers Ratchet\RFC6455\Messaging\Frame::isMasked * @covers Ratchet\RFC6455\Messaging\Frame::getPayloadLength * @covers Ratchet\RFC6455\Messaging\Frame::getMaskingKey * @covers Ratchet\RFC6455\Messaging\Frame::getPayload */ public function testUnderflowExceptionFromAllTheMethodsMimickingBuffering($method, $bin) { $this->setExpectedException('\UnderflowException'); if (!empty($bin)) { $this->_frame->addBuffer(static::encode($bin)); } call_user_func(array($this->_frame, $method)); } /** * A data provider for testing the first byte of a WebSocket frame * param bool Given, is the byte indicate this is the final frame * param int Given, what is the expected opcode * param string of 0|1 Each character represents a bit in the byte */ public static function firstByteProvider() { return array( array(false, false, false, true, 8, '00011000'), array(true, false, true, false, 10, '10101010'), array(false, false, false, false, 15, '00001111'), array(true, false, false, false, 1, '10000001'), array(true, true, true, true, 15, '11111111'), array(true, true, false, false, 7, '11000111') ); } /** * @dataProvider firstByteProvider * covers Ratchet\RFC6455\Messaging\Frame::isFinal */ public function testFinCodeFromBits($fin, $rsv1, $rsv2, $rsv3, $opcode, $bin) { $this->_frame->addBuffer(static::encode($bin)); $this->assertEquals($fin, $this->_frame->isFinal()); } /** * @dataProvider firstByteProvider * covers Ratchet\RFC6455\Messaging\Frame::getRsv1 * covers Ratchet\RFC6455\Messaging\Frame::getRsv2 * covers Ratchet\RFC6455\Messaging\Frame::getRsv3 */ public function testGetRsvFromBits($fin, $rsv1, $rsv2, $rsv3, $opcode, $bin) { $this->_frame->addBuffer(static::encode($bin)); $this->assertEquals($rsv1, $this->_frame->getRsv1()); $this->assertEquals($rsv2, $this->_frame->getRsv2()); $this->assertEquals($rsv3, $this->_frame->getRsv3()); } /** * @dataProvider firstByteProvider * covers Ratchet\RFC6455\Messaging\Frame::getOpcode */ public function testOpcodeFromBits($fin, $rsv1, $rsv2, $rsv3, $opcode, $bin) { $this->_frame->addBuffer(static::encode($bin)); $this->assertEquals($opcode, $this->_frame->getOpcode()); } /** * @dataProvider UnframeMessageProvider * covers Ratchet\RFC6455\Messaging\Frame::isFinal */ public function testFinCodeFromFullMessage($msg, $encoded) { $this->_frame->addBuffer(base64_decode($encoded)); $this->assertTrue($this->_frame->isFinal()); } /** * @dataProvider UnframeMessageProvider * covers Ratchet\RFC6455\Messaging\Frame::getOpcode */ public function testOpcodeFromFullMessage($msg, $encoded) { $this->_frame->addBuffer(base64_decode($encoded)); $this->assertEquals(1, $this->_frame->getOpcode()); } public static function payloadLengthDescriptionProvider() { return array( array(7, '01110101'), array(7, '01111101'), array(23, '01111110'), array(71, '01111111'), array(7, '00000000'), // Should this throw an exception? Can a payload be empty? array(7, '00000001') ); } /** * @dataProvider payloadLengthDescriptionProvider * covers Ratchet\RFC6455\Messaging\Frame::addBuffer * covers Ratchet\RFC6455\Messaging\Frame::getFirstPayloadVal */ public function testFirstPayloadDesignationValue($bits, $bin) { $this->_frame->addBuffer(static::encode($this->_firstByteFinText)); $this->_frame->addBuffer(static::encode($bin)); $ref = new \ReflectionClass($this->_frame); $cb = $ref->getMethod('getFirstPayloadVal'); $cb->setAccessible(true); $this->assertEquals(bindec($bin), $cb->invoke($this->_frame)); } /** * covers Ratchet\RFC6455\Messaging\Frame::getFirstPayloadVal */ public function testFirstPayloadValUnderflow() { $ref = new \ReflectionClass($this->_frame); $cb = $ref->getMethod('getFirstPayloadVal'); $cb->setAccessible(true); $this->setExpectedException('UnderflowException'); $cb->invoke($this->_frame); } /** * @dataProvider payloadLengthDescriptionProvider * covers Ratchet\RFC6455\Messaging\Frame::getNumPayloadBits */ public function testDetermineHowManyBitsAreUsedToDescribePayload($expected_bits, $bin) { $this->_frame->addBuffer(static::encode($this->_firstByteFinText)); $this->_frame->addBuffer(static::encode($bin)); $ref = new \ReflectionClass($this->_frame); $cb = $ref->getMethod('getNumPayloadBits'); $cb->setAccessible(true); $this->assertEquals($expected_bits, $cb->invoke($this->_frame)); } /** * covers Ratchet\RFC6455\Messaging\Frame::getNumPayloadBits */ public function testgetNumPayloadBitsUnderflow() { $ref = new \ReflectionClass($this->_frame); $cb = $ref->getMethod('getNumPayloadBits'); $cb->setAccessible(true); $this->setExpectedException('UnderflowException'); $cb->invoke($this->_frame); } public function secondByteProvider() { return array( array(true, 1, '10000001'), array(false, 1, '00000001'), array(true, 125, $this->_secondByteMaskedSPL) ); } /** * @dataProvider secondByteProvider * covers Ratchet\RFC6455\Messaging\Frame::isMasked */ public function testIsMaskedReturnsExpectedValue($masked, $payload_length, $bin) { $this->_frame->addBuffer(static::encode($this->_firstByteFinText)); $this->_frame->addBuffer(static::encode($bin)); $this->assertEquals($masked, $this->_frame->isMasked()); } /** * @dataProvider UnframeMessageProvider * covers Ratchet\RFC6455\Messaging\Frame::isMasked */ public function testIsMaskedFromFullMessage($msg, $encoded) { $this->_frame->addBuffer(base64_decode($encoded)); $this->assertTrue($this->_frame->isMasked()); } /** * @dataProvider secondByteProvider * covers Ratchet\RFC6455\Messaging\Frame::getPayloadLength */ public function testGetPayloadLengthWhenOnlyFirstFrameIsUsed($masked, $payload_length, $bin) { $this->_frame->addBuffer(static::encode($this->_firstByteFinText)); $this->_frame->addBuffer(static::encode($bin)); $this->assertEquals($payload_length, $this->_frame->getPayloadLength()); } /** * @dataProvider UnframeMessageProvider * covers Ratchet\RFC6455\Messaging\Frame::getPayloadLength * @todo Not yet testing when second additional payload length descriptor */ public function testGetPayloadLengthFromFullMessage($msg, $encoded) { $this->_frame->addBuffer(base64_decode($encoded)); $this->assertEquals(strlen($msg), $this->_frame->getPayloadLength()); } public function maskingKeyProvider() { $frame = new Frame; return array( array($frame->generateMaskingKey()), array($frame->generateMaskingKey()), array($frame->generateMaskingKey()) ); } /** * @dataProvider maskingKeyProvider * covers Ratchet\RFC6455\Messaging\Frame::getMaskingKey * @todo I I wrote the dataProvider incorrectly, skipping for now */ public function testGetMaskingKey($mask) { $this->_frame->addBuffer(static::encode($this->_firstByteFinText)); $this->_frame->addBuffer(static::encode($this->_secondByteMaskedSPL)); $this->_frame->addBuffer($mask); $this->assertEquals($mask, $this->_frame->getMaskingKey()); } /** * covers Ratchet\RFC6455\Messaging\Frame::getMaskingKey */ public function testGetMaskingKeyOnUnmaskedPayload() { $frame = new Frame('Hello World!'); $this->assertEquals('', $frame->getMaskingKey()); } /** * @dataProvider UnframeMessageProvider * covers Ratchet\RFC6455\Messaging\Frame::getPayload * @todo Move this test to bottom as it requires all methods of the class */ public function testUnframeFullMessage($unframed, $base_framed) { $this->_frame->addBuffer(base64_decode($base_framed)); $this->assertEquals($unframed, $this->_frame->getPayload()); } public static function messageFragmentProvider() { return array( array(false, '', '', '', '', '') ); } /** * @dataProvider UnframeMessageProvider * covers Ratchet\RFC6455\Messaging\Frame::getPayload */ public function testCheckPiecingTogetherMessage($msg, $encoded) { $framed = base64_decode($encoded); for ($i = 0, $len = strlen($framed);$i < $len; $i++) { $this->_frame->addBuffer(substr($framed, $i, 1)); } $this->assertEquals($msg, $this->_frame->getPayload()); } /** * covers Ratchet\RFC6455\Messaging\Frame::__construct * covers Ratchet\RFC6455\Messaging\Frame::getPayloadLength * covers Ratchet\RFC6455\Messaging\Frame::getPayload */ public function testLongCreate() { $len = 65525; $pl = $this->generateRandomString($len); $frame = new Frame($pl, true, Frame::OP_PING); $this->assertTrue($frame->isFinal()); $this->assertEquals(Frame::OP_PING, $frame->getOpcode()); $this->assertFalse($frame->isMasked()); $this->assertEquals($len, $frame->getPayloadLength()); $this->assertEquals($pl, $frame->getPayload()); } /** * covers Ratchet\RFC6455\Messaging\Frame::__construct * covers Ratchet\RFC6455\Messaging\Frame::getPayloadLength */ public function testReallyLongCreate() { $len = 65575; $frame = new Frame($this->generateRandomString($len)); $this->assertEquals($len, $frame->getPayloadLength()); } /** * covers Ratchet\RFC6455\Messaging\Frame::__construct * covers Ratchet\RFC6455\Messaging\Frame::extractOverflow */ public function testExtractOverflow() { $string1 = $this->generateRandomString(); $frame1 = new Frame($string1); $string2 = $this->generateRandomString(); $frame2 = new Frame($string2); $cat = new Frame; $cat->addBuffer($frame1->getContents() . $frame2->getContents()); $this->assertEquals($frame1->getContents(), $cat->getContents()); $this->assertEquals($string1, $cat->getPayload()); $uncat = new Frame; $uncat->addBuffer($cat->extractOverflow()); $this->assertEquals($string1, $cat->getPayload()); $this->assertEquals($string2, $uncat->getPayload()); } /** * covers Ratchet\RFC6455\Messaging\Frame::extractOverflow */ public function testEmptyExtractOverflow() { $string = $this->generateRandomString(); $frame = new Frame($string); $this->assertEquals($string, $frame->getPayload()); $this->assertEquals('', $frame->extractOverflow()); $this->assertEquals($string, $frame->getPayload()); } /** * covers Ratchet\RFC6455\Messaging\Frame::getContents */ public function testGetContents() { $msg = 'The quick brown fox jumps over the lazy dog.'; $frame1 = new Frame($msg); $frame2 = new Frame($msg); $frame2->maskPayload(); $this->assertNotEquals($frame1->getContents(), $frame2->getContents()); $this->assertEquals(strlen($frame1->getContents()) + 4, strlen($frame2->getContents())); } /** * covers Ratchet\RFC6455\Messaging\Frame::maskPayload */ public function testMasking() { $msg = 'The quick brown fox jumps over the lazy dog.'; $frame = new Frame($msg); $frame->maskPayload(); $this->assertTrue($frame->isMasked()); $this->assertEquals($msg, $frame->getPayload()); } /** * covers Ratchet\RFC6455\Messaging\Frame::unMaskPayload */ public function testUnMaskPayload() { $string = $this->generateRandomString(); $frame = new Frame($string); $frame->maskPayload()->unMaskPayload(); $this->assertFalse($frame->isMasked()); $this->assertEquals($string, $frame->getPayload()); } /** * covers Ratchet\RFC6455\Messaging\Frame::generateMaskingKey */ public function testGenerateMaskingKey() { $dupe = false; $done = array(); for ($i = 0; $i < 10; $i++) { $new = $this->_frame->generateMaskingKey(); if (in_array($new, $done)) { $dupe = true; } $done[] = $new; } $this->assertEquals(4, strlen($new)); $this->assertFalse($dupe); } /** * covers Ratchet\RFC6455\Messaging\Frame::maskPayload */ public function testGivenMaskIsValid() { $this->setExpectedException('InvalidArgumentException'); $this->_frame->maskPayload('hello world'); } /** * covers Ratchet\RFC6455\Messaging\Frame::maskPayload */ public function testGivenMaskIsValidAscii() { if (!extension_loaded('mbstring')) { $this->markTestSkipped("mbstring required for this test"); return; } $this->setExpectedException('OutOfBoundsException'); $this->_frame->maskPayload('x✖'); } protected function generateRandomString($length = 10, $addSpaces = true, $addNumbers = true) { $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"$%&/()=[]{}'; // ยง $useChars = array(); for($i = 0; $i < $length; $i++) { $useChars[] = $characters[mt_rand(0, strlen($characters) - 1)]; } if($addSpaces === true) { array_push($useChars, ' ', ' ', ' ', ' ', ' ', ' '); } if($addNumbers === true) { array_push($useChars, rand(0, 9), rand(0, 9), rand(0, 9)); } shuffle($useChars); $randomString = trim(implode('', $useChars)); $randomString = substr($randomString, 0, $length); return $randomString; } /** * There was a frame boundary issue when the first 3 bytes of a frame with a payload greater than * 126 was added to the frame buffer and then Frame::getPayloadLength was called. It would cause the frame * to set the payload length to 126 and then not recalculate it once the full length information was available. * * This is fixed by setting the defPayLen back to -1 before the underflow exception is thrown. * * covers Ratchet\RFC6455\Messaging\Frame::getPayloadLength * covers Ratchet\RFC6455\Messaging\Frame::extractOverflow */ public function testFrameDeliveredOneByteAtATime() { $startHeader = "\x01\x7e\x01\x00"; // header for a text frame of 256 - non-final $framePayload = str_repeat("*", 256); $rawOverflow = "xyz"; $rawFrame = $startHeader . $framePayload . $rawOverflow; $frame = new Frame(); $payloadLen = 256; for ($i = 0; $i < strlen($rawFrame); $i++) { $frame->addBuffer($rawFrame[$i]); try { // payloadLen will $payloadLen = $frame->getPayloadLength(); } catch (\UnderflowException $e) { if ($i > 2) { // we should get an underflow on 0,1,2 $this->fail("Underflow exception when the frame length should be available"); } } if ($payloadLen !== 256) { $this->fail("Payload length of " . $payloadLen . " should have been 256."); } } // make sure the overflow is good $this->assertEquals($rawOverflow, $frame->extractOverflow()); } } PK �q�\>wB��1 �1 2 rfc6455/tests/unit/Messaging/MessageBufferTest.phpnu �Iw�� <?php namespace Ratchet\RFC6455\Test\Unit\Messaging; use Ratchet\RFC6455\Messaging\CloseFrameChecker; use Ratchet\RFC6455\Messaging\Frame; use Ratchet\RFC6455\Messaging\Message; use Ratchet\RFC6455\Messaging\MessageBuffer; use React\EventLoop\Factory; use PHPUnit\Framework\TestCase; class MessageBufferTest extends TestCase { /** * This is to test that MessageBuffer can handle a large receive * buffer with many many frames without blowing the stack (pre-v0.4 issue) */ public function testProcessingLotsOfFramesInASingleChunk() { $frame = new Frame('a', true, Frame::OP_TEXT); $frameRaw = $frame->getContents(); $data = str_repeat($frameRaw, 1000); $messageCount = 0; $messageBuffer = new MessageBuffer( new CloseFrameChecker(), function (Message $message) use (&$messageCount) { $messageCount++; $this->assertEquals('a', $message->getPayload()); }, null, false ); $messageBuffer->onData($data); $this->assertEquals(1000, $messageCount); } public function testProcessingMessagesAsynchronouslyWhileBlockingInMessageHandler() { $loop = Factory::create(); $frameA = new Frame('a', true, Frame::OP_TEXT); $frameB = new Frame('b', true, Frame::OP_TEXT); $bReceived = false; $messageBuffer = new MessageBuffer( new CloseFrameChecker(), function (Message $message) use (&$messageCount, &$bReceived, $loop) { $payload = $message->getPayload(); $bReceived = $payload === 'b'; if (!$bReceived) { $loop->run(); } }, null, false ); $loop->addPeriodicTimer(0.1, function () use ($messageBuffer, $frameB, $loop) { $loop->stop(); $messageBuffer->onData($frameB->getContents()); }); $messageBuffer->onData($frameA->getContents()); $this->assertTrue($bReceived); } public function testInvalidFrameLength() { $frame = new Frame(str_repeat('a', 200), true, Frame::OP_TEXT); $frameRaw = $frame->getContents(); $frameRaw[1] = "\x7f"; // 127 in the first spot $frameRaw[2] = "\xff"; // this will unpack to -1 $frameRaw[3] = "\xff"; $frameRaw[4] = "\xff"; $frameRaw[5] = "\xff"; $frameRaw[6] = "\xff"; $frameRaw[7] = "\xff"; $frameRaw[8] = "\xff"; $frameRaw[9] = "\xff"; /** @var Frame $controlFrame */ $controlFrame = null; $messageCount = 0; $messageBuffer = new MessageBuffer( new CloseFrameChecker(), function (Message $message) use (&$messageCount) { $messageCount++; }, function (Frame $frame) use (&$controlFrame) { $this->assertNull($controlFrame); $controlFrame = $frame; }, false, null, 0, 10 ); $messageBuffer->onData($frameRaw); $this->assertEquals(0, $messageCount); $this->assertTrue($controlFrame instanceof Frame); $this->assertEquals(Frame::OP_CLOSE, $controlFrame->getOpcode()); $this->assertEquals([Frame::CLOSE_PROTOCOL], array_merge(unpack('n*', substr($controlFrame->getPayload(), 0, 2)))); } public function testFrameLengthTooBig() { $frame = new Frame(str_repeat('a', 200), true, Frame::OP_TEXT); $frameRaw = $frame->getContents(); $frameRaw[1] = "\x7f"; // 127 in the first spot $frameRaw[2] = "\x7f"; // this will unpack to -1 $frameRaw[3] = "\xff"; $frameRaw[4] = "\xff"; $frameRaw[5] = "\xff"; $frameRaw[6] = "\xff"; $frameRaw[7] = "\xff"; $frameRaw[8] = "\xff"; $frameRaw[9] = "\xff"; /** @var Frame $controlFrame */ $controlFrame = null; $messageCount = 0; $messageBuffer = new MessageBuffer( new CloseFrameChecker(), function (Message $message) use (&$messageCount) { $messageCount++; }, function (Frame $frame) use (&$controlFrame) { $this->assertNull($controlFrame); $controlFrame = $frame; }, false, null, 0, 10 ); $messageBuffer->onData($frameRaw); $this->assertEquals(0, $messageCount); $this->assertTrue($controlFrame instanceof Frame); $this->assertEquals(Frame::OP_CLOSE, $controlFrame->getOpcode()); $this->assertEquals([Frame::CLOSE_TOO_BIG], array_merge(unpack('n*', substr($controlFrame->getPayload(), 0, 2)))); } public function testFrameLengthBiggerThanMaxMessagePayload() { $frame = new Frame(str_repeat('a', 200), true, Frame::OP_TEXT); $frameRaw = $frame->getContents(); /** @var Frame $controlFrame */ $controlFrame = null; $messageCount = 0; $messageBuffer = new MessageBuffer( new CloseFrameChecker(), function (Message $message) use (&$messageCount) { $messageCount++; }, function (Frame $frame) use (&$controlFrame) { $this->assertNull($controlFrame); $controlFrame = $frame; }, false, null, 100, 0 ); $messageBuffer->onData($frameRaw); $this->assertEquals(0, $messageCount); $this->assertTrue($controlFrame instanceof Frame); $this->assertEquals(Frame::OP_CLOSE, $controlFrame->getOpcode()); $this->assertEquals([Frame::CLOSE_TOO_BIG], array_merge(unpack('n*', substr($controlFrame->getPayload(), 0, 2)))); } public function testSecondFrameLengthPushesPastMaxMessagePayload() { $frame = new Frame(str_repeat('a', 200), false, Frame::OP_TEXT); $firstFrameRaw = $frame->getContents(); $frame = new Frame(str_repeat('b', 200), true, Frame::OP_TEXT); $secondFrameRaw = $frame->getContents(); /** @var Frame $controlFrame */ $controlFrame = null; $messageCount = 0; $messageBuffer = new MessageBuffer( new CloseFrameChecker(), function (Message $message) use (&$messageCount) { $messageCount++; }, function (Frame $frame) use (&$controlFrame) { $this->assertNull($controlFrame); $controlFrame = $frame; }, false, null, 300, 0 ); $messageBuffer->onData($firstFrameRaw); // only put part of the second frame in to watch it fail fast $messageBuffer->onData(substr($secondFrameRaw, 0, 150)); $this->assertEquals(0, $messageCount); $this->assertTrue($controlFrame instanceof Frame); $this->assertEquals(Frame::OP_CLOSE, $controlFrame->getOpcode()); $this->assertEquals([Frame::CLOSE_TOO_BIG], array_merge(unpack('n*', substr($controlFrame->getPayload(), 0, 2)))); } /** * Some test cases from memory limit inspired by https://github.com/BrandEmbassy/php-memory * * Here is the license for that project: * MIT License * * Copyright (c) 2018 Brand Embassy * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * @dataProvider phpConfigurationProvider * * @param string $phpConfigurationValue * @param int $expectedLimit */ public function testMemoryLimits($phpConfigurationValue, $expectedLimit) { $method = new \ReflectionMethod('Ratchet\RFC6455\Messaging\MessageBuffer', 'getMemoryLimit'); $method->setAccessible(true); $actualLimit = $method->invoke(null, $phpConfigurationValue); $this->assertSame($expectedLimit, $actualLimit); } public function phpConfigurationProvider() { return [ 'without unit type, just bytes' => ['500', 500], '1 GB with big "G"' => ['1G', 1 * 1024 * 1024 * 1024], '128 MB with big "M"' => ['128M', 128 * 1024 * 1024], '128 MB with small "m"' => ['128m', 128 * 1024 * 1024], '24 kB with small "k"' => ['24k', 24 * 1024], '2 GB with small "g"' => ['2g', 2 * 1024 * 1024 * 1024], 'unlimited memory' => ['-1', 0], 'invalid float value' => ['2.5M', 2 * 1024 * 1024], 'empty value' => ['', 0], 'invalid ini setting' => ['whatever it takes', 0] ]; } /** * @expectedException \InvalidArgumentException */ public function testInvalidMaxFramePayloadSizes() { $messageBuffer = new MessageBuffer( new CloseFrameChecker(), function (Message $message) {}, function (Frame $frame) {}, false, null, 0, 0x8000000000000000 ); } /** * @expectedException \InvalidArgumentException */ public function testInvalidMaxMessagePayloadSizes() { $messageBuffer = new MessageBuffer( new CloseFrameChecker(), function (Message $message) {}, function (Frame $frame) {}, false, null, 0x8000000000000000, 0 ); } /** * @dataProvider phpConfigurationProvider * * @param string $phpConfigurationValue * @param int $expectedLimit * * @runInSeparateProcess * @requires PHP 7.0 */ public function testIniSizes($phpConfigurationValue, $expectedLimit) { $value = @ini_set('memory_limit', $phpConfigurationValue); if ($value === false) { $this->markTestSkipped("Does not support setting the memory_limit lower than current memory_usage"); } $messageBuffer = new MessageBuffer( new CloseFrameChecker(), function (Message $message) {}, function (Frame $frame) {}, false, null ); if ($expectedLimit === -1) { $expectedLimit = 0; } $prop = new \ReflectionProperty($messageBuffer, 'maxMessagePayloadSize'); $prop->setAccessible(true); $this->assertEquals($expectedLimit / 4, $prop->getValue($messageBuffer)); $prop = new \ReflectionProperty($messageBuffer, 'maxFramePayloadSize'); $prop->setAccessible(true); $this->assertEquals($expectedLimit / 4, $prop->getValue($messageBuffer)); } /** * @runInSeparateProcess * @requires PHP 7.0 */ public function testInvalidIniSize() { $value = @ini_set('memory_limit', 'lots of memory'); if ($value === false) { $this->markTestSkipped("Does not support setting the memory_limit lower than current memory_usage"); } $messageBuffer = new MessageBuffer( new CloseFrameChecker(), function (Message $message) {}, function (Frame $frame) {}, false, null ); $prop = new \ReflectionProperty($messageBuffer, 'maxMessagePayloadSize'); $prop->setAccessible(true); $this->assertEquals(0, $prop->getValue($messageBuffer)); $prop = new \ReflectionProperty($messageBuffer, 'maxFramePayloadSize'); $prop->setAccessible(true); $this->assertEquals(0, $prop->getValue($messageBuffer)); } }PK �q�\�B� � , rfc6455/tests/unit/Messaging/MessageTest.phpnu �Iw�� <?php namespace Ratchet\RFC6455\Test\Unit\Messaging; use Ratchet\RFC6455\Messaging\Frame; use Ratchet\RFC6455\Messaging\Message; use PHPUnit\Framework\TestCase; /** * @covers Ratchet\RFC6455\Messaging\Message */ class MessageTest extends TestCase { /** @var Message */ protected $message; public function setUp() { $this->message = new Message; } public function testNoFrames() { $this->assertFalse($this->message->isCoalesced()); } public function testNoFramesOpCode() { $this->setExpectedException('UnderflowException'); $this->message->getOpCode(); } public function testFragmentationPayload() { $a = 'Hello '; $b = 'World!'; $f1 = new Frame($a, false); $f2 = new Frame($b, true, Frame::OP_CONTINUE); $this->message->addFrame($f1)->addFrame($f2); $this->assertEquals(strlen($a . $b), $this->message->getPayloadLength()); $this->assertEquals($a . $b, $this->message->getPayload()); } public function testUnbufferedFragment() { $this->message->addFrame(new Frame('The quick brow', false)); $this->setExpectedException('UnderflowException'); $this->message->getPayload(); } public function testGetOpCode() { $this->message ->addFrame(new Frame('The quick brow', false, Frame::OP_TEXT)) ->addFrame(new Frame('n fox jumps ov', false, Frame::OP_CONTINUE)) ->addFrame(new Frame('er the lazy dog', true, Frame::OP_CONTINUE)) ; $this->assertEquals(Frame::OP_TEXT, $this->message->getOpCode()); } public function testGetUnBufferedPayloadLength() { $this->message ->addFrame(new Frame('The quick brow', false, Frame::OP_TEXT)) ->addFrame(new Frame('n fox jumps ov', false, Frame::OP_CONTINUE)) ; $this->assertEquals(28, $this->message->getPayloadLength()); } }PK �q�\�8F�" " = rfc6455/tests/unit/Handshake/PermessageDeflateOptionsTest.phpnu �Iw�� <?php namespace Ratchet\RFC6455\Test\Unit\Handshake; use Ratchet\RFC6455\Handshake\PermessageDeflateOptions; use PHPUnit\Framework\TestCase; class PermessageDeflateOptionsTest extends TestCase { public static function versionSupportProvider() { return [ ['7.0.17', false], ['7.0.18', true], ['7.0.200', true], ['5.6.0', false], ['7.1.3', false], ['7.1.4', true], ['7.1.200', true], ['10.0.0', true] ]; } /** * @requires function deflate_init * @dataProvider versionSupportProvider */ public function testVersionSupport($version, $supported) { $this->assertEquals($supported, PermessageDeflateOptions::permessageDeflateSupported($version)); } }PK �q�\;4�� � 5 rfc6455/tests/unit/Handshake/ServerNegotiatorTest.phpnu �Iw�� <?php namespace Ratchet\RFC6455\Test\Unit\Handshake; use GuzzleHttp\Psr7\Message; use Ratchet\RFC6455\Handshake\RequestVerifier; use Ratchet\RFC6455\Handshake\ServerNegotiator; use PHPUnit\Framework\TestCase; class ServerNegotiatorTest extends TestCase { public function testNoUpgradeRequested() { $negotiator = new ServerNegotiator(new RequestVerifier()); $requestText = 'GET / HTTP/1.1 Host: 127.0.0.1:6789 Connection: keep-alive Pragma: no-cache Cache-Control: no-cache Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch, br Accept-Language: en-US,en;q=0.8 '; $request = Message::parseRequest($requestText); $response = $negotiator->handshake($request); $this->assertEquals('1.1', $response->getProtocolVersion()); $this->assertEquals(426, $response->getStatusCode()); $this->assertEquals('Upgrade header MUST be provided', $response->getReasonPhrase()); $this->assertEquals('Upgrade', $response->getHeaderLine('Connection')); $this->assertEquals('websocket', $response->getHeaderLine('Upgrade')); $this->assertEquals('13', $response->getHeaderLine('Sec-WebSocket-Version')); } public function testNoConnectionUpgradeRequested() { $negotiator = new ServerNegotiator(new RequestVerifier()); $requestText = 'GET / HTTP/1.1 Host: 127.0.0.1:6789 Connection: keep-alive Pragma: no-cache Cache-Control: no-cache Upgrade: websocket Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch, br Accept-Language: en-US,en;q=0.8 '; $request = Message::parseRequest($requestText); $response = $negotiator->handshake($request); $this->assertEquals('1.1', $response->getProtocolVersion()); $this->assertEquals(400, $response->getStatusCode()); $this->assertEquals('Connection Upgrade MUST be requested', $response->getReasonPhrase()); } public function testInvalidSecWebsocketKey() { $negotiator = new ServerNegotiator(new RequestVerifier()); $requestText = 'GET / HTTP/1.1 Host: 127.0.0.1:6789 Connection: Upgrade Pragma: no-cache Cache-Control: no-cache Upgrade: websocket Sec-WebSocket-Key: 12345 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch, br Accept-Language: en-US,en;q=0.8 '; $request = Message::parseRequest($requestText); $response = $negotiator->handshake($request); $this->assertEquals('1.1', $response->getProtocolVersion()); $this->assertEquals(400, $response->getStatusCode()); $this->assertEquals('Invalid Sec-WebSocket-Key', $response->getReasonPhrase()); } public function testInvalidSecWebsocketVersion() { $negotiator = new ServerNegotiator(new RequestVerifier()); $requestText = 'GET / HTTP/1.1 Host: 127.0.0.1:6789 Connection: Upgrade Pragma: no-cache Cache-Control: no-cache Upgrade: websocket Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch, br Accept-Language: en-US,en;q=0.8 '; $request = Message::parseRequest($requestText); $response = $negotiator->handshake($request); $this->assertEquals('1.1', $response->getProtocolVersion()); $this->assertEquals(426, $response->getStatusCode()); $this->assertEquals('Upgrade Required', $response->getReasonPhrase()); $this->assertEquals('Upgrade', $response->getHeaderLine('Connection')); $this->assertEquals('websocket', $response->getHeaderLine('Upgrade')); $this->assertEquals('13', $response->getHeaderLine('Sec-WebSocket-Version')); } public function testBadSubprotocolResponse() { $negotiator = new ServerNegotiator(new RequestVerifier()); $negotiator->setStrictSubProtocolCheck(true); $negotiator->setSupportedSubProtocols([]); $requestText = 'GET / HTTP/1.1 Host: 127.0.0.1:6789 Connection: Upgrade Pragma: no-cache Cache-Control: no-cache Upgrade: websocket Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Version: 13 Sec-WebSocket-Protocol: someprotocol Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch, br Accept-Language: en-US,en;q=0.8 '; $request = Message::parseRequest($requestText); $response = $negotiator->handshake($request); $this->assertEquals('1.1', $response->getProtocolVersion()); $this->assertEquals(426, $response->getStatusCode()); $this->assertEquals('No Sec-WebSocket-Protocols requested supported', $response->getReasonPhrase()); $this->assertEquals('Upgrade', $response->getHeaderLine('Connection')); $this->assertEquals('websocket', $response->getHeaderLine('Upgrade')); $this->assertEquals('13', $response->getHeaderLine('Sec-WebSocket-Version')); } public function testNonStrictSubprotocolDoesNotIncludeHeaderWhenNoneAgreedOn() { $negotiator = new ServerNegotiator(new RequestVerifier()); $negotiator->setStrictSubProtocolCheck(false); $negotiator->setSupportedSubProtocols(['someproto']); $requestText = 'GET / HTTP/1.1 Host: 127.0.0.1:6789 Connection: Upgrade Pragma: no-cache Cache-Control: no-cache Upgrade: websocket Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Version: 13 Sec-WebSocket-Protocol: someotherproto Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch, br Accept-Language: en-US,en;q=0.8 '; $request = Message::parseRequest($requestText); $response = $negotiator->handshake($request); $this->assertEquals('1.1', $response->getProtocolVersion()); $this->assertEquals(101, $response->getStatusCode()); $this->assertEquals('Upgrade', $response->getHeaderLine('Connection')); $this->assertEquals('websocket', $response->getHeaderLine('Upgrade')); $this->assertFalse($response->hasHeader('Sec-WebSocket-Protocol')); } public function testSuggestsAppropriateSubprotocol() { $negotiator = new ServerNegotiator(new RequestVerifier()); $negotiator->setStrictSubProtocolCheck(true); $negotiator->setSupportedSubProtocols(['someproto']); $requestText = 'GET / HTTP/1.1 Host: localhost:8080 Connection: Upgrade Upgrade: websocket Sec-WebSocket-Version: 13 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9 Sec-WebSocket-Key: HGt8eQax7nAOlXUw0/asPQ== Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits '; $request = Message::parseRequest($requestText); $response = $negotiator->handshake($request); $this->assertEquals('1.1', $response->getProtocolVersion()); $this->assertEquals(426, $response->getStatusCode()); $this->assertEquals('Upgrade', $response->getHeaderLine('Connection')); $this->assertEquals('websocket', $response->getHeaderLine('Upgrade')); $this->assertEquals('someproto', $response->getHeaderLine('Sec-WebSocket-Protocol')); } } PK �q�\E��� � 5 rfc6455/tests/unit/Handshake/ResponseVerifierTest.phpnu �Iw�� <?php namespace Ratchet\RFC6455\Test\Unit\Handshake; use Ratchet\RFC6455\Handshake\ResponseVerifier; use PHPUnit\Framework\TestCase; /** * @covers Ratchet\RFC6455\Handshake\ResponseVerifier */ class ResponseVerifierTest extends TestCase { /** * @var ResponseVerifier */ protected $_v; public function setUp() { $this->_v = new ResponseVerifier; } public static function subProtocolsProvider() { return [ [true, ['a'], ['a']] , [true, ['c', 'd', 'a'], ['a']] , [true, ['c, a', 'd'], ['a']] , [true, [], []] , [true, ['a', 'b'], []] , [false, ['c', 'd', 'a'], ['b', 'a']] , [false, ['a', 'b', 'c'], ['d']] ]; } /** * @dataProvider subProtocolsProvider */ public function testVerifySubProtocol($expected, $request, $response) { $this->assertEquals($expected, $this->_v->verifySubProtocol($request, $response)); } } PK �q�\ɲ��� � 4 rfc6455/tests/unit/Handshake/RequestVerifierTest.phpnu �Iw�� <?php namespace Ratchet\RFC6455\Test\Unit\Handshake; use Ratchet\RFC6455\Handshake\RequestVerifier; use PHPUnit\Framework\TestCase; /** * @covers Ratchet\RFC6455\Handshake\RequestVerifier */ class RequestVerifierTest extends TestCase { /** * @var RequestVerifier */ protected $_v; public function setUp() { $this->_v = new RequestVerifier(); } public static function methodProvider() { return array( array(true, 'GET'), array(true, 'get'), array(true, 'Get'), array(false, 'POST'), array(false, 'DELETE'), array(false, 'PUT'), array(false, 'PATCH') ); } /** * @dataProvider methodProvider */ public function testMethodMustBeGet($result, $in) { $this->assertEquals($result, $this->_v->verifyMethod($in)); } public static function httpVersionProvider() { return array( array(true, 1.1), array(true, '1.1'), array(true, 1.2), array(true, '1.2'), array(true, 2), array(true, '2'), array(true, '2.0'), array(false, '1.0'), array(false, 1), array(false, '0.9'), array(false, ''), array(false, 'hello') ); } /** * @dataProvider httpVersionProvider */ public function testHttpVersionIsAtLeast1Point1($expected, $in) { $this->assertEquals($expected, $this->_v->verifyHTTPVersion($in)); } public static function uRIProvider() { return array( array(true, '/chat'), array(true, '/hello/world?key=val'), array(false, '/chat#bad'), array(false, 'nope'), array(false, '/ ಠ_ಠ '), array(false, '/✖') ); } /** * @dataProvider URIProvider */ public function testRequestUri($expected, $in) { $this->assertEquals($expected, $this->_v->verifyRequestURI($in)); } public static function hostProvider() { return array( array(true, ['server.example.com']), array(false, []) ); } /** * @dataProvider HostProvider */ public function testVerifyHostIsSet($expected, $in) { $this->assertEquals($expected, $this->_v->verifyHost($in)); } public static function upgradeProvider() { return array( array(true, ['websocket']), array(true, ['Websocket']), array(true, ['webSocket']), array(false, []), array(false, ['']) ); } /** * @dataProvider upgradeProvider */ public function testVerifyUpgradeIsWebSocket($expected, $val) { $this->assertEquals($expected, $this->_v->verifyUpgradeRequest($val)); } public static function connectionProvider() { return array( array(true, ['Upgrade']), array(true, ['upgrade']), array(true, ['keep-alive', 'Upgrade']), array(true, ['Upgrade', 'keep-alive']), array(true, ['keep-alive', 'Upgrade', 'something']), // as seen in Firefox 47.0.1 - see https://github.com/ratchetphp/RFC6455/issues/14 array(true, ['keep-alive, Upgrade']), array(true, ['Upgrade, keep-alive']), array(true, ['keep-alive, Upgrade, something']), array(true, ['keep-alive, Upgrade', 'something']), array(false, ['']), array(false, []) ); } /** * @dataProvider connectionProvider */ public function testConnectionHeaderVerification($expected, $val) { $this->assertEquals($expected, $this->_v->verifyConnection($val)); } public static function keyProvider() { return array( array(true, ['hkfa1L7uwN6DCo4IS3iWAw==']), array(true, ['765vVoQpKSGJwPzJIMM2GA==']), array(true, ['AQIDBAUGBwgJCgsMDQ4PEC==']), array(true, ['axa2B/Yz2CdpfQAY2Q5P7w==']), array(false, [0]), array(false, ['Hello World']), array(false, ['1234567890123456']), array(false, ['123456789012345678901234']), array(true, [base64_encode('UTF8allthngs+✓')]), array(true, ['dGhlIHNhbXBsZSBub25jZQ==']), array(false, []), array(false, ['dGhlIHNhbXBsZSBub25jZQ==', 'Some other value']), array(false, ['Some other value', 'dGhlIHNhbXBsZSBub25jZQ==']) ); } /** * @dataProvider keyProvider */ public function testKeyIsBase64Encoded16BitNonce($expected, $val) { $this->assertEquals($expected, $this->_v->verifyKey($val)); } public static function versionProvider() { return array( array(true, [13]), array(true, ['13']), array(false, [12]), array(false, [14]), array(false, ['14']), array(false, ['hi']), array(false, ['']), array(false, []) ); } /** * @dataProvider versionProvider */ public function testVersionEquals13($expected, $in) { $this->assertEquals($expected, $this->_v->verifyVersion($in)); } }PK �q�\�;u�� � rfc6455/tests/bootstrap.phpnu �Iw�� <?php /** * Find the auto loader file */ $files = [ __DIR__ . '/../vendor/autoload.php', __DIR__ . '/../../vendor/autoload.php', __DIR__ . '/../../../vendor/autoload.php', __DIR__ . '/../../../../vendor/autoload.php', ]; foreach ($files as $file) { if (file_exists($file)) { $loader = require $file; $loader->addPsr4('Ratchet\\RFC6455\\Test\\', __DIR__); break; } } PK �q�\� rfc6455/tests/AbResultsTest.phpnu �Iw�� <?php namespace Ratchet\RFC6455\Test; use PHPUnit\Framework\TestCase; class AbResultsTest extends TestCase { private function verifyAutobahnResults($fileName) { if (!file_exists($fileName)) { return $this->markTestSkipped('Autobahn TestSuite results not found'); } $resultsJson = file_get_contents($fileName); $results = json_decode($resultsJson); $agentName = array_keys(get_object_vars($results))[0]; foreach ($results->$agentName as $name => $result) { if ($result->behavior === "INFORMATIONAL") { continue; } $this->assertTrue(in_array($result->behavior, ["OK", "NON-STRICT"]), "Autobahn test case " . $name . " in " . $fileName); } } public function testAutobahnClientResults() { $this->verifyAutobahnResults(__DIR__ . '/ab/reports/clients/index.json'); } public function testAutobahnServerResults() { $this->verifyAutobahnResults(__DIR__ . '/ab/reports/servers/index.json'); } } PK �q�\zgH� rfc6455/src/Messaging/error_lognu �[��� [06-May-2026 01:11:24 UTC] PHP Fatal error: Uncaught Error: Interface "Ratchet\RFC6455\Messaging\DataInterface" not found in /home/toptrendingappst/vendor/ratchet/rfc6455/src/Messaging/FrameInterface.php:4 Stack trace: #0 {main} thrown in /home/toptrendingappst/vendor/ratchet/rfc6455/src/Messaging/FrameInterface.php on line 4 [06-May-2026 01:11:27 UTC] PHP Fatal error: Uncaught Error: Interface "Ratchet\RFC6455\Messaging\DataInterface" not found in /home/toptrendingappst/vendor/ratchet/rfc6455/src/Messaging/MessageInterface.php:4 Stack trace: #0 {main} thrown in /home/toptrendingappst/vendor/ratchet/rfc6455/src/Messaging/MessageInterface.php on line 4 [06-May-2026 01:11:32 UTC] PHP Fatal error: Uncaught Error: Interface "Ratchet\RFC6455\Messaging\MessageInterface" not found in /home/toptrendingappst/vendor/ratchet/rfc6455/src/Messaging/Message.php:4 Stack trace: #0 {main} thrown in /home/toptrendingappst/vendor/ratchet/rfc6455/src/Messaging/Message.php on line 4 [06-May-2026 01:11:33 UTC] PHP Fatal error: Uncaught Error: Interface "Ratchet\RFC6455\Messaging\FrameInterface" not found in /home/toptrendingappst/vendor/ratchet/rfc6455/src/Messaging/Frame.php:4 Stack trace: #0 {main} thrown in /home/toptrendingappst/vendor/ratchet/rfc6455/src/Messaging/Frame.php on line 4 PK �q�\��i�VG VG '