Changeset 7981 for trunk/src/iphlpapi/iphlpapi.cpp
- Timestamp:
- Feb 21, 2002, 6:01:57 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/iphlpapi/iphlpapi.cpp
r7973 r7981 1 /* $Id: iphlpapi.cpp,v 1. 6 2002-02-20 11:57:31sandervl Exp $ */1 /* $Id: iphlpapi.cpp,v 1.7 2002-02-21 17:01:57 sandervl Exp $ */ 2 2 /* 3 3 * IPHLPAPI library … … 303 303 } 304 304 305 static DWORD i_sizeOfFIXED_INFO(PFIXED_INFO pinfo)306 {307 PIP_ADDR_STRING pias;308 309 DWORD dwRequired = sizeof( FIXED_INFO );310 311 // follow the IP_ADDR_STRING lists312 pias = &pinfo->DnsServerList;313 while( pias )314 {315 dwRequired += sizeof( IP_ADDR_STRING );316 pias = pias->Next;317 }318 return dwRequired;319 }320 321 305 static DWORD i_sizeOfIP_ADAPTER_INFO(PIP_ADAPTER_INFO piai) 322 306 { … … 448 432 { 449 433 struct sockaddr_in * sin; 450 FIXED_INFO fi;434 PFIXED_INFO fi = pFixedInfo; 451 435 DWORD memNeeded; 452 436 PIP_ADDR_STRING dnslist = NULL, pdnslist = NULL; 453 454 // This is dynamically updated info 437 PBYTE pTarget = (PBYTE)pFixedInfo; 438 439 dprintf(("GetNetworkParams pFixedInfo:%x pOutBufLen:%d",pFixedInfo,*pOutBufLen)); 455 440 res_init(); 456 memset(&fi,0,sizeof(FIXED_INFO)); 457 458 dprintf(("GetNetworkParams pFixedInfo:%x pOutBufLen:%d",pFixedInfo,*pOutBufLen)); 459 460 gethostname(fi.HostName,128); 461 strcpy(fi.DomainName,_res.defdname); 462 463 // For VPC DNS Servers are pretty much enough for now 464 fi.CurrentDnsServer = &fi.DnsServerList; 465 dnslist = &fi.DnsServerList; 466 pdnslist = dnslist; 467 468 for (int i = 0; i<_res.nscount; i++) 469 { 470 if (!dnslist) 471 { 472 dnslist = (PIP_ADDR_STRING) malloc(sizeof(IP_ADDR_STRING)); 473 memset(dnslist,0,sizeof(IP_ADDR_STRING)); 474 pdnslist->Next = dnslist; 475 } 476 sin = (struct sockaddr_in *)&_res.nsaddr_list[i]; 477 strcpy(dnslist->IpAddress.String,inet_ntoa(sin->sin_addr)); 478 dnslist->Context = 0; 479 dprintf(("IPHLPAPI: GetNetworkParams Adding DNS Server %s",inet_ntoa(sin->sin_addr))); 480 pdnslist = dnslist; 481 dnslist = dnslist->Next; 482 } 483 fi.EnableDns = 1; 484 // NodeType (?) 485 memNeeded = i_sizeOfFIXED_INFO(&fi); 486 LONG buflen = *pOutBufLen; 487 PBYTE pTarget = (PBYTE)pFixedInfo; 488 if (((LONG)(buflen - memNeeded)) > 0) 489 { 490 // copy over the whole structure hierarchy 491 memcpy(pTarget, &fi, sizeof( FIXED_INFO )); 492 pTarget += sizeof( FIXED_INFO ); 493 i_copyIP_ADDRESS_STRING(&pTarget, &pFixedInfo->DnsServerList,&fi.DnsServerList); 494 } 495 else 441 442 // Check how much mem we will need 443 memNeeded = sizeof(FIXED_INFO)+_res.nscount*sizeof(IP_ADDR_STRING); 444 445 if (((LONG)(*pOutBufLen - memNeeded)) < 0) 496 446 { 497 447 // return overall size of required buffer … … 499 449 return ERROR_BUFFER_OVERFLOW; 500 450 } 501 502 //cleanup 503 pdnslist = fi.DnsServerList.Next; 504 while( pdnslist ) 505 { 506 dnslist = pdnslist->Next; 507 free(pdnslist); 508 pdnslist = dnslist; 509 } 510 511 return ERROR_SUCCESS; 451 452 // This is dynamically updated info 453 memset(pFixedInfo,0,memNeeded); 454 455 gethostname(fi->HostName,128); 456 strcpy(fi->DomainName,_res.defdname); 457 458 // For VPC DNS Servers are pretty much enough for now 459 fi->CurrentDnsServer = &fi->DnsServerList; 460 pTarget += sizeof( FIXED_INFO ); 461 dnslist = &fi->DnsServerList; 462 463 for (int i = 0; i<_res.nscount; i++) 464 { 465 if (pdnslist) pdnslist->Next = dnslist; 466 sin = (struct sockaddr_in *)&_res.nsaddr_list[i]; 467 strcpy(dnslist->IpAddress.String,inet_ntoa(sin->sin_addr)); 468 dprintf(("IPHLPAPI: GetNetworkParams Adding DNS Server %s",inet_ntoa(sin->sin_addr))); 469 pdnslist = dnslist; 470 if ( pdnslist == &fi->DnsServerList) dnslist = (PIP_ADDR_STRING)(pTarget + sizeof(IP_ADDR_STRING)); 471 else dnslist += sizeof(IP_ADDR_STRING); 472 } 473 fi->EnableDns = 1; 474 return ERROR_SUCCESS; 512 475 } 513 476 //******************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.