equal
deleted
inserted
replaced
1 /* |
1 /* |
2 * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. Oracle designates this |
7 * published by the Free Software Foundation. Oracle designates this |
77 char *error_msg_buf = NULL; |
77 char *error_msg_buf = NULL; |
78 size_t error_msg_buf_size = |
78 size_t error_msg_buf_size = |
79 strlen("IP Helper Library GetAdaptersAddresses function failed" |
79 strlen("IP Helper Library GetAdaptersAddresses function failed" |
80 " with error == ") + 10; |
80 " with error == ") + 10; |
81 int _ret = 0; |
81 int _ret = 0; |
|
82 int try; |
82 |
83 |
83 |
84 |
84 adapterInfo = (IP_ADAPTER_ADDRESSES *) malloc(BUFF_SIZE); |
85 adapterInfo = (IP_ADAPTER_ADDRESSES *) malloc(BUFF_SIZE); |
85 if (adapterInfo == NULL) { |
86 if (adapterInfo == NULL) { |
86 JNU_ThrowByName(env, "java/lang/OutOfMemoryError", |
87 JNU_ThrowByName(env, "java/lang/OutOfMemoryError", |
92 flags = GAA_FLAG_SKIP_DNS_SERVER; |
93 flags = GAA_FLAG_SKIP_DNS_SERVER; |
93 flags |= GAA_FLAG_SKIP_MULTICAST; |
94 flags |= GAA_FLAG_SKIP_MULTICAST; |
94 flags |= GAA_FLAG_INCLUDE_PREFIX; |
95 flags |= GAA_FLAG_INCLUDE_PREFIX; |
95 ret = GetAdaptersAddresses(AF_UNSPEC, flags, NULL, adapterInfo, &len); |
96 ret = GetAdaptersAddresses(AF_UNSPEC, flags, NULL, adapterInfo, &len); |
96 |
97 |
97 for (int try = 0; ret == ERROR_BUFFER_OVERFLOW && try < MAX_TRIES; ++try) { |
98 for (try = 0; ret == ERROR_BUFFER_OVERFLOW && try < MAX_TRIES; ++try) { |
98 IP_ADAPTER_ADDRESSES * newAdapterInfo = NULL; |
99 IP_ADAPTER_ADDRESSES * newAdapterInfo = NULL; |
99 if (len < (ULONG_MAX - BUFF_SIZE)) { |
100 if (len < (ULONG_MAX - BUFF_SIZE)) { |
100 len += BUFF_SIZE; |
101 len += BUFF_SIZE; |
101 } |
102 } |
102 newAdapterInfo = |
103 newAdapterInfo = |
158 ULONG len; |
159 ULONG len; |
159 char *error_msg_buf = NULL; |
160 char *error_msg_buf = NULL; |
160 size_t error_msg_buf_size = |
161 size_t error_msg_buf_size = |
161 strlen("IP Helper Library GetAdaptersAddresses function failed with error == ") + 10; |
162 strlen("IP Helper Library GetAdaptersAddresses function failed with error == ") + 10; |
162 int _ret = 0; |
163 int _ret = 0; |
|
164 int try; |
163 adapterInfo = (IP_ADAPTER_ADDRESSES *) malloc(BUFF_SIZE); |
165 adapterInfo = (IP_ADAPTER_ADDRESSES *) malloc(BUFF_SIZE); |
164 if (adapterInfo == NULL) { |
166 if (adapterInfo == NULL) { |
165 JNU_ThrowByName(env, "java/lang/OutOfMemoryError", |
167 JNU_ThrowByName(env, "java/lang/OutOfMemoryError", |
166 "Native heap allocation failure"); |
168 "Native heap allocation failure"); |
167 return NULL; |
169 return NULL; |
169 len = BUFF_SIZE; |
171 len = BUFF_SIZE; |
170 flags = GAA_FLAG_SKIP_DNS_SERVER; |
172 flags = GAA_FLAG_SKIP_DNS_SERVER; |
171 flags |= GAA_FLAG_SKIP_MULTICAST; |
173 flags |= GAA_FLAG_SKIP_MULTICAST; |
172 flags |= GAA_FLAG_INCLUDE_PREFIX; |
174 flags |= GAA_FLAG_INCLUDE_PREFIX; |
173 val = GetAdaptersAddresses(AF_UNSPEC, flags, NULL, adapterInfo, &len); |
175 val = GetAdaptersAddresses(AF_UNSPEC, flags, NULL, adapterInfo, &len); |
174 for (int try = 0; val == ERROR_BUFFER_OVERFLOW && try < MAX_TRIES; ++try) { |
176 for (try = 0; val == ERROR_BUFFER_OVERFLOW && try < MAX_TRIES; ++try) { |
175 IP_ADAPTER_ADDRESSES * newAdapterInfo = NULL; |
177 IP_ADAPTER_ADDRESSES * newAdapterInfo = NULL; |
176 if (len < (ULONG_MAX - BUFF_SIZE)) { |
178 if (len < (ULONG_MAX - BUFF_SIZE)) { |
177 len += BUFF_SIZE; |
179 len += BUFF_SIZE; |
178 } |
180 } |
179 newAdapterInfo = |
181 newAdapterInfo = |