X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=libcitadel%2Flib%2Flibcitadel.h;h=0ee29b20c3ca6ecbda2d7aa69834b69ed63f54b1;hb=aa1bc013ff54eb118855365945aae4218d099003;hp=021caf8d08fc2acd0cb17532e92d07c64560836b;hpb=587a7605c8942087efe2ae4b100acacf06d8a609;p=citadel.git diff --git a/libcitadel/lib/libcitadel.h b/libcitadel/lib/libcitadel.h index 021caf8d0..0ee29b20c 100644 --- a/libcitadel/lib/libcitadel.h +++ b/libcitadel/lib/libcitadel.h @@ -236,11 +236,29 @@ typedef struct _file_buffer { int nBlobBytesWanted; } IOBuffer; + +typedef struct __fd_iobuffer { + IOBuffer *IOB; + int OtherFD; + long TotalSendSize; + long TotalSentAlready; + long ChunkSize; + long ChunkSendRemain; + StrBuf *ChunkBuffer; /* just used if we don't have sendfile */ +} FDIOBuffer; + + +void FDIOBufferInit(FDIOBuffer *FDB, IOBuffer *IO, int FD, long TotalSendSize); +int FileSendChunked(FDIOBuffer *FDB, const char **Err); +int FileRecvChunked(FDIOBuffer *FDB, const char **Err); +eReadState WriteIOBAlreadyRead(FDIOBuffer *FDB, const char **Error); + long StrBuf_read_one_chunk_callback (int fd, short event, IOBuffer *FB); int StrBuf_write_one_chunk_callback(int fd, short event, IOBuffer *FB); eReadState StrBufChunkSipLine(StrBuf *LineBuf, IOBuffer *FB); eReadState StrBufCheckBuffer(IOBuffer *FB); +long IOBufferStrLength(IOBuffer *FB); int StrBufSipLine(StrBuf *LineBuf, const StrBuf *Buf, const char **Ptr); int StrBufReplaceToken(StrBuf *Buf, long where, long HowLong, const char *Repl, long ReplLen);