diff options
| author | PProvost <[email protected]> | 2020-05-11 08:54:23 -0600 |
|---|---|---|
| committer | PProvost <[email protected]> | 2020-05-11 08:54:23 -0600 |
| commit | 0c4f784459a7564933ed91bf39f00d12608cf91c (patch) | |
| tree | cfa743731d1cfb11d83119bf1c8d0d942e8c3c73 /common/src/nx_udp_socket_bytes_available.c | |
Initial commit
Diffstat (limited to 'common/src/nx_udp_socket_bytes_available.c')
| -rw-r--r-- | common/src/nx_udp_socket_bytes_available.c | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/common/src/nx_udp_socket_bytes_available.c b/common/src/nx_udp_socket_bytes_available.c new file mode 100644 index 00000000..03e4750e --- /dev/null +++ b/common/src/nx_udp_socket_bytes_available.c @@ -0,0 +1,114 @@ +/**************************************************************************/ +/* */ +/* Copyright (c) Microsoft Corporation. All rights reserved. */ +/* */ +/* This software is licensed under the Microsoft Software License */ +/* Terms for Microsoft Azure RTOS. Full text of the license can be */ +/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */ +/* and in the root directory of this software. */ +/* */ +/**************************************************************************/ + + +/**************************************************************************/ +/**************************************************************************/ +/** */ +/** NetX Component */ +/** */ +/** User Datagram Protocol (UDP) */ +/** */ +/**************************************************************************/ +/**************************************************************************/ + +#define NX_SOURCE_CODE + + +/* Include necessary system files. */ + +#include "nx_api.h" +#include "nx_udp.h" + + +/**************************************************************************/ +/* */ +/* FUNCTION RELEASE */ +/* */ +/* _nx_udp_socket_bytes_available PORTABLE C */ +/* 6.0 */ +/* AUTHOR */ +/* */ +/* Yuxin Zhou, Microsoft Corporation */ +/* */ +/* DESCRIPTION */ +/* */ +/* This function determines the number of bytes available on a UDP */ +/* socket for reception. */ +/* */ +/* INPUT */ +/* */ +/* socket_ptr Pointer to the UDP sockete */ +/* bytes_available Number of bytes returned to */ +/* the caller. */ +/* */ +/* OUTPUT */ +/* */ +/* status Completion status */ +/* */ +/* CALLS */ +/* */ +/* tx_mutex_get Obtain protection */ +/* tx_mutex_put Release protection */ +/* */ +/* CALLED BY */ +/* */ +/* Application Code */ +/* */ +/* RELEASE HISTORY */ +/* */ +/* DATE NAME DESCRIPTION */ +/* */ +/* 05-19-2020 Yuxin Zhou Initial Version 6.0 */ +/* */ +/**************************************************************************/ +UINT _nx_udp_socket_bytes_available(NX_UDP_SOCKET *socket_ptr, ULONG *bytes_available) +{ +NX_IP *ip_ptr; +NX_PACKET *packet_ptr; +INT count; + + /* Setup IP pointer. */ + ip_ptr = socket_ptr -> nx_udp_socket_ip_ptr; + + /* Obtain the IP mutex so we can examine the bound port. */ + tx_mutex_get(&(ip_ptr -> nx_ip_protection), TX_WAIT_FOREVER); + + *bytes_available = 0; + + /* Determine if the socket is currently bound. */ + if (!socket_ptr -> nx_udp_socket_bound_next) + { + /* Release mutex */ + tx_mutex_put(&(ip_ptr -> nx_ip_protection)); + + return(NX_NOT_SUCCESSFUL); + } + + packet_ptr = socket_ptr -> nx_udp_socket_receive_head; + + /* Loop through all the packets on the queue and find out the total + number of bytes in the rx queue that are available to the applciation. */ + for (count = 0; count < (INT)(socket_ptr -> nx_udp_socket_receive_count); count++) + { + + *bytes_available += (packet_ptr -> nx_packet_length - (ULONG)sizeof(NX_UDP_HEADER)); + + /* Move on to the next packet. */ + packet_ptr = packet_ptr -> nx_packet_queue_next; + } + + /* Release protection. */ + tx_mutex_put(&(ip_ptr -> nx_ip_protection)); + + return(NX_SUCCESS); +} + |
