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 EFI_IP_PROTO_ICMP 0x01
|
||||||
#define IP4_PROTO_IGMP 0x02
|
#define IP4_PROTO_IGMP 0x02
|
||||||
#define IP6_ICMP 58
|
#define IP6_ICMP 58
|
||||||
|
#define DNS_MAX_NAME_SIZE 255
|
||||||
|
#define DNS_MAX_MESSAGE_SIZE 512
|
||||||
|
|
||||||
//
|
//
|
||||||
// The address classification
|
// The address classification
|
||||||
|
@ -2156,4 +2158,24 @@ NetLibGetSystemGuid (
|
||||||
OUT EFI_GUID *SystemGuid
|
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
|
#endif
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
Network library.
|
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>
|
(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
|
@ -3326,3 +3326,70 @@ NetLibGetSystemGuid (
|
||||||
} while (Smbios.Raw < SmbiosEnd.Raw);
|
} while (Smbios.Raw < SmbiosEnd.Raw);
|
||||||
return EFI_NOT_FOUND;
|
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