]> git.ipfire.org Git - thirdparty/squid.git/blob - src/anyp/PortCfg.cc
Source Format Enforcement (#763)
[thirdparty/squid.git] / src / anyp / PortCfg.cc
1 /*
2 * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 #include "squid.h"
10 #include "anyp/PortCfg.h"
11 #include "comm.h"
12 #include "fatal.h"
13 #include "security/PeerOptions.h"
14 #if USE_OPENSSL
15 #include "ssl/support.h"
16 #endif
17
18 #include <cstring>
19 #include <limits>
20
21 AnyP::PortCfgPointer HttpPortList;
22 AnyP::PortCfgPointer FtpPortList;
23
24 int NHttpSockets = 0;
25 int HttpSockets[MAXTCPLISTENPORTS];
26
27 AnyP::PortCfg::PortCfg() :
28 next(),
29 s(),
30 transport(AnyP::PROTO_HTTP,1,1), // "Squid is an HTTP proxy", etc.
31 name(NULL),
32 defaultsite(NULL),
33 flags(),
34 allow_direct(false),
35 vhost(false),
36 actAsOrigin(false),
37 ignore_cc(false),
38 connection_auth_disabled(false),
39 ftp_track_dirs(false),
40 vport(0),
41 disable_pmtu_discovery(0),
42 workerQueues(false),
43 listenConn()
44 {
45 memset(&tcp_keepalive, 0, sizeof(tcp_keepalive));
46 }
47
48 AnyP::PortCfg::~PortCfg()
49 {
50 if (Comm::IsConnOpen(listenConn)) {
51 listenConn->close();
52 listenConn = NULL;
53 }
54
55 safe_free(name);
56 safe_free(defaultsite);
57 }
58
59 AnyP::PortCfgPointer
60 AnyP::PortCfg::clone() const
61 {
62 AnyP::PortCfgPointer b = new AnyP::PortCfg();
63 b->s = s;
64 if (name)
65 b->name = xstrdup(name);
66 if (defaultsite)
67 b->defaultsite = xstrdup(defaultsite);
68
69 b->transport = transport;
70 b->flags = flags;
71 b->allow_direct = allow_direct;
72 b->vhost = vhost;
73 b->vport = vport;
74 b->connection_auth_disabled = connection_auth_disabled;
75 b->workerQueues = workerQueues;
76 b->ftp_track_dirs = ftp_track_dirs;
77 b->disable_pmtu_discovery = disable_pmtu_discovery;
78 b->tcp_keepalive = tcp_keepalive;
79 b->secure = secure;
80
81 return b;
82 }
83
84 ScopedId
85 AnyP::PortCfg::codeContextGist() const
86 {
87 // Unfortunately, .name lifetime is too short in FTP use cases.
88 // TODO: Consider adding InstanceId<uint32_t> to all RefCountable classes.
89 return ScopedId("port");
90 }
91
92 std::ostream &
93 AnyP::PortCfg::detailCodeContext(std::ostream &os) const
94 {
95 // parsePortSpecification() defaults optional port name to the required
96 // listening address so we cannot easily distinguish one from the other.
97 if (name)
98 os << Debug::Extra << "listening port: " << name;
99 else if (s.port())
100 os << Debug::Extra << "listening port address: " << s;
101 return os;
102 }
103