| 492 | } |
| 493 | |
| 494 | int GetMTUWindows (const boost::asio::ip::address& localAddress, int fallback) |
| 495 | { |
| 496 | #ifdef UNICODE |
| 497 | string localAddress_temporary = localAddress.to_string(); |
| 498 | wstring localAddressUniversal(localAddress_temporary.begin(), localAddress_temporary.end()); |
| 499 | #else |
| 500 | std::string localAddressUniversal = localAddress.to_string(); |
| 501 | #endif |
| 502 | |
| 503 | typedef int (* IPN)(int af, const char *src, void *dst); |
| 504 | IPN inetpton = (IPN)(void*)GetProcAddress (GetModuleHandle ("ws2_32.dll"), "InetPton"); |
| 505 | if (!inetpton) inetpton = inet_pton_xp; // use own implementation if not found |
| 506 | |
| 507 | if (localAddress.is_v4()) |
| 508 | { |
| 509 | sockaddr_in inputAddress; |
| 510 | inetpton(AF_INET, localAddressUniversal.c_str(), &(inputAddress.sin_addr)); |
| 511 | return GetMTUWindowsIpv4(inputAddress, fallback); |
| 512 | } |
| 513 | else if (localAddress.is_v6()) |
| 514 | { |
| 515 | sockaddr_in6 inputAddress; |
| 516 | inetpton(AF_INET6, localAddressUniversal.c_str(), &(inputAddress.sin6_addr)); |
| 517 | return GetMTUWindowsIpv6(inputAddress, fallback); |
| 518 | } |
| 519 | else |
| 520 | { |
| 521 | LogPrint(eLogError, "NetIface: GetMTU: Address family is not supported"); |
| 522 | return fallback; |
| 523 | } |
| 524 | } |
| 525 | #else // assume unix |
| 526 | int GetMTUUnix (const boost::asio::ip::address& localAddress, int fallback) |
| 527 | { |
no test coverage detected