refactored
This commit is contained in:
+15
-68
@@ -43,12 +43,7 @@
|
|||||||
// Confirmed Function Handlers
|
// Confirmed Function Handlers
|
||||||
// If they are not set, they are handled by a reject message
|
// If they are not set, they are handled by a reject message
|
||||||
static confirmed_function
|
static confirmed_function
|
||||||
Confirmed_Function[MAX_BACNET_CONFIRMED_SERVICE] =
|
Confirmed_Function[MAX_BACNET_CONFIRMED_SERVICE];
|
||||||
{
|
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
void apdu_set_confirmed_handler(
|
void apdu_set_confirmed_handler(
|
||||||
BACNET_CONFIRMED_SERVICE service_choice,
|
BACNET_CONFIRMED_SERVICE service_choice,
|
||||||
@@ -60,13 +55,8 @@ void apdu_set_confirmed_handler(
|
|||||||
|
|
||||||
// Unconfirmed Function Handlers
|
// Unconfirmed Function Handlers
|
||||||
// If they are not set, they are not handled
|
// If they are not set, they are not handled
|
||||||
// Note: we may not need any initializers here since
|
|
||||||
// C is supposed to init global data to zero.
|
|
||||||
static unconfirmed_function
|
static unconfirmed_function
|
||||||
Unconfirmed_Function[MAX_BACNET_UNCONFIRMED_SERVICE] =
|
Unconfirmed_Function[MAX_BACNET_UNCONFIRMED_SERVICE];
|
||||||
{
|
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
void apdu_set_unconfirmed_handler(
|
void apdu_set_unconfirmed_handler(
|
||||||
BACNET_UNCONFIRMED_SERVICE service_choice,
|
BACNET_UNCONFIRMED_SERVICE service_choice,
|
||||||
@@ -76,31 +66,9 @@ void apdu_set_unconfirmed_handler(
|
|||||||
Unconfirmed_Function[service_choice] = pFunction;
|
Unconfirmed_Function[service_choice] = pFunction;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Confirmed simple ACK Function Handlers
|
// Confirmed ACK Function Handlers
|
||||||
// The services that require a complex ACK are not listed here
|
static void *Confirmed_ACK_Function[MAX_BACNET_CONFIRMED_SERVICE];
|
||||||
// FIXME: The array doesn't need to be this big, but is
|
|
||||||
// simpler to handle if it is.
|
|
||||||
// We might be able to combine simple ack and complex ack
|
|
||||||
// functions and only use a single array.
|
|
||||||
static confirmed_simple_ack_function
|
|
||||||
Confirmed_SimpleACK_Function[MAX_BACNET_CONFIRMED_SERVICE] =
|
|
||||||
{
|
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
#if 1
|
|
||||||
// If we don't care which functions actually get set...
|
|
||||||
void apdu_set_confirmed_simple_ack_handler(
|
|
||||||
BACNET_CONFIRMED_SERVICE service_choice,
|
|
||||||
confirmed_simple_ack_function pFunction)
|
|
||||||
{
|
|
||||||
if (service_choice < MAX_BACNET_CONFIRMED_SERVICE)
|
|
||||||
Confirmed_SimpleACK_Function[service_choice] = pFunction;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
// If we care which functions actually get set...
|
|
||||||
void apdu_set_confirmed_simple_ack_handler(
|
void apdu_set_confirmed_simple_ack_handler(
|
||||||
BACNET_CONFIRMED_SERVICE service_choice,
|
BACNET_CONFIRMED_SERVICE service_choice,
|
||||||
confirmed_simple_ack_function pFunction)
|
confirmed_simple_ack_function pFunction)
|
||||||
@@ -127,39 +95,13 @@ void apdu_set_confirmed_simple_ack_handler(
|
|||||||
case SERVICE_CONFIRMED_VT_CLOSE:
|
case SERVICE_CONFIRMED_VT_CLOSE:
|
||||||
// Security Services
|
// Security Services
|
||||||
case SERVICE_CONFIRMED_REQUEST_KEY:
|
case SERVICE_CONFIRMED_REQUEST_KEY:
|
||||||
Confirmed_SimpleACK_Function[service_choice] = pFunction;
|
Confirmed_ACK_Function[service_choice] = pFunction;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
// Confirmed Complex Ack Function Handlers
|
|
||||||
// The services that require a simple ACK are not listed here
|
|
||||||
// FIXME: The array doesn't need to be this big, but is
|
|
||||||
// simpler to handle if it is.
|
|
||||||
// We might be able to combine simple ack and complex ack
|
|
||||||
// functions and only use a single array.
|
|
||||||
static confirmed_ack_function
|
|
||||||
Confirmed_ACK_Function[MAX_BACNET_CONFIRMED_SERVICE] =
|
|
||||||
{
|
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
#if 1
|
|
||||||
// If we don't care which functions actually get set...
|
|
||||||
void apdu_set_confirmed_ack_handler(
|
|
||||||
BACNET_CONFIRMED_SERVICE service_choice,
|
|
||||||
confirmed_ack_function pFunction)
|
|
||||||
{
|
|
||||||
if (service_choice < MAX_BACNET_CONFIRMED_SERVICE)
|
|
||||||
Confirmed_ACK_Function[service_choice] = pFunction;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
// If we care which functions actually get set...
|
|
||||||
void apdu_set_confirmed_ack_handler(
|
void apdu_set_confirmed_ack_handler(
|
||||||
BACNET_CONFIRMED_SERVICE service_choice,
|
BACNET_CONFIRMED_SERVICE service_choice,
|
||||||
confirmed_ack_function pFunction)
|
confirmed_ack_function pFunction)
|
||||||
@@ -191,7 +133,6 @@ void apdu_set_confirmed_ack_handler(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void apdu_handler(
|
void apdu_handler(
|
||||||
BACNET_ADDRESS *src, // source address
|
BACNET_ADDRESS *src, // source address
|
||||||
@@ -280,10 +221,13 @@ void apdu_handler(
|
|||||||
case SERVICE_CONFIRMED_VT_CLOSE:
|
case SERVICE_CONFIRMED_VT_CLOSE:
|
||||||
// Security Services
|
// Security Services
|
||||||
case SERVICE_CONFIRMED_REQUEST_KEY:
|
case SERVICE_CONFIRMED_REQUEST_KEY:
|
||||||
if (Confirmed_SimpleACK_Function[service_choice])
|
if (Confirmed_ACK_Function[service_choice])
|
||||||
Confirmed_SimpleACK_Function[service_choice](
|
{
|
||||||
|
((confirmed_simple_ack_function)
|
||||||
|
Confirmed_ACK_Function[service_choice])(
|
||||||
src,
|
src,
|
||||||
invoke_id);
|
invoke_id);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//FIXME: release the invoke id
|
//FIXME: release the invoke id
|
||||||
@@ -329,11 +273,14 @@ void apdu_handler(
|
|||||||
// Security Services
|
// Security Services
|
||||||
case SERVICE_CONFIRMED_AUTHENTICATE:
|
case SERVICE_CONFIRMED_AUTHENTICATE:
|
||||||
if (Confirmed_ACK_Function[service_choice])
|
if (Confirmed_ACK_Function[service_choice])
|
||||||
Confirmed_ACK_Function[service_choice](
|
{
|
||||||
|
((confirmed_ack_function)
|
||||||
|
Confirmed_ACK_Function[service_choice])(
|
||||||
service_request,
|
service_request,
|
||||||
service_request_len,
|
service_request_len,
|
||||||
src,
|
src,
|
||||||
&service_ack_data);
|
&service_ack_data);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//FIXME: release the invoke id
|
//FIXME: release the invoke id
|
||||||
@@ -348,7 +295,7 @@ void apdu_handler(
|
|||||||
case PDU_TYPE_REJECT:
|
case PDU_TYPE_REJECT:
|
||||||
case PDU_TYPE_ABORT:
|
case PDU_TYPE_ABORT:
|
||||||
invoke_id = apdu[1];
|
invoke_id = apdu[1];
|
||||||
// release the invoke id
|
// FIXME: release the invoke id
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user