• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *    Copyright (c) 2021, The OpenThread Authors.
3  *    All rights reserved.
4  *
5  *    Redistribution and use in source and binary forms, with or without
6  *    modification, are permitted provided that the following conditions are met:
7  *    1. Redistributions of source code must retain the above copyright
8  *       notice, this list of conditions and the following disclaimer.
9  *    2. Redistributions in binary form must reproduce the above copyright
10  *       notice, this list of conditions and the following disclaimer in the
11  *       documentation and/or other materials provided with the distribution.
12  *    3. Neither the name of the copyright holder nor the
13  *       names of its contributors may be used to endorse or promote products
14  *       derived from this software without specific prior written permission.
15  *
16  *    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  *    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  *    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  *    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  *    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  *    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  *    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  *    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  *    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  *    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  *    POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 /**
30  * @file
31  * This file includes DNS utilities.
32  *
33  */
34 #ifndef OTBR_COMMON_DNS_UTILS_HPP_
35 #define OTBR_COMMON_DNS_UTILS_HPP_
36 
37 #include "openthread-br/config.h"
38 
39 #include "common/types.hpp"
40 
41 /**
42  * This structure represents DNS Name information.
43  *
44  * @sa SplitFullDnsName
45  *
46  */
47 struct DnsNameInfo
48 {
49     std::string mInstanceName; ///< Instance name, or empty if the DNS name is not a service instance.
50     std::string mServiceName;  ///< Service name, or empty if the DNS name is not a service or service instance.
51     std::string mHostName;     ///< Host name, or empty if the DNS name is not a host name.
52     std::string mDomain;       ///< Domain name.
53 
54     /**
55      * This method returns if the DNS name is a service instance.
56      *
57      * @returns Whether the DNS name is a service instance.
58      *
59      */
IsServiceInstanceDnsNameInfo60     bool IsServiceInstance(void) const { return !mInstanceName.empty(); };
61 
62     /**
63      * This method returns if the DNS name is a service.
64      *
65      * @returns Whether the DNS name is a service.
66      *
67      */
IsServiceDnsNameInfo68     bool IsService(void) const { return !mServiceName.empty() && mInstanceName.empty(); }
69 
70     /**
71      * This method returns if the DNS name is a host.
72      *
73      * @returns Whether the DNS name is a host.
74      *
75      */
IsHostDnsNameInfo76     bool IsHost(void) const { return mServiceName.empty(); }
77 };
78 
79 /**
80  * This method splits a full DNS name into name components.
81  *
82  * @param[in] aName  The full DNS name to dissect.
83  *
84  * @returns A `DnsNameInfo` structure containing DNS name information.
85  *
86  * @sa DnsNameInfo
87  *
88  */
89 DnsNameInfo SplitFullDnsName(const std::string &aName);
90 
91 /**
92  * This function splits a full service name into components.
93  *
94  * @param[in]  aFullName  The full service name to split.
95  * @param[out] aType      A reference to a string to receive the service type.
96  * @param[out] aDomain    A reference to a string to receive the domain.
97  *
98  * @retval OTBR_ERROR_NONE          Successfully split the full service name.
99  * @retval OTBR_ERROR_INVALID_ARGS  If the full service name is not valid.
100  *
101  */
102 otbrError SplitFullServiceName(const std::string &aFullName, std::string &aType, std::string &aDomain);
103 
104 /**
105  * This function splits a full service instance name into components.
106  *
107  * @param[in]  aFullName      The full service instance name to split.
108  * @param[out] aInstanceName  A reference to a string to receive the instance name.
109  * @param[out] aType          A reference to a string to receive the service type.
110  * @param[out] aDomain        A reference to a string to receive the domain.
111  *
112  * @retval OTBR_ERROR_NONE          Successfully split the full service instance name.
113  * @retval OTBR_ERROR_INVALID_ARGS  If the full service instance name is not valid.
114  *
115  */
116 otbrError SplitFullServiceInstanceName(const std::string &aFullName,
117                                        std::string       &aInstanceName,
118                                        std::string       &aType,
119                                        std::string       &aDomain);
120 
121 /**
122  * This function splits a full host name into components.
123  *
124  * @param[in]  aFullName  The full host name to split.
125  * @param[out] aHostName  A reference to a string to receive the host name.
126  * @param[out] aDomain    A reference to a string to receive the domain.
127  *
128  * @retval OTBR_ERROR_NONE          Successfully split the full host name.
129  * @retval OTBR_ERROR_INVALID_ARGS  If the full host name is not valid.
130  *
131  */
132 otbrError SplitFullHostName(const std::string &aFullName, std::string &aHostName, std::string &aDomain);
133 
134 #endif // OTBR_COMMON_DNS_UTILS_HPP_
135