1
10
13
14
20
21
22
23
24
25
26
27
28
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
109
110
111
112
113
119
120
121
125
126
127
132
133
134
144
145
146
147
148
149
153
154
155
156
157
158
159
163
164
165
166
167
168
169
170
175
176
177
178
179
180
181
182
183
184
185
186
187
192
193
194
195
196
197
198
199
200
201
202
203
204
205
213
214
215
216
217
...
...
...
#define NX_SOURCE_CODE
#include "nx_api.h"
#include "nx_ip.h"
#include "nx_udp.h"
#include "nx_packet.h"
#include "nx_ipv6.h"
5 includes
NX_CALLER_CHECKING_EXTERNS
...
...
UINT _nxde_udp_socket_send(NX_UDP_SOCKET *socket_ptr, NX_PACKET **packet_ptr_ptr, NXD_ADDRESS *ip_address, UINT port)
{
NX_PACKET *packet_ptr;
UINT status;
UINT ip_header_size = 0;
packet_ptr = *packet_ptr_ptr;
if ((socket_ptr == NX_NULL) || (socket_ptr -> nx_udp_socket_id != NX_UDP_ID) || (ip_address == NX_NULL))
{
return(NX_PTR_ERROR);
}if ((socket_ptr == NX_NULL) || (socket_ptr -> nx_udp_socket_id != NX_UDP_ID) || (ip_address == NX_NULL)) { ... }
if ((packet_ptr == NX_NULL) ||
(packet_ptr -> nx_packet_union_next.nx_packet_tcp_queue_next != ((NX_PACKET *)NX_PACKET_ALLOCATED)))
{
return(NX_PTR_ERROR);
}if ((packet_ptr == NX_NULL) || (packet_ptr -> nx_packet_union_next.nx_packet_tcp_queue_next != ((NX_PACKET *)NX_PACKET_ALLOCATED))) { ... }
if (!(socket_ptr -> nx_udp_socket_ip_ptr) -> nx_ip_udp_packet_receive)
{
return(NX_NOT_ENABLED);
}if (!(socket_ptr -> nx_udp_socket_ip_ptr) -> nx_ip_udp_packet_receive) { ... }
if ((ip_address -> nxd_ip_version != NX_IP_VERSION_V4) &&
(ip_address -> nxd_ip_version != NX_IP_VERSION_V6))
{
return(NX_IP_ADDRESS_ERROR);
}if ((ip_address -> nxd_ip_version != NX_IP_VERSION_V4) && (ip_address -> nxd_ip_version != NX_IP_VERSION_V6)) { ... }
#ifndef NX_DISABLE_IPV4
if (ip_address -> nxd_ip_version == NX_IP_VERSION_V4)
{
if (ip_address -> nxd_ip_address.v4 == 0)
{
return(NX_IP_ADDRESS_ERROR);
}if (ip_address -> nxd_ip_address.v4 == 0) { ... }
ip_header_size = (UINT)sizeof(NX_IPV4_HEADER);
}if (ip_address -> nxd_ip_version == NX_IP_VERSION_V4) { ... }
/* ... */#endif
#ifdef FEATURE_NX_IPV6
if (ip_address -> nxd_ip_version == NX_IP_VERSION_V6)
{
if (CHECK_UNSPECIFIED_ADDRESS(&ip_address -> nxd_ip_address.v6[0]))
{
return(NX_IP_ADDRESS_ERROR);
}if (CHECK_UNSPECIFIED_ADDRESS(&ip_address -> nxd_ip_address.v6[0])) { ... }
ip_header_size = (UINT)sizeof(NX_IPV6_HEADER);
}if (ip_address -> nxd_ip_version == NX_IP_VERSION_V6) { ... }
/* ... */#endif
if (((ULONG)port) > (ULONG)NX_MAX_PORT)
{
return(NX_INVALID_PORT);
}if (((ULONG)port) > (ULONG)NX_MAX_PORT) { ... }
if ((INT)(packet_ptr -> nx_packet_prepend_ptr - packet_ptr -> nx_packet_data_start) < (INT)(ip_header_size + sizeof(NX_UDP_HEADER)))
{
#ifndef NX_DISABLE_UDP_INFO
(socket_ptr -> nx_udp_socket_ip_ptr) -> nx_ip_udp_invalid_packets++;
socket_ptr -> nx_udp_socket_invalid_packets++;/* ... */
#endif
return(NX_UNDERFLOW);
}if ((INT)(packet_ptr -> nx_packet_prepend_ptr - packet_ptr -> nx_packet_data_start) < (INT)(ip_header_size + sizeof(NX_UDP_HEADER))) { ... }
if (packet_ptr -> nx_packet_append_ptr > packet_ptr -> nx_packet_data_end)
{
#ifndef NX_DISABLE_UDP_INFO
(socket_ptr -> nx_udp_socket_ip_ptr) -> nx_ip_udp_invalid_packets++;
socket_ptr -> nx_udp_socket_invalid_packets++;/* ... */
#endif
return(NX_OVERFLOW);
}if (packet_ptr -> nx_packet_append_ptr > packet_ptr -> nx_packet_data_end) { ... }
NX_THREADS_ONLY_CALLER_CHECKING
status = _nxd_udp_socket_send(socket_ptr, packet_ptr, ip_address, port);
if (status == NX_SUCCESS)
{
/* ... */
*packet_ptr_ptr = NX_NULL;
}if (status == NX_SUCCESS) { ... }
return(status);
}{ ... }