Skip to content

Commit 9163a4f

Browse files
author
Sebastiano Merlino
committed
Eliminated unescaper and validator delegates
1 parent 38894ba commit 9163a4f

File tree

2 files changed

+36
-103
lines changed

2 files changed

+36
-103
lines changed

src/httpserver/webserver.hpp

Lines changed: 29 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -96,49 +96,6 @@ class logging_delegate
9696
virtual void log_error(const std::string& s) const;
9797
};
9898

99-
/**
100-
* Delegate class used to validate requests before serve it
101-
**/
102-
class request_validator
103-
{
104-
public:
105-
/**
106-
* Delegate constructor
107-
**/
108-
request_validator();
109-
/**
110-
* Destructor of the class
111-
**/
112-
virtual ~request_validator();
113-
/**
114-
* Method used to validate a request. The validation method is entirely based upon the requestor address.
115-
* @param address The requestor address
116-
* @return true if the request is considered to be valid, false otherwise.
117-
**/
118-
virtual bool validate(const std::string& address) const;
119-
};
120-
121-
/**
122-
* Delegate class used to unescape requests uri before serving it.
123-
**/
124-
class unescaper
125-
{
126-
public:
127-
/**
128-
* Delegate constructor
129-
**/
130-
unescaper();
131-
/**
132-
* Destructor of the class
133-
**/
134-
virtual ~unescaper();
135-
/**
136-
* Method used to unescape the uri.
137-
* @param s pointer to the uri string representation to unescape.
138-
**/
139-
virtual void unescape(char* s) const;
140-
};
141-
14299
class event_supplier
143100
{
144101
public:
@@ -160,6 +117,9 @@ class event_supplier
160117

161118
class create_webserver;
162119

120+
typedef bool(*validator_ptr)(const std::string&);
121+
typedef void(*unescaper_ptr)(char*);
122+
163123
/**
164124
* Class representing the webserver. Main class of the apis.
165125
**/
@@ -196,8 +156,8 @@ class webserver
196156
int connection_timeout = DEFAULT_WS_TIMEOUT,
197157
int per_IP_connection_limit = 0,
198158
logging_delegate* log_delegate = 0x0,
199-
request_validator* validator = 0x0,
200-
unescaper* unescaper_pointer = 0x0,
159+
validator_ptr validator = 0x0,
160+
unescaper_ptr unescaper = 0x0,
201161
const struct sockaddr* bind_address = 0x0,
202162
int bind_socket = 0,
203163
int max_thread_stack_size = 0,
@@ -281,13 +241,25 @@ class webserver
281241

282242
void set_logging_delegate(logging_delegate* log_delegate, bool delete_old = false);
283243

284-
const request_validator* get_request_validator() const;
244+
const validator_ptr get_request_validator() const
245+
{
246+
return this->validator;
247+
}
285248

286-
void set_request_validator(request_validator* validator, bool delete_old = false);
249+
void set_request_validator(validator_ptr validator)
250+
{
251+
this->validator = validator;
252+
}
287253

288-
const unescaper* get_unescaper() const;
254+
const unescaper_ptr get_unescaper() const
255+
{
256+
return this->unescaper;
257+
}
289258

290-
void set_unescaper(unescaper* unescaper_pointer, bool delete_old = false);
259+
void set_unescaper(unescaper_ptr unescaper)
260+
{
261+
this->unescaper = unescaper;
262+
}
291263

292264
void register_event_supplier(const std::string& id, event_supplier* ev_supplier);
293265

@@ -306,8 +278,8 @@ class webserver
306278
int connection_timeout;
307279
int per_IP_connection_limit;
308280
logging_delegate* log_delegate;
309-
request_validator* validator;
310-
unescaper* unescaper_pointer;
281+
validator_ptr validator;
282+
unescaper_ptr unescaper;
311283
const struct sockaddr* bind_address;
312284
int bind_socket;
313285
int max_thread_stack_size;
@@ -470,7 +442,7 @@ class create_webserver
470442
_per_IP_connection_limit(0),
471443
_log_delegate(0x0),
472444
_validator(0x0),
473-
_unescaper_pointer(0x0),
445+
_unescaper(0x0),
474446
_bind_address(0x0),
475447
_bind_socket(0),
476448
_max_thread_stack_size(0),
@@ -509,7 +481,7 @@ class create_webserver
509481
_per_IP_connection_limit(0),
510482
_log_delegate(0x0),
511483
_validator(0x0),
512-
_unescaper_pointer(0x0),
484+
_unescaper(0x0),
513485
_bind_address(0x0),
514486
_bind_socket(0),
515487
_max_thread_stack_size(0),
@@ -546,8 +518,8 @@ class create_webserver
546518
create_webserver& connection_timeout(int connection_timeout) { _connection_timeout = connection_timeout; return *this; }
547519
create_webserver& per_IP_connection_limit(int per_IP_connection_limit) { _per_IP_connection_limit = per_IP_connection_limit; return *this; }
548520
create_webserver& log_delegate(logging_delegate* log_delegate) { _log_delegate = log_delegate; return *this; }
549-
create_webserver& validator(request_validator* validator) { _validator = validator; return *this; }
550-
create_webserver& unescaper_pointer(unescaper* unescaper_pointer) { _unescaper_pointer = unescaper_pointer; return *this; }
521+
create_webserver& validator(validator_ptr validator) { _validator = validator; return *this; }
522+
create_webserver& unescaper(unescaper_ptr unescaper) { _unescaper = unescaper; return *this; }
551523
create_webserver& bind_address(const struct sockaddr* bind_address) { _bind_address = bind_address; return *this; }
552524
create_webserver& bind_socket(int bind_socket) { _bind_socket = bind_socket; return *this; }
553525
create_webserver& max_thread_stack_size(int max_thread_stack_size) { _max_thread_stack_size = max_thread_stack_size; return *this; }
@@ -594,8 +566,8 @@ class create_webserver
594566
int _connection_timeout;
595567
int _per_IP_connection_limit;
596568
logging_delegate* _log_delegate;
597-
request_validator* _validator;
598-
unescaper* _unescaper_pointer;
569+
validator_ptr _validator;
570+
unescaper_ptr _unescaper;
599571
const struct sockaddr* _bind_address;
600572
int _bind_socket;
601573
int _max_thread_stack_size;

src/webserver.cpp

Lines changed: 7 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,6 @@ void access_log(webserver*, string);
294294
size_t unescaper_func(void*, struct MHD_Connection*, char*);
295295
size_t internal_unescaper(void*, char*);
296296

297-
298297
struct compare_value
299298
{
300299
bool operator() (const std::pair<int, int>& left, const std::pair<int, int>& right) const
@@ -332,20 +331,6 @@ void logging_delegate::log_access(const string& s) const {}
332331

333332
void logging_delegate::log_error(const string& s) const {}
334333

335-
//REQUEST VALIDATOR
336-
request_validator::request_validator() {}
337-
338-
request_validator::~request_validator() {}
339-
340-
bool request_validator::validate(const string& address) const { return true; }
341-
342-
//UNESCAPER
343-
unescaper::unescaper() {}
344-
345-
unescaper::~unescaper() {}
346-
347-
void unescaper::unescape(char* s) const {}
348-
349334
//EVENT SUPPLIER
350335
event_supplier::event_supplier() {}
351336

@@ -396,8 +381,8 @@ webserver::webserver
396381
int connection_timeout,
397382
int per_IP_connection_limit,
398383
logging_delegate* log_delegate,
399-
request_validator* validator,
400-
unescaper* unescaper_pointer,
384+
validator_ptr validator,
385+
unescaper_ptr unescaper,
401386
const struct sockaddr* bind_address,
402387
int bind_socket,
403388
int max_thread_stack_size,
@@ -434,7 +419,7 @@ webserver::webserver
434419
per_IP_connection_limit(per_IP_connection_limit),
435420
log_delegate(log_delegate),
436421
validator(validator),
437-
unescaper_pointer(unescaper_pointer),
422+
unescaper(unescaper),
438423
bind_address(bind_address),
439424
bind_socket(bind_socket),
440425
max_thread_stack_size(max_thread_stack_size),
@@ -475,7 +460,7 @@ webserver::webserver(const create_webserver& params):
475460
per_IP_connection_limit(params._per_IP_connection_limit),
476461
log_delegate(params._log_delegate),
477462
validator(params._validator),
478-
unescaper_pointer(params._unescaper_pointer),
463+
unescaper(params._unescaper),
479464
bind_address(params._bind_address),
480465
bind_socket(params._bind_socket),
481466
max_thread_stack_size(params._max_thread_stack_size),
@@ -517,7 +502,7 @@ webserver& webserver::operator=(const webserver& b)
517502
per_IP_connection_limit = b.per_IP_connection_limit;
518503
log_delegate = b.log_delegate;
519504
validator = b.validator;
520-
unescaper_pointer = b.unescaper_pointer;
505+
unescaper = b.unescaper;
521506
bind_address = b.bind_address;
522507
bind_socket = b.bind_socket;
523508
max_thread_stack_size = b.max_thread_stack_size;
@@ -1165,9 +1150,9 @@ size_t unescaper_func(void * cls, struct MHD_Connection *c, char *s)
11651150
size_t internal_unescaper(void* cls, char* s)
11661151
{
11671152
webserver* dws = static_cast<webserver*>(cls);
1168-
if(dws->unescaper_pointer != 0x0)
1153+
if(dws->unescaper != 0x0)
11691154
{
1170-
dws->unescaper_pointer->unescape(s);
1155+
dws->unescaper(s);
11711156
return strlen(s);
11721157
}
11731158
else
@@ -1201,30 +1186,6 @@ void webserver::set_logging_delegate(logging_delegate* log_delegate, bool delete
12011186
this->log_delegate = log_delegate;
12021187
}
12031188

1204-
const request_validator* webserver::get_request_validator() const
1205-
{
1206-
return this->validator;
1207-
}
1208-
1209-
void webserver::set_request_validator(request_validator* validator, bool delete_old)
1210-
{
1211-
if(delete_old && this->validator != 0x0)
1212-
delete this->validator;
1213-
this->validator = validator;
1214-
}
1215-
1216-
const unescaper* webserver::get_unescaper() const
1217-
{
1218-
return this->unescaper_pointer;
1219-
}
1220-
1221-
void webserver::set_unescaper(unescaper* u, bool delete_old)
1222-
{
1223-
if(delete_old && this->unescaper_pointer != 0x0)
1224-
delete this->unescaper_pointer;
1225-
this->unescaper_pointer = unescaper_pointer;
1226-
}
1227-
12281189
void webserver::upgrade_handler (void *cls, struct MHD_Connection* connection,
12291190
void **con_cls, int upgrade_socket)
12301191
{

0 commit comments

Comments
 (0)