1
10
13
14
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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
107
108
109
110
111
117
118
119
120
121
122
123
124
130
131
132
139
140
141
142
145
146
147
152
153
154
155
156
157
161
165
166
167
168
169
170
171
172
...
...
...
#define NX_SOURCE_CODE
#include "nx_api.h"
#include "nx_tcp.h"
#ifdef NX_ENABLE_TCP_WINDOW_SCALING
...
UINT _nx_tcp_window_scaling_option_get(UCHAR *option_ptr, ULONG option_area_size, ULONG *window_scale)
{
ULONG option_length;
*window_scale = 0xFF;
while (option_area_size >= 3)
{
if (*option_ptr == NX_TCP_RWIN_KIND)
{
option_ptr++;
if (*option_ptr++ != 3)
{
return(NX_FALSE);
}if (*option_ptr++ != 3) { ... }
*window_scale = (ULONG)*option_ptr;
if (*window_scale > 14)
{
*window_scale = 14;
}if (*window_scale > 14) { ... }
break;
}if (*option_ptr == NX_TCP_RWIN_KIND) { ... }
if (*option_ptr == NX_TCP_EOL_KIND)
{
break;
}if (*option_ptr == NX_TCP_EOL_KIND) { ... }
if (*option_ptr == NX_TCP_NOP_KIND)
{
option_ptr++;
option_area_size--;
}if (*option_ptr == NX_TCP_NOP_KIND) { ... }
else
{
/* ... */
option_length = *(option_ptr + 1);
if (option_length == 0)
{
return(NX_FALSE);
}if (option_length == 0) { ... }
option_ptr = option_ptr + option_length;
if (option_length > option_area_size)
{
return(NX_FALSE);
}if (option_length > option_area_size) { ... }
else
{
option_area_size = option_area_size - option_length;
}else { ... }
}else { ... }
}while (option_area_size >= 3) { ... }
return(NX_TRUE);
}_nx_tcp_window_scaling_option_get (UCHAR *option_ptr, ULONG option_area_size, ULONG *window_scale) { ... }
/* ... */#endif