added reject messages
This commit is contained in:
@@ -12,6 +12,7 @@ SRCS = ports/linux/main.c \
|
|||||||
bigend.c \
|
bigend.c \
|
||||||
whois.c \
|
whois.c \
|
||||||
iam.c \
|
iam.c \
|
||||||
|
reject.c \
|
||||||
apdu.c \
|
apdu.c \
|
||||||
npdu.c
|
npdu.c
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include "apdu.h"
|
#include "apdu.h"
|
||||||
#include "iam.h"
|
#include "iam.h"
|
||||||
#include "whois.h"
|
#include "whois.h"
|
||||||
|
#include "reject.h"
|
||||||
#include "ethernet.h"
|
#include "ethernet.h"
|
||||||
|
|
||||||
// buffers used for transmit and receive
|
// buffers used for transmit and receive
|
||||||
@@ -26,6 +27,38 @@ uint32_t Device_Id = 111;
|
|||||||
// flag to send an I-Am
|
// flag to send an I-Am
|
||||||
bool I_Am_Request = true;
|
bool I_Am_Request = true;
|
||||||
|
|
||||||
|
void UnrecognizedServiceHandler(
|
||||||
|
uint8_t *service_request,
|
||||||
|
uint16_t service_len,
|
||||||
|
BACNET_ADDRESS *dest,
|
||||||
|
BACNET_CONFIRMED_SERVICE_DATA *service_data)
|
||||||
|
{
|
||||||
|
BACNET_ADDRESS src;
|
||||||
|
int pdu_len = 0;
|
||||||
|
|
||||||
|
ethernet_get_my_address(&src);
|
||||||
|
|
||||||
|
// encode the NPDU portion of the packet
|
||||||
|
pdu_len = npdu_encode_apdu(
|
||||||
|
&Tx_Buf[0],
|
||||||
|
dest,
|
||||||
|
&src,
|
||||||
|
false, // true for confirmed messages
|
||||||
|
MESSAGE_PRIORITY_NORMAL);
|
||||||
|
|
||||||
|
// encode the APDU portion of the packet
|
||||||
|
pdu_len += reject_encode_apdu(
|
||||||
|
&Tx_Buf[pdu_len],
|
||||||
|
service_data->invoke_id,
|
||||||
|
REJECT_REASON_UNRECOGNIZED_SERVICE);
|
||||||
|
|
||||||
|
(void)ethernet_send_pdu(
|
||||||
|
dest, // destination address
|
||||||
|
&Tx_Buf[0],
|
||||||
|
pdu_len); // number of bytes of data
|
||||||
|
fprintf(stderr,"Sent Reject!\n");
|
||||||
|
}
|
||||||
|
|
||||||
// FIXME: if we handle multiple ports, then a port neutral version
|
// FIXME: if we handle multiple ports, then a port neutral version
|
||||||
// of this would be nice. Then it could be moved into iam.c
|
// of this would be nice. Then it could be moved into iam.c
|
||||||
void Send_IAm(void)
|
void Send_IAm(void)
|
||||||
@@ -94,6 +127,102 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
// custom handlers
|
// custom handlers
|
||||||
apdu_set_unconfirmed_handler(SERVICE_UNCONFIRMED_WHO_IS,WhoIsHandler);
|
apdu_set_unconfirmed_handler(SERVICE_UNCONFIRMED_WHO_IS,WhoIsHandler);
|
||||||
|
|
||||||
|
// 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,
|
||||||
|
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!
|
||||||
|
apdu_set_confirmed_handler(
|
||||||
|
SERVICE_CONFIRMED_READ_PROPERTY,
|
||||||
|
UnrecognizedServiceHandler);
|
||||||
|
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);
|
||||||
|
|
||||||
// init the physical layer
|
// init the physical layer
|
||||||
if (!ethernet_init("eth0"))
|
if (!ethernet_init("eth0"))
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
@@ -38,3 +38,9 @@ make -f npdu.mak clean
|
|||||||
make -f npdu.mak
|
make -f npdu.mak
|
||||||
./npdu >> test.log
|
./npdu >> test.log
|
||||||
make -f npdu.mak clean
|
make -f npdu.mak clean
|
||||||
|
|
||||||
|
make -f reject.mak clean
|
||||||
|
make -f reject.mak
|
||||||
|
./reject >> test.log
|
||||||
|
make -f reject.mak clean
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user