davix  0.4.1
Public Member Functions | Friends
Davix::HttpRequest Class Reference

Http low level request interface. More...

#include <httprequest.hpp>

Inheritance diagram for Davix::HttpRequest:
NonCopyable Davix::DeleteRequest Davix::GetRequest Davix::HeadRequest Davix::PropfindRequest Davix::PutRequest

Public Member Functions

 HttpRequest (Context &context, const Uri &url, DavixError **err)
 HttpRequest constructor with a defined URL. More...
 
 HttpRequest (Context &context, const std::string &url, DavixError **err)
 HttpRequest constructor with a defined URL from a string. More...
 
 HttpRequest (NEONRequest *req)
 HttpRequest internal usage. More...
 
void addHeaderField (const std::string &field, const std::string &value)
 
void setRequestMethod (const std::string &method)
 set the request method ( "GET", "PUT", ... ) More...
 
void setParameters (const RequestParams &parameters)
 set the request parameter More...
 
int executeRequest (DavixError **err)
 execute this request completely More...
 
void setRequestBody (const std::string &body)
 
void setRequestBody (const void *buffer, dav_size_t len_buff)
 
void setRequestBody (int fd, dav_off_t offset, dav_size_t len)
 
void setRequestBody (HttpBodyProvider provider, dav_size_t len, void *udata)
 
int beginRequest (DavixError **err)
 start a multi-part HTTP Request More...
 
dav_ssize_t readBlock (char *buffer, dav_size_t max_size, DavixError **err)
 
dav_ssize_t readBlock (std::vector< char > &buffer, dav_size_t max_size, DavixError **err)
 
dav_ssize_t readSegment (char *buffer, dav_size_t max_size, DavixError **err)
 
dav_ssize_t readToFd (int fd, DavixError **err)
 
dav_ssize_t readToFd (int fd, dav_size_t read_size, DavixError **err)
 
dav_ssize_t readLine (char *buffer, dav_size_t max_size, DavixError **err)
 
void discardBody (DavixError **err)
 
int endRequest (DavixError **err)
 
const char * getAnswerContent ()
 
std::vector< char > & getAnswerContentVec ()
 
dav_ssize_t getAnswerSize () const
 
time_t getLastModified () const
 
void clearAnswerContent ()
 
int getRequestCode ()
 
bool getAnswerHeader (const std::string &header_name, std::string &value) const
 
size_t getAnswerHeaders (HeaderVec &vec_headers) const
 
 DEPRECATED (HttpCacheToken *extractCacheToken() const)
 
 DEPRECATED (void useCacheToken(const HttpCacheToken *token))
 
void setFlag (const RequestFlag::RequestFlag flag, bool value)
 set a HttpRequest flag
 
bool getFlag (const RequestFlag::RequestFlag flag)
 get a HttpRequest flag value
 

Friends

class NEONRequest
 
class NEONSessionFactory
 

Detailed Description

Http low level request interface.

HTTPRequest is the main davix class for low level HTTP queries.

HTTPRequest objects are provided by Davix::Context

Constructor & Destructor Documentation

Davix::HttpRequest::HttpRequest ( Context context,
const Uri url,
DavixError **  err 
)

HttpRequest constructor with a defined URL.

Parameters
contextdavix context
urlURL of the resource
errDavix error report system
Context c;
DavixError* err = NULL;
HttpRequest myrequest(c, Uri("http://example.org/some_useful_stuff"), &err);
Davix::HttpRequest::HttpRequest ( Context context,
const std::string &  url,
DavixError **  err 
)

HttpRequest constructor with a defined URL from a string.

Parameters
contextdavix context
urlURL of the resource
errDavix error report system
Context c;
DavixError* err = NULL;
HttpRequest myrequest(c, "http://example.org/some_useful_stuff", &err);
Davix::HttpRequest::HttpRequest ( NEONRequest *  req)

HttpRequest internal usage.

Parameters
req

Member Function Documentation

void Davix::HttpRequest::addHeaderField ( const std::string &  field,
const std::string &  value 
)

add a optional HTTP header request replace an existing one if already exist if the content of value of the header field is empty : remove an existing one

Parameters
fieldheader field name
valueheader field value
myrequest.addHeaderField("Accept", "application/metalink4+xml");
int Davix::HttpRequest::beginRequest ( DavixError **  err)

start a multi-part HTTP Request

the multi-part HTTP Request of davix should be used for request with a large answer

Parameters
err: DavixError error report system
Returns
return 0 if success, or a negative value if an error occures
myrequest.beginRequest(&err);
void Davix::HttpRequest::clearAnswerContent ( )

clear the current result

myrequest.clearAnswerContent();
Davix::HttpRequest::DEPRECATED ( HttpCacheToken *extractCacheToken()  const)
Deprecated:
not in use anymore
Davix::HttpRequest::DEPRECATED ( void   useCacheTokenconst HttpCacheToken *token)
Deprecated:
not in use anymore
void Davix::HttpRequest::discardBody ( DavixError **  err)

discard the response body

Parameters
errDavixError error report system
myrequest.discardBody(&err);
int Davix::HttpRequest::endRequest ( DavixError **  err)

finish a request stated with beginRequest

myrequest.endRequest(&err);
int Davix::HttpRequest::executeRequest ( DavixError **  err)

execute this request completely

the answer is accessible with Davix::HttpRequest::getAnswerContent

Parameters
errdavix error report
Returns
0 on success
myrequest.executeRequest(&err);
const char* Davix::HttpRequest::getAnswerContent ( )

return the body of the answer

// into static buffer
char buffer2[255];
buffer2 = myrequest.getAnswerContent();
std::vector<char>& Davix::HttpRequest::getAnswerContentVec ( )

return the body of the answer in a vector

// into dynamically sized buffer
std::vector<char> buffer1;
buffer1 = myrequest.getAnswerContentVec();
bool Davix::HttpRequest::getAnswerHeader ( const std::string &  header_name,
std::string &  value 
) const

get the value associated to a header key in the request answer

Parameters
header_name: key of the header field
value: reference of the string to set
Returns
true if this header exist or false if it does not
std::string value;
myrequest.getAnswerHeader(“Content-Type”, &value);
std::cout << “Content-Type is ” << value << std::endl;
size_t Davix::HttpRequest::getAnswerHeaders ( HeaderVec &  vec_headers) const

get all the headers associated with this answer

Parameters
value: vector of headers
Returns
true if this header exist or false if it does not
HeaderVec headers;
myrequest.getAnswerHeaders(headers);
for(HeaderVec::iterator it = headers.begin(), it < headers.end(); ++it){
std::cout << it->first << “: ” << it->second << std::endl;
}
dav_ssize_t Davix::HttpRequest::getAnswerSize ( ) const

get content length

Returns
content size, return -1 if chunked
dav_ssize_t size;
size = myrequest.getAnswerSize();
time_t Davix::HttpRequest::getLastModified ( ) const

get last modified time

time_t last_modified;
last_modified = myrequest.getLastModified();
int Davix::HttpRequest::getRequestCode ( )
Returns
current request code error undefined if executeRequest or beginRequest has not be called before
int code;
code = myrequest.getRequestCode();
dav_ssize_t Davix::HttpRequest::readBlock ( char *  buffer,
dav_size_t  max_size,
DavixError **  err 
)

read a block of a maximum size bytes in the answer can return < max_size bytes depending of the data available

Parameters
buffer: buffer to fill
max_size: maximum number of byte to read
err: DavixError error report system
Returns
number of bytes readed
// read max n bytes to static buffer
char buffer[255];
myrequest.readBlock(&buffer, n, &err);
// read to dynamically sized buffer, with max size n
std::vector<char> buffer2;
myrequest.readBlock(&buffer2, n, &err);
dav_ssize_t Davix::HttpRequest::readBlock ( std::vector< char > &  buffer,
dav_size_t  max_size,
DavixError **  err 
)

read a block of a maximum size bytes in the answer into buffer can return < max_size bytes depending of the data available

Parameters
buffer: vector to fill
max_size: maximum number of byte to read
err: DavixError error report system
Returns
number of bytes readed
// read max n bytes to static buffer
char buffer[255];
myrequest.readBlock(&buffer, n, &err);
// read to dynamically sized buffer, with max size n
std::vector<char> buffer2;
myrequest.readBlock(&buffer2, n, &err);
dav_ssize_t Davix::HttpRequest::readLine ( char *  buffer,
dav_size_t  max_size,
DavixError **  err 
)

read a line of text of a maximum size bytes in the answer

Parameters
buffer: buffer to fill
max_size: maximum number of bytes to read
err: DavixError error report system
Returns
number of bytes readed, if return == max_size -> the line too big
char buffer[255];
myrequest.readLine(&buffer, n, &err);
dav_ssize_t Davix::HttpRequest::readSegment ( char *  buffer,
dav_size_t  max_size,
DavixError **  err 
)

read a segment of size bytes, return always max_size excepted if the end of the content is reached

Parameters
buffer: vector to fill
max_size: maximum number of byte to read
err: DavixError error report system
Returns
number of bytes readed
// readSegment calls readBlock repeatedly until n size is read, or end of answer
char buffer[50*1024];
myrequest.readSegment(&buffer, n, &err);
dav_ssize_t Davix::HttpRequest::readToFd ( int  fd,
DavixError **  err 
)

write the full answer content to the given file descriptor

Parameters
fd: buffer to fill
err: DavixError error report system
Returns
number of bytes read
char buffer[255]
int fd = open(“tmp/myfile”, O_WRONLY | O_CREAT);
// with no size limit
myrequest.readToFd(fd, &err);
// with 100 bytes limit
myrequest.readToFd(fd, 100, &err);
dav_ssize_t Davix::HttpRequest::readToFd ( int  fd,
dav_size_t  read_size,
DavixError **  err 
)

write the first 'read_size' first bytes to the given file descriptor

Parameters
fd: buffer to fill
read_size: number of bytes to read
err: DavixError error report system
Returns
number of bytes read
char buffer[255]
int fd = open(“tmp/myfile”, O_WRONLY | O_CREAT);
// with no size limit
myrequest.readToFd(fd, &err);
// with 100 bytes limit
myrequest.readToFd(fd, 100, &err);
void Davix::HttpRequest::setParameters ( const RequestParams parameters)

set the request parameter

Parameters
parametersDavix Request parameters

define the request parameters, can be used to define parameters such as authentication scheme, timeout or user agent.

void Davix::HttpRequest::setRequestBody ( const std::string &  body)

set the content of the request from a string an empty string set no request content

Warning
this string is not duplicated internally for performance reasons
// from a string
std::string content_string
myrequest.setRequestBody(content_string);
// from a buffer
char buffer [255];
// fills buffer with something useful
myrequest.setRequestBody(&buffer, sizeof(buffer));
// from a file descriptor, at offset 100 for 200 bytes
int fd = open(“/tmp/myfile”, O_RDONLY);
myrequest.setRequestBody(fd, 100, 200);
close(fd);
void Davix::HttpRequest::setRequestBody ( const void *  buffer,
dav_size_t  len_buff 
)

set the content of the request from a buffer NULL pointer means a empty content

// from a string
std::string content_string
myrequest.setRequestBody(content_string);
// from a buffer
char buffer [255];
// fills buffer with something useful
myrequest.setRequestBody(&buffer, sizeof(buffer));
// from a file descriptor, at offset 100 for 200 bytes
int fd = open(“/tmp/myfile”, O_RDONLY);
myrequest.setRequestBody(fd, 100, 200);
close(fd);
void Davix::HttpRequest::setRequestBody ( int  fd,
dav_off_t  offset,
dav_size_t  len 
)

set the content of the request from a file descriptor start at offset and read a maximum of len bytes

// from a string
std::string content_string
myrequest.setRequestBody(content_string);
// from a buffer
char buffer [255];
// fills buffer with something useful
myrequest.setRequestBody(&buffer, sizeof(buffer));
// from a file descriptor, at offset 100 for 200 bytes
int fd = open(“/tmp/myfile”, O_RDONLY);
myrequest.setRequestBody(fd, 100, 200);
close(fd);
void Davix::HttpRequest::setRequestBody ( HttpBodyProvider  provider,
dav_size_t  len,
void *  udata 
)

set a callback to provide the body of the requests

void Davix::HttpRequest::setRequestMethod ( const std::string &  method)

set the request method ( "GET", "PUT", ... )

Parameters
methodrequest method
myrequest.setRequestMethod(“GET”);

The documentation for this class was generated from the following file: