]>
Commit | Line | Data |
---|---|---|
ee0989f2 | 1 | /* |
45906573 | 2 | * DEBUG: section 05 Socket Functions |
93ad6f77 | 3 | * AUTHOR: Amos Jeffries |
ee0989f2 | 4 | * AUTHOR: Robert Collins |
5 | * | |
6 | * SQUID Web Proxy Cache http://www.squid-cache.org/ | |
7 | * ---------------------------------------------------------- | |
8 | * | |
9 | * Squid is the result of efforts by numerous individuals from | |
10 | * the Internet community; see the CONTRIBUTORS file for full | |
11 | * details. Many organizations have provided support for Squid's | |
12 | * development; see the SPONSORS file for full details. Squid is | |
13 | * Copyrighted (C) 2001 by the Regents of the University of | |
14 | * California; see the COPYRIGHT file for full details. Squid | |
15 | * incorporates software developed and/or copyrighted by other | |
16 | * sources; see the CREDITS file for full details. | |
17 | * | |
18 | * This program is free software; you can redistribute it and/or modify | |
19 | * it under the terms of the GNU General Public License as published by | |
20 | * the Free Software Foundation; either version 2 of the License, or | |
21 | * (at your option) any later version. | |
26ac0430 | 22 | * |
ee0989f2 | 23 | * This program is distributed in the hope that it will be useful, |
24 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
25 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
26 | * GNU General Public License for more details. | |
26ac0430 | 27 | * |
ee0989f2 | 28 | * You should have received a copy of the GNU General Public License |
29 | * along with this program; if not, write to the Free Software | |
30 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. | |
31 | * | |
32 | * | |
33 | * Copyright (c) 2003, Robert Collins <robertc@squid-cache.org> | |
93ad6f77 | 34 | * Copyright (c) 2010, Amos Jeffries <amosjeffries@squid-cache.org> |
ee0989f2 | 35 | */ |
36 | ||
37 | #ifndef _SQUIDCONNECTIONDETAIL_H_ | |
38 | #define _SQUIDCONNECTIONDETAIL_H_ | |
39 | ||
49ae8b95 | 40 | #include "comm/forward.h" |
cfd66529 | 41 | #include "hier_code.h" |
96d89ea0 | 42 | #include "ip/Address.h" |
93ad6f77 | 43 | #include "RefCount.h" |
cc192b50 | 44 | |
739b352a | 45 | struct peer; |
cfd66529 AJ |
46 | |
47 | namespace Comm { | |
48 | ||
27d1f0a0 AJ |
49 | /* TODO: make these a struct of boolean flags members in the connection instead of a bitmap. |
50 | * we can't do that until all non-comm code uses Commm::Connection objects to create FD | |
51 | * currently there is code still using comm_open() and comm_openex() synchronously!! | |
52 | */ | |
cfd66529 AJ |
53 | #define COMM_UNSET 0x00 |
54 | #define COMM_NONBLOCKING 0x01 | |
55 | #define COMM_NOCLOEXEC 0x02 | |
56 | #define COMM_REUSEADDR 0x04 | |
57 | #define COMM_TRANSPARENT 0x08 | |
58 | #define COMM_DOBIND 0x10 | |
62e76326 | 59 | |
739b352a AJ |
60 | /** |
61 | * Store data about the physical and logical attributes of a connection. | |
62 | * | |
63 | * Some link state can be infered from the data, however this is not an | |
64 | * object for state data. But a semantic equivalent for FD with easily | |
65 | * accessible cached properties not requiring repeated complex lookups. | |
66 | * | |
55cbb02b AJ |
67 | * While the properties may be changed, this is for teh purpose of creating |
68 | * potential connection descriptors which may be opened. Properties should | |
69 | * be considered read-only outside of the Comm layer code once the connection | |
70 | * is open. | |
739b352a AJ |
71 | * |
72 | * These objects must not be passed around directly, | |
f9b72e0c | 73 | * but a Comm::ConnectionPointer must be passed instead. |
739b352a | 74 | */ |
93ad6f77 | 75 | class Connection : public RefCountable |
cfd66529 | 76 | { |
62e76326 | 77 | public: |
739b352a | 78 | /** standard empty connection creation */ |
cfd66529 | 79 | Connection(); |
739b352a | 80 | |
aed188fd | 81 | /** Clear the connection properties and close any open socket. */ |
cfd66529 AJ |
82 | ~Connection(); |
83 | ||
aed188fd AJ |
84 | /** Copy an existing connections IP and properties. |
85 | * This excludes the FD. The new copy will be a closed connection. | |
739b352a | 86 | */ |
aed188fd AJ |
87 | ConnectionPointer & copyDetails() const; |
88 | ||
aed188fd | 89 | /** Close any open socket. */ |
55cbb02b AJ |
90 | void close(); |
91 | ||
92 | /** determine whether this object describes an active connection or not. */ | |
d6327017 | 93 | bool isOpen() const { return (fd >= 0); } |
55cbb02b | 94 | |
5229395c AJ |
95 | /** retrieve the peer pointer for use. |
96 | * The caller is responsible for all CBDATA operations regarding the | |
97 | * used of the pointer returned. | |
98 | */ | |
99 | peer * const getPeer() const { return _peer; } | |
100 | ||
101 | /** alter the stored peer pointer. | |
102 | * Perform appropriate CBDATA operations for locking the peer pointer | |
103 | */ | |
104 | void setPeer(peer * p); | |
105 | ||
106 | private: | |
107 | /** These objects may not be exactly duplicated. Use copyDetails() instead. */ | |
108 | Connection(const Connection &c); | |
109 | ||
110 | /** These objects may not be exactly duplicated. Use copyDetails() instead. */ | |
111 | Connection & operator =(const Connection &c); | |
112 | ||
113 | public: | |
cfd66529 AJ |
114 | /** Address/Port for the Squid end of a TCP link. */ |
115 | Ip::Address local; | |
62e76326 | 116 | |
cfd66529 AJ |
117 | /** Address for the Remote end of a TCP link. */ |
118 | Ip::Address remote; | |
2d8c0b1a | 119 | |
cfd66529 | 120 | /** Hierarchy code for this connection link */ |
5229395c | 121 | hier_code peerType; |
cfd66529 | 122 | |
739b352a | 123 | /** Socket used by this connection. -1 if no socket has been opened. */ |
cfd66529 AJ |
124 | int fd; |
125 | ||
739b352a | 126 | /** Quality of Service TOS values currently sent on this connection */ |
cfd66529 AJ |
127 | int tos; |
128 | ||
129 | /** COMM flags set on this connection */ | |
130 | int flags; | |
739b352a | 131 | |
739b352a AJ |
132 | private: |
133 | /** cache_peer data object (if any) */ | |
134 | peer *_peer; | |
ee0989f2 | 135 | }; |
136 | ||
cfd66529 AJ |
137 | }; // namespace Comm |
138 | ||
ee0989f2 | 139 | #endif |