MdeModulePkg: Define a general function to create DNS QName

This patch is used to define a general function to create
DNS QName.
QName is a domain name represented as a sequence
of labels, where each label consists of a length octet
followed by that number of octets. The domain name terminates
with the zero length octet for the null label of the root.

Cc: Hegde Nagaraj P <nagaraj-p.hegde@hpe.com>
Cc: El-Haj-Mahmoud Samer <samer.el-haj-mahmoud@hpe.com>
Cc: Ye Ting <ting.ye@intel.com>
Cc: Fu Siyuan <siyuan.fu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com>
Reviewed-by: Hegde Nagaraj P <nagaraj-p.hegde@hpe.com>
Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
Reviewed-by: Ye Ting <ting.ye@intel.com>
This commit is contained in:
Jiaxin Wu 2016-01-22 01:35:58 +08:00
parent 6cc7ada465
commit dba6e9a935
2 changed files with 90 additions and 1 deletions

View File

@ -37,6 +37,8 @@ typedef UINT16 TCP_PORTNO;
#define EFI_IP_PROTO_ICMP 0x01
#define IP4_PROTO_IGMP 0x02
#define IP6_ICMP 58
#define DNS_MAX_NAME_SIZE 255
#define DNS_MAX_MESSAGE_SIZE 512
//
// The address classification
@ -2156,4 +2158,24 @@ NetLibGetSystemGuid (
OUT EFI_GUID *SystemGuid
);
/**
Create Dns QName according the queried domain name.
QName is a domain name represented as a sequence of labels,
where each label consists of a length octet followed by that
number of octets. The QName terminates with the zero
length octet for the null label of the root. Caller should
take responsibility to free the buffer in returned pointer.
@param DomainName The pointer to the queried domain name string.
@retval NULL Failed to fill QName.
@return QName filled successfully.
**/
CHAR8 *
EFIAPI
NetLibCreateDnsQName (
IN CHAR16 *DomainName
);
#endif

View File

@ -1,7 +1,7 @@
/** @file
Network library.
Copyright (c) 2005 - 2015, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2005 - 2016, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@ -3326,3 +3326,70 @@ NetLibGetSystemGuid (
} while (Smbios.Raw < SmbiosEnd.Raw);
return EFI_NOT_FOUND;
}
/**
Create Dns QName according the queried domain name.
QName is a domain name represented as a sequence of labels,
where each label consists of a length octet followed by that
number of octets. The QName terminates with the zero
length octet for the null label of the root. Caller should
take responsibility to free the buffer in returned pointer.
@param DomainName The pointer to the queried domain name string.
@retval NULL Failed to fill QName.
@return QName filled successfully.
**/
CHAR8 *
EFIAPI
NetLibCreateDnsQName (
IN CHAR16 *DomainName
)
{
CHAR8 *QueryName;
UINTN QueryNameSize;
CHAR8 *Header;
CHAR8 *Tail;
UINTN Len;
UINTN Index;
QueryName = NULL;
QueryNameSize = 0;
Header = NULL;
Tail = NULL;
//
// One byte for first label length, one byte for terminated length zero.
//
QueryNameSize = StrLen (DomainName) + 2;
if (QueryNameSize > DNS_MAX_NAME_SIZE) {
return NULL;
}
QueryName = AllocateZeroPool (QueryNameSize);
if (QueryName == NULL) {
return NULL;
}
Header = QueryName;
Tail = Header + 1;
Len = 0;
for (Index = 0; DomainName[Index] != 0; Index++) {
*Tail = (CHAR8) DomainName[Index];
if (*Tail == '.') {
*Header = (CHAR8) Len;
Header = Tail;
Tail ++;
Len = 0;
} else {
Tail++;
Len++;
}
}
*Header = (CHAR8) Len;
*Tail = 0;
return QueryName;
}