ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

dnsaddr.c
Go to the documentation of this file.
00001 /*
00002  * COPYRIGHT:   See COPYING in the top level directory
00003  * PROJECT:     ReactOS DNS Shared Library
00004  * FILE:        lib/dnslib/dnsaddr.c
00005  * PURPOSE:     Functions dealing with DNS_ADDRESS and DNS_ARRAY addresses.
00006  */
00007 
00008 /* INCLUDES ******************************************************************/
00009 #include "precomp.h"
00010 
00011 /* DATA **********************************************************************/
00012 
00013 /* FUNCTIONS *****************************************************************/
00014 
00015 PDNS_ARRAY
00016 WINAPI
00017 DnsAddrArray_Create(ULONG Count)
00018 {
00019     PDNS_ARRAY DnsAddrArray;
00020 
00021     /* Allocate space for the array and the addresses within it */
00022     DnsAddrArray = Dns_AllocZero(sizeof(DNS_ARRAY) +
00023                                  (Count * sizeof(DNS_ADDRESS)));
00024 
00025     /* Write the allocated address count */
00026     if (DnsAddrArray) DnsAddrArray->AllocatedAddresses = Count;
00027 
00028     /* Return it */
00029     return DnsAddrArray;
00030 }
00031 
00032 VOID
00033 WINAPI
00034 DnsAddrArray_Free(IN PDNS_ARRAY DnsAddrArray)
00035 {
00036     /* Just free the entire array */
00037     Dns_Free(DnsAddrArray);
00038 }
00039 
00040 BOOL
00041 WINAPI
00042 DnsAddrArray_AddIp4(IN PDNS_ARRAY DnsAddrArray,
00043                     IN IN_ADDR Address,
00044                     IN DWORD AddressType)
00045 {
00046     DNS_ADDRESS DnsAddress;
00047 
00048     /* Build the DNS Address */
00049     DnsAddr_BuildFromIp4(&DnsAddress, Address, 0);
00050 
00051     /* Add it to the array */
00052     return DnsAddrArray_AddAddr(DnsAddrArray, &DnsAddress, 0, AddressType);
00053 }
00054 
00055 BOOL
00056 WINAPI
00057 DnsAddrArray_AddAddr(IN PDNS_ARRAY DnsAddrArray,
00058                      IN PDNS_ADDRESS DnsAddress,
00059                      IN WORD AddressFamily OPTIONAL,
00060                      IN DWORD AddressType OPTIONAL)
00061 {
00062     /* Make sure we have an array */
00063     if (!DnsAddrArray) return FALSE;
00064     
00065     /* Check if we should validate the Address Family */
00066     if (AddressFamily)
00067     {
00068         /* Validate it */
00069         if (AddressFamily != DnsAddress->AddressFamily) return TRUE;
00070     }
00071 
00072     /* Check if we should validate the Address Type */
00073     if (AddressType)
00074     {
00075         /* Make sure that this array contains this type of addresses */
00076         if (!DnsAddrArray_ContainsAddr(DnsAddrArray, DnsAddress, AddressType))
00077         {
00078             /* Won't be adding it */
00079             return TRUE;
00080         }
00081     }
00082 
00083     /* Make sure we have space in the array */
00084     if (DnsAddrArray->AllocatedAddresses < DnsAddrArray->UsedAddresses)
00085     {
00086         return FALSE; 
00087     }
00088 
00089     /* Now add the address */
00090     RtlCopyMemory(&DnsAddrArray->Addresses[DnsAddrArray->UsedAddresses],
00091                   DnsAddress,
00092                   sizeof(DNS_ADDRESS));
00093 
00094     /* Return success */
00095     return TRUE;
00096 }
00097 
00098 VOID
00099 WINAPI
00100 DnsAddr_BuildFromIp4(IN PDNS_ADDRESS DnsAddress,
00101                      IN IN_ADDR Address,
00102                      IN WORD Port)
00103 {
00104     /* Clear the address */
00105     RtlZeroMemory(DnsAddress, sizeof(DNS_ADDRESS));
00106 
00107     /* Write data */
00108     DnsAddress->Ip4Address.sin_family = AF_INET;
00109     DnsAddress->Ip4Address.sin_port  = Port;
00110     DnsAddress->Ip4Address.sin_addr = Address;
00111     DnsAddress->AddressLength = sizeof(SOCKADDR_IN);
00112 }
00113 
00114 VOID
00115 WINAPI
00116 DnsAddr_BuildFromIp6(IN PDNS_ADDRESS DnsAddress,
00117                      IN PIN6_ADDR Address,
00118                      IN ULONG ScopeId,
00119                      IN WORD Port)
00120 {
00121     /* Clear the address */
00122     RtlZeroMemory(DnsAddress, sizeof(DNS_ADDRESS));
00123 
00124     /* Write data */
00125     DnsAddress->Ip6Address.sin6_family = AF_INET6;
00126     DnsAddress->Ip6Address.sin6_port  = Port;
00127     DnsAddress->Ip6Address.sin6_addr = *Address;
00128     DnsAddress->Ip6Address.sin6_scope_id = ScopeId;
00129     DnsAddress->AddressLength = sizeof(SOCKADDR_IN6);
00130 }
00131 
00132 VOID
00133 WINAPI
00134 DnsAddr_BuildFromAtm(IN PDNS_ADDRESS DnsAddress,
00135                      IN DWORD AddressType,
00136                      IN PVOID AddressData)
00137 {
00138     ATM_ADDRESS Address;
00139 
00140     /* Clear the address */
00141     RtlZeroMemory(DnsAddress, sizeof(DNS_ADDRESS));
00142 
00143     /* Build an ATM Address */
00144     Address.AddressType = AddressType;
00145     Address.NumofDigits = DNS_ATMA_MAX_ADDR_LENGTH;
00146     RtlCopyMemory(&Address.Addr, AddressData, DNS_ATMA_MAX_ADDR_LENGTH);
00147 
00148     /* Write data */
00149     DnsAddress->AtmAddress = Address;
00150     DnsAddress->AddressLength = sizeof(ATM_ADDRESS);
00151 }
00152 
00153 BOOLEAN
00154 WINAPI
00155 DnsAddr_BuildFromDnsRecord(IN PDNS_RECORD DnsRecord,
00156                            OUT PDNS_ADDRESS DnsAddr)
00157 {
00158     /* Check what kind of record this is */
00159     switch(DnsRecord->wType)
00160     {
00161         /* IPv4 */
00162         case DNS_TYPE_A:
00163             /* Create the DNS Address */
00164             DnsAddr_BuildFromIp4(DnsAddr,
00165                                  *(PIN_ADDR)&DnsRecord->Data.A.IpAddress,
00166                                  0);
00167             break;
00168 
00169         /* IPv6 */
00170         case DNS_TYPE_AAAA:
00171             /* Create the DNS Address */
00172             DnsAddr_BuildFromIp6(DnsAddr,
00173                                  (PIN6_ADDR)&DnsRecord->Data.AAAA.Ip6Address,
00174                                  DnsRecord->dwReserved,
00175                                  0);
00176             break;
00177 
00178         /* ATM */
00179         case DNS_TYPE_ATMA:
00180             /* Create the DNS Address */
00181             DnsAddr_BuildFromAtm(DnsAddr,
00182                                  DnsRecord->Data.Atma.AddressType,
00183                                  &DnsRecord->Data.Atma.Address);
00184             break;
00185     }
00186 
00187     /* Done! */
00188     return TRUE;
00189 }
00190 
00191 BOOL
00192 WINAPI
00193 DnsAddrArray_ContainsAddr(IN PDNS_ARRAY DnsAddrArray,
00194                           IN PDNS_ADDRESS DnsAddress,
00195                           IN DWORD AddressType)
00196 {
00197     /* FIXME */
00198     return TRUE;
00199 }
00200 

Generated on Fri May 25 2012 04:34:28 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.