| 134 | return false; |
| 135 | } |
| 136 | bool AdapterUtils::GetAdapterAuto(Adapter* adapter, AdapterBuffer* buffer) |
| 137 | { |
| 138 | std::unique_ptr<std::byte[]> adapterInfo; |
| 139 | PIP_ADAPTER_ADDRESSES pAdapter = GetAllAdapters(&adapterInfo); |
| 140 | if (pAdapter == nullptr) |
| 141 | return false; |
| 142 | |
| 143 | do |
| 144 | { |
| 145 | if (pAdapter->IfType != IF_TYPE_SOFTWARE_LOOPBACK && |
| 146 | pAdapter->OperStatus == IfOperStatusUp) |
| 147 | { |
| 148 | // Search for an adapter with; |
| 149 | // IPv4 Address, |
| 150 | // DNS, |
| 151 | // Gateway. |
| 152 | |
| 153 | bool hasIPv4 = false; |
| 154 | bool hasDNS = false; |
| 155 | bool hasGateway = false; |
| 156 | |
| 157 | // IPv4. |
| 158 | if (GetAdapterIP(pAdapter).has_value()) |
| 159 | hasIPv4 = true; |
| 160 | |
| 161 | // DNS. |
| 162 | if (GetDNS(pAdapter).size() > 0) |
| 163 | hasDNS = true; |
| 164 | |
| 165 | // Gateway. |
| 166 | if (GetGateways(pAdapter).size() > 0) |
| 167 | hasGateway = true; |
| 168 | |
| 169 | if (hasIPv4 && hasDNS && hasGateway) |
| 170 | { |
| 171 | *adapter = *pAdapter; |
| 172 | buffer->swap(adapterInfo); |
| 173 | return true; |
| 174 | } |
| 175 | } |
| 176 | |
| 177 | pAdapter = pAdapter->Next; |
| 178 | } while (pAdapter); |
| 179 | |
| 180 | return false; |
| 181 | } |
| 182 | #elif defined(__POSIX__) |
| 183 | AdapterUtils::Adapter* AdapterUtils::GetAllAdapters(AdapterBuffer* buffer) |
| 184 | { |