]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - src/CommRead.h
SourceFormat Enforcement
[thirdparty/squid.git] / src / CommRead.h
index 5c93a377f8105f3fe24378b11903f23009b8f66f..760492c70af361dfa824024b52daeea60fa4be6c 100644 (file)
@@ -1,8 +1,7 @@
-
 /*
- * $Id: CommRead.h,v 1.5 2003/07/10 09:37:56 robertc Exp $
+ * $Id$
  *
- * DEBUG: section 5    Comms
+ * DEBUG: section 05    Comm
  * AUTHOR: Robert Collins <robertc@squid-cache.org>
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
  *  it under the terms of the GNU General Public License as published by
  *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *  
+ *
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *  
+ *
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
  *
  * Copyright (c) 2003, Robert Collins <robertc@squid-cache.org>
  */
-
-#include "config.h"
-
 #ifndef COMMREAD_H
 #define COMMREAD_H
 
-#include "squid.h"
-#include "List.h"
-
-template<class C>
-
-class CallBack
-{
-
-public:
-    CallBack() : handler(NULL), data(NULL){}
-
-    CallBack(C *aHandler, void *someData) : handler(aHandler), data (NULL)
-    {
-        if (someData)
-            data = cbdataReference(someData);
-    }
-
-    CallBack(CallBack const &old) : handler(old.handler)
-    {
-        if (old.data)
-            data = cbdataReference (old.data);
-        else
-            data = NULL;
-    }
-
-    ~CallBack()
-    {
-        replaceData (NULL);
-    }
-
-    CallBack &operator = (CallBack const & rhs)
-    {
-        handler = rhs.handler;
-
-        replaceData (rhs.data);
-
-        return *this;
-    }
-
-
-    bool operator == (CallBack const &rhs) { return handler==rhs.handler && data==rhs.data;}
-
-#if 0
-    // twould be nice - RBC 20030307
-    C callback;
-#endif
-
-    C *handler;
-    void *data;
-
-private:
-    void replaceData(void *someData)
-    {
-        void *temp = NULL;
-
-        if (someData)
-            temp = cbdataReference(someData);
-
-        if (data)
-            cbdataReferenceDone(data);
-
-        data = temp;
-    }
-};
-
-#if 0
-// twould be nice - RBC 20030307
-void
-CallBack<IOCB>::callback(int fd, char *buf, size_t size , comm_err_t errcode, int xerrno, void *tempData)
-{
-    assert (tempData == data);
-    handler (fd, buf, size , errcode, xerrno, data);
-    *this = CallBack();
-}
-
-#endif
+#include "comm.h"
+#include "CommCalls.h"
+#include "comm/forward.h"
+#include "CbDataList.h"
 
 class CommRead
 {
 
 public:
-    CommRead ();
-    CommRead (int fd, char *buf, int len, IOCB *handler, void *data);
-    void queueCallback(size_t retval, comm_err_t errcode, int xerrno);
-    bool hasCallback() const;
-    void hasCallbackInvariant() const;
-    void hasNoCallbackInvariant() const;
-    void tryReading();
-    void read();
-    void initiateActualRead();
-    void nullCallback();
-    void doCallback(comm_err_t errcode, int xerrno);
-    int fd;
+    CommRead();
+    CommRead(const Comm::ConnectionPointer &c, char *buf, int len, AsyncCall::Pointer &callback);
+    Comm::ConnectionPointer conn;
     char *buf;
     int len;
-    CallBack<IOCB> callback;
-    static void ReadTry(int fd, void *data);
+    AsyncCall::Pointer callback;
 };
 
 class DeferredRead
@@ -151,6 +65,7 @@ public:
     void *theContext;
     CommRead theRead;
     bool cancelled;
+    AsyncCall::Pointer closer; ///< internal close handler used by Comm
 
 private:
 };
@@ -164,12 +79,11 @@ public:
     void kickReads(int const count);
 
 private:
-    static PF CloseHandler;
-    static DeferredRead popHead(ListContainer<DeferredRead> &deferredReads);
+    static CLCB CloseHandler;
+    static DeferredRead popHead(CbDataListContainer<DeferredRead> &deferredReads);
     void kickARead(DeferredRead const &);
     void flushReads();
-    ListContainer<DeferredRead> deferredReads;
+    CbDataListContainer<DeferredRead> deferredReads;
 };
 
-
 #endif /* COMMREAD_H */