Skip to content

Commit d76fe92

Browse files
author
Sebastiano Merlino
committed
Updated http_response interface
Implemented a much more cler interface based on builder class. Changed http_response to be a non modifiable class (still not completely achieved)
1 parent ee47472 commit d76fe92

File tree

13 files changed

+399
-673
lines changed

13 files changed

+399
-673
lines changed

configure.ac

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
AC_PREREQ(2.57)
2323
m4_define([libhttpserver_MAJOR_VERSION],[0])dnl
24-
m4_define([libhttpserver_MINOR_VERSION],[7])dnl
24+
m4_define([libhttpserver_MINOR_VERSION],[8])dnl
2525
m4_define([libhttpserver_REVISION],[2])dnl
2626
m4_define([libhttpserver_PKG_VERSION],[libhttpserver_MAJOR_VERSION.libhttpserver_MINOR_VERSION.libhttpserver_REVISION])dnl
2727
m4_define([libhttpserver_LDF_VERSION],[libhttpserver_MAJOR_VERSION:libhttpserver_MINOR_VERSION:libhttpserver_REVISION])dnl

examples/Test.cpp

Lines changed: 0 additions & 129 deletions
This file was deleted.

examples/Test.hpp

Lines changed: 0 additions & 41 deletions
This file was deleted.

examples/hello_world.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void hello_world_resource::render(const http_request& req, http_response** res)
4242

4343
//it is possible to send a response initializing an http_string_response
4444
//that reads the content to send in response from a string.
45-
*res = new http_string_response("Hello World!!!", 200);
45+
*res = new http_response(http_response_builder("Hello World!!!", 200).string_response());
4646
}
4747

4848
int main()

src/Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ METASOURCES = AUTO
2121
lib_LTLIBRARIES = libhttpserver.la
2222
libhttpserver_la_SOURCES = string_utilities.cpp webserver.cpp http_utils.cpp http_request.cpp http_response.cpp http_resource.cpp details/comet_manager.cpp details/http_endpoint.cpp
2323
noinst_HEADERS = httpserver/string_utilities.hpp httpserver/details/modded_request.hpp httpserver/details/http_response_ptr.hpp httpserver/details/cache_entry.hpp httpserver/details/comet_manager.hpp gettext.h
24-
nobase_include_HEADERS = httpserver.hpp httpserver/create_webserver.hpp httpserver/webserver.hpp httpserver/http_utils.hpp httpserver/details/http_endpoint.hpp httpserver/http_request.hpp httpserver/http_response.hpp httpserver/http_resource.hpp httpserver/binders.hpp httpserver/event_supplier.hpp httpserver/details/event_tuple.hpp httpserver/details/http_resource_mirror.hpp
24+
nobase_include_HEADERS = httpserver.hpp httpserver/create_webserver.hpp httpserver/webserver.hpp httpserver/http_utils.hpp httpserver/details/http_endpoint.hpp httpserver/http_request.hpp httpserver/http_response.hpp httpserver/http_resource.hpp httpserver/binders.hpp httpserver/event_supplier.hpp httpserver/details/event_tuple.hpp httpserver/details/http_resource_mirror.hpp httpserver/http_response_builder.hpp
2525
AM_CXXFLAGS += -fPIC -Wall
2626
libhttpserver_la_LIBADD = -lmicrohttpd
2727
libhttpserver_la_LDFLAGS =

src/http_response.cpp

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,43 @@
2929
#include "details/event_tuple.hpp"
3030
#include "webserver.hpp"
3131
#include "http_response.hpp"
32+
#include "http_response_builder.hpp"
3233

3334
using namespace std;
3435

3536
namespace httpserver
3637
{
3738

39+
http_response::http_response(const http_response_builder& builder):
40+
content(builder._content_hook),
41+
response_code(builder._response_code),
42+
autodelete(builder._autodelete),
43+
realm(builder._realm),
44+
opaque(builder._opaque),
45+
reload_nonce(builder._reload_nonce),
46+
fp(-1),
47+
filename(builder._content_hook),
48+
headers(builder._headers),
49+
footers(builder._footers),
50+
cookies(builder._cookies),
51+
topics(builder._topics),
52+
keepalive_secs(builder._keepalive_secs),
53+
keepalive_msg(builder._keepalive_msg),
54+
send_topic(builder._send_topic),
55+
underlying_connection(0x0),
56+
ca(0x0),
57+
closure_data(0x0),
58+
ce(builder._ce),
59+
cycle_callback(builder._cycle_callback),
60+
get_raw_response(this, builder._get_raw_response),
61+
decorate_response(this, builder._decorate_response),
62+
enqueue_response(this, builder._enqueue_response),
63+
completed(false),
64+
ws(0x0),
65+
connection_id(0x0)
66+
{
67+
}
68+
3869
http_response::~http_response()
3970
{
4071
if(ce != 0x0)
@@ -60,27 +91,6 @@ size_t http_response::get_cookies(std::map<std::string, std::string, header_comp
6091
}
6192

6293
//RESPONSE
63-
shoutCAST_response::shoutCAST_response
64-
(
65-
const std::string& content,
66-
int response_code,
67-
const std::string& content_type,
68-
bool autodelete
69-
):
70-
http_response(
71-
this,
72-
content,
73-
response_code | http_utils::shoutcast_response,
74-
content_type,autodelete
75-
)
76-
{
77-
}
78-
79-
ssize_t deferred_response::cycle_callback(const std::string& buf)
80-
{
81-
return -1;
82-
}
83-
8494
void http_response::get_raw_response_str(MHD_Response** response, webserver* ws)
8595
{
8696
size_t size = &(*content.end()) - &(*content.begin());
@@ -197,9 +207,9 @@ namespace details
197207

198208
ssize_t cb(void* cls, uint64_t pos, char* buf, size_t max)
199209
{
200-
int val = static_cast<deferred_response*>(cls)->cycle_callback(buf);
210+
int val = static_cast<http_response*>(cls)->cycle_callback(buf);
201211
if(val == -1)
202-
static_cast<deferred_response*>(cls)->completed = true;
212+
static_cast<http_response*>(cls)->completed = true;
203213
return val;
204214
}
205215

@@ -240,7 +250,7 @@ void http_response::get_raw_response_lp_receive(
240250
)->client_addr;
241251

242252
*response = MHD_create_response_from_callback(MHD_SIZE_UNKNOWN, 80,
243-
&long_polling_receive_response::data_generator, (void*) this, NULL);
253+
&http_response::data_generator, (void*) this, NULL);
244254

245255
ws->register_to_topics(
246256
topics,
@@ -250,15 +260,14 @@ void http_response::get_raw_response_lp_receive(
250260
);
251261
}
252262

253-
ssize_t long_polling_receive_response::data_generator(
263+
ssize_t http_response::data_generator(
254264
void* cls,
255265
uint64_t pos,
256266
char* buf,
257267
size_t max
258268
)
259269
{
260-
long_polling_receive_response* _this =
261-
static_cast<long_polling_receive_response*>(cls);
270+
http_response* _this = static_cast<http_response*>(cls);
262271

263272
if(_this->ws->pop_signaled(_this->connection_id))
264273
{

src/httpserver.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "httpserver/details/http_endpoint.hpp"
2828
#include "httpserver/http_resource.hpp"
2929
#include "httpserver/http_response.hpp"
30+
#include "httpserver/http_response_builder.hpp"
3031
#include "httpserver/http_request.hpp"
3132
#include "httpserver/event_supplier.hpp"
3233
#include "httpserver/details/event_tuple.hpp"

src/httpserver/details/cache_entry.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727

2828
#include <pthread.h>
2929
#include <set>
30-
#include "details/http_response_ptr.hpp"
30+
#include "httpserver/details/http_response_ptr.hpp"
31+
#include "httpserver/http_response.hpp"
3132

3233
namespace httpserver
3334
{

src/httpserver/details/http_response_ptr.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
#ifndef _HTTP_RESPONSE_PTR_HPP_
2626
#define _HTTP_RESPONSE_PTR_HPP_
2727

28+
#include "httpserver/http_response.hpp"
29+
2830
namespace httpserver
2931
{
3032

@@ -60,7 +62,7 @@ struct http_response_ptr
6062
{
6163
if((*num_references) == 0)
6264
{
63-
if(res && res->autodelete)
65+
if(res && res->is_autodelete())
6466
{
6567
delete res;
6668
res = 0x0;

0 commit comments

Comments
 (0)