]> git.ipfire.org Git - thirdparty/squid.git/blame - scripts/cachetrace.pl
Source Format Enforcement (#1234)
[thirdparty/squid.git] / scripts / cachetrace.pl
CommitLineData
2cbf29fe 1#!/usr/local/bin/perl
a151895d 2#
b8ae064d 3## Copyright (C) 1996-2023 The Squid Software Foundation and contributors
a151895d
AJ
4##
5## Squid software is distributed under GPLv2+ license and includes
6## contributions from numerous individuals and organizations.
7## Please see the COPYING and CONTRIBUTORS files for details.
8##
2cbf29fe 9
10require 'sys/socket.ph';
11
12$url = shift || die "usage: $0: url\n";
1b15bd08 13$proxy = 'localhost';
2cbf29fe 14$port = 3128;
15
16$url = "http://$url/" if ($url =~ /^[-\w\.]+$/);
17print "Querying cache path to $url\n";
e924600d 18$host = $1 if ($url =~ /^[^:]+:\/\/([^\/:]+)/);
2cbf29fe 19
20$sockaddr = 'S n a4 x8';
21($name, $aliases, $proto) = getprotobyname("tcp");
1b15bd08 22($fqdn, $aliases, $type, $len, $thataddr) = gethostbyname($proxy);
2cbf29fe 23$thissock = pack($sockaddr, &AF_INET, 0, "\0\0\0\0");
24$that = pack($sockaddr, &AF_INET, $port, $thataddr);
25
26&try_http_11($url);
27
28
29sub try_http_11 {
47f28373
FC
30 local($url) = @_;
31 local($path) = undef;
32
33 $source = $1 if ($url =~ /^[^:]+:\/\/([^:\/]+)/);
34
35 die "socket: $!\n" unless
36 socket (SOCK, &AF_INET, &SOCK_STREAM, $proto);
37 die "bind: $!\n" unless
38 bind (SOCK, $thissock);
39 die "$proxy:$port: $!\n" unless
40 connect (SOCK, $that);
41 select (SOCK); $| = 1;
42 select (STDOUT);
43 print SOCK "TRACE $url HTTP/1.1\r\nHost: $host\r\nAccept: */*\r\n\r\n";
44 while (<SOCK>) {
45 s/\r//g;
46 s/\n//g;
47 $code = $1 if (/^HTTP\/\d\.\d (\d+)/);
48 $server = $1 if (/^Server:\s*(.*)$/);
49 $path = $1 if (/^Via:\s*(.*)$/);
50 }
51 return 0 unless ($path && $code == 200);
52 print "Received TRACE reply from $source\n";
53 @F = split(',', $path);
54 $i = 0;
55 foreach $n (@F) {
56 $n =~ s/^\s+//;
57 printf " %2d %s\n", ++$i, $n;
58 }
59 printf " %2d %s (%s)\n", ++$i, $source, $server;
60 1;
2cbf29fe 61}
47f28373 62