From 4e83dc3cb38b049e05268c3924a7a0e289be1538 Mon Sep 17 00:00:00 2001 From: skarg Date: Sun, 17 Apr 2005 01:34:20 +0000 Subject: [PATCH] Added a reject handler function pointer to simplify the reject message for unsupported services. --- bacnet-stack/apdu.c | 16 +++++- bacnet-stack/apdu.h | 4 ++ bacnet-stack/ports/linux/main.c | 90 +-------------------------------- 3 files changed, 21 insertions(+), 89 deletions(-) diff --git a/bacnet-stack/apdu.c b/bacnet-stack/apdu.c index f9b294ac..cdeacaa3 100644 --- a/bacnet-stack/apdu.c +++ b/bacnet-stack/apdu.c @@ -53,6 +53,15 @@ void apdu_set_confirmed_handler( Confirmed_Function[service_choice] = pFunction; } +// Allow the APDU handler to automatically reject +static confirmed_function Unrecognized_Service_Handler; + +void apdu_set_unrecognized_service_handler_handler( + confirmed_function pFunction) +{ + Unrecognized_Service_Handler = pFunction; +} + // Unconfirmed Function Handlers // If they are not set, they are not handled static unconfirmed_function @@ -179,7 +188,12 @@ void apdu_handler( &service_data); else { - //FIXME: send a reject message + if (Unrecognized_Service_Handler) + Unrecognized_Service_Handler( + service_request, + service_request_len, + src, + &service_data); } } break; diff --git a/bacnet-stack/apdu.h b/bacnet-stack/apdu.h index 55047eec..ffd49a5b 100644 --- a/bacnet-stack/apdu.h +++ b/bacnet-stack/apdu.h @@ -113,6 +113,10 @@ void apdu_set_confirmed_simple_ack_handler( BACNET_CONFIRMED_SERVICE service_choice, confirmed_simple_ack_function pFunction); +// configure reject for confirmed services that are not supported +void apdu_set_unrecognized_service_handler_handler( + confirmed_function pFunction); + void apdu_set_confirmed_handler( BACNET_CONFIRMED_SERVICE service_choice, confirmed_function pFunction); diff --git a/bacnet-stack/ports/linux/main.c b/bacnet-stack/ports/linux/main.c index 2e864e3e..2b6ca409 100644 --- a/bacnet-stack/ports/linux/main.c +++ b/bacnet-stack/ports/linux/main.c @@ -262,98 +262,12 @@ static void Init_Service_Handlers(void) // set the handler for all the services we don't implement // It is required to send the proper reject message... - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_ACKNOWLEDGE_ALARM, + apdu_set_unrecognized_service_handler_handler( UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_COV_NOTIFICATION, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_EVENT_NOTIFICATION, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_GET_ALARM_SUMMARY, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_GET_ENROLLMENT_SUMMARY, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_GET_EVENT_INFORMATION, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_SUBSCRIBE_COV, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_SUBSCRIBE_COV_PROPERTY, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_LIFE_SAFETY_OPERATION, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_ATOMIC_READ_FILE, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_ATOMIC_WRITE_FILE, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_ADD_LIST_ELEMENT, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_REMOVE_LIST_ELEMENT, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_CREATE_OBJECT, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_DELETE_OBJECT, - UnrecognizedServiceHandler); - // FIXME: we must implement read property - it's required! + // we must implement read property - it's required! apdu_set_confirmed_handler( SERVICE_CONFIRMED_READ_PROPERTY, ReadPropertyHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_READ_PROPERTY_CONDITIONAL, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_READ_PROPERTY_MULTIPLE, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_READ_RANGE, - UnrecognizedServiceHandler); - // FIXME: we probably want to implement write property to be useful - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_WRITE_PROPERTY, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_WRITE_PROPERTY_MULTIPLE, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_DEVICE_COMMUNICATION_CONTROL, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_PRIVATE_TRANSFER, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_TEXT_MESSAGE, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_REINITIALIZE_DEVICE, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_VT_OPEN, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_VT_CLOSE, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_VT_DATA, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_AUTHENTICATE, - UnrecognizedServiceHandler); - apdu_set_confirmed_handler( - SERVICE_CONFIRMED_REQUEST_KEY, - UnrecognizedServiceHandler); } int main(int argc, char *argv[])