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 #ifndef SQUID_ICAPOPTXACT_H 10 #define SQUID_ICAPOPTXACT_H 11 12 #include "adaptation/icap/Launcher.h" 13 #include "adaptation/icap/Xaction.h" 14 15 namespace Adaptation 16 { 17 namespace Icap 18 { 19 20 /* OptXact sends an ICAP OPTIONS request to the ICAP service, 21 * parses the ICAP response, and sends it to the initiator. A NULL response 22 * means the ICAP service could not be contacted or did not return any 23 * valid response. */ 24 25 class OptXact: public Xaction 26 { 27 CBDATA_CLASS(OptXact); 28 29 public: 30 OptXact(ServiceRep::Pointer &aService); 31 32 protected: 33 virtual void start(); 34 virtual void handleCommConnected(); 35 virtual void handleCommWrote(size_t size); 36 virtual void handleCommRead(size_t size); 37 38 void makeRequest(MemBuf &buf); 39 bool parseResponse(); 40 41 void startReading(); doneReading()42 virtual bool doneReading() const { return commEof || readAll; } 43 44 virtual void swanSong(); 45 46 private: 47 virtual void finalizeLogInfo(); 48 49 bool readAll; ///< read the entire OPTIONS response 50 }; 51 52 // An Launcher that stores OptXact construction info and 53 // creates OptXact when needed 54 class OptXactLauncher: public Launcher 55 { 56 CBDATA_CLASS(OptXactLauncher); 57 58 public: 59 OptXactLauncher(Adaptation::ServicePointer aService); 60 61 protected: 62 virtual Xaction *createXaction(); 63 }; 64 65 } // namespace Icap 66 } // namespace Adaptation 67 68 #endif /* SQUID_ICAPOPTXACT_H */ 69 70