mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-09-02 02:11:11 +02:00
nttpd: allow sendfile() to cope with files >= 2GB; introduce range support
(This re-applies most of the patches I've reverted about two hours ago.)
This commit is contained in:
@@ -47,6 +47,7 @@
|
||||
//=============================================================================
|
||||
#ifndef __yhttpd_yhook_h__
|
||||
#define __yhttpd_yhook_h__
|
||||
#include <unistd.h>
|
||||
// C++
|
||||
#include <string>
|
||||
#include <list>
|
||||
@@ -128,7 +129,9 @@ public:
|
||||
HttpResponseType httpStatus; // http-status code for response
|
||||
std::string ResponseMimeType; // mime-type for response
|
||||
std::string NewURL; // new URL for Redirection
|
||||
long ContentLength; // Length of Response Body
|
||||
off_t ContentLength; // Length of Response Body
|
||||
off_t RangeStart; // Start of range, used for sendfile only
|
||||
off_t RangeEnd; // End of range, used for sendfile only
|
||||
time_t LastModified; // Last Modified Time of Item to send / -1 dynamic content
|
||||
std::string Sendfile; // Path & Name (local os style) of file to send
|
||||
bool keep_alive;
|
||||
@@ -141,7 +144,7 @@ public:
|
||||
CStringList HookVarList; // Variables in Hook-Handling passing to other Hooks
|
||||
THttp_Method Method; // HTTP Method (requested)
|
||||
// constructor & deconstructor
|
||||
CyhookHandler(){ContentLength = 0; keep_alive = 0; _outIndent = 0;status = HANDLED_NONE;Method = M_UNKNOWN;httpStatus = HTTP_NIL;outType = plain;};
|
||||
CyhookHandler(){ContentLength = 0; RangeStart = 0; RangeEnd = -1; keep_alive = 0; _outIndent = 0;status = HANDLED_NONE;Method = M_UNKNOWN;httpStatus = HTTP_NIL;outType = plain;};
|
||||
virtual ~CyhookHandler(){};
|
||||
|
||||
// hook slot handler
|
||||
@@ -173,8 +176,8 @@ public:
|
||||
void SetError(HttpResponseType responseType, THandleStatus _status)
|
||||
{SetError(responseType); status = _status;}
|
||||
// others
|
||||
long GetContentLength()
|
||||
{return (status==HANDLED_SENDFILE)?ContentLength : (long)yresult.length();}
|
||||
off_t GetContentLength()
|
||||
{return (status==HANDLED_SENDFILE)?ContentLength : (off_t)yresult.length();}
|
||||
// output methods
|
||||
std::string BuildHeader(bool cache = false);
|
||||
void addResult(const std::string& result) {yresult += result;}
|
||||
|
Reference in New Issue
Block a user