1 /*
2 * Copyright (c) 2020, 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 implements the OpenThread SRP client APIs.
32 */
33
34 #include "openthread-core-config.h"
35
36 #if OPENTHREAD_CONFIG_SRP_CLIENT_ENABLE
37
38 #include "instance/instance.hpp"
39
40 using namespace ot;
41
otSrpClientStart(otInstance * aInstance,const otSockAddr * aServerSockAddr)42 otError otSrpClientStart(otInstance *aInstance, const otSockAddr *aServerSockAddr)
43 {
44 return AsCoreType(aInstance).Get<Srp::Client>().Start(AsCoreType(aServerSockAddr));
45 }
46
otSrpClientStop(otInstance * aInstance)47 void otSrpClientStop(otInstance *aInstance) { return AsCoreType(aInstance).Get<Srp::Client>().Stop(); }
48
otSrpClientIsRunning(otInstance * aInstance)49 bool otSrpClientIsRunning(otInstance *aInstance) { return AsCoreType(aInstance).Get<Srp::Client>().IsRunning(); }
50
otSrpClientGetServerAddress(otInstance * aInstance)51 const otSockAddr *otSrpClientGetServerAddress(otInstance *aInstance)
52 {
53 return &AsCoreType(aInstance).Get<Srp::Client>().GetServerAddress();
54 }
55
otSrpClientSetCallback(otInstance * aInstance,otSrpClientCallback aCallback,void * aContext)56 void otSrpClientSetCallback(otInstance *aInstance, otSrpClientCallback aCallback, void *aContext)
57 {
58 AsCoreType(aInstance).Get<Srp::Client>().SetCallback(aCallback, aContext);
59 }
60
61 #if OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_API_ENABLE
otSrpClientEnableAutoStartMode(otInstance * aInstance,otSrpClientAutoStartCallback aCallback,void * aContext)62 void otSrpClientEnableAutoStartMode(otInstance *aInstance, otSrpClientAutoStartCallback aCallback, void *aContext)
63 {
64 AsCoreType(aInstance).Get<Srp::Client>().EnableAutoStartMode(aCallback, aContext);
65 }
66
otSrpClientDisableAutoStartMode(otInstance * aInstance)67 void otSrpClientDisableAutoStartMode(otInstance *aInstance)
68 {
69 AsCoreType(aInstance).Get<Srp::Client>().DisableAutoStartMode();
70 }
71
otSrpClientIsAutoStartModeEnabled(otInstance * aInstance)72 bool otSrpClientIsAutoStartModeEnabled(otInstance *aInstance)
73 {
74 return AsCoreType(aInstance).Get<Srp::Client>().IsAutoStartModeEnabled();
75 }
76 #endif // OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_API_ENABLE
77
otSrpClientGetTtl(otInstance * aInstance)78 uint32_t otSrpClientGetTtl(otInstance *aInstance) { return AsCoreType(aInstance).Get<Srp::Client>().GetTtl(); }
79
otSrpClientSetTtl(otInstance * aInstance,uint32_t aTtl)80 void otSrpClientSetTtl(otInstance *aInstance, uint32_t aTtl)
81 {
82 return AsCoreType(aInstance).Get<Srp::Client>().SetTtl(aTtl);
83 }
84
otSrpClientGetLeaseInterval(otInstance * aInstance)85 uint32_t otSrpClientGetLeaseInterval(otInstance *aInstance)
86 {
87 return AsCoreType(aInstance).Get<Srp::Client>().GetLeaseInterval();
88 }
89
otSrpClientSetLeaseInterval(otInstance * aInstance,uint32_t aInterval)90 void otSrpClientSetLeaseInterval(otInstance *aInstance, uint32_t aInterval)
91 {
92 return AsCoreType(aInstance).Get<Srp::Client>().SetLeaseInterval(aInterval);
93 }
94
otSrpClientGetKeyLeaseInterval(otInstance * aInstance)95 uint32_t otSrpClientGetKeyLeaseInterval(otInstance *aInstance)
96 {
97 return AsCoreType(aInstance).Get<Srp::Client>().GetKeyLeaseInterval();
98 }
99
otSrpClientSetKeyLeaseInterval(otInstance * aInstance,uint32_t aInterval)100 void otSrpClientSetKeyLeaseInterval(otInstance *aInstance, uint32_t aInterval)
101 {
102 return AsCoreType(aInstance).Get<Srp::Client>().SetKeyLeaseInterval(aInterval);
103 }
104
otSrpClientGetHostInfo(otInstance * aInstance)105 const otSrpClientHostInfo *otSrpClientGetHostInfo(otInstance *aInstance)
106 {
107 return &AsCoreType(aInstance).Get<Srp::Client>().GetHostInfo();
108 }
109
otSrpClientSetHostName(otInstance * aInstance,const char * aName)110 otError otSrpClientSetHostName(otInstance *aInstance, const char *aName)
111 {
112 return AsCoreType(aInstance).Get<Srp::Client>().SetHostName(aName);
113 }
114
otSrpClientEnableAutoHostAddress(otInstance * aInstance)115 otError otSrpClientEnableAutoHostAddress(otInstance *aInstance)
116 {
117 return AsCoreType(aInstance).Get<Srp::Client>().EnableAutoHostAddress();
118 }
119
otSrpClientSetHostAddresses(otInstance * aInstance,const otIp6Address * aIp6Addresses,uint8_t aNumAddresses)120 otError otSrpClientSetHostAddresses(otInstance *aInstance, const otIp6Address *aIp6Addresses, uint8_t aNumAddresses)
121 {
122 return AsCoreType(aInstance).Get<Srp::Client>().SetHostAddresses(AsCoreTypePtr(aIp6Addresses), aNumAddresses);
123 }
124
otSrpClientAddService(otInstance * aInstance,otSrpClientService * aService)125 otError otSrpClientAddService(otInstance *aInstance, otSrpClientService *aService)
126 {
127 return AsCoreType(aInstance).Get<Srp::Client>().AddService(AsCoreType(aService));
128 }
129
otSrpClientRemoveService(otInstance * aInstance,otSrpClientService * aService)130 otError otSrpClientRemoveService(otInstance *aInstance, otSrpClientService *aService)
131 {
132 return AsCoreType(aInstance).Get<Srp::Client>().RemoveService(AsCoreType(aService));
133 }
134
otSrpClientClearService(otInstance * aInstance,otSrpClientService * aService)135 otError otSrpClientClearService(otInstance *aInstance, otSrpClientService *aService)
136 {
137 return AsCoreType(aInstance).Get<Srp::Client>().ClearService(AsCoreType(aService));
138 }
139
otSrpClientGetServices(otInstance * aInstance)140 const otSrpClientService *otSrpClientGetServices(otInstance *aInstance)
141 {
142 return AsCoreType(aInstance).Get<Srp::Client>().GetServices().GetHead();
143 }
144
otSrpClientRemoveHostAndServices(otInstance * aInstance,bool aRemoveKeyLease,bool aSendUnregToServer)145 otError otSrpClientRemoveHostAndServices(otInstance *aInstance, bool aRemoveKeyLease, bool aSendUnregToServer)
146 {
147 return AsCoreType(aInstance).Get<Srp::Client>().RemoveHostAndServices(aRemoveKeyLease, aSendUnregToServer);
148 }
149
otSrpClientClearHostAndServices(otInstance * aInstance)150 void otSrpClientClearHostAndServices(otInstance *aInstance)
151 {
152 AsCoreType(aInstance).Get<Srp::Client>().ClearHostAndServices();
153 }
154
155 #if OPENTHREAD_CONFIG_SRP_CLIENT_DOMAIN_NAME_API_ENABLE
otSrpClientGetDomainName(otInstance * aInstance)156 const char *otSrpClientGetDomainName(otInstance *aInstance)
157 {
158 return AsCoreType(aInstance).Get<Srp::Client>().GetDomainName();
159 }
160
otSrpClientSetDomainName(otInstance * aInstance,const char * aDomainName)161 otError otSrpClientSetDomainName(otInstance *aInstance, const char *aDomainName)
162 {
163 return AsCoreType(aInstance).Get<Srp::Client>().SetDomainName(aDomainName);
164 }
165 #endif // OPENTHREAD_CONFIG_SRP_CLIENT_DOMAIN_NAME_API_ENABLE
166
otSrpClientItemStateToString(otSrpClientItemState aItemState)167 const char *otSrpClientItemStateToString(otSrpClientItemState aItemState)
168 {
169 OT_ASSERT(aItemState <= OT_SRP_CLIENT_ITEM_STATE_REMOVED);
170
171 return Srp::Client::ItemStateToString(MapEnum(aItemState));
172 }
173
174 #if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
otSrpClientSetServiceKeyRecordEnabled(otInstance * aInstance,bool aEnabled)175 void otSrpClientSetServiceKeyRecordEnabled(otInstance *aInstance, bool aEnabled)
176 {
177 AsCoreType(aInstance).Get<Srp::Client>().SetServiceKeyRecordEnabled(aEnabled);
178 }
179
otSrpClientIsServiceKeyRecordEnabled(otInstance * aInstance)180 bool otSrpClientIsServiceKeyRecordEnabled(otInstance *aInstance)
181 {
182 return AsCoreType(aInstance).Get<Srp::Client>().IsServiceKeyRecordEnabled();
183 }
184 #endif
185
186 #endif // OPENTHREAD_CONFIG_SRP_CLIENT_ENABLE
187