diff --git a/ports/bsd/.clang-format b/ports/bsd/.clang-format deleted file mode 100644 index 579a192a..00000000 --- a/ports/bsd/.clang-format +++ /dev/null @@ -1,7 +0,0 @@ ---- -# Disable formatting for now as there is external code. We should move external -# code to a separate directory and enable formatting for our code. -DisableFormat: true - -# DisableFormat will not disable include sorting with some versions. -SortIncludes: Never diff --git a/ports/bsd/bacport.h b/ports/bsd/bacport.h index bf649f33..12ec44e6 100644 --- a/ports/bsd/bacport.h +++ b/ports/bsd/bacport.h @@ -1,39 +1,39 @@ /************************************************************************** -* -* Copyright (C) 2005 Steve Karg -* -* SPDX-License-Identifier: MIT -* -*********************************************************************/ + * + * Copyright (C) 2005 Steve Karg + * + * SPDX-License-Identifier: MIT + * + *********************************************************************/ #ifndef BACPORT_H #define BACPORT_H /* common unix sockets headers needed */ -#include /* basic system data types */ -#include /* timeval{} for select() */ -#include /* timespec{} for pselect() */ -#include /* sockaddr_in{} and other Internet defns */ -#include /* inet(3) functions */ -#include /* for nonblocking */ +#include /* basic system data types */ +#include /* timeval{} for select() */ +#include /* timespec{} for pselect() */ +#include /* sockaddr_in{} and other Internet defns */ +#include /* inet(3) functions */ +#include /* for nonblocking */ #include #include #include #include #include #include -#include /* for S_xxx file mode constants */ -#include /* for iovec{} and readv/writev */ +#include /* for S_xxx file mode constants */ +#include /* for iovec{} and readv/writev */ #include #include -#include /* for Unix domain sockets */ +#include /* for Unix domain sockets */ #ifdef HAVE_SYS_SELECT_H -#include /* for convenience */ +#include /* for convenience */ #endif #ifdef HAVE_POLL_H -#include /* for convenience */ +#include /* for convenience */ #endif /* Three headers are normally needed for socket/file ioctl's: @@ -60,7 +60,7 @@ #include #include #include -#include /* the L2 protocols */ +#include /* the L2 protocols */ #include #include #include diff --git a/ports/bsd/bip6.c b/ports/bsd/bip6.c index 514df2be..0ea53a51 100644 --- a/ports/bsd/bip6.c +++ b/ports/bsd/bip6.c @@ -73,12 +73,10 @@ static void debug_print_ipv6(const char *str, const struct in6_addr *addr) "%02x%02x:%02x%02x:%02x%02x:%02x%02x:" "%02x%02x:%02x%02x:%02x%02x:%02x%02x\n", str, (int)addr->s6_addr[0], (int)addr->s6_addr[1], - (int)addr->s6_addr[2], (int)addr->s6_addr[3], - (int)addr->s6_addr[4], (int)addr->s6_addr[5], - (int)addr->s6_addr[6], (int)addr->s6_addr[7], - (int)addr->s6_addr[8], (int)addr->s6_addr[9], - (int)addr->s6_addr[10], (int)addr->s6_addr[11], - (int)addr->s6_addr[12], (int)addr->s6_addr[13], + (int)addr->s6_addr[2], (int)addr->s6_addr[3], (int)addr->s6_addr[4], + (int)addr->s6_addr[5], (int)addr->s6_addr[6], (int)addr->s6_addr[7], + (int)addr->s6_addr[8], (int)addr->s6_addr[9], (int)addr->s6_addr[10], + (int)addr->s6_addr[11], (int)addr->s6_addr[12], (int)addr->s6_addr[13], (int)addr->s6_addr[14], (int)addr->s6_addr[15]); } @@ -120,12 +118,14 @@ void bip6_set_interface(char *ifname) } while (ifa_tmp) { if ((ifa_tmp->ifa_addr) && (ifa_tmp->ifa_addr->sa_family == AF_INET6)) { - debug_fprintf_bip6(stdout, "BIP6: found interface: %s\n", ifa_tmp->ifa_name); + debug_fprintf_bip6( + stdout, "BIP6: found interface: %s\n", ifa_tmp->ifa_name); } if ((ifa_tmp->ifa_addr) && (ifa_tmp->ifa_addr->sa_family == AF_INET6) && (bacnet_stricmp(ifa_tmp->ifa_name, ifname) == 0)) { sin = (struct sockaddr_in6 *)ifa_tmp->ifa_addr; - bvlc6_address_set(&BIP6_Addr, ntohs(sin->sin6_addr.s6_addr16[0]), + bvlc6_address_set( + &BIP6_Addr, ntohs(sin->sin6_addr.s6_addr16[0]), ntohs(sin->sin6_addr.s6_addr16[1]), ntohs(sin->sin6_addr.s6_addr16[2]), ntohs(sin->sin6_addr.s6_addr16[3]), @@ -141,7 +141,8 @@ void bip6_set_interface(char *ifname) ifa_tmp = ifa_tmp->ifa_next; } if (!found) { - debug_fprintf_bip6(stdout, "BIP6: unable to set interface: %s\n", ifname); + debug_fprintf_bip6( + stdout, "BIP6: unable to set interface: %s\n", ifname); exit(1); } } @@ -260,8 +261,9 @@ int bip6_send_mpdu( } /* load destination IP address */ bvlc_dest.sin6_family = AF_INET6; - bvlc6_address_get(dest, &addr16[0], &addr16[1], &addr16[2], &addr16[3], - &addr16[4], &addr16[5], &addr16[6], &addr16[7]); + bvlc6_address_get( + dest, &addr16[0], &addr16[1], &addr16[2], &addr16[3], &addr16[4], + &addr16[5], &addr16[6], &addr16[7]); bvlc_dest.sin6_addr.s6_addr16[0] = htons(addr16[0]); bvlc_dest.sin6_addr.s6_addr16[1] = htons(addr16[1]); bvlc_dest.sin6_addr.s6_addr16[2] = htons(addr16[2]); @@ -274,7 +276,8 @@ int bip6_send_mpdu( bvlc_dest.sin6_scope_id = BIP6_Socket_Scope_Id; debug_print_ipv6("Sending MPDU->", &bvlc_dest.sin6_addr); /* Send the packet */ - return sendto(BIP6_Socket, (const char *)mtu, mtu_len, 0, + return sendto( + BIP6_Socket, (const char *)mtu, mtu_len, 0, (struct sockaddr *)&bvlc_dest, sizeof(bvlc_dest)); } @@ -290,7 +293,8 @@ int bip6_send_mpdu( * @return Upon successful completion, returns the number of bytes sent. * Otherwise, -1 shall be returned to indicate the error. */ -int bip6_send_pdu(BACNET_ADDRESS *dest, +int bip6_send_pdu( + BACNET_ADDRESS *dest, BACNET_NPDU_DATA *npdu_data, uint8_t *pdu, unsigned pdu_len) @@ -342,8 +346,9 @@ uint16_t bip6_receive( max = BIP6_Socket; /* see if there is a packet for us */ if (select(max + 1, &read_fds, NULL, NULL, &select_timeout) > 0) { - received_bytes = recvfrom(BIP6_Socket, (char *)&npdu[0], max_npdu, 0, - (struct sockaddr *)&sin, &sin_len); + received_bytes = recvfrom( + BIP6_Socket, (char *)&npdu[0], max_npdu, 0, (struct sockaddr *)&sin, + &sin_len); } else { return 0; } @@ -361,7 +366,8 @@ uint16_t bip6_receive( } /* pass the packet into the BBMD handler */ debug_print_ipv6("Received MPDU->", &sin.sin6_addr); - bvlc6_address_set(&addr, ntohs(sin.sin6_addr.s6_addr16[0]), + bvlc6_address_set( + &addr, ntohs(sin.sin6_addr.s6_addr16[0]), ntohs(sin.sin6_addr.s6_addr16[1]), ntohs(sin.sin6_addr.s6_addr16[2]), ntohs(sin.sin6_addr.s6_addr16[3]), ntohs(sin.sin6_addr.s6_addr16[4]), ntohs(sin.sin6_addr.s6_addr16[5]), ntohs(sin.sin6_addr.s6_addr16[6]), @@ -486,13 +492,15 @@ bool bip6_init(char *ifname) } debug_fprintf_bip6(stdout, "BIP6: IPv6 UDP port: 0x%04X\n", BIP6_Addr.port); if (BIP6_Broadcast_Addr.address[0] == 0) { - bvlc6_address_set(&BIP6_Broadcast_Addr, BIP6_MULTICAST_SITE_LOCAL, 0, 0, - 0, 0, 0, 0, BIP6_MULTICAST_GROUP_ID); + bvlc6_address_set( + &BIP6_Broadcast_Addr, BIP6_MULTICAST_SITE_LOCAL, 0, 0, 0, 0, 0, 0, + BIP6_MULTICAST_GROUP_ID); } /* assumes that the driver has already been initialized */ BIP6_Socket = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); - if (BIP6_Socket < 0) + if (BIP6_Socket < 0) { return false; + } /* Allow us to use the same socket for sending and receiving */ /* This makes sure that the src port is correct when sending */ sockopt = 1; diff --git a/ports/bsd/bsc-event.c b/ports/bsd/bsc-event.c index 396c1c6b..b39b9114 100644 --- a/ports/bsd/bsc-event.c +++ b/ports/bsd/bsc-event.c @@ -95,10 +95,9 @@ void bsc_event_wait(BSC_EVENT *ev) if (!ev->counter) { ev->v = false; DEBUG_PRINTF("bsc_event_wait() reset ev\n"); - } - else { - DEBUG_PRINTF("bsc_event_wait() wake up other waiting threads\n"); - pthread_cond_broadcast(&ev->cond); + } else { + DEBUG_PRINTF("bsc_event_wait() wake up other waiting threads\n"); + pthread_cond_broadcast(&ev->cond); } DEBUG_PRINTF("bsc_event_wait() <<< ev = %p\n", ev); pthread_mutex_unlock(&ev->mutex); @@ -115,8 +114,9 @@ bool bsc_event_timedwait(BSC_EVENT *ev, unsigned int ms_timeout) to.tv_sec += to.tv_nsec / 1000000000; to.tv_nsec %= 1000000000; - DEBUG_PRINTF("bsc_event_timedwait() >>> before lock ev = %p ev->v = %d\n", - ev, ev->v); + DEBUG_PRINTF( + "bsc_event_timedwait() >>> before lock ev = %p ev->v = %d\n", ev, + ev->v); pthread_mutex_lock(&ev->mutex); @@ -133,8 +133,8 @@ bool bsc_event_timedwait(BSC_EVENT *ev, unsigned int ms_timeout) } } - if(ev->v) { - if(r!=0) { + if (ev->v) { + if (r != 0) { DEBUG_PRINTF("Fired!!! r = %d\n", r); } r = 0; @@ -144,13 +144,11 @@ bool bsc_event_timedwait(BSC_EVENT *ev, unsigned int ms_timeout) DEBUG_PRINTF("bsc_event_timedwait() counter %zu\n", ev->counter); if (!ev->counter) { - DEBUG_PRINTF( - "bsc_event_timedwait() event is reset, err = %d\n", r); + DEBUG_PRINTF("bsc_event_timedwait() event is reset, err = %d\n", r); ev->v = false; - } - else { - DEBUG_PRINTF("bsc_event_timedwait() wake up other waiting threads\n"); - pthread_cond_broadcast(&ev->cond); + } else { + DEBUG_PRINTF("bsc_event_timedwait() wake up other waiting threads\n"); + pthread_cond_broadcast(&ev->cond); } DEBUG_PRINTF( diff --git a/ports/bsd/datetime-init.c b/ports/bsd/datetime-init.c index aa99ca5b..70d69f6c 100644 --- a/ports/bsd/datetime-init.c +++ b/ports/bsd/datetime-init.c @@ -19,7 +19,6 @@ #include "bacport.h" #include "bacnet/datetime.h" - /** * @brief Set offset from the system clock. * @param bdate BACnet Date structure to hold local time @@ -44,7 +43,8 @@ void datetime_timesync(BACNET_DATE *bdate, BACNET_TIME *btime, bool utc) * @param true if DST is enabled and active * @return true if local time was retrieved */ -bool datetime_local(BACNET_DATE *bdate, +bool datetime_local( + BACNET_DATE *bdate, BACNET_TIME *btime, int16_t *utc_offset_minutes, bool *dst_active) @@ -70,11 +70,12 @@ bool datetime_local(BACNET_DATE *bdate, * int tm_isdst Daylight Savings flag. * long tm_gmtoff offset from UTC in seconds */ - datetime_set_date(bdate, (uint16_t)tblock->tm_year + 1900, + datetime_set_date( + bdate, (uint16_t)tblock->tm_year + 1900, (uint8_t)tblock->tm_mon + 1, (uint8_t)tblock->tm_mday); - datetime_set_time(btime, (uint8_t)tblock->tm_hour, - (uint8_t)tblock->tm_min, (uint8_t)tblock->tm_sec, - (uint8_t)(tv.tv_usec / 10000)); + datetime_set_time( + btime, (uint8_t)tblock->tm_hour, (uint8_t)tblock->tm_min, + (uint8_t)tblock->tm_sec, (uint8_t)(tv.tv_usec / 10000)); if (dst_active) { /* The value of tm_isdst is: - positive if Daylight Saving Time is in effect, diff --git a/ports/bsd/dlmstp.c b/ports/bsd/dlmstp.c index 9c907072..b5015244 100644 --- a/ports/bsd/dlmstp.c +++ b/ports/bsd/dlmstp.c @@ -206,16 +206,14 @@ static bool dlmstp_compare_data_expecting_reply( request_pdu, request_pdu_len, NULL, &request.address, &request.npdu_data); if (request.npdu_data.network_layer_message) { - debug_printf( - "DLMSTP: DER Compare failed: " - "Request is Network message.\n"); + debug_printf("DLMSTP: DER Compare failed: " + "Request is Network message.\n"); return false; } request.pdu_type = request_pdu[offset] & 0xF0; if (request.pdu_type != PDU_TYPE_CONFIRMED_SERVICE_REQUEST) { - debug_printf( - "DLMSTP: DER Compare failed: " - "Not Confirmed Request.\n"); + debug_printf("DLMSTP: DER Compare failed: " + "Not Confirmed Request.\n"); return false; } request.invoke_id = request_pdu[offset + 2]; @@ -231,9 +229,8 @@ static bool dlmstp_compare_data_expecting_reply( offset = (uint16_t)bacnet_npdu_decode( reply_pdu, reply_pdu_len, &reply.address, NULL, &reply.npdu_data); if (reply.npdu_data.network_layer_message) { - debug_printf( - "DLMSTP: DER Compare failed: " - "Reply is Network message.\n"); + debug_printf("DLMSTP: DER Compare failed: " + "Reply is Network message.\n"); return false; } /* reply could be a lot of things: @@ -270,30 +267,26 @@ static bool dlmstp_compare_data_expecting_reply( (reply.pdu_type == PDU_TYPE_ABORT) || (reply.pdu_type == PDU_TYPE_SEGMENT_ACK)) { if (request.invoke_id != reply.invoke_id) { - debug_printf( - "DLMSTP: DER Compare failed: " - "Invoke ID mismatch.\n"); + debug_printf("DLMSTP: DER Compare failed: " + "Invoke ID mismatch.\n"); return false; } } else { if (request.invoke_id != reply.invoke_id) { - debug_printf( - "DLMSTP: DER Compare failed: " - "Invoke ID mismatch.\n"); + debug_printf("DLMSTP: DER Compare failed: " + "Invoke ID mismatch.\n"); return false; } if (request.service_choice != reply.service_choice) { - debug_printf( - "DLMSTP: DER Compare failed: " - "Service choice mismatch.\n"); + debug_printf("DLMSTP: DER Compare failed: " + "Service choice mismatch.\n"); return false; } } if (request.npdu_data.protocol_version != reply.npdu_data.protocol_version) { - debug_printf( - "DLMSTP: DER Compare failed: " - "NPDU Protocol Version mismatch.\n"); + debug_printf("DLMSTP: DER Compare failed: " + "NPDU Protocol Version mismatch.\n"); return false; } #if 0 @@ -306,9 +299,8 @@ static bool dlmstp_compare_data_expecting_reply( } #endif if (!bacnet_address_same(&request.address, &reply.address)) { - debug_printf( - "DLMSTP: DER Compare failed: " - "BACnet Address mismatch.\n"); + debug_printf("DLMSTP: DER Compare failed: " + "BACnet Address mismatch.\n"); return false; } @@ -991,7 +983,7 @@ bool dlmstp_init(char *ifname) int rv = 0; pthread_condattr_init(&attr); - //TODO use mach_absolute_time() for MONOTONIC clock + // TODO use mach_absolute_time() for MONOTONIC clock if ((rv = pthread_condattr_setclock(&attr, CLOCK_MONOTONIC)) != 0) { fprintf( stderr, "MS/TP Interface: %s\n failed to set MONOTONIC clock\n", diff --git a/ports/bsd/dlmstp_port.c b/ports/bsd/dlmstp_port.c index 910e5b1b..de3c76e0 100644 --- a/ports/bsd/dlmstp_port.c +++ b/ports/bsd/dlmstp_port.c @@ -864,8 +864,9 @@ bool dlmstp_init(void *poPort, char *ifname) exit(-1); } if (ioctl(poSharedData->RS485_Handle, TIOCEXCL) == -1) { - printf("Error setting TIOCEXCL on %s - %s(%d).\n", poSharedData->RS485_Port_Name, - strerror(errno), errno); + printf( + "Error setting TIOCEXCL on %s - %s(%d).\n", + poSharedData->RS485_Port_Name, strerror(errno), errno); exit(-1); } #if 0 @@ -887,13 +888,15 @@ bool dlmstp_init(void *poPort, char *ifname) CREAD : enable receiving characters */ printf( - "Default/current input baud rate is %d\n", (int)cfgetispeed(&poSharedData->RS485_oldtio)); + "Default/current input baud rate is %d\n", + (int)cfgetispeed(&poSharedData->RS485_oldtio)); printf( - "Default/current output baud rate is %d\n", (int)cfgetospeed(&poSharedData->RS485_oldtio)); + "Default/current output baud rate is %d\n", + (int)cfgetospeed(&poSharedData->RS485_oldtio)); newtio.c_cc[VMIN] = 0; newtio.c_cc[VTIME] = 10; - //newtio.c_cflag = - // poSharedData->RS485_Baud | poSharedData->RS485MOD | CLOCAL | CREAD; + // newtio.c_cflag = + // poSharedData->RS485_Baud | poSharedData->RS485MOD | CLOCAL | CREAD; cfsetspeed(&newtio, poSharedData->RS485_Baud); newtio.c_cflag &= ~PARENB; /* No Parity */ newtio.c_cflag &= ~CSTOPB; /* 1 Stop Bit */ @@ -905,8 +908,11 @@ bool dlmstp_init(void *poPort, char *ifname) newtio.c_oflag = 0; /* no processing */ newtio.c_lflag = 0; - if (ioctl(poSharedData->RS485_Handle, IOSSIOSPEED, &poSharedData->RS485_Baud) == -1) { - printf("Error calling ioctl(..., IOSSIOSPEED, ...) %s - %s(%d).\n", + if (ioctl( + poSharedData->RS485_Handle, IOSSIOSPEED, + &poSharedData->RS485_Baud) == -1) { + printf( + "Error calling ioctl(..., IOSSIOSPEED, ...) %s - %s(%d).\n", poSharedData->RS485_Port_Name, strerror(errno), errno); } printf("Input baud rate changed to %d\n", (int)cfgetispeed(&newtio)); @@ -921,21 +927,24 @@ bool dlmstp_init(void *poPort, char *ifname) /* Assert Data Terminal Ready (DTR) */ if (ioctl(poSharedData->RS485_Handle, TIOCSDTR) == -1) { - printf("Error asserting DTR %s - %s(%d).\n", poSharedData->RS485_Port_Name, strerror(errno), - errno); + printf( + "Error asserting DTR %s - %s(%d).\n", poSharedData->RS485_Port_Name, + strerror(errno), errno); } /* Clear Data Terminal Ready (DTR) */ if (ioctl(poSharedData->RS485_Handle, TIOCCDTR) == -1) { - printf("Error clearing DTR %s - %s(%d).\n", poSharedData->RS485_Port_Name, strerror(errno), - errno); + printf( + "Error clearing DTR %s - %s(%d).\n", poSharedData->RS485_Port_Name, + strerror(errno), errno); } /* Set the modem lines depending on the bits set in handshake */ handshake = TIOCM_DTR | TIOCM_RTS | TIOCM_CTS | TIOCM_DSR; if (ioctl(poSharedData->RS485_Handle, TIOCMSET, &handshake) == -1) { - printf("Error setting handshake lines %s - %s(%d).\n", poSharedData->RS485_Port_Name, - strerror(errno), errno); + printf( + "Error setting handshake lines %s - %s(%d).\n", + poSharedData->RS485_Port_Name, strerror(errno), errno); } /* To read the state of the modem lines, use the following ioctl. @@ -944,16 +953,18 @@ bool dlmstp_init(void *poPort, char *ifname) /* Store the state of the modem lines in handshake */ if (ioctl(poSharedData->RS485_Handle, TIOCMGET, &handshake) == -1) { - printf("Error getting handshake lines %s - %s(%d).\n", poSharedData->RS485_Port_Name, - strerror(errno), errno); + printf( + "Error getting handshake lines %s - %s(%d).\n", + poSharedData->RS485_Port_Name, strerror(errno), errno); } printf("Handshake lines currently set to %d\n", handshake); if (ioctl(poSharedData->RS485_Handle, IOSSDATALAT, &mics) == -1) { /* set latency to 1 microsecond */ - printf("Error setting read latency %s - %s(%d).\n", poSharedData->RS485_Port_Name, - strerror(errno), errno); + printf( + "Error setting read latency %s - %s(%d).\n", + poSharedData->RS485_Port_Name, strerror(errno), errno); exit(-1); } diff --git a/ports/bsd/dlmstp_port.h b/ports/bsd/dlmstp_port.h index 6f84c869..ae3d2bc3 100644 --- a/ports/bsd/dlmstp_port.h +++ b/ports/bsd/dlmstp_port.h @@ -111,14 +111,16 @@ void dlmstp_cleanup(void *poShared); /* returns number of bytes sent on success, negative on failure */ BACNET_STACK_EXPORT -int dlmstp_send_pdu(void *poShared, +int dlmstp_send_pdu( + void *poShared, BACNET_ADDRESS *dest, /* destination address */ uint8_t *pdu, /* any data to be sent - may be null */ unsigned pdu_len); /* number of bytes of data */ /* returns the number of octets in the PDU, or zero on failure */ BACNET_STACK_EXPORT -uint16_t dlmstp_receive(void *poShared, +uint16_t dlmstp_receive( + void *poShared, BACNET_ADDRESS *src, /* source address */ uint8_t *pdu, /* PDU data */ uint16_t max_pdu, /* amount of space available in the PDU */ diff --git a/ports/bsd/ethernet.c b/ports/bsd/ethernet.c index 810431c2..2fad96c1 100644 --- a/ports/bsd/ethernet.c +++ b/ports/bsd/ethernet.c @@ -83,11 +83,13 @@ static int get_local_hwaddr(const char *ifname, unsigned char *mac) int i; if (getifaddrs(&ifap) == 0) { - for(ifaptr = ifap; ifaptr != NULL; ifaptr = (ifaptr)->ifa_next) { - if (!strcmp((ifaptr)->ifa_name, ifname) && (((ifaptr)->ifa_addr)->sa_family == AF_LINK)) { - ptr = (unsigned char *)LLADDR((struct sockaddr_dl *)(ifaptr)->ifa_addr); + for (ifaptr = ifap; ifaptr != NULL; ifaptr = (ifaptr)->ifa_next) { + if (!strcmp((ifaptr)->ifa_name, ifname) && + (((ifaptr)->ifa_addr)->sa_family == AF_LINK)) { + ptr = (unsigned char *)LLADDR( + (struct sockaddr_dl *)(ifaptr)->ifa_addr); for (i = 0; i < 6; ++i) { - mac[i] = *(ptr+i); + mac[i] = *(ptr + i); } break; } @@ -99,7 +101,6 @@ static int get_local_hwaddr(const char *ifname, unsigned char *mac) } } - bool ethernet_init(char *if_name) { pcap_if_t *pcap_all_if; @@ -114,7 +115,8 @@ bool ethernet_init(char *if_name) */ /* Retrieve the device list */ if (pcap_findalldevs(&pcap_all_if, pcap_errbuf) == -1) { - fprintf(stderr, "ethernet.c: error in pcap_findalldevs: %s\n", pcap_errbuf); + fprintf( + stderr, "ethernet.c: error in pcap_findalldevs: %s\n", pcap_errbuf); return false; } /* Scan the list printing every entry */ @@ -125,7 +127,8 @@ bool ethernet_init(char *if_name) } pcap_freealldevs(pcap_all_if); /* we don't need it anymore */ if (dev == NULL) { - fprintf(stderr, "ethernet.c: specified interface not found: %s\n", if_name); + fprintf( + stderr, "ethernet.c: specified interface not found: %s\n", if_name); return false; } @@ -133,15 +136,11 @@ bool ethernet_init(char *if_name) * Get local MAC address */ get_local_hwaddr(if_name, Ethernet_MAC_Address); - fprintf(stderr, "ethernet: src mac %02x:%02x:%02x:%02x:%02x:%02x \n", - Ethernet_MAC_Address[0], - Ethernet_MAC_Address[1], - Ethernet_MAC_Address[2], - Ethernet_MAC_Address[3], - Ethernet_MAC_Address[4], - Ethernet_MAC_Address[5] - ); - + fprintf( + stderr, "ethernet: src mac %02x:%02x:%02x:%02x:%02x:%02x \n", + Ethernet_MAC_Address[0], Ethernet_MAC_Address[1], + Ethernet_MAC_Address[2], Ethernet_MAC_Address[3], + Ethernet_MAC_Address[4], Ethernet_MAC_Address[5]); /** * Open interface for subsequent sending and receiving @@ -152,12 +151,13 @@ bool ethernet_init(char *if_name) ETHERNET_MPDU_MAX, /* portion of the packet to capture */ PCAP_OPENFLAG_PROMISCUOUS, /* promiscuous mode */ eth_timeout, /* read timeout */ - //NULL, /* authentication on the remote machine */ + // NULL, /* authentication on the remote machine */ pcap_errbuf /* error buffer */ ); if (pcap_eth802_fp == NULL) { ethernet_cleanup(); - fprintf(stderr, + fprintf( + stderr, "ethernet.c: unable to open the adapter. %s is not supported by " "Pcap\n", if_name); @@ -171,7 +171,6 @@ bool ethernet_init(char *if_name) return ethernet_valid(); } - /* function to send a packet out the 802.2 socket */ /* returns bytes sent success, negative on failure */ int ethernet_send_addr( @@ -187,7 +186,8 @@ int ethernet_send_addr( /* don't waste time if the socket is not valid */ if (!ethernet_valid()) { - fprintf(stderr, "ethernet: invalid 802.2 ethernet interface descriptor!\n"); + fprintf( + stderr, "ethernet: invalid 802.2 ethernet interface descriptor!\n"); return -1; } /* load destination ethernet MAC address */ @@ -227,7 +227,8 @@ int ethernet_send_addr( /* Send the packet */ if (pcap_sendpacket(pcap_eth802_fp, mtu, mtu_len) != 0) { /* did it get sent? */ - fprintf(stderr, "ethernet: error in sending packet: %s\n", + fprintf( + stderr, "ethernet: error in sending packet: %s\n", pcap_geterr(pcap_eth802_fp)); return -5; } @@ -282,14 +283,16 @@ uint16_t ethernet_receive( /* Make sure the socket is open */ if (!ethernet_valid()) { - fprintf(stderr, "ethernet: invalid 802.2 ethernet interface descriptor!\n"); + fprintf( + stderr, "ethernet: invalid 802.2 ethernet interface descriptor!\n"); return 0; } /* Capture a packet */ res = pcap_next_ex(pcap_eth802_fp, &header, &pkt_data); if (res < 0) { - fprintf(stderr, "ethernet: error in receiving packet: %s\n", + fprintf( + stderr, "ethernet: error in receiving packet: %s\n", pcap_geterr(pcap_eth802_fp)); return 0; } else if (res == 0) { diff --git a/ports/bsd/rs485.c b/ports/bsd/rs485.c index 9663712e..29c33cd2 100644 --- a/ports/bsd/rs485.c +++ b/ports/bsd/rs485.c @@ -596,26 +596,30 @@ void RS485_Print_Ports(void) valid_port = true; if (valid_port) { /* print full absolute file path */ - printf("interface {value=/dev/%s}" - "{display=MS/TP Capture on /dev/%s}\n", + printf( + "interface {value=/dev/%s}" + "{display=MS/TP Capture on /dev/%s}\n", namelist[n]->d_name, namelist[n]->d_name); } } } else { - snprintf(device_dir, sizeof(device_dir), "%s%s/device", - sysdir, namelist[n]->d_name); + snprintf( + device_dir, sizeof(device_dir), "%s%s/device", sysdir, + namelist[n]->d_name); /* Stat the devicedir and handle it if it is a symlink */ if (lstat(device_dir, &st) == 0 && S_ISLNK(st.st_mode)) { memset(buffer, 0, sizeof(buffer)); - snprintf(device_dir, sizeof(device_dir), + snprintf( + device_dir, sizeof(device_dir), "%s%s/device/driver", sysdir, namelist[n]->d_name); if (readlink(device_dir, buffer, sizeof(buffer)) > 0) { valid_port = false; driver_name = basename(buffer); if (strcmp(driver_name, "serial8250") == 0) { /* serial8250-devices must be probed */ - snprintf(device_dir, sizeof(device_dir), - "/dev/%s", namelist[n]->d_name); + snprintf( + device_dir, sizeof(device_dir), "/dev/%s", + namelist[n]->d_name); fd = open( device_dir, O_RDWR | O_NONBLOCK | O_NOCTTY); if (fd >= 0) { @@ -627,8 +631,9 @@ void RS485_Print_Ports(void) } if (valid_port) { /* print full absolute file path */ - printf("interface {value=/dev/%s}" - "{display=MS/TP Capture on /dev/%s}\n", + printf( + "interface {value=/dev/%s}" + "{display=MS/TP Capture on /dev/%s}\n", namelist[n]->d_name, namelist[n]->d_name); } } @@ -675,7 +680,8 @@ static int openSerialPort(const char *const bsdPath) fileDescriptor = open(bsdPath, O_RDWR | O_NOCTTY | O_NONBLOCK); if (fileDescriptor == -1) { - printf("Error opening serial port %s - %s(%d).\n", bsdPath, + printf( + "Error opening serial port %s - %s(%d).\n", bsdPath, strerror(errno), errno); goto error; } @@ -686,7 +692,8 @@ static int openSerialPort(const char *const bsdPath) and ioctl(2) for details.*/ if (ioctl(fileDescriptor, TIOCEXCL) == -1) { - printf("Error setting TIOCEXCL on %s - %s(%d).\n", bsdPath, + printf( + "Error setting TIOCEXCL on %s - %s(%d).\n", bsdPath, strerror(errno), errno); goto error; } @@ -695,7 +702,8 @@ static int openSerialPort(const char *const bsdPath) will block. See fcntl(2) for details.*/ if (fcntl(fileDescriptor, F_SETFL, 0) == -1) { - printf("Error clearing O_NONBLOCK %s - %s(%d).\n", bsdPath, + printf( + "Error clearing O_NONBLOCK %s - %s(%d).\n", bsdPath, strerror(errno), errno); goto error; } @@ -703,7 +711,8 @@ static int openSerialPort(const char *const bsdPath) /* Get the current options and save them so we can restore the default * settings later.*/ if (tcgetattr(fileDescriptor, &RS485_oldtio) == -1) { - printf("Error getting tty attributes %s - %s(%d).\n", bsdPath, + printf( + "Error getting tty attributes %s - %s(%d).\n", bsdPath, strerror(errno), errno); goto error; } @@ -747,7 +756,8 @@ static int openSerialPort(const char *const bsdPath) * the input and output speed. */ if (ioctl(fileDescriptor, IOSSIOSPEED, &speed) == -1) { - printf("Error calling ioctl(..., IOSSIOSPEED, ...) %s - %s(%d).\n", + printf( + "Error calling ioctl(..., IOSSIOSPEED, ...) %s - %s(%d).\n", bsdPath, strerror(errno), errno); } #endif @@ -763,7 +773,8 @@ static int openSerialPort(const char *const bsdPath) /* Cause the new options to take effect immediately.*/ if (tcsetattr(fileDescriptor, TCSANOW, &options) == -1) { - printf("Error setting tty attributes %s - %s(%d).\n", bsdPath, + printf( + "Error setting tty attributes %s - %s(%d).\n", bsdPath, strerror(errno), errno); goto error; } @@ -774,20 +785,23 @@ static int openSerialPort(const char *const bsdPath) /* Assert Data Terminal Ready (DTR) */ if (ioctl(fileDescriptor, TIOCSDTR) == -1) { - printf("Error asserting DTR %s - %s(%d).\n", bsdPath, strerror(errno), + printf( + "Error asserting DTR %s - %s(%d).\n", bsdPath, strerror(errno), errno); } /* Clear Data Terminal Ready (DTR) */ if (ioctl(fileDescriptor, TIOCCDTR) == -1) { - printf("Error clearing DTR %s - %s(%d).\n", bsdPath, strerror(errno), + printf( + "Error clearing DTR %s - %s(%d).\n", bsdPath, strerror(errno), errno); } /* Set the modem lines depending on the bits set in handshake */ handshake = TIOCM_DTR | TIOCM_RTS | TIOCM_CTS | TIOCM_DSR; if (ioctl(fileDescriptor, TIOCMSET, &handshake) == -1) { - printf("Error setting handshake lines %s - %s(%d).\n", bsdPath, + printf( + "Error setting handshake lines %s - %s(%d).\n", bsdPath, strerror(errno), errno); } @@ -797,7 +811,8 @@ static int openSerialPort(const char *const bsdPath) /* Store the state of the modem lines in handshake */ if (ioctl(fileDescriptor, TIOCMGET, &handshake) == -1) { - printf("Error getting handshake lines %s - %s(%d).\n", bsdPath, + printf( + "Error getting handshake lines %s - %s(%d).\n", bsdPath, strerror(errno), errno); } @@ -814,7 +829,8 @@ static int openSerialPort(const char *const bsdPath) if (ioctl(fileDescriptor, IOSSDATALAT, &mics) == -1) { /* set latency to 1 microsecond */ - printf("Error setting read latency %s - %s(%d).\n", bsdPath, + printf( + "Error setting read latency %s - %s(%d).\n", bsdPath, strerror(errno), errno); goto error; } @@ -846,7 +862,8 @@ static void closeSerialPort(int fileDescriptor) the state in which you found it. This is why the original termios struct was saved. */ if (tcsetattr(fileDescriptor, TCSANOW, &RS485_oldtio) == -1) { - printf("Error resetting tty attributes - %s(%d).\n", strerror(errno), + printf( + "Error resetting tty attributes - %s(%d).\n", strerror(errno), errno); } diff --git a/ports/bsd/rs485.h b/ports/bsd/rs485.h index 7a5f9111..687d94c0 100644 --- a/ports/bsd/rs485.h +++ b/ports/bsd/rs485.h @@ -30,8 +30,8 @@ void RS485_Initialize(void); BACNET_STACK_EXPORT void RS485_Send_Frame( struct mstp_port_struct_t *mstp_port, /* port specific data */ - const uint8_t *buffer, /* frame to send (up to 501 bytes of data) */ - uint16_t nbytes); /* number of bytes of data (up to 501) */ + const uint8_t *buffer, /* frame to send (up to 501 bytes of data) */ + uint16_t nbytes); /* number of bytes of data (up to 501) */ BACNET_STACK_EXPORT void RS485_Check_UART_Data( diff --git a/ports/bsd/stdbool.h b/ports/bsd/stdbool.h index 71a283e0..006a400f 100644 --- a/ports/bsd/stdbool.h +++ b/ports/bsd/stdbool.h @@ -23,7 +23,7 @@ #endif #ifndef TRUE -#define TRUE 1 +#define TRUE 1 #endif #endif diff --git a/ports/bsd/websocket-cli.c b/ports/bsd/websocket-cli.c index 024cac4e..12750cb4 100644 --- a/ports/bsd/websocket-cli.c +++ b/ports/bsd/websocket-cli.c @@ -57,7 +57,8 @@ typedef struct { /* Some forward function declarations */ -static int bws_cli_websocket_event(struct lws *wsi, +static int bws_cli_websocket_event( + struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, @@ -72,13 +73,13 @@ static pthread_mutex_t bws_cli_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER; static struct lws_protocols bws_cli_direct_protocol[] = { { BSC_WEBSOCKET_DIRECT_PROTOCOL_STR, bws_cli_websocket_event, 0, 0, 0, NULL, - 0 }, + 0 }, LWS_PROTOCOL_LIST_TERM }; static struct lws_protocols bws_cli_hub_protocol[] = { { BSC_WEBSOCKET_HUB_PROTOCOL_STR, bws_cli_websocket_event, 0, 0, 0, NULL, - 0 }, + 0 }, LWS_PROTOCOL_LIST_TERM }; @@ -205,7 +206,8 @@ static void bws_set_disconnect_reason(BSC_WEBSOCKET_HANDLE h, uint16_t err_code) } } -static int bws_cli_websocket_event(struct lws *wsi, +static int bws_cli_websocket_event( + struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, @@ -267,8 +269,9 @@ static int bws_cli_websocket_event(struct lws *wsi, the WebSocket connection shall be closed with a status code of 1003 -WEBSOCKET_DATA_NOT_ACCEPTED. */ - DEBUG_PRINTF("bws_cli_websocket_event() got non-binary frame, " - "close connection for socket %d\n", + DEBUG_PRINTF( + "bws_cli_websocket_event() got non-binary frame, " + "close connection for socket %d\n", h); lws_close_reason( wsi, LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE, NULL, 0); @@ -280,16 +283,18 @@ static int bws_cli_websocket_event(struct lws *wsi, pthread_mutex_unlock(&bws_cli_mutex); } else { if (!bws_cli_conn[h].fragment_buffer) { - DEBUG_PRINTF("bws_cli_websocket_event() alloc %d bytes for " - "socket %d\n", + DEBUG_PRINTF( + "bws_cli_websocket_event() alloc %d bytes for " + "socket %d\n", len, h); bws_cli_conn[h].fragment_buffer = malloc(BSC_RX_BUFFER_LEN); if (!bws_cli_conn[h].fragment_buffer) { lws_close_reason( wsi, LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE, NULL, 0); pthread_mutex_unlock(&bws_cli_mutex); - DEBUG_PRINTF("bws_cli_websocket_event() <<< ret = -1, " - "allocation of %d bytes failed\n", + DEBUG_PRINTF( + "bws_cli_websocket_event() <<< ret = -1, " + "allocation of %d bytes failed\n", len <= BSC_RX_BUFFER_LEN ? BSC_RX_BUFFER_LEN : len); return -1; } @@ -303,26 +308,29 @@ static int bws_cli_websocket_event(struct lws *wsi, "for socket %d to %d bytes\n", bws_cli_conn[h].fragment_buffer_len, h, bws_cli_conn[h].fragment_buffer_len + len); - bws_cli_conn[h].fragment_buffer = - realloc(bws_cli_conn[h].fragment_buffer, - bws_cli_conn[h].fragment_buffer_len + len); + bws_cli_conn[h].fragment_buffer = realloc( + bws_cli_conn[h].fragment_buffer, + bws_cli_conn[h].fragment_buffer_len + len); if (!bws_cli_conn[h].fragment_buffer) { lws_close_reason( wsi, LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE, NULL, 0); pthread_mutex_unlock(&bws_cli_mutex); - DEBUG_PRINTF("bws_cli_websocket_event() <<< ret = -1, " - "re-allocation of %d bytes failed\n", + DEBUG_PRINTF( + "bws_cli_websocket_event() <<< ret = -1, " + "re-allocation of %d bytes failed\n", bws_cli_conn[h].fragment_buffer_len + len); return -1; } bws_cli_conn[h].fragment_buffer_size = bws_cli_conn[h].fragment_buffer_len + len; } - DEBUG_PRINTF("bws_cli_websocket_event() got next %d bytes for " - "socket %d\n", + DEBUG_PRINTF( + "bws_cli_websocket_event() got next %d bytes for " + "socket %d\n", len, h); - memcpy(&bws_cli_conn[h].fragment_buffer[ - bws_cli_conn[h].fragment_buffer_len], + memcpy( + &bws_cli_conn[h] + .fragment_buffer[bws_cli_conn[h].fragment_buffer_len], in, len); bws_cli_conn[h].fragment_buffer_len += len; @@ -332,7 +340,8 @@ static int bws_cli_websocket_event(struct lws *wsi, dispatch_func = bws_cli_conn[h].dispatch_func; user_param = bws_cli_conn[h].user_param; pthread_mutex_unlock(&bws_cli_mutex); - dispatch_func(h, BSC_WEBSOCKET_RECEIVED, 0, NULL, + dispatch_func( + h, BSC_WEBSOCKET_RECEIVED, 0, NULL, bws_cli_conn[h].fragment_buffer, bws_cli_conn[h].fragment_buffer_len, user_param); pthread_mutex_lock(&bws_cli_mutex); @@ -358,9 +367,11 @@ static int bws_cli_websocket_event(struct lws *wsi, return 0; } - DEBUG_PRINTF("bws_cli_websocket_event() can write, state = %d\n", + DEBUG_PRINTF( + "bws_cli_websocket_event() can write, state = %d\n", bws_cli_conn[h].state); - DEBUG_PRINTF("bws_cli_websocket_event() ws = %d, cs = %d\n", + DEBUG_PRINTF( + "bws_cli_websocket_event() ws = %d, cs = %d\n", bws_cli_conn[h].want_send_data, bws_cli_conn[h].can_send_data); if (bws_cli_conn[h].state == BSC_WEBSOCKET_STATE_CONNECTED && bws_cli_conn[h].want_send_data) { @@ -450,9 +461,9 @@ static void *bws_cli_worker(void *arg) DEBUG_PRINTF("bws_cli_worker() process disconnecting event\n"); DEBUG_PRINTF("bws_cli_worker() destroy ctx %p\n", conn->ctx); /* TRICKY: Libwebsockets API is not designed to be used from - multipe service threads, as a result lws_context_destroy() - is not thread safe. More over, on different platforms the - function behaves in different ways. Call of + multipe service threads, as a result + lws_context_destroy() is not thread safe. More over, on different + platforms the function behaves in different ways. Call of lws_context_destroy() leads to several calls of bws_cli_websocket_event() callback (LWS_CALLBACK_CLOSED, etc..). But under some OS (MacOSx) that callback is @@ -478,7 +489,8 @@ static void *bws_cli_worker(void *arg) bws_cli_free_connection(h); pthread_mutex_unlock(&bws_cli_mutex); DEBUG_PRINTF("bws_cli_worker() unlock mutex\n"); - dispatch_func(h, BSC_WEBSOCKET_DISCONNECTED, err_code, + dispatch_func( + h, BSC_WEBSOCKET_DISCONNECTED, err_code, err_code != ERROR_CODE_SUCCESS ? err_desc : NULL, NULL, 0, user_param); return NULL; @@ -492,7 +504,8 @@ static void *bws_cli_worker(void *arg) return NULL; } -BSC_WEBSOCKET_RET bws_cli_connect(BSC_WEBSOCKET_PROTOCOL proto, +BSC_WEBSOCKET_RET bws_cli_connect( + BSC_WEBSOCKET_PROTOCOL proto, char *url, uint8_t *ca_cert, size_t ca_cert_size, @@ -541,8 +554,8 @@ BSC_WEBSOCKET_RET bws_cli_connect(BSC_WEBSOCKET_PROTOCOL proto, bsc_websocket_init_log(); pthread_mutex_lock(&bws_cli_mutex); - if (lws_parse_uri(tmp_url, &prot, &addr, &port, &path) != 0 || - port == -1 || !prot || !addr || !path) { + if (lws_parse_uri(tmp_url, &prot, &addr, &port, &path) != 0 || port == -1 || + !prot || !addr || !path) { pthread_mutex_unlock(&bws_cli_mutex); DEBUG_PRINTF("bws_cli_connect() <<< ret = BSC_WEBSOCKET_BAD_PARAM\n"); return BSC_WEBSOCKET_BAD_PARAM; @@ -633,15 +646,16 @@ BSC_WEBSOCKET_RET bws_cli_connect(BSC_WEBSOCKET_PROTOCOL proto, bsc_websocket_global_unlock(); r = pthread_attr_init(&attr); - if(!r) { + if (!r) { r = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); } - if(!r) { - r = pthread_create(&thread_id, &attr, &bws_cli_worker, &bws_cli_conn[h]); + if (!r) { + r = pthread_create( + &thread_id, &attr, &bws_cli_worker, &bws_cli_conn[h]); } - if(r) { + if (r) { /* TRICKY: Libwebsockets API is not designed to be used from multipe service threads, as a result lws_context_destroy() is not thread safe. More over, on different platforms the @@ -679,7 +693,8 @@ void bws_cli_disconnect(BSC_WEBSOCKET_HANDLE h) if (h >= 0 && h < BSC_CLIENT_WEBSOCKETS_MAX_NUM) { pthread_mutex_lock(&bws_cli_mutex); - DEBUG_PRINTF("bws_cli_disconnect() state = %d\n", bws_cli_conn[h].state); + DEBUG_PRINTF( + "bws_cli_disconnect() state = %d\n", bws_cli_conn[h].state); if (bws_cli_conn[h].state == BSC_WEBSOCKET_STATE_CONNECTING || bws_cli_conn[h].state == BSC_WEBSOCKET_STATE_CONNECTED) { /* tell worker to process change of connection state */ @@ -732,7 +747,8 @@ BSC_WEBSOCKET_RET bws_cli_dispatch_send( if ((bws_cli_conn[h].state != BSC_WEBSOCKET_STATE_CONNECTED) || !bws_cli_conn[h].want_send_data || !bws_cli_conn[h].can_send_data) { - DEBUG_PRINTF("bws_cli_dispatch_send() state = %d, ws = %d, cs = %d\n", + DEBUG_PRINTF( + "bws_cli_dispatch_send() state = %d, ws = %d, cs = %d\n", bws_cli_conn[h].state, bws_cli_conn[h].want_send_data, bws_cli_conn[h].can_send_data); DEBUG_PRINTF("bws_cli_dispatch_send() <<< ret = " diff --git a/ports/bsd/websocket-global.c b/ports/bsd/websocket-global.c index d6dc75fe..a2888b6f 100644 --- a/ports/bsd/websocket-global.c +++ b/ports/bsd/websocket-global.c @@ -14,72 +14,89 @@ #include "bacnet/basic/sys/debug.h" static pthread_mutex_t websocket_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER; -static pthread_mutex_t websocket_dispatch_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER; +static pthread_mutex_t websocket_dispatch_mutex = + PTHREAD_RECURSIVE_MUTEX_INITIALIZER; #if (BSC_DEBUG_WEBSOCKET_MUTEX_ENABLED != 1) void bsc_websocket_global_lock(void) { - pthread_mutex_lock(&websocket_mutex); + pthread_mutex_lock(&websocket_mutex); } void bsc_websocket_global_unlock(void) { - pthread_mutex_unlock(&websocket_mutex); + pthread_mutex_unlock(&websocket_mutex); } void bws_dispatch_lock(void) { - pthread_mutex_lock(&websocket_dispatch_mutex); + pthread_mutex_lock(&websocket_dispatch_mutex); } void bws_dispatch_unlock(void) { - pthread_mutex_unlock(&websocket_dispatch_mutex); + pthread_mutex_unlock(&websocket_dispatch_mutex); } #else -static int volatile websocket_mutex_cnt = 0; -static int volatile websocket_dispatch_mutex_cnt = 0; +static volatile int websocket_mutex_cnt = 0; +static volatile int websocket_dispatch_mutex_cnt = 0; void bsc_websocket_global_lock_dbg(char *f, int line) { - printf("bsc_websocket_global_lock_dbg() >>> %s:%d lock_cnt %d tid = %ld\n", f, line, websocket_mutex_cnt, pthread_self()); - websocket_mutex_cnt++; - fflush(stdout); - pthread_mutex_lock(&websocket_mutex); - printf("bsc_websocket_global_lock_dbg() <<< lock_cnt %d tid = %ld\n", websocket_mutex_cnt, pthread_self()); - fflush(stdout); + printf( + "bsc_websocket_global_lock_dbg() >>> %s:%d lock_cnt %d tid = %ld\n", f, + line, websocket_mutex_cnt, pthread_self()); + websocket_mutex_cnt++; + fflush(stdout); + pthread_mutex_lock(&websocket_mutex); + printf( + "bsc_websocket_global_lock_dbg() <<< lock_cnt %d tid = %ld\n", + websocket_mutex_cnt, pthread_self()); + fflush(stdout); } void bsc_websocket_global_unlock_dbg(char *f, int line) { - printf("bsc_websocket_global_unlock_dbg() >>> %s:%d lock_cnt %d tid = %ld\n", f, line, websocket_mutex_cnt, pthread_self()); - websocket_mutex_cnt--; - fflush(stdout); - pthread_mutex_unlock(&websocket_mutex); - printf("bsc_websocket_global_unlock_dbg() <<< lock_cnt %d tid = %ld\n", websocket_mutex_cnt, pthread_self()); - fflush(stdout); + printf( + "bsc_websocket_global_unlock_dbg() >>> %s:%d lock_cnt %d tid = %ld\n", + f, line, websocket_mutex_cnt, pthread_self()); + websocket_mutex_cnt--; + fflush(stdout); + pthread_mutex_unlock(&websocket_mutex); + printf( + "bsc_websocket_global_unlock_dbg() <<< lock_cnt %d tid = %ld\n", + websocket_mutex_cnt, pthread_self()); + fflush(stdout); } void bws_dispatch_lock_dbg(char *f, int line) { - printf("bws_dispatch_lock_dbg() >>> %s:%d lock_cnt %d tid = %ld\n", f, line, websocket_dispatch_mutex_cnt, pthread_self()); - websocket_dispatch_mutex_cnt++; - fflush(stdout); - pthread_mutex_lock(&websocket_dispatch_mutex); - printf("bws_dispatch_lock_dbg() <<< lock_cnt %d tid = %ld\n", websocket_dispatch_mutex_cnt, pthread_self()); - fflush(stdout); + printf( + "bws_dispatch_lock_dbg() >>> %s:%d lock_cnt %d tid = %ld\n", f, line, + websocket_dispatch_mutex_cnt, pthread_self()); + websocket_dispatch_mutex_cnt++; + fflush(stdout); + pthread_mutex_lock(&websocket_dispatch_mutex); + printf( + "bws_dispatch_lock_dbg() <<< lock_cnt %d tid = %ld\n", + websocket_dispatch_mutex_cnt, pthread_self()); + fflush(stdout); } void bws_dispatch_unlock_dbg(char *f, int line) { - printf("bws_dispatch_unlock_dbg() >>> %s:%d lock_cnt %d tid = %ld\n", f, line, websocket_dispatch_mutex_cnt, pthread_self()); - websocket_dispatch_mutex_cnt--; - fflush(stdout); - pthread_mutex_unlock(&websocket_dispatch_mutex); - printf("bws_dispatch_unlock_dbg() <<< lock_cnt %d tid = %ld\n", websocket_dispatch_mutex_cnt, pthread_self()); - fflush(stdout); + printf( + "bws_dispatch_unlock_dbg() >>> %s:%d lock_cnt %d tid = %ld\n", f, line, + websocket_dispatch_mutex_cnt, pthread_self()); + websocket_dispatch_mutex_cnt--; + fflush(stdout); + pthread_mutex_unlock(&websocket_dispatch_mutex); + printf( + "bws_dispatch_unlock_dbg() <<< lock_cnt %d tid = %ld\n", + websocket_dispatch_mutex_cnt, pthread_self()); + fflush(stdout); } #endif @@ -89,16 +106,17 @@ static bool bsc_websocket_log_initialized = false; void bsc_websocket_init_log(void) { bsc_websocket_global_lock(); - if(!bsc_websocket_log_initialized) { - bsc_websocket_log_initialized = true; + if (!bsc_websocket_log_initialized) { + bsc_websocket_log_initialized = true; #if DEBUG_LIBWEBSOCKETS_ENABLED == 1 - printf("LWS_MAX_SMP = %d", LWS_MAX_SMP); - lws_set_log_level(LLL_ERR | LLL_WARN | LLL_NOTICE | LLL_INFO | LLL_DEBUG | - LLL_PARSER | LLL_HEADER | LLL_EXT | LLL_CLIENT | LLL_LATENCY | - LLL_USER | LLL_THREAD, - NULL); + printf("LWS_MAX_SMP = %d", LWS_MAX_SMP); + lws_set_log_level( + LLL_ERR | LLL_WARN | LLL_NOTICE | LLL_INFO | LLL_DEBUG | + LLL_PARSER | LLL_HEADER | LLL_EXT | LLL_CLIENT | LLL_LATENCY | + LLL_USER | LLL_THREAD, + NULL); #else - lws_set_log_level(0, NULL); + lws_set_log_level(0, NULL); #endif } bsc_websocket_global_unlock(); diff --git a/ports/bsd/websocket-global.h b/ports/bsd/websocket-global.h index 7f977077..ebed48c0 100644 --- a/ports/bsd/websocket-global.h +++ b/ports/bsd/websocket-global.h @@ -18,8 +18,10 @@ void bsc_websocket_global_unlock(void); #else void bsc_websocket_global_lock_dbg(char *f, int line); void bsc_websocket_global_unlock_dbg(char *f, int line); -#define bsc_websocket_global_lock() bsc_websocket_global_lock_dbg(__FILE__, __LINE__); -#define bsc_websocket_global_unlock() bsc_websocket_global_unlock_dbg(__FILE__, __LINE__); +#define bsc_websocket_global_lock() \ + bsc_websocket_global_lock_dbg(__FILE__, __LINE__); +#define bsc_websocket_global_unlock() \ + bsc_websocket_global_unlock_dbg(__FILE__, __LINE__); #endif void bsc_websocket_init_log(void); diff --git a/ports/bsd/websocket-srv.c b/ports/bsd/websocket-srv.c index ff444dd4..bbb81a00 100644 --- a/ports/bsd/websocket-srv.c +++ b/ports/bsd/websocket-srv.c @@ -42,7 +42,8 @@ typedef enum { /* Some forward function declarations */ -static int bws_srv_websocket_event(struct lws *wsi, +static int bws_srv_websocket_event( + struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, @@ -289,8 +290,8 @@ static BSC_WEBSOCKET_HANDLE bws_srv_alloc_connection(BSC_WEBSOCKET_CONTEXT *ctx) return BSC_WEBSOCKET_INVALID_HANDLE; } -static void bws_srv_free_connection( - BSC_WEBSOCKET_CONTEXT *ctx, BSC_WEBSOCKET_HANDLE h) +static void +bws_srv_free_connection(BSC_WEBSOCKET_CONTEXT *ctx, BSC_WEBSOCKET_HANDLE h) { DEBUG_PRINTF("bws_srv_free_connection() >>> ctx = %p, h = %d\n", ctx, h); @@ -309,8 +310,8 @@ static void bws_srv_free_connection( DEBUG_PRINTF("bws_srv_free_connection() <<<\n"); } -static BSC_WEBSOCKET_HANDLE bws_find_connnection( - BSC_WEBSOCKET_CONTEXT *ctx, struct lws *ws) +static BSC_WEBSOCKET_HANDLE +bws_find_connnection(BSC_WEBSOCKET_CONTEXT *ctx, struct lws *ws) { int i; for (i = 0; i < bws_srv_get_max_sockets(ctx->proto); i++) { @@ -322,7 +323,8 @@ static BSC_WEBSOCKET_HANDLE bws_find_connnection( return BSC_WEBSOCKET_INVALID_HANDLE; } -static int bws_srv_websocket_event(struct lws *wsi, +static int bws_srv_websocket_event( + struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, @@ -339,9 +341,10 @@ static int bws_srv_websocket_event(struct lws *wsi, uint16_t err; (void)user; - DEBUG_PRINTF("bws_srv_websocket_event() >>> ctx = %p, user_param = %p, " - "proto = %d, wsi = %p, " - "reason = %d, in = %p, len = %d\n", + DEBUG_PRINTF( + "bws_srv_websocket_event() >>> ctx = %p, user_param = %p, " + "proto = %d, wsi = %p, " + "reason = %d, in = %p, len = %d\n", ctx, ctx->user_param, ctx->proto, wsi, reason, in, len); switch (reason) { @@ -365,8 +368,9 @@ static int bws_srv_websocket_event(struct lws *wsi, dispatch_func = ctx->dispatch_func; user_param = ctx->user_param; pthread_mutex_unlock(ctx->mutex); - dispatch_func((BSC_WEBSOCKET_SRV_HANDLE)ctx, h, - BSC_WEBSOCKET_CONNECTED, 0, NULL, NULL, 0, user_param); + dispatch_func( + (BSC_WEBSOCKET_SRV_HANDLE)ctx, h, BSC_WEBSOCKET_CONNECTED, 0, + NULL, NULL, 0, user_param); /* wakeup worker to process pending event */ lws_cancel_service(ctx->wsctx); break; @@ -378,9 +382,10 @@ static int bws_srv_websocket_event(struct lws *wsi, if (h == BSC_WEBSOCKET_INVALID_HANDLE) { pthread_mutex_unlock(ctx->mutex); } else { - DEBUG_PRINTF("bws_srv_websocket_event() ctx %p user_param = %p " - "proto %d state of " - "socket %d is %d\n", + DEBUG_PRINTF( + "bws_srv_websocket_event() ctx %p user_param = %p " + "proto %d state of " + "socket %d is %d\n", ctx, ctx->user_param, ctx->proto, h, ctx->conn[h].state); dispatch_func = ctx->dispatch_func; user_param = ctx->user_param; @@ -389,7 +394,8 @@ static int bws_srv_websocket_event(struct lws *wsi, bws_srv_free_connection(ctx, h); pthread_mutex_unlock(ctx->mutex); if (!stop_worker) { - dispatch_func((BSC_WEBSOCKET_SRV_HANDLE)ctx, h, + dispatch_func( + (BSC_WEBSOCKET_SRV_HANDLE)ctx, h, BSC_WEBSOCKET_DISCONNECTED, err, NULL, NULL, 0, user_param); } @@ -413,9 +419,10 @@ static int bws_srv_websocket_event(struct lws *wsi, if (h == BSC_WEBSOCKET_INVALID_HANDLE) { pthread_mutex_unlock(ctx->mutex); } else { - DEBUG_PRINTF("bws_srv_websocket_event() ctx %p proto %d " - "received %d bytes of " - "data for websocket %d\n", + DEBUG_PRINTF( + "bws_srv_websocket_event() ctx %p proto %d " + "received %d bytes of " + "data for websocket %d\n", ctx, ctx->proto, len, h); if (!lws_frame_is_binary(wsi)) { /* According AB.7.5.3 BACnet/SC BVLC Message Exchange, @@ -441,11 +448,13 @@ static int bws_srv_websocket_event(struct lws *wsi, ctx->conn[h].fragment_buffer = malloc(BSC_RX_BUFFER_LEN); if (!ctx->conn[h].fragment_buffer) { - lws_close_reason(wsi, - LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE, NULL, 0); + lws_close_reason( + wsi, LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE, NULL, + 0); pthread_mutex_unlock(ctx->mutex); - DEBUG_PRINTF("bws_srv_websocket_event() <<< ret = " - "-1, allocation of %d bytes failed\n", + DEBUG_PRINTF( + "bws_srv_websocket_event() <<< ret = " + "-1, allocation of %d bytes failed\n", len <= BSC_RX_BUFFER_LEN ? BSC_RX_BUFFER_LEN : len); return -1; @@ -461,12 +470,13 @@ static int bws_srv_websocket_event(struct lws *wsi, ctx->conn[h].fragment_buffer_len, h, ctx->conn[h].fragment_buffer_len + len); - ctx->conn[h].fragment_buffer = - realloc(ctx->conn[h].fragment_buffer, - ctx->conn[h].fragment_buffer_len + len); + ctx->conn[h].fragment_buffer = realloc( + ctx->conn[h].fragment_buffer, + ctx->conn[h].fragment_buffer_len + len); if (!ctx->conn[h].fragment_buffer) { - lws_close_reason(wsi, - LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE, NULL, 0); + lws_close_reason( + wsi, LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE, NULL, + 0); pthread_mutex_unlock(ctx->mutex); DEBUG_PRINTF( "bws_srv_websocket_event() <<< ret = -1, " @@ -481,15 +491,17 @@ static int bws_srv_websocket_event(struct lws *wsi, "bws_srv_websocket_event() got next %d bytes for " "socket %d total_len %d\n", len, h, ctx->conn[h].fragment_buffer_len); - memcpy(&ctx->conn[h].fragment_buffer[ - ctx->conn[h].fragment_buffer_len], + memcpy( + &ctx->conn[h] + .fragment_buffer[ctx->conn[h].fragment_buffer_len], in, len); ctx->conn[h].fragment_buffer_len += len; if (lws_is_final_fragment(wsi) && !ctx->stop_worker) { dispatch_func = ctx->dispatch_func; user_param = ctx->user_param; pthread_mutex_unlock(ctx->mutex); - dispatch_func((BSC_WEBSOCKET_SRV_HANDLE)ctx, h, + dispatch_func( + (BSC_WEBSOCKET_SRV_HANDLE)ctx, h, BSC_WEBSOCKET_RECEIVED, 0, NULL, ctx->conn[h].fragment_buffer, ctx->conn[h].fragment_buffer_len, user_param); @@ -512,8 +524,9 @@ static int bws_srv_websocket_event(struct lws *wsi, if (h == BSC_WEBSOCKET_INVALID_HANDLE) { pthread_mutex_unlock(ctx->mutex); } else { - DEBUG_PRINTF("bws_srv_websocket_event() ctx %p proto %d socket " - "%d state = %d\n", + DEBUG_PRINTF( + "bws_srv_websocket_event() ctx %p proto %d socket " + "%d state = %d\n", ctx, ctx->proto, h, ctx->conn[h].state); if (ctx->conn[h].state == BSC_WEBSOCKET_STATE_DISCONNECTING) { @@ -530,7 +543,8 @@ static int bws_srv_websocket_event(struct lws *wsi, stop_worker = ctx->stop_worker; pthread_mutex_unlock(ctx->mutex); if (!stop_worker) { - dispatch_func((BSC_WEBSOCKET_SRV_HANDLE)ctx, h, + dispatch_func( + (BSC_WEBSOCKET_SRV_HANDLE)ctx, h, BSC_WEBSOCKET_SENDABLE, 0, NULL, NULL, 0, user_param); } @@ -562,33 +576,38 @@ static void *bws_srv_worker(void *arg) BSC_WEBSOCKET_SRV_DISPATCH dispatch_func; void *user_param; - DEBUG_PRINTF("bws_srv_worker() started for ctx %p proto %d user_param %p\n", - ctx, ctx->proto, ctx->user_param); + DEBUG_PRINTF( + "bws_srv_worker() started for ctx %p proto %d user_param %p\n", ctx, + ctx->proto, ctx->user_param); pthread_mutex_lock(ctx->mutex); dispatch_func = ctx->dispatch_func; user_param = ctx->user_param; pthread_mutex_unlock(ctx->mutex); - dispatch_func((BSC_WEBSOCKET_SRV_HANDLE)ctx, 0, - BSC_WEBSOCKET_SERVER_STARTED, 0, NULL, NULL, 0, user_param); + dispatch_func( + (BSC_WEBSOCKET_SRV_HANDLE)ctx, 0, BSC_WEBSOCKET_SERVER_STARTED, 0, NULL, + NULL, 0, user_param); while (1) { - DEBUG_PRINTF("bws_srv_worker() ctx %p proto %d blocked user_param %p\n", - ctx, ctx->proto, ctx->user_param); + DEBUG_PRINTF( + "bws_srv_worker() ctx %p proto %d blocked user_param %p\n", ctx, + ctx->proto, ctx->user_param); pthread_mutex_lock(ctx->mutex); if (ctx->stop_worker) { - DEBUG_PRINTF("bws_srv_worker() ctx %p user_param %p proto %d going " - "to stop\n", + DEBUG_PRINTF( + "bws_srv_worker() ctx %p user_param %p proto %d going " + "to stop\n", ctx, ctx->user_param, ctx->proto); - DEBUG_PRINTF("bws_srv_worker() destroy wsctx %p, ctx = %p, " - "user_param = %p\n", + DEBUG_PRINTF( + "bws_srv_worker() destroy wsctx %p, ctx = %p, " + "user_param = %p\n", ctx->wsctx, ctx, ctx->user_param); /* TRICKY: Libwebsockets API is not designed to be used from - multipe service threads, as a result lws_context_destroy() - is not thread safe. More over, on different platforms the - function behaves in different ways. Call of + multipe service threads, as a result + lws_context_destroy() is not thread safe. More over, on different + platforms the function behaves in different ways. Call of lws_context_destroy() leads to several calls of bws_srv_websocket_event() callback (LWS_CALLBACK_CLOSED, etc..). But under some OS (MacOSx) that callback is @@ -616,8 +635,9 @@ static void *bws_srv_worker(void *arg) DEBUG_PRINTF( "bws_srv_worker() ctx %p user_param = %p\n", ctx, user_param); pthread_mutex_unlock(ctx->mutex); - dispatch_func(ctx, 0, BSC_WEBSOCKET_SERVER_STOPPED, 0, NULL, NULL, - 0, user_param); + dispatch_func( + ctx, 0, BSC_WEBSOCKET_SERVER_STOPPED, 0, NULL, NULL, 0, + user_param); bws_free_server_ctx(ctx); DEBUG_PRINTF( "bws_srv_worker() ctx %p proto %d stopped\n", ctx, ctx->proto); @@ -625,21 +645,24 @@ static void *bws_srv_worker(void *arg) } for (i = 0; i < bws_srv_get_max_sockets(ctx->proto); i++) { - DEBUG_PRINTF("bws_srv_worker() ctx %p user_param %p proto %d " - "socket %d(%p) state = %d\n", + DEBUG_PRINTF( + "bws_srv_worker() ctx %p user_param %p proto %d " + "socket %d(%p) state = %d\n", ctx, ctx->user_param, ctx->proto, i, &ctx->conn[i], ctx->conn[i].state); if (ctx->conn[i].state == BSC_WEBSOCKET_STATE_CONNECTED) { if (ctx->conn[i].want_send_data) { - DEBUG_PRINTF("bws_srv_worker() process request for sending " - "data on socket %d\n", + DEBUG_PRINTF( + "bws_srv_worker() process request for sending " + "data on socket %d\n", i); lws_callback_on_writable(ctx->conn[i].ws); } - } else if (ctx->conn[i].state == - BSC_WEBSOCKET_STATE_DISCONNECTING) { - DEBUG_PRINTF("bws_srv_worker() process disconnecting event on " - "socket %d\n", + } else if ( + ctx->conn[i].state == BSC_WEBSOCKET_STATE_DISCONNECTING) { + DEBUG_PRINTF( + "bws_srv_worker() process disconnecting event on " + "socket %d\n", i); lws_callback_on_writable(ctx->conn[i].ws); } @@ -659,7 +682,8 @@ static void *bws_srv_worker(void *arg) return NULL; } -BSC_WEBSOCKET_RET bws_srv_start(BSC_WEBSOCKET_PROTOCOL proto, +BSC_WEBSOCKET_RET bws_srv_start( + BSC_WEBSOCKET_PROTOCOL proto, int port, char *iface, uint8_t *ca_cert, @@ -678,16 +702,16 @@ BSC_WEBSOCKET_RET bws_srv_start(BSC_WEBSOCKET_PROTOCOL proto, BSC_WEBSOCKET_CONTEXT *ctx; pthread_attr_t attr; int r; - struct lws_protocols protos[] = { - { (proto == BSC_WEBSOCKET_HUB_PROTOCOL) - ? BSC_WEBSOCKET_HUB_PROTOCOL_STR - : BSC_WEBSOCKET_DIRECT_PROTOCOL_STR, - bws_srv_websocket_event, 0, 0, 0, NULL, 0 }, - LWS_PROTOCOL_LIST_TERM - }; + struct lws_protocols protos[] = { { (proto == BSC_WEBSOCKET_HUB_PROTOCOL) + ? BSC_WEBSOCKET_HUB_PROTOCOL_STR + : BSC_WEBSOCKET_DIRECT_PROTOCOL_STR, + bws_srv_websocket_event, 0, 0, 0, NULL, + 0 }, + LWS_PROTOCOL_LIST_TERM }; - DEBUG_PRINTF("bws_srv_start() >>> proto = %d port = %d " - "dispatch_func_user_param = %p\n", + DEBUG_PRINTF( + "bws_srv_start() >>> proto = %d port = %d " + "dispatch_func_user_param = %p\n", proto, port, dispatch_func_user_param); if (proto != BSC_WEBSOCKET_HUB_PROTOCOL && @@ -758,11 +782,11 @@ BSC_WEBSOCKET_RET bws_srv_start(BSC_WEBSOCKET_PROTOCOL proto, ctx->proto = proto; r = pthread_attr_init(&attr); - if(!r) { + if (!r) { r = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); } - if(!r) { + if (!r) { r = pthread_create(&thread_id, &attr, &bws_srv_worker, ctx); } @@ -882,7 +906,8 @@ void bws_srv_send(BSC_WEBSOCKET_SRV_HANDLE sh, BSC_WEBSOCKET_HANDLE h) DEBUG_PRINTF("bws_srv_send() <<<\n"); } -BSC_WEBSOCKET_RET bws_srv_dispatch_send(BSC_WEBSOCKET_SRV_HANDLE sh, +BSC_WEBSOCKET_RET bws_srv_dispatch_send( + BSC_WEBSOCKET_SRV_HANDLE sh, BSC_WEBSOCKET_HANDLE h, uint8_t *payload, size_t payload_size) @@ -891,8 +916,9 @@ BSC_WEBSOCKET_RET bws_srv_dispatch_send(BSC_WEBSOCKET_SRV_HANDLE sh, BSC_WEBSOCKET_RET ret; BSC_WEBSOCKET_CONTEXT *ctx = (BSC_WEBSOCKET_CONTEXT *)sh; - DEBUG_PRINTF("bws_srv_dispatch_send() >>> ctx = %p h = %d payload %p " - "payload_size %d\n", + DEBUG_PRINTF( + "bws_srv_dispatch_send() >>> ctx = %p h = %d payload %p " + "payload_size %d\n", ctx, h, payload, payload_size); #if DEBUG_ENABLED == 1 @@ -951,7 +977,8 @@ BSC_WEBSOCKET_RET bws_srv_dispatch_send(BSC_WEBSOCKET_SRV_HANDLE sh, return ret; } -bool bws_srv_get_peer_ip_addr(BSC_WEBSOCKET_SRV_HANDLE sh, +bool bws_srv_get_peer_ip_addr( + BSC_WEBSOCKET_SRV_HANDLE sh, BSC_WEBSOCKET_HANDLE h, uint8_t *ip_str, size_t ip_str_len,