Skip to content

Commit 453d744

Browse files
author
Sebastiano Merlino
committed
Extracted modded_request and http_response_ptr from webserver.cpp
This improves readability
1 parent e40eccf commit 453d744

File tree

4 files changed

+144
-121
lines changed

4 files changed

+144
-121
lines changed

src/Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ INCLUDES = -I../ -I$(srcdir)/httpserver/
2020
METASOURCES = AUTO
2121
lib_LTLIBRARIES = libhttpserver.la
2222
libhttpserver_la_SOURCES = string_utilities.cpp webserver.cpp http_utils.cpp http_endpoint.cpp http_request.cpp http_response.cpp http_resource.cpp
23-
noinst_HEADERS = httpserver/string_utilities.hpp gettext.h
23+
noinst_HEADERS = httpserver/string_utilities.hpp httpserver/details/modded_request.hpp httpserver/details/http_response_ptr.hpp gettext.h
2424
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
2525
AM_CXXFLAGS += -fPIC -Wall
2626
libhttpserver_la_LIBADD = -lmicrohttpd
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
namespace httpserver
2+
{
3+
4+
class webserver;
5+
6+
namespace details
7+
{
8+
9+
struct http_response_ptr
10+
{
11+
public:
12+
http_response_ptr():
13+
res(0x0),
14+
num_references(0x0)
15+
{
16+
num_references = new int(0);
17+
}
18+
http_response_ptr(http_response* res):
19+
res(res),
20+
num_references(0x0)
21+
{
22+
num_references = new int(0);
23+
}
24+
http_response_ptr(const http_response_ptr& b):
25+
res(b.res),
26+
num_references(b.num_references)
27+
{
28+
(*num_references)++;
29+
}
30+
~http_response_ptr()
31+
{
32+
if(num_references)
33+
{
34+
if((*num_references) == 0)
35+
{
36+
if(res && res->autodelete)
37+
{
38+
delete res;
39+
res = 0x0;
40+
}
41+
delete num_references;
42+
}
43+
else
44+
(*num_references)--;
45+
}
46+
}
47+
http_response& operator* ()
48+
{
49+
return *res;
50+
}
51+
http_response* operator-> ()
52+
{
53+
return res;
54+
}
55+
http_response* ptr()
56+
{
57+
return res;
58+
}
59+
http_response_ptr& operator= (const http_response_ptr& b)
60+
{
61+
if( this != &b)
62+
{
63+
if(num_references)
64+
{
65+
if((*num_references) == 0)
66+
{
67+
if(res && res->autodelete)
68+
{
69+
delete res;
70+
res = 0x0;
71+
}
72+
delete num_references;
73+
}
74+
else
75+
(*num_references)--;
76+
}
77+
78+
res = b.res;
79+
num_references = b.num_references;
80+
(*num_references)++;
81+
}
82+
return *this;
83+
}
84+
private:
85+
http_response* res;
86+
int* num_references;
87+
friend class ::httpserver::webserver;
88+
};
89+
90+
} //details
91+
} //httpserver
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#include "binders.hpp"
2+
#include "details/http_response_ptr.hpp"
3+
4+
namespace httpserver
5+
{
6+
7+
namespace details
8+
{
9+
10+
struct modded_request
11+
{
12+
struct MHD_PostProcessor *pp;
13+
std::string* complete_uri;
14+
std::string* standardized_url;
15+
webserver* ws;
16+
17+
const binders::functor_two<
18+
const http_request&, http_response**, void
19+
> http_resource_mirror::*callback;
20+
21+
http_request* dhr;
22+
http_response_ptr dhrs;
23+
bool second;
24+
25+
modded_request():
26+
pp(0x0),
27+
complete_uri(0x0),
28+
standardized_url(0x0),
29+
ws(0x0),
30+
dhr(0x0),
31+
dhrs(0x0),
32+
second(false)
33+
{
34+
}
35+
~modded_request()
36+
{
37+
if (NULL != pp)
38+
{
39+
MHD_destroy_post_processor (pp);
40+
}
41+
if(second)
42+
delete dhr; //TODO: verify. It could be an error
43+
delete complete_uri;
44+
delete standardized_url;
45+
}
46+
47+
};
48+
49+
} //details
50+
51+
} //httpserver

src/webserver.cpp

Lines changed: 1 addition & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#include "details/event_tuple.hpp"
4646
#include "create_webserver.hpp"
4747
#include "webserver.hpp"
48+
#include "details/modded_request.hpp"
4849

4950
#define _REENTRANT 1
5051

@@ -75,126 +76,6 @@ struct daemon_item
7576
}
7677
};
7778

78-
struct http_response_ptr
79-
{
80-
public:
81-
http_response_ptr():
82-
res(0x0),
83-
num_references(0x0)
84-
{
85-
num_references = new int(0);
86-
}
87-
http_response_ptr(http_response* res):
88-
res(res),
89-
num_references(0x0)
90-
{
91-
num_references = new int(0);
92-
}
93-
http_response_ptr(const http_response_ptr& b):
94-
res(b.res),
95-
num_references(b.num_references)
96-
{
97-
(*num_references)++;
98-
}
99-
~http_response_ptr()
100-
{
101-
if(num_references)
102-
{
103-
if((*num_references) == 0)
104-
{
105-
if(res && res->autodelete)
106-
{
107-
delete res;
108-
res = 0x0;
109-
}
110-
delete num_references;
111-
}
112-
else
113-
(*num_references)--;
114-
}
115-
}
116-
http_response& operator* ()
117-
{
118-
return *res;
119-
}
120-
http_response* operator-> ()
121-
{
122-
return res;
123-
}
124-
http_response* ptr()
125-
{
126-
return res;
127-
}
128-
http_response_ptr& operator= (const http_response_ptr& b)
129-
{
130-
if( this != &b)
131-
{
132-
if(num_references)
133-
{
134-
if((*num_references) == 0)
135-
{
136-
if(res && res->autodelete)
137-
{
138-
delete res;
139-
res = 0x0;
140-
}
141-
delete num_references;
142-
}
143-
else
144-
(*num_references)--;
145-
}
146-
147-
res = b.res;
148-
num_references = b.num_references;
149-
(*num_references)++;
150-
}
151-
return *this;
152-
}
153-
private:
154-
http_response* res;
155-
int* num_references;
156-
friend class ::httpserver::webserver;
157-
};
158-
159-
struct modded_request
160-
{
161-
struct MHD_PostProcessor *pp;
162-
std::string* complete_uri;
163-
std::string* standardized_url;
164-
webserver* ws;
165-
166-
const binders::functor_two<
167-
const http_request&, http_response**, void
168-
> http_resource_mirror::*callback;
169-
170-
http_request* dhr;
171-
http_response_ptr dhrs;
172-
bool second;
173-
174-
modded_request():
175-
pp(0x0),
176-
complete_uri(0x0),
177-
standardized_url(0x0),
178-
ws(0x0),
179-
dhr(0x0),
180-
dhrs(0x0),
181-
second(false)
182-
{
183-
}
184-
~modded_request()
185-
{
186-
if (NULL != pp)
187-
{
188-
MHD_destroy_post_processor (pp);
189-
}
190-
if(second)
191-
delete dhr; //TODO: verify. It could be an error
192-
delete complete_uri;
193-
delete standardized_url;
194-
}
195-
196-
};
197-
19879
void empty_render(const http_request& r, http_response** res)
19980
{
20081
*res = new http_string_response("", 200);

0 commit comments

Comments
 (0)