VirtualBox

Changeset 17227 in vbox for trunk


Ignore:
Timestamp:
Mar 2, 2009 9:19:24 AM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
43544
Message:

NAT: removing Win version checks (we don't support Win version prior Win XP)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/slirp/slirp.c

    r17225 r17227  
    326326                               const char **ppszDomain)
    327327{
    328     OSVERSIONINFOEX osvi;
    329     DWORDLONG condition = 0;
    330     int op = VER_GREATER_EQUAL;
    331 
    332     /* DNS information retriving is window's version specific,
    333      * so the OS version should be defined first
    334      */
    335     memset(&osvi, 0, sizeof(OSVERSIONINFOEX));
    336     osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    337     osvi.dwMajorVersion = 5; /* Win XP*/
    338     osvi.dwMinorVersion = 1;
     328    /* Get amount of memory required for operation */
     329    ULONG flags = GAA_FLAG_INCLUDE_PREFIX; /*GAA_FLAG_INCLUDE_ALL_INTERFACES;*/ /* all interfaces registered in NDIS */
     330    PIP_ADAPTER_ADDRESSES addresses = NULL;
     331    PIP_ADAPTER_ADDRESSES addr = NULL;
     332    PIP_ADAPTER_DNS_SERVER_ADDRESS dns = NULL;
     333    ULONG size = 0;
     334    char *suffix;
     335    struct dns_entry *da = NULL;
     336    ULONG ret = ERROR_SUCCESS;
    339337   
    340     VER_SET_CONDITION(condition, VER_MAJORVERSION, op);
    341     VER_SET_CONDITION(condition, VER_MINORVERSION, op);
     338    /* @todo add SKIPing flags to get only required information */
     339
     340    ret = pData->pfGetAdaptersAddresses(AF_INET, 0, NULL /* reserved */, addresses, &size);
     341    if (ret != ERROR_BUFFER_OVERFLOW)
     342    {
     343        LogRel(("NAT: error %lu occured on capacity detection operation\n", ret));
     344        return -1;
     345    }
    342346   
    343     if (VerifyVersionInfo(&osvi,
    344                 VER_MAJORVERSION
    345             | VER_MINORVERSION,
    346              condition))
    347     {
    348         /* WinXP sp1 and latter */
    349         /* Get amount of memory required for operation */
    350         ULONG flags = GAA_FLAG_INCLUDE_PREFIX; /*GAA_FLAG_INCLUDE_ALL_INTERFACES;*/ /* all interfaces registered in NDIS */
    351         PIP_ADAPTER_ADDRESSES addresses = NULL;
    352         PIP_ADAPTER_ADDRESSES addr = NULL;
    353         PIP_ADAPTER_DNS_SERVER_ADDRESS dns = NULL;
    354         ULONG size = 0;
    355         char *suffix;
    356         struct dns_entry *da = NULL;
    357         ULONG ret = ERROR_SUCCESS;
    358        
    359         /* @todo add SKIPing flags to get only required information */
    360 
    361         ret = pData->pfGetAdaptersAddresses(AF_INET, 0, NULL /* reserved */, addresses, &size);
    362         if (ret != ERROR_BUFFER_OVERFLOW)
     347    if (size == 0)
     348    {
     349        LogRel(("NAT: Win socket API returns non capacity\n"));
     350        return -1;
     351    }
     352   
     353    addresses = RTMemAllocZ(size);
     354    if (addresses == NULL)
     355    {
     356        LogRel(("NAT: No memory available \n"));
     357        return -1;
     358    }
     359
     360    ret = pData->pfGetAdaptersAddresses(AF_INET, 0, NULL /* reserved */, addresses, &size);
     361    if (ret != ERROR_SUCCESS)
     362    {
     363        LogRel(("NAT: error %lu occured on fetching adapters info\n", ret));
     364        return -1;
     365    }
     366    addr = addresses;
     367    while(addr != NULL)
     368    {
     369        size_t buff_size;
     370        if (addr->OperStatus != IfOperStatusUp)
     371            goto next;
     372        dns = addr->FirstDnsServerAddress;
     373        while (dns != NULL)
    363374        {
    364             LogRel(("NAT: error %lu occured on capacity detection operation\n", ret));
    365             return -1;
     375            struct sockaddr *saddr = dns->Address.lpSockaddr;
     376            if (saddr->sa_family != AF_INET)
     377                goto next_dns;
     378            /* add dns server to list */
     379            da = RTMemAllocZ(sizeof(struct dns_entry));
     380            if (da == NULL)
     381            {
     382                LogRel(("NAT: Can't allocate buffer for DNS entry\n"));
     383                return VERR_NO_MEMORY;
     384            }
     385            LogRel(("NAT: adding %R[IP4] to DNS server list\n", &((struct sockaddr_in *)saddr)->sin_addr));
     386            if ((((struct sockaddr_in *)saddr)->sin_addr.s_addr & htonl(IN_CLASSA_NET)) == ntohl(INADDR_LOOPBACK & IN_CLASSA_NET)) {
     387                da->de_addr.s_addr = htonl(ntohl(special_addr.s_addr) | CTL_ALIAS);
     388            }
     389            else
     390            {
     391                da->de_addr.s_addr = ((struct sockaddr_in *)saddr)->sin_addr.s_addr;
     392            }
     393            LIST_INSERT_HEAD(&pData->dns_list_head, da, de_list);
     394        next_dns:   
     395            dns = dns->Next;
    366396        }
    367        
    368         if (size == 0)
    369         {
    370             LogRel(("NAT: Win socket API returns non capacity\n"));
    371             return -1;
    372         }
    373        
    374         addresses = RTMemAllocZ(size);
    375         if (addresses == NULL)
    376         {
    377             LogRel(("NAT: No memory available \n"));
    378             return -1;
    379         }
    380 
    381         ret = pData->pfGetAdaptersAddresses(AF_INET, 0, NULL /* reserved */, addresses, &size);
    382         if (ret != ERROR_SUCCESS)
    383         {
    384             LogRel(("NAT: error %lu occured on fetching adapters info\n", ret));
    385             return -1;
    386         }
    387         addr = addresses;
    388         while(addr != NULL)
    389         {
    390             size_t buff_size;
    391             if (addr->OperStatus != IfOperStatusUp)
    392                 goto next;
    393             dns = addr->FirstDnsServerAddress;
    394             while (dns != NULL)
    395             {
    396                 struct sockaddr *saddr = dns->Address.lpSockaddr;
    397                 if (saddr->sa_family != AF_INET)
    398                     goto next_dns;
    399                 /* add dns server to list */
    400                 da = RTMemAllocZ(sizeof(struct dns_entry));
    401                 if (da == NULL)
    402                 {
    403                     LogRel(("NAT: Can't allocate buffer for DNS entry\n"));
    404                     return VERR_NO_MEMORY;
    405                 }
    406                 LogRel(("NAT: adding %R[IP4] to DNS server list\n", &((struct sockaddr_in *)saddr)->sin_addr));
    407                 if ((((struct sockaddr_in *)saddr)->sin_addr.s_addr & htonl(IN_CLASSA_NET)) == ntohl(INADDR_LOOPBACK & IN_CLASSA_NET)) {
    408                     da->de_addr.s_addr = htonl(ntohl(special_addr.s_addr) | CTL_ALIAS);
    409                 }
    410                 else
    411                 {
    412                     da->de_addr.s_addr = ((struct sockaddr_in *)saddr)->sin_addr.s_addr;
    413                 }
    414                 LIST_INSERT_HEAD(&pData->dns_list_head, da, de_list);
    415             next_dns:   
    416                 dns = dns->Next;
    417             }
    418             buff_size = wcstombs(NULL, addr->DnsSuffix, 0);
    419             if (buff_size == 0)
    420                 goto next;
    421             suffix = RTMemAllocZ(buff_size);
    422             wcstombs(suffix, addr->DnsSuffix, buff_size);
    423             LogRel(("NAT: adding %s to DNS suffix list\n", suffix));
    424             *ppszDomain = suffix;
    425             next:
    426             addr = addr->Next;
    427         }
    428         /*@todo add dns suffix if required */
    429         LogRel(("NAT: adding dns suffix %s to the list \n", ppszDomain));
    430     }
    431     else
    432     {
    433         /* Win 2000 and earlier */
    434     }
     397        buff_size = wcstombs(NULL, addr->DnsSuffix, 0);
     398        if (buff_size == 0)
     399            goto next;
     400        suffix = RTMemAllocZ(buff_size);
     401        wcstombs(suffix, addr->DnsSuffix, buff_size);
     402        LogRel(("NAT: adding %s to DNS suffix list\n", suffix));
     403        *ppszDomain = suffix;
     404        next:
     405        addr = addr->Next;
     406    }
     407    /*@todo add dns suffix if required */
     408    LogRel(("NAT: adding dns suffix %s to the list \n", ppszDomain));
    435409    return 0;
    436410}
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette