/usr/include/Wt/WStreamResource is in libwt-dev 3.3.4+dfsg-6ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | // This may look like C code, but it's really -*- C++ -*-
/*
* Copyright (C) 2011 Emweb bvba, Kessel-Lo, Belgium.
*
* See the LICENSE file for terms of use.
*/
#ifndef WSTREAM_RESOURCE_H_
#define WSTREAM_RESOURCE_H_
#include <Wt/WResource>
#include <string>
namespace Wt {
/*! \class WStreamResource Wt/WStreamResource Wt/WStreamResource
* \brief An object which streams the data from a std::istream.
*
* This class can be useful base for implementing resources which streams
* the data from std::istream derivatives.
*
* The utility method handleRequestPiecewise() makes use of continuations
* to transmit data piecewise, without blocking a thread or requiring the
* whole data to be read in memory. The size of the buffer can be changed
* by using setBufferSize().
*
* \if cpp
* Example for a custom stream resource implementation:
* \code
class MyStreamResource : public Wt::WStreamResource
{
public:
MyStreamResource(const std::string& fileName, Wt::WObject *parent = 0)
: Wt::WStreamResource(parent),
fileName_(fileName)
{
suggestFileName("data.txt");
}
~MyStreamResource() {
beingDeleted();
}
void handleRequest(const Wt::Http::Request& request,
Wt::Http::Response& response) {
std::ifstream r(fileName_.c_str(), std::ios::in | std::ios::binary);
handleRequestPiecewise(request, response, r);
}
private:
std::string fileName_;
};
* \endcode
* \endif
*
* \sa WFileResource
*/
class WT_API WStreamResource : public WResource
{
public:
/*! \brief Default constructor.
*
* The mime type defaults to "text/plain".
*/
WStreamResource(WObject *parent = 0);
/*! \brief Creates a new resource with given mime-type.
*/
WStreamResource(const std::string& mimeType, WObject *parent = 0);
/*! \brief Destructor.
*
* It is up to the user to make sure that the resource is no longer
* in use (by e.g. a WImage).
*/
~WStreamResource();
/*! \brief Sets the mime-type.
*/
void setMimeType(const std::string& mimeType);
/*! \brief Returns the mime-type.
*/
const std::string& mimeType() const { return mimeType_; }
/*! \brief Configures the buffer size.
*
* This configures the size of the buffer used to transmit the data
* piece by piece.
*/
void setBufferSize(int size);
/*! \brief Returns the buffer size.
*
* \sa setBufferSize()
*/
int bufferSize() const { return bufferSize_; }
protected:
/*! \brief Handles a request and streams the data from a std::istream.
*
* You can call this method from a custom handleRequest() implementations.
*/
void handleRequestPiecewise(const Http::Request& request,
Http::Response& response, std::istream& input);
private:
std::string mimeType_;
int bufferSize_;
std::streamsize beyondLastByte_;
};
}
#endif // WSTREAM_RESOURCE_H_
|