Skip to content

Commit b673a4b

Browse files
committed
Added defines for pdu handlers.
1 parent e14e091 commit b673a4b

File tree

4 files changed

+76
-16
lines changed

4 files changed

+76
-16
lines changed

webserver/proxyclient.cpp

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -270,8 +270,12 @@ namespace http {
270270
return result;
271271
}
272272

273-
void CProxyClient::HandleRequest(ProxyPdu *pdu)
273+
PDUFUNCTION(PDU_REQUEST)
274274
{
275+
if (!(_allowed_subsystems & SUBSYSTEM_HTTP)) {
276+
_log.Log(LOG_ERROR, "PROXY: HTTP access disallowed, denying request.");
277+
return;
278+
}
275279
// response variables
276280
boost::asio::mutable_buffers_1 _buf(NULL, 0);
277281
/// The reply to be sent back to the client.
@@ -353,7 +357,7 @@ namespace http {
353357
}
354358
}
355359

356-
void CProxyClient::HandleAssignkey(ProxyPdu *pdu)
360+
PDUFUNCTION(PDU_ASSIGNKEY)
357361
{
358362
// get our new api key
359363
CValueLengthPart parameters(pdu);
@@ -369,7 +373,7 @@ namespace http {
369373
LoginToService();
370374
}
371375

372-
void CProxyClient::HandleEnquire(ProxyPdu *pdu)
376+
PDUFUNCTION(PDU_ENQUIRE)
373377
{
374378
// assemble response
375379
CValueLengthPart parameters;
@@ -378,7 +382,7 @@ namespace http {
378382
MyWrite(PDU_ENQUIRE, parameters);
379383
}
380384

381-
void CProxyClient::HandleServRosterInd(ProxyPdu *pdu)
385+
PDUFUNCTION(PDU_SERV_ROSTERIND)
382386
{
383387
CValueLengthPart part(pdu);
384388
std::string c_slave;
@@ -393,8 +397,12 @@ namespace http {
393397
}
394398
}
395399

396-
void CProxyClient::HandleServDisconnect(ProxyPdu *pdu)
400+
PDUFUNCTION(PDU_SERV_DISCONNECT)
397401
{
402+
if (!(_allowed_subsystems & SUBSYSTEM_SHAREDDOMOTICZ)) {
403+
_log.Log(LOG_ERROR, "PROXY: Shared Server access disallowed, denying disconnect request.");
404+
return;
405+
}
398406
CValueLengthPart part(pdu);
399407
std::string tokenparam;
400408
long reason;
@@ -419,8 +427,13 @@ namespace http {
419427
}
420428
}
421429

422-
void CProxyClient::HandleServConnect(ProxyPdu *pdu)
430+
PDUFUNCTION(PDU_SERV_CONNECT)
423431
{
432+
/* incoming connect from master */
433+
if (!(_allowed_subsystems & SUBSYSTEM_SHAREDDOMOTICZ)) {
434+
_log.Log(LOG_ERROR, "PROXY: Shared Server access disallowed, denying connect request.");
435+
return;
436+
}
424437
CValueLengthPart part(pdu);
425438
CValueLengthPart parameters;
426439
long authenticated, protocol_version;
@@ -459,7 +472,7 @@ namespace http {
459472
MyWrite(PDU_SERV_CONNECTRESP, parameters);
460473
}
461474

462-
void CProxyClient::HandleServConnectResp(ProxyPdu *pdu)
475+
PDUFUNCTION(PDU_SERV_CONNECTRESP)
463476
{
464477
CValueLengthPart part(pdu);
465478
long authenticated;
@@ -487,7 +500,8 @@ namespace http {
487500
}
488501
}
489502

490-
void CProxyClient::HandleServSend(ProxyPdu *pdu) {
503+
PDUFUNCTION(PDU_SERV_SEND)
504+
{
491505
/* data from master to slave */
492506
CValueLengthPart part(pdu);
493507
size_t datalen;
@@ -508,8 +522,12 @@ namespace http {
508522
}
509523
}
510524

511-
void CProxyClient::HandleServReceive(ProxyPdu *pdu)
525+
PDUFUNCTION(PDU_SERV_RECEIVE)
512526
{
527+
if (!(_allowed_subsystems & SUBSYSTEM_SHAREDDOMOTICZ)) {
528+
_log.Log(LOG_ERROR, "PROXY: Shared Server access disallowed, denying receive data request.");
529+
return;
530+
}
513531
/* data from slave to master */
514532
CValueLengthPart part(pdu);
515533
std::string tokenparam;
@@ -538,7 +556,7 @@ namespace http {
538556
MyWrite(PDU_SERV_DISCONNECT, parameters);
539557
}
540558

541-
void CProxyClient::HandleAuthresp(ProxyPdu *pdu)
559+
PDUFUNCTION(PDU_AUTHRESP)
542560
{
543561
// get auth response (0 or 1)
544562
long auth;
@@ -559,9 +577,9 @@ namespace http {
559577
}
560578
_log.Log(LOG_STATUS, "PROXY: Authenticate result: %s.", auth ? "success" : reason.c_str());
561579
if (auth) {
562-
sharedData.RestartTCPClients();
563-
}
564-
else {
580+
sharedData.RestartTCPClients();
581+
}
582+
else {
565583
Stop();
566584
return;
567585
}
@@ -570,6 +588,17 @@ namespace http {
570588
void CProxyClient::PduHandler(ProxyPdu &pdu)
571589
{
572590
switch (pdu._type) {
591+
ONPDU(PDU_REQUEST)
592+
ONPDU(PDU_ASSIGNKEY)
593+
ONPDU(PDU_ENQUIRE)
594+
ONPDU(PDU_AUTHRESP)
595+
ONPDU(PDU_SERV_CONNECT)
596+
ONPDU(PDU_SERV_DISCONNECT)
597+
ONPDU(PDU_SERV_CONNECTRESP)
598+
ONPDU(PDU_SERV_RECEIVE)
599+
ONPDU(PDU_SERV_SEND)
600+
ONPDU(PDU_SERV_ROSTERIND)
601+
#if 0
573602
case PDU_REQUEST:
574603
if (_allowed_subsystems & SUBSYSTEM_HTTP) {
575604
HandleRequest(&pdu);
@@ -625,6 +654,7 @@ namespace http {
625654
/* the slave that we want to connect to is back online */
626655
HandleServRosterInd(&pdu);
627656
break;
657+
#endif
628658
default:
629659
_log.Log(LOG_ERROR, "PROXY: pdu type: %d not expected.", pdu._type);
630660
break;
@@ -878,9 +908,9 @@ namespace http {
878908
void CProxySharedData::RestartTCPClients()
879909
{
880910
for (unsigned int i = 0; i < TCPClients.size(); i++) {
881-
if (!TCPClients[i]->isConnected()) {
911+
if (!TCPClients[i]->isConnected()) {
882912
TCPClients[i]->ConnectInternalProxy();
883-
}
913+
}
884914
}
885915
}
886916

webserver/proxyclient.h

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ namespace http {
6666
};
6767

6868

69+
#define ONPDU(type) case type: Handle##type(pdu); break;
70+
#define PDUPROTO(type) virtual void Handle##type(ProxyPdu &pdu);
71+
#define PDUFUNCTION(type) void CProxyClient::Handle##type(ProxyPdu &pdu)
72+
6973
class CProxyClient {
7074
public:
7175
CProxyClient(boost::asio::io_service& io_service, boost::asio::ssl::context& context, http::server::cWebem *webEm);
@@ -94,8 +98,19 @@ namespace http {
9498
void MyWrite(pdu_type type, CValueLengthPart &parameters);
9599
void LoginToService();
96100

101+
PDUPROTO(PDU_REQUEST)
102+
PDUPROTO(PDU_ASSIGNKEY)
103+
PDUPROTO(PDU_ENQUIRE)
104+
PDUPROTO(PDU_AUTHRESP)
105+
PDUPROTO(PDU_SERV_CONNECT)
106+
PDUPROTO(PDU_SERV_DISCONNECT)
107+
PDUPROTO(PDU_SERV_CONNECTRESP)
108+
PDUPROTO(PDU_SERV_RECEIVE)
109+
PDUPROTO(PDU_SERV_SEND)
110+
PDUPROTO(PDU_SERV_ROSTERIND)
111+
void GetRequest(const std::string originatingip, boost::asio::mutable_buffers_1 _buf, http::server::reply &reply_);
112+
#if 0
97113
void HandleRequest(ProxyPdu *pdu);
98-
void GetRequest(const std::string originatingip, boost::asio::mutable_buffers_1 _buf, http::server::reply &reply_);
99114
void HandleAssignkey(ProxyPdu *pdu);
100115
void HandleEnquire(ProxyPdu *pdu);
101116
void HandleAuthresp(ProxyPdu *pdu);
@@ -105,6 +120,7 @@ namespace http {
105120
void HandleServReceive(ProxyPdu *pdu);
106121
void HandleServSend(ProxyPdu *pdu);
107122
void HandleServRosterInd(ProxyPdu *pdu);
123+
#endif
108124
void SendServDisconnect(const std::string &token, int reason);
109125
void PduHandler(ProxyPdu &pdu);
110126

webserver/proxycommon.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,19 @@ CValueLengthPart::CValueLengthPart(ProxyPdu *pdu)
1616
_len = len;
1717
}
1818

19+
CValueLengthPart::CValueLengthPart(ProxyPdu &pdu)
20+
{
21+
size_t len = pdu.length();
22+
_ptr = _data = malloc(len);
23+
if (_ptr == NULL) {
24+
_log.Log(LOG_ERROR, "CValueLengthPart (1): Could not allocate.");
25+
_len = 0;
26+
return;
27+
}
28+
memcpy(_data, pdu.content(), len);
29+
_len = len;
30+
}
31+
1932
CValueLengthPart::CValueLengthPart()
2033
{
2134
_data = _ptr = NULL;

webserver/proxycommon.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class CValueLengthPart {
5656
public:
5757
CValueLengthPart();
5858
CValueLengthPart(ProxyPdu *pdu);
59+
CValueLengthPart(ProxyPdu &pdu);
5960
CValueLengthPart(void *data, size_t len);
6061
~CValueLengthPart();
6162
void AddPart(void *data, size_t len);

0 commit comments

Comments
 (0)