• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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