Cleaned up compiler warnings and errors. Still needs to be finished.

This commit is contained in:
skarg
2007-11-20 20:35:01 +00:00
parent f3e8013997
commit 7be00a69f3
2 changed files with 129 additions and 113 deletions
+1
View File
@@ -38,6 +38,7 @@
#include <stdint.h> #include <stdint.h>
#include <stddef.h> #include <stddef.h>
#include "bacdef.h" #include "bacdef.h"
#include "npdu.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
+38 -23
View File
@@ -129,9 +129,11 @@ int bvlc_decode_bip_address(
uint16_t * port) uint16_t * port)
{ {
int len = 0; int len = 0;
uint32_t raw_address = 0;
if (pdu) { if (pdu) {
(void) decode_unsigned32(&pdu[0], &(address->s_addr)); (void) decode_unsigned32(&pdu[0], &raw_address);
address->s_addr = raw_address;
(void) decode_unsigned16(&pdu[4], port); (void) decode_unsigned16(&pdu[4], port);
len = 6; len = 6;
} }
@@ -535,28 +537,33 @@ bool bvlc_create_bdt(
struct in_addr dest_address; struct in_addr dest_address;
uint16_t dest_port; uint16_t dest_port;
unsigned i = 0; unsigned i = 0;
uint32_t raw_address = 0;
for (i = 0; i < MAX_BBMD_ENTRIES; i++) { for (i = 0; i < MAX_BBMD_ENTRIES; i++) {
if (npdu_length >= 10) { if (npdu_length >= 10) {
BBMD_Table[i].valid = true; BBMD_Table[i].valid = true;
decode_unsigned32(&pdu[0], &dest_address.s_addr); decode_unsigned32(&npdu[0], &raw_address);
dest_address.s_addr = raw_address;
BBMD_Table[i].dest_address.s_addr = ntohl(dest_address.s_addr); BBMD_Table[i].dest_address.s_addr = ntohl(dest_address.s_addr);
decode_unsigned16(&pdu[4], &dest_port); decode_unsigned16(&npdu[4], &dest_port);
BBMD_Table[i].dest_port = ntohs(dest_port); BBMD_Table[i].dest_port = ntohs(dest_port);
decode_unsigned32(&pdu[6], &dest_address.s_addr); decode_unsigned32(&npdu[6], &raw_address);
dest_address.s_addr = raw_address;
BBMD_Table[i].broadcast_mask.s_addr = ntohl(dest_address.s_addr); BBMD_Table[i].broadcast_mask.s_addr = ntohl(dest_address.s_addr);
npdu_length -= 10; npdu_length -= 10;
} else { } else {
BBMD_Table[i].valid = false; BBMD_Table[i].valid = false;
BBMD_Table[i].dest_address.s_addr = 0; BBMD_Table[i].dest_address.s_addr = 0;
BBMD_Table[i].dest_port = 0; BBMD_Table[i].dest_port = 0;
BBMD_Table[i].broadcast_mask = 0; BBMD_Table[i].broadcast_mask.s_addr = 0;
} }
} }
/* did they all fit? */ /* did they all fit? */
if (npdu_length < 10) { if (npdu_length < 10) {
status = true; status = true;
} }
return status;
} }
bool bvlc_register_foreign_device( bool bvlc_register_foreign_device(
@@ -597,11 +604,12 @@ bool bvlc_register_foreign_device(
bool bvlc_delete_foreign_device(uint8_t * pdu) bool bvlc_delete_foreign_device(uint8_t * pdu)
{ {
struct sockaddr_in sin; /* the ip address */ struct sockaddr_in sin = {0}; /* the ip address */
uint16_t port; /* the decoded port */ uint16_t port = 0; /* the decoded port */
bool status = false; /* return value */ bool status = false; /* return value */
unsigned i = 0;
bvlc_decode_bip_address(pdu, &sin, &port); bvlc_decode_bip_address(pdu, &sin.sin_addr, &port);
for (i = 0; i < MAX_FD_ENTRIES; i++) { for (i = 0; i < MAX_FD_ENTRIES; i++) {
if (FD_Table[i].valid) { if (FD_Table[i].valid) {
if ((FD_Table[i].dest_address.s_addr == sin.sin_addr.s_addr) && if ((FD_Table[i].dest_address.s_addr == sin.sin_addr.s_addr) &&
@@ -653,12 +661,12 @@ void bvlc_bdt_forward_npdu(
bip_dest.sin_port = htons(BBMD_Table[i].dest_port); bip_dest.sin_port = htons(BBMD_Table[i].dest_port);
/* don't send to my broadcast address and same port */ /* don't send to my broadcast address and same port */
if ((bip_dest.sin_addr.s_addr == htonl(bip_get_broadcast_addr())) && if ((bip_dest.sin_addr.s_addr == htonl(bip_get_broadcast_addr())) &&
(bip_dest.sin_port == htons(bip_get_port))) { (bip_dest.sin_port == htons(bip_get_port()))) {
continue; continue;
} }
/* don't send to my ip address and same port */ /* don't send to my ip address and same port */
if ((bip_dest.sin_addr.s_addr == htonl(bip_get_addr())) && if ((bip_dest.sin_addr.s_addr == htonl(bip_get_addr())) &&
(bip_dest.sin_port == htons(bip_get_port))) { (bip_dest.sin_port == htons(bip_get_port()))) {
continue; continue;
} }
/* Send the packet */ /* Send the packet */
@@ -672,6 +680,14 @@ void bvlc_bdt_forward_npdu(
return; return;
} }
void bvlc_broadcast_forward_npdu(
struct sockaddr_in *sin, /* the source address */
uint8_t * npdu, /* returns the NPDU */
uint16_t npdu_len) /* amount of space available in the NPDU */
{
/* FIXME: write the code... */
}
void bvlc_fdt_forward_npdu( void bvlc_fdt_forward_npdu(
struct sockaddr_in *sin, /* the source address */ struct sockaddr_in *sin, /* the source address */
uint8_t * npdu, /* returns the NPDU */ uint8_t * npdu, /* returns the NPDU */
@@ -693,7 +709,7 @@ void bvlc_fdt_forward_npdu(
&mtu[0], &mtu[0],
&src, &src,
npdu, npdu,
npdu_length); max_npdu);
/* load destination IP address */ /* load destination IP address */
bvlc_dest.sin_family = AF_INET; bvlc_dest.sin_family = AF_INET;
/* loop through the FDT and send one to each entry */ /* loop through the FDT and send one to each entry */
@@ -719,9 +735,7 @@ void bvlc_send_mpdu(
uint16_t mtu_len) /* amount of data to send */ uint16_t mtu_len) /* amount of data to send */
{ {
int bytes_sent = 0; int bytes_sent = 0;
unsigned i = 0; /* loop counter */
struct sockaddr_in bvlc_dest; struct sockaddr_in bvlc_dest;
BACNET_ADDRESS src;
/* assumes that the driver has already been initialized */ /* assumes that the driver has already been initialized */
if (bip_socket() < 0) { if (bip_socket() < 0) {
@@ -760,7 +774,7 @@ int bvlc_send_bdt(struct sockaddr_in *dest)
mtu_len = bvlc_encode_read_bdt_ack(&mtu[0], sizeof(mtu)); mtu_len = bvlc_encode_read_bdt_ack(&mtu[0], sizeof(mtu));
if (mtu_len) { if (mtu_len) {
bvlc_send_mpdu(&sin, &mtu[0], mtu_len); bvlc_send_mpdu(dest, &mtu[0], mtu_len);
} }
return mtu_len; return mtu_len;
@@ -800,7 +814,7 @@ uint16_t bvlc_receive(
uint16_t max_npdu, /* amount of space available in the NPDU */ uint16_t max_npdu, /* amount of space available in the NPDU */
unsigned timeout) /* number of milliseconds to wait for a packet */ unsigned timeout) /* number of milliseconds to wait for a packet */
{ {
uint16_t pdu_len = 0; /* return value */ uint16_t npdu_len = 0; /* return value */
fd_set read_fds; fd_set read_fds;
int max = 0; int max = 0;
struct timeval select_timeout; struct timeval select_timeout;
@@ -852,7 +866,7 @@ uint16_t bvlc_receive(
return 0; return 0;
} }
/* the signature of a BACnet/IP packet */ /* the signature of a BACnet/IP packet */
if (buf[0] != BVLL_TYPE_BACNET_IP) { if (npdu[0] != BVLL_TYPE_BACNET_IP) {
return 0; return 0;
} }
function_type = npdu[1]; function_type = npdu[1];
@@ -1068,25 +1082,26 @@ int bvlc_send_pdu(BACNET_ADDRESS * dest, /* destination address */
uint8_t mtu[MAX_MPDU] = { 0 }; uint8_t mtu[MAX_MPDU] = { 0 };
int mtu_len = 0; int mtu_len = 0;
int bytes_sent = 0; int bytes_sent = 0;
uint32_t raw_address = 0;
/* bip datalink doesn't need to know the npdu data */ /* bip datalink doesn't need to know the npdu data */
(void) npdu_data; (void) npdu_data;
/* assumes that the driver has already been initialized */ /* assumes that the driver has already been initialized */
if (BIP_Socket < 0) if (bip_socket() < 0)
return BIP_Socket; return bip_socket();
mtu[0] = BVLL_TYPE_BACNET_IP; mtu[0] = BVLL_TYPE_BACNET_IP;
bvlc_dest.sin_family = AF_INET; bvlc_dest.sin_family = AF_INET;
if (dest->net == BACNET_BROADCAST_NETWORK) { if (dest->net == BACNET_BROADCAST_NETWORK) {
/* broadcast */ /* broadcast */
bvlc_dest.sin_addr.s_addr = htonl(BIP_Broadcast_Address.s_addr); bvlc_dest.sin_addr.s_addr = bip_get_broadcast_addr();
bvlc_dest.sin_port = htons(BIP_Port); bvlc_dest.sin_port = bip_get_port();
memset(&(bvlc_dest.sin_zero), '\0', 8); memset(&(bvlc_dest.sin_zero), '\0', 8);
mtu[1] = BVLC_ORIGINAL_BROADCAST_NPDU; mtu[1] = BVLC_ORIGINAL_BROADCAST_NPDU;
} else if (dest->mac_len == 6) { } else if (dest->mac_len == 6) {
/* valid unicast */ /* valid unicast */
(void) decode_unsigned32(&dest->mac[0], (void) decode_unsigned32(&dest->mac[0], &raw_address);
&(bvlc_dest.sin_addr.s_addr)); bvlc_dest.sin_addr.s_addr = raw_address;
(void) decode_unsigned16(&dest->mac[4], &(bvlc_dest.sin_port)); (void) decode_unsigned16(&dest->mac[4], &(bvlc_dest.sin_port));
memset(&(bvlc_dest.sin_zero), '\0', 8); memset(&(bvlc_dest.sin_zero), '\0', 8);
mtu[1] = BVLC_ORIGINAL_UNICAST_NPDU; mtu[1] = BVLC_ORIGINAL_UNICAST_NPDU;
@@ -1103,7 +1118,7 @@ int bvlc_send_pdu(BACNET_ADDRESS * dest, /* destination address */
mtu_len += pdu_len; mtu_len += pdu_len;
/* Send the packet */ /* Send the packet */
bytes_sent = sendto(BIP_Socket, (char *) mtu, mtu_len, 0, bytes_sent = sendto(bip_socket(), (char *) mtu, mtu_len, 0,
(struct sockaddr *) &bvlc_dest, sizeof(struct sockaddr)); (struct sockaddr *) &bvlc_dest, sizeof(struct sockaddr));
return bytes_sent; return bytes_sent;