mirror of https://github.com/acidanthera/audk.git
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:
parent
6cc7ada465
commit
dba6e9a935
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue