]> git.ipfire.org Git - thirdparty/squid.git/blame - src/StoreIOState.h
SourceFormat Enforcement
[thirdparty/squid.git] / src / StoreIOState.h
CommitLineData
d3b3ab85 1/*
4ac4a490 2 * Copyright (C) 1996-2017 The Squid Software Foundation and contributors
d3b3ab85 3 *
bbc27441
AJ
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.
d3b3ab85 7 */
8
9#ifndef SQUID_STOREIOSTATE_H
10#define SQUID_STOREIOSTATE_H
11
8bf217bd 12#include "base/RefCount.h"
aa839030 13#include "cbdata.h"
effdd841 14#include "mem/forward.h"
2745fea5 15#include "store/forward.h"
62e76326 16
e877aaac 17class StoreIOState : public RefCountable
62e76326 18{
19
d3b3ab85 20public:
e877aaac 21 typedef RefCount<StoreIOState> Pointer;
d3b3ab85 22
4fcc8876 23 /*
24 * STRCB is the "store read callback". STRCB functions are
25 * passed to storeRead(). Examples of STRCB callbacks are:
26 * storeClientReadBody
27 * storeClientReadHeader
28 */
e5de8b13 29 typedef void STRCB(void *their_data, const char *buf, ssize_t len, StoreIOState::Pointer self);
4fcc8876 30
31 /*
32 * STFNCB is the "store file number callback." It is called
33 * when an underlying storage module has allocated the swap
34 * file number and also indicates that the swap file has been
35 * opened for reading or writing. STFNCB functions are passed
36 * to storeCreate() and storeOpen(). Examples of STFNCB callbacks
37 * are:
38 * storeSwapInFileNotify
39 * storeSwapOutFileNotify
40 */
e5de8b13 41 typedef void STFNCB(void *their_data, int errflag, StoreIOState::Pointer self);
4fcc8876 42
43 /*
44 * STIOCB is the "store close callback" for store files. It
45 * is called when the store file is closed. STIOCB functions
46 * are passed to storeCreate() and storeOpen(). Examples of
47 * STIOCB callbacks are:
48 * storeSwapOutFileClosed
49 * storeSwapInFileClosed
50 */
e5de8b13 51 typedef void STIOCB(void *their_data, int errflag, StoreIOState::Pointer self);
4fcc8876 52
e877aaac 53 /* StoreIOState does not get mempooled - it's children do */
d3b3ab85 54 void *operator new (size_t amount);
55 void operator delete (void *address);
d3b3ab85 56
cc8c4af2
AJ
57 StoreIOState(StoreIOState::STFNCB *cbFile, StoreIOState::STIOCB *cbIo, void *data);
58 virtual ~StoreIOState();
d3b3ab85 59
cc8c4af2 60 off_t offset() const {return offset_;}
d3b3ab85 61
62 virtual void read_(char *buf, size_t size, off_t offset, STRCB * callback, void *callback_data) = 0;
90e8b325
AR
63 /** write the given buffer and free it when it is no longer needed
64 * \param offset zero for the very first write and -1 for all other writes
65 * \retval false if write failed (callback has been or will be called)
66 */
67 virtual bool write(char const *buf, size_t size, off_t offset, FREE * free_func) = 0;
aa1a691e
AR
68
69 typedef enum {
9199139f
AR
70 wroteAll, ///< success: caller supplied all data it wanted to swap out
71 writerGone, ///< failure: caller left before swapping out everything
72 readerDone ///< success or failure: either way, stop swapping in
aa1a691e
AR
73 } CloseHow;
74 virtual void close(int how) = 0; ///< finish or abort swapping per CloseHow
62e76326 75
abf396ec
AR
76 // Tests whether we are working with the primary/public StoreEntry chain.
77 // Reads start reading the primary chain, but it may become secondary.
78 // There are two store write kinds:
79 // * regular writes that change (usually append) the entry visible to all and
80 // * header updates that create a fresh chain (while keeping the stale one usable).
81 bool touchingStoreEntry() const;
82
d3b3ab85 83 sdirno swap_dirn;
84 sfileno swap_filen;
f53969cc 85 StoreEntry *e; /* Need this so the FS layers can play god */
d3b3ab85 86 mode_t mode;
aa1a691e 87 off_t offset_; ///< number of bytes written or read for this entry so far
abf396ec 88 STFNCB *file_callback; // XXX: Unused. TODO: Remove.
d3b3ab85 89 STIOCB *callback;
90 void *callback_data;
62e76326 91
26ac0430 92 struct {
62e76326 93 STRCB *callback;
94 void *callback_data;
2fadd50d 95 } read;
62e76326 96
26ac0430 97 struct {
f53969cc 98 bool closing; /* debugging aid */
2fadd50d 99 } flags;
d3b3ab85 100};
101
4fcc8876 102StoreIOState::Pointer storeCreate(StoreEntry *, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
103StoreIOState::Pointer storeOpen(StoreEntry *, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
d9c252f2
FC
104void storeClose(StoreIOState::Pointer, int how);
105void storeRead(StoreIOState::Pointer, char *, size_t, off_t, StoreIOState::STRCB *, void *);
106void storeIOWrite(StoreIOState::Pointer, char const *, size_t, off_t, FREE *);
d3b3ab85 107
108#endif /* SQUID_STOREIOSTATE_H */
f53969cc 109