Wrap ESI headers away from .h dependency testing when module disabled.
These mysteriously had passed all dependency tests on machines where
the XML libraries existed, despite ESI disabling. Only showed up when built
on a machine without Expat.
Make IdleConn::removeFd err on the soft site if the fd could not be found
this fixes the assert seen by Tsantilas Christos. It's not really a proper
fix to the underlying problem, but at least makes Squid surive.
The actual problem is race windows introduced by the async call queue. In
this case both "closed by remote server" and "timeout" events may get queued
at the same time, or to be specific the "closed by remote server" read event
stays in the queue and gets called even after pconn has deregistered interest
in the event.
Bug #2001: Fails to forward responses where headers >4KB
This changes reply processing to clone the already parsed reply header
instead of trying to parse it yet another time. This allows us to seek
over the header contents and that way get away with just having a 4KB
buffer..
In the long run the store client API will be changed to provide a clean
split between headers and body, providing headers in parsed form (including
intermediary 1xx messages) and then the body starting at offset 0. This
change is a first step along that path but without changing the store client
api as such, with the intention of being merged into 3.0.
Fallback on transparent interception mode even if the connection didn't seem
to be transparently intercepted
Needed to deal properly with situations where connections to the local host
is intercepted, or when people NAT outside the Squid server but still compile
Squid with support for the NAT/interception method availabe on the host OS..
Alex Rousskov [Fri, 4 Apr 2008 16:26:01 +0000 (10:26 -0600)]
Moved AccessCheck object creation and check starting to AccessCheck::Start.
We may be able to simplify the callers further by migrating to the AsyncJobCall
interface for callbacks.
Alex Rousskov [Fri, 4 Apr 2008 05:31:40 +0000 (23:31 -0600)]
Added global Enabled flag to Adaptation::Config so that AccessCheck::Start
can check that instead of becoming dependent on each adaptation mechanism
and its config.onoff setting. Could have created a generic Registry of
all adaptation mechanisms instead.
Alex Rousskov [Thu, 3 Apr 2008 21:24:07 +0000 (15:24 -0600)]
Got rid of references to libtool.m4 because libtoolize does not require it
and we want to rely on packager's version anyway (just like with other
autotools-generated or provided files).
Selectively roll comm_connect_addr part of the Linux leak fix out of trunk.
The IPAddress and configure parts are left to simplify future testing of why it
does not work in FreeBSD and what went wrong with the sockaddr_storage.
Attempted fix for FreeBSD run-time socket error "(22) Invalid Object" on connects
- Sets the ss_len / sin_len / sin6_len fields of sockaddr_* objects
when retrieved for connection setup.
- Tests the OS at compile time for each of these fields existence to
cope with some OS (ie Linux) not using or providing them.
Alex Rousskov [Thu, 3 Apr 2008 05:31:29 +0000 (23:31 -0600)]
Added an adaptation service group API to support groups of services. Current
code supports service sets and single-service groups. The former provides a
way to group interchangeable services together so that one (the "best"
available) service is applied to the message. The latter is an internal
feature to allow user to mix service and group names in squid.conf ACLs.
TODO: support service chains (as a service group) and perhaps group of groups.
Moved adaptation access rule state from being shared between ICAPClass and
ICAPAccessCheck classes into a dedicated AccessRule class. This simplifies
both classes and allows for checking access rules in the correct order.
Use group names when linking adaptation access rules to groups. This is less
efficient (especially since we are still using Vector iteration to find a
matching group) but much simpler. TODO: Optimize.
All adaptation services, access rules, and service groups now have a
finalize() method that is called after configuration parsing has been
completed but before the main loop starts. This allows to verify or optimize
name-based links to other services, rules, and groups.
Moved adaptation access check and group classes into their own files.
Added adaptation_service_set squid.conf option, deprecating icap_class. The
new option has more accurate documentation and does not depend on the
adaptation protocol so one can group eCAP and ICAP services.
Added adaptation_service_set squid.conf option, deprecating icap_access. The
new option has more accurate documentation and does not depend on the
adaptation protocol so one can mix-and-match eCAP and ICAP ACL rules.
Alex Rousskov [Thu, 3 Apr 2008 04:41:41 +0000 (22:41 -0600)]
Honor 0x and 0 prefixes as numeric base indication when parsing squid.conf
integer options.
Squid3 parses squid.conf file integers as decimal numbers while Squid2 honors
0 and 0x prefixes (indicating octal and hex numbers). The later functionality
is needed for things like unmask that are traditionally specified using octal
format.
This patch changes Squid3 behavior to match that of Squid2.
Internally, Squid3 uses sscanf and Squid2 uses strtol.
TODO: Squid3::GetInteger should probably use xatol,
and xatol should be fixed to proper verify the result of strtol.
Alex Rousskov [Mon, 31 Mar 2008 04:31:48 +0000 (22:31 -0600)]
Added generic support for loadable Squid modules or plugins.
The "loadable_modules" squid.conf option specifies what shared libraries to
load dynamically. The support is based on libtool's ltdl library, which has
been integrated with Squid prior to this commit, along with the
--enable-loadable-modules ./configure option.
Loaded modules are currently never unloaded, but that may change.
Loadable modules are needed for eCAP, but loadable_modules code deals with
generic module manipulation, independent from eCAP support.
TODO: support cachemgr reporting and reconfiguration.
Alex Rousskov [Sun, 30 Mar 2008 19:48:34 +0000 (13:48 -0600)]
Renamed types and members after moving adaptation-method-agnostic APIs to the
Adaptation namespace and adding support for delayed adaptation service
creation.
Alex Rousskov [Sun, 30 Mar 2008 19:40:57 +0000 (13:40 -0600)]
Renamed types and members after moving adaptation-method-agnostic APIs to the
Adaptation namespace and adding support for delayed adaptation service
creation.
Alex Rousskov [Sun, 30 Mar 2008 19:13:51 +0000 (13:13 -0600)]
Moved configuration options that do not depend on the adaptation method
from ICAP/ICAPConfig to adaptation/Config. ICAP and eCAP will not share
the same base configuration but will share the same base configuration code
(i.e., there will be two independent ICAPConfig and ecap::Config objects,
but they will have a common parent).
Implemented delayed creation of adaptation services. We used to create
ICAPServiceRep objects when parsing the configuration file.
Create-as-you-parse is imperfect for several reasons, especially if the
services are dynamically loaded as is the case with eCAP. We now remember the
service configuration and then create the actual service object _after_ the
configuration has been parsed and loadable modules, if any, have been loaded.
No functional changes are expected from this change.
Alex Rousskov [Sun, 30 Mar 2008 19:06:02 +0000 (13:06 -0600)]
Moved ICAP/ICAPInit* classes to adaptations/Init* classes.
This move helps Squid core code to manage adaptations without referring
to a specific adaptation mechanism. No functional changes are expected,
although InitiateHolder has been polished to prevent dereferencing of
invalidated Initiator.
Alex Rousskov [Sun, 30 Mar 2008 19:00:57 +0000 (13:00 -0600)]
Moved ICAP/ICAPInit* classes to adaptations/Init* classes.
This move helps Squid core code to manage adaptations without referring
to a specific adaptation mechanism. No functional changes are expected,
although InitiateHolder has been polished to prevent dereferencing of
invalidated Initiator.
Alex Rousskov [Sun, 30 Mar 2008 18:20:14 +0000 (12:20 -0600)]
Migrating from ICAP-specific API to generic "adaptation" API.
Core Squid code should not care about the specific adaptation mechanism in
use.
This change should not affect Squid functinality.
The migration is not complete because the on/off switch is still
ICAP-specific and because comments, debug, and error messages may still
refer to ICAP.
Alex Rousskov [Mon, 24 Mar 2008 15:11:15 +0000 (09:11 -0600)]
Extract service URI scheme and store it as the service protocol. This will
allow us to distinguish between ICAP and eCAP services, at least in the
begining of eCAP support.