@@ -270,8 +270,12 @@ namespace http {
270
270
return result;
271
271
}
272
272
273
- void CProxyClient::HandleRequest (ProxyPdu *pdu )
273
+ PDUFUNCTION (PDU_REQUEST )
274
274
{
275
+ if (!(_allowed_subsystems & SUBSYSTEM_HTTP)) {
276
+ _log.Log (LOG_ERROR, " PROXY: HTTP access disallowed, denying request." );
277
+ return ;
278
+ }
275
279
// response variables
276
280
boost::asio::mutable_buffers_1 _buf (NULL , 0 );
277
281
// / The reply to be sent back to the client.
@@ -353,7 +357,7 @@ namespace http {
353
357
}
354
358
}
355
359
356
- void CProxyClient::HandleAssignkey (ProxyPdu *pdu )
360
+ PDUFUNCTION (PDU_ASSIGNKEY )
357
361
{
358
362
// get our new api key
359
363
CValueLengthPart parameters (pdu);
@@ -369,7 +373,7 @@ namespace http {
369
373
LoginToService ();
370
374
}
371
375
372
- void CProxyClient::HandleEnquire (ProxyPdu *pdu )
376
+ PDUFUNCTION (PDU_ENQUIRE )
373
377
{
374
378
// assemble response
375
379
CValueLengthPart parameters;
@@ -378,7 +382,7 @@ namespace http {
378
382
MyWrite (PDU_ENQUIRE, parameters);
379
383
}
380
384
381
- void CProxyClient::HandleServRosterInd (ProxyPdu *pdu )
385
+ PDUFUNCTION (PDU_SERV_ROSTERIND )
382
386
{
383
387
CValueLengthPart part (pdu);
384
388
std::string c_slave;
@@ -393,8 +397,12 @@ namespace http {
393
397
}
394
398
}
395
399
396
- void CProxyClient::HandleServDisconnect (ProxyPdu *pdu )
400
+ PDUFUNCTION (PDU_SERV_DISCONNECT )
397
401
{
402
+ if (!(_allowed_subsystems & SUBSYSTEM_SHAREDDOMOTICZ)) {
403
+ _log.Log (LOG_ERROR, " PROXY: Shared Server access disallowed, denying disconnect request." );
404
+ return ;
405
+ }
398
406
CValueLengthPart part (pdu);
399
407
std::string tokenparam;
400
408
long reason;
@@ -419,8 +427,13 @@ namespace http {
419
427
}
420
428
}
421
429
422
- void CProxyClient::HandleServConnect (ProxyPdu *pdu )
430
+ PDUFUNCTION (PDU_SERV_CONNECT )
423
431
{
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
+ }
424
437
CValueLengthPart part (pdu);
425
438
CValueLengthPart parameters;
426
439
long authenticated, protocol_version;
@@ -459,7 +472,7 @@ namespace http {
459
472
MyWrite (PDU_SERV_CONNECTRESP, parameters);
460
473
}
461
474
462
- void CProxyClient::HandleServConnectResp (ProxyPdu *pdu )
475
+ PDUFUNCTION (PDU_SERV_CONNECTRESP )
463
476
{
464
477
CValueLengthPart part (pdu);
465
478
long authenticated;
@@ -487,7 +500,8 @@ namespace http {
487
500
}
488
501
}
489
502
490
- void CProxyClient::HandleServSend (ProxyPdu *pdu) {
503
+ PDUFUNCTION (PDU_SERV_SEND)
504
+ {
491
505
/* data from master to slave */
492
506
CValueLengthPart part (pdu);
493
507
size_t datalen;
@@ -508,8 +522,12 @@ namespace http {
508
522
}
509
523
}
510
524
511
- void CProxyClient::HandleServReceive (ProxyPdu *pdu )
525
+ PDUFUNCTION (PDU_SERV_RECEIVE )
512
526
{
527
+ if (!(_allowed_subsystems & SUBSYSTEM_SHAREDDOMOTICZ)) {
528
+ _log.Log (LOG_ERROR, " PROXY: Shared Server access disallowed, denying receive data request." );
529
+ return ;
530
+ }
513
531
/* data from slave to master */
514
532
CValueLengthPart part (pdu);
515
533
std::string tokenparam;
@@ -538,7 +556,7 @@ namespace http {
538
556
MyWrite (PDU_SERV_DISCONNECT, parameters);
539
557
}
540
558
541
- void CProxyClient::HandleAuthresp (ProxyPdu *pdu )
559
+ PDUFUNCTION (PDU_AUTHRESP )
542
560
{
543
561
// get auth response (0 or 1)
544
562
long auth;
@@ -559,9 +577,9 @@ namespace http {
559
577
}
560
578
_log.Log (LOG_STATUS, " PROXY: Authenticate result: %s." , auth ? " success" : reason.c_str ());
561
579
if (auth) {
562
- sharedData.RestartTCPClients ();
563
- }
564
- else {
580
+ sharedData.RestartTCPClients ();
581
+ }
582
+ else {
565
583
Stop ();
566
584
return ;
567
585
}
@@ -570,6 +588,17 @@ namespace http {
570
588
void CProxyClient::PduHandler (ProxyPdu &pdu)
571
589
{
572
590
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
573
602
case PDU_REQUEST:
574
603
if (_allowed_subsystems & SUBSYSTEM_HTTP) {
575
604
HandleRequest(&pdu);
@@ -625,6 +654,7 @@ namespace http {
625
654
/* the slave that we want to connect to is back online */
626
655
HandleServRosterInd(&pdu);
627
656
break;
657
+ #endif
628
658
default :
629
659
_log.Log (LOG_ERROR, " PROXY: pdu type: %d not expected." , pdu._type );
630
660
break ;
@@ -878,9 +908,9 @@ namespace http {
878
908
void CProxySharedData::RestartTCPClients ()
879
909
{
880
910
for (unsigned int i = 0 ; i < TCPClients.size (); i++) {
881
- if (!TCPClients[i]->isConnected ()) {
911
+ if (!TCPClients[i]->isConnected ()) {
882
912
TCPClients[i]->ConnectInternalProxy ();
883
- }
913
+ }
884
914
}
885
915
}
886
916
0 commit comments