TI's CC3100 host driver and demo. Experimental and a work in progress.

Dependencies:   mbed

Committer:
dflet
Date:
Wed Nov 19 23:04:04 2014 +0000
Revision:
2:a3e52cf86086
Parent:
0:bbe98578d4c0
Added more boards!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:bbe98578d4c0 1 /*
dflet 0:bbe98578d4c0 2 * netapp.c - CC31xx/CC32xx Host Driver Implementation
dflet 0:bbe98578d4c0 3 *
dflet 0:bbe98578d4c0 4 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
dflet 0:bbe98578d4c0 5 *
dflet 0:bbe98578d4c0 6 *
dflet 0:bbe98578d4c0 7 * Redistribution and use in source and binary forms, with or without
dflet 0:bbe98578d4c0 8 * modification, are permitted provided that the following conditions
dflet 0:bbe98578d4c0 9 * are met:
dflet 0:bbe98578d4c0 10 *
dflet 0:bbe98578d4c0 11 * Redistributions of source code must retain the above copyright
dflet 0:bbe98578d4c0 12 * notice, this list of conditions and the following disclaimer.
dflet 0:bbe98578d4c0 13 *
dflet 0:bbe98578d4c0 14 * Redistributions in binary form must reproduce the above copyright
dflet 0:bbe98578d4c0 15 * notice, this list of conditions and the following disclaimer in the
dflet 0:bbe98578d4c0 16 * documentation and/or other materials provided with the
dflet 0:bbe98578d4c0 17 * distribution.
dflet 0:bbe98578d4c0 18 *
dflet 0:bbe98578d4c0 19 * Neither the name of Texas Instruments Incorporated nor the names of
dflet 0:bbe98578d4c0 20 * its contributors may be used to endorse or promote products derived
dflet 0:bbe98578d4c0 21 * from this software without specific prior written permission.
dflet 0:bbe98578d4c0 22 *
dflet 0:bbe98578d4c0 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
dflet 0:bbe98578d4c0 24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
dflet 0:bbe98578d4c0 25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
dflet 0:bbe98578d4c0 26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
dflet 0:bbe98578d4c0 27 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
dflet 0:bbe98578d4c0 28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
dflet 0:bbe98578d4c0 29 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
dflet 0:bbe98578d4c0 30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
dflet 0:bbe98578d4c0 31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
dflet 0:bbe98578d4c0 32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
dflet 0:bbe98578d4c0 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dflet 0:bbe98578d4c0 34 *
dflet 0:bbe98578d4c0 35 */
dflet 0:bbe98578d4c0 36
dflet 0:bbe98578d4c0 37
dflet 0:bbe98578d4c0 38
dflet 0:bbe98578d4c0 39 /*****************************************************************************/
dflet 0:bbe98578d4c0 40 /* Include files */
dflet 0:bbe98578d4c0 41 /*****************************************************************************/
dflet 0:bbe98578d4c0 42 #include "cc3100_simplelink.h"
dflet 0:bbe98578d4c0 43 #include "cc3100_protocol.h"
dflet 0:bbe98578d4c0 44 #include "cc3100_driver.h"
dflet 0:bbe98578d4c0 45
dflet 0:bbe98578d4c0 46 /*****************************************************************************/
dflet 0:bbe98578d4c0 47 /* Macro declarations */
dflet 0:bbe98578d4c0 48 /*****************************************************************************/
dflet 0:bbe98578d4c0 49 #define NETAPP_MDNS_OPTIONS_ADD_SERVICE_BIT ((_u32)0x1 << 31)
dflet 0:bbe98578d4c0 50
dflet 0:bbe98578d4c0 51 #ifdef SL_TINY
dflet 0:bbe98578d4c0 52 #define NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH 63
dflet 0:bbe98578d4c0 53 #else
dflet 0:bbe98578d4c0 54 #define NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH 255
dflet 0:bbe98578d4c0 55 #endif
dflet 0:bbe98578d4c0 56
dflet 0:bbe98578d4c0 57
dflet 0:bbe98578d4c0 58 /*****************************************************************************/
dflet 0:bbe98578d4c0 59 /* Functions prototypes */
dflet 0:bbe98578d4c0 60 /*****************************************************************************/
dflet 0:bbe98578d4c0 61 void _sl_HandleAsync_DnsGetHostByName(void *pVoidBuf);
dflet 0:bbe98578d4c0 62 void _sl_HandleAsync_DnsGetHostByService(void *pVoidBuf);
dflet 0:bbe98578d4c0 63 void _sl_HandleAsync_PingResponse(void *pVoidBuf);
dflet 0:bbe98578d4c0 64 void CopyPingResultsToReport(_PingReportResponse_t *pResults,SlPingReport_t *pReport);
dflet 0:bbe98578d4c0 65 _u16 sl_NetAppSendTokenValue(slHttpServerData_t * Token);
dflet 0:bbe98578d4c0 66 _i16 sl_NetAppMDNSRegisterUnregisterService(const _i8* pServiceName,
dflet 0:bbe98578d4c0 67 _u8 ServiceNameLen,
dflet 0:bbe98578d4c0 68 const _i8* pText,
dflet 0:bbe98578d4c0 69 _u8 TextLen,
dflet 0:bbe98578d4c0 70 _u16 Port,
dflet 0:bbe98578d4c0 71 _u32 TTL,
dflet 0:bbe98578d4c0 72 _u32 Options);
dflet 0:bbe98578d4c0 73
dflet 0:bbe98578d4c0 74
dflet 0:bbe98578d4c0 75 /*****************************************************************************/
dflet 0:bbe98578d4c0 76 /* API functions */
dflet 0:bbe98578d4c0 77 /*****************************************************************************/
dflet 0:bbe98578d4c0 78
dflet 0:bbe98578d4c0 79 /*****************************************************************************
dflet 0:bbe98578d4c0 80 sl_NetAppStart
dflet 0:bbe98578d4c0 81 *****************************************************************************/
dflet 0:bbe98578d4c0 82 typedef union
dflet 0:bbe98578d4c0 83 {
dflet 0:bbe98578d4c0 84 _NetAppStartStopCommand_t Cmd;
dflet 0:bbe98578d4c0 85 _NetAppStartStopResponse_t Rsp;
dflet 0:bbe98578d4c0 86 }_SlNetAppStartStopMsg_u;
dflet 0:bbe98578d4c0 87
dflet 0:bbe98578d4c0 88 const _SlCmdCtrl_t _SlNetAppStartCtrl =
dflet 0:bbe98578d4c0 89 {
dflet 0:bbe98578d4c0 90 SL_OPCODE_NETAPP_START_COMMAND,
dflet 0:bbe98578d4c0 91 sizeof(_NetAppStartStopCommand_t),
dflet 0:bbe98578d4c0 92 sizeof(_NetAppStartStopResponse_t)
dflet 0:bbe98578d4c0 93 };
dflet 0:bbe98578d4c0 94
dflet 0:bbe98578d4c0 95 const _SlCmdCtrl_t _SlNetAppStopCtrl =
dflet 0:bbe98578d4c0 96 {
dflet 0:bbe98578d4c0 97 SL_OPCODE_NETAPP_STOP_COMMAND,
dflet 0:bbe98578d4c0 98 sizeof(_NetAppStartStopCommand_t),
dflet 0:bbe98578d4c0 99 sizeof(_NetAppStartStopResponse_t)
dflet 0:bbe98578d4c0 100 };
dflet 0:bbe98578d4c0 101
dflet 0:bbe98578d4c0 102 #if _SL_INCLUDE_FUNC(sl_NetAppStart)
dflet 0:bbe98578d4c0 103 _i16 sl_NetAppStart(_u32 AppBitMap)
dflet 0:bbe98578d4c0 104 {
dflet 0:bbe98578d4c0 105 _SlNetAppStartStopMsg_u Msg;
dflet 0:bbe98578d4c0 106 Msg.Cmd.appId = AppBitMap;
dflet 0:bbe98578d4c0 107 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlNetAppStartCtrl, &Msg, NULL));
dflet 0:bbe98578d4c0 108
dflet 0:bbe98578d4c0 109 return Msg.Rsp.status;
dflet 0:bbe98578d4c0 110 }
dflet 0:bbe98578d4c0 111 #endif
dflet 0:bbe98578d4c0 112
dflet 0:bbe98578d4c0 113 /*****************************************************************************
dflet 0:bbe98578d4c0 114 sl_NetAppStop
dflet 0:bbe98578d4c0 115 *****************************************************************************/
dflet 0:bbe98578d4c0 116 #if _SL_INCLUDE_FUNC(sl_NetAppStop)
dflet 0:bbe98578d4c0 117 _i16 sl_NetAppStop(_u32 AppBitMap)
dflet 0:bbe98578d4c0 118 {
dflet 0:bbe98578d4c0 119 _SlNetAppStartStopMsg_u Msg;
dflet 0:bbe98578d4c0 120 Msg.Cmd.appId = AppBitMap;
dflet 0:bbe98578d4c0 121 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlNetAppStopCtrl, &Msg, NULL));
dflet 0:bbe98578d4c0 122
dflet 0:bbe98578d4c0 123 return Msg.Rsp.status;
dflet 0:bbe98578d4c0 124 }
dflet 0:bbe98578d4c0 125 #endif
dflet 0:bbe98578d4c0 126
dflet 0:bbe98578d4c0 127
dflet 0:bbe98578d4c0 128 /******************************************************************************/
dflet 0:bbe98578d4c0 129 /* sl_NetAppGetServiceList */
dflet 0:bbe98578d4c0 130 /******************************************************************************/
dflet 0:bbe98578d4c0 131 typedef struct
dflet 0:bbe98578d4c0 132 {
dflet 0:bbe98578d4c0 133 _u8 IndexOffest;
dflet 0:bbe98578d4c0 134 _u8 MaxServiceCount;
dflet 0:bbe98578d4c0 135 _u8 Flags;
dflet 0:bbe98578d4c0 136 _i8 Padding;
dflet 0:bbe98578d4c0 137 }NetappGetServiceListCMD_t;
dflet 0:bbe98578d4c0 138
dflet 0:bbe98578d4c0 139 typedef union
dflet 0:bbe98578d4c0 140 {
dflet 0:bbe98578d4c0 141 NetappGetServiceListCMD_t Cmd;
dflet 0:bbe98578d4c0 142 _BasicResponse_t Rsp;
dflet 0:bbe98578d4c0 143 }_SlNetappGetServiceListMsg_u;
dflet 0:bbe98578d4c0 144
dflet 0:bbe98578d4c0 145 const _SlCmdCtrl_t _SlGetServiceListeCtrl =
dflet 0:bbe98578d4c0 146 {
dflet 0:bbe98578d4c0 147 SL_OPCODE_NETAPP_NETAPP_MDNS_LOOKUP_SERVICE,
dflet 0:bbe98578d4c0 148 sizeof(NetappGetServiceListCMD_t),
dflet 0:bbe98578d4c0 149 sizeof(_BasicResponse_t)
dflet 0:bbe98578d4c0 150 };
dflet 0:bbe98578d4c0 151
dflet 0:bbe98578d4c0 152
dflet 0:bbe98578d4c0 153 #if _SL_INCLUDE_FUNC(sl_NetAppGetServiceList)
dflet 0:bbe98578d4c0 154 _i16 sl_NetAppGetServiceList(_u8 IndexOffest,
dflet 0:bbe98578d4c0 155 _u8 MaxServiceCount,
dflet 0:bbe98578d4c0 156 _u8 Flags,
dflet 0:bbe98578d4c0 157 _i8 *pBuffer,
dflet 0:bbe98578d4c0 158 _u32 RxBufferLength
dflet 0:bbe98578d4c0 159 )
dflet 0:bbe98578d4c0 160 {
dflet 0:bbe98578d4c0 161
dflet 0:bbe98578d4c0 162 _i32 retVal= 0;
dflet 0:bbe98578d4c0 163 _SlNetappGetServiceListMsg_u Msg;
dflet 0:bbe98578d4c0 164 _SlCmdExt_t CmdExt;
dflet 0:bbe98578d4c0 165 _u16 ServiceSize = 0;
dflet 0:bbe98578d4c0 166 _u16 BufferSize = 0;
dflet 0:bbe98578d4c0 167
dflet 0:bbe98578d4c0 168 /*
dflet 0:bbe98578d4c0 169 Calculate RX pBuffer size
dflet 0:bbe98578d4c0 170 WARNING:
dflet 0:bbe98578d4c0 171 if this size is BufferSize than 1480 error should be returned because there
dflet 0:bbe98578d4c0 172 is no place in the RX packet.
dflet 0:bbe98578d4c0 173 */
dflet 0:bbe98578d4c0 174 switch(Flags)
dflet 0:bbe98578d4c0 175 {
dflet 0:bbe98578d4c0 176 case SL_NET_APP_FULL_SERVICE_WITH_TEXT_IPV4_TYPE:
dflet 0:bbe98578d4c0 177 ServiceSize = sizeof(SlNetAppGetFullServiceWithTextIpv4List_t);
dflet 0:bbe98578d4c0 178 break;
dflet 0:bbe98578d4c0 179
dflet 0:bbe98578d4c0 180 case SL_NET_APP_FULL_SERVICE_IPV4_TYPE:
dflet 0:bbe98578d4c0 181 ServiceSize = sizeof(SlNetAppGetFullServiceIpv4List_t);
dflet 0:bbe98578d4c0 182 break;
dflet 0:bbe98578d4c0 183
dflet 0:bbe98578d4c0 184 case SL_NET_APP_SHORT_SERVICE_IPV4_TYPE:
dflet 0:bbe98578d4c0 185 ServiceSize = sizeof(SlNetAppGetShortServiceIpv4List_t);
dflet 0:bbe98578d4c0 186 break;
dflet 0:bbe98578d4c0 187
dflet 0:bbe98578d4c0 188 default:
dflet 0:bbe98578d4c0 189 ServiceSize = sizeof(_BasicResponse_t);
dflet 0:bbe98578d4c0 190 break;
dflet 0:bbe98578d4c0 191 }
dflet 0:bbe98578d4c0 192
dflet 0:bbe98578d4c0 193
dflet 0:bbe98578d4c0 194
dflet 0:bbe98578d4c0 195 BufferSize = MaxServiceCount * ServiceSize;
dflet 0:bbe98578d4c0 196
dflet 0:bbe98578d4c0 197 /*Check the size of the requested services is smaller than size of the user buffer.
dflet 0:bbe98578d4c0 198 If not an error is returned in order to avoid overwriting memory. */
dflet 0:bbe98578d4c0 199 if(RxBufferLength <= BufferSize)
dflet 0:bbe98578d4c0 200 {
dflet 0:bbe98578d4c0 201 return SL_ERROR_NETAPP_RX_BUFFER_LENGTH_ERROR;
dflet 0:bbe98578d4c0 202 }
dflet 0:bbe98578d4c0 203
dflet 0:bbe98578d4c0 204 CmdExt.TxPayloadLen = 0;
dflet 0:bbe98578d4c0 205 CmdExt.RxPayloadLen = BufferSize;
dflet 0:bbe98578d4c0 206 CmdExt.pTxPayload = NULL;
dflet 0:bbe98578d4c0 207 CmdExt.pRxPayload = (_u8 *)pBuffer;
dflet 0:bbe98578d4c0 208
dflet 0:bbe98578d4c0 209 Msg.Cmd.IndexOffest = IndexOffest;
dflet 0:bbe98578d4c0 210 Msg.Cmd.MaxServiceCount = MaxServiceCount;
dflet 0:bbe98578d4c0 211 Msg.Cmd.Flags = Flags;
dflet 0:bbe98578d4c0 212 Msg.Cmd.Padding = 0;
dflet 0:bbe98578d4c0 213
dflet 0:bbe98578d4c0 214 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlGetServiceListeCtrl, &Msg, &CmdExt));
dflet 0:bbe98578d4c0 215 retVal = Msg.Rsp.status;
dflet 0:bbe98578d4c0 216
dflet 0:bbe98578d4c0 217 return (_i16)retVal;
dflet 0:bbe98578d4c0 218 }
dflet 0:bbe98578d4c0 219
dflet 0:bbe98578d4c0 220 #endif
dflet 0:bbe98578d4c0 221
dflet 0:bbe98578d4c0 222 /*****************************************************************************/
dflet 0:bbe98578d4c0 223 /* sl_mDNSRegisterService */
dflet 0:bbe98578d4c0 224 /*****************************************************************************/
dflet 0:bbe98578d4c0 225 /*
dflet 0:bbe98578d4c0 226 * The below struct depicts the constant parameters of the command/API RegisterService.
dflet 0:bbe98578d4c0 227 *
dflet 0:bbe98578d4c0 228 1. ServiceLen - The length of the service should be smaller than NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH.
dflet 0:bbe98578d4c0 229 2. TextLen - The length of the text should be smaller than NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH.
dflet 0:bbe98578d4c0 230 3. port - The port on this target host.
dflet 0:bbe98578d4c0 231 4. TTL - The TTL of the service
dflet 0:bbe98578d4c0 232 5. Options - bitwise parameters:
dflet 0:bbe98578d4c0 233 bit 0 - is unique (means if the service needs to be unique)
dflet 0:bbe98578d4c0 234 bit 31 - for internal use if the service should be added or deleted (set means ADD).
dflet 0:bbe98578d4c0 235 bit 1-30 for future.
dflet 0:bbe98578d4c0 236
dflet 0:bbe98578d4c0 237 NOTE:
dflet 0:bbe98578d4c0 238
dflet 0:bbe98578d4c0 239 1. There are another variable parameter is this API which is the service name and the text.
dflet 0:bbe98578d4c0 240 2. According to now there is no warning and Async event to user on if the service is a unique.
dflet 0:bbe98578d4c0 241 *
dflet 0:bbe98578d4c0 242 */
dflet 0:bbe98578d4c0 243
dflet 0:bbe98578d4c0 244
dflet 0:bbe98578d4c0 245 typedef struct
dflet 0:bbe98578d4c0 246 {
dflet 0:bbe98578d4c0 247 _u8 ServiceNameLen;
dflet 0:bbe98578d4c0 248 _u8 TextLen;
dflet 0:bbe98578d4c0 249 _u16 Port;
dflet 0:bbe98578d4c0 250 _u32 TTL;
dflet 0:bbe98578d4c0 251 _u32 Options;
dflet 0:bbe98578d4c0 252 }NetappMdnsSetService_t;
dflet 0:bbe98578d4c0 253
dflet 0:bbe98578d4c0 254 typedef union
dflet 0:bbe98578d4c0 255 {
dflet 0:bbe98578d4c0 256 NetappMdnsSetService_t Cmd;
dflet 0:bbe98578d4c0 257 _BasicResponse_t Rsp;
dflet 0:bbe98578d4c0 258 }_SlNetappMdnsRegisterServiceMsg_u;
dflet 0:bbe98578d4c0 259
dflet 0:bbe98578d4c0 260 const _SlCmdCtrl_t _SlRegisterServiceCtrl =
dflet 0:bbe98578d4c0 261 {
dflet 0:bbe98578d4c0 262 SL_OPCODE_NETAPP_MDNSREGISTERSERVICE,
dflet 0:bbe98578d4c0 263 sizeof(NetappMdnsSetService_t),
dflet 0:bbe98578d4c0 264 sizeof(_BasicResponse_t)
dflet 0:bbe98578d4c0 265 };
dflet 0:bbe98578d4c0 266
dflet 0:bbe98578d4c0 267
dflet 0:bbe98578d4c0 268 /******************************************************************************
dflet 0:bbe98578d4c0 269
dflet 0:bbe98578d4c0 270 sl_NetAppMDNSRegisterService
dflet 0:bbe98578d4c0 271
dflet 0:bbe98578d4c0 272 CALLER user from its host
dflet 0:bbe98578d4c0 273
dflet 0:bbe98578d4c0 274
dflet 0:bbe98578d4c0 275 DESCRIPTION:
dflet 0:bbe98578d4c0 276 Add/delete service
dflet 0:bbe98578d4c0 277 The function manipulates the command that register the service and call
dflet 0:bbe98578d4c0 278 to the NWP in order to add/delete the service to/from the mDNS package and to/from the DB.
dflet 0:bbe98578d4c0 279
dflet 0:bbe98578d4c0 280 This register service is a service offered by the application.
dflet 0:bbe98578d4c0 281 This unregister service is a service offered by the application before.
dflet 0:bbe98578d4c0 282
dflet 0:bbe98578d4c0 283 The service name should be full service name according to RFC
dflet 0:bbe98578d4c0 284 of the DNS-SD - means the value in name field in SRV answer.
dflet 0:bbe98578d4c0 285
dflet 0:bbe98578d4c0 286 Example for service name:
dflet 0:bbe98578d4c0 287 1. PC1._ipp._tcp.local
dflet 0:bbe98578d4c0 288 2. PC2_server._ftp._tcp.local
dflet 0:bbe98578d4c0 289
dflet 0:bbe98578d4c0 290 If the option is_unique is set, mDNS probes the service name to make sure
dflet 0:bbe98578d4c0 291 it is unique before starting to announce the service on the network.
dflet 0:bbe98578d4c0 292 Instance is the instance portion of the service name.
dflet 0:bbe98578d4c0 293
dflet 0:bbe98578d4c0 294
dflet 0:bbe98578d4c0 295
dflet 0:bbe98578d4c0 296
dflet 0:bbe98578d4c0 297 PARAMETERS:
dflet 0:bbe98578d4c0 298
dflet 0:bbe98578d4c0 299 The command is from constant parameters and variables parameters.
dflet 0:bbe98578d4c0 300
dflet 0:bbe98578d4c0 301 Constant parameters are:
dflet 0:bbe98578d4c0 302
dflet 0:bbe98578d4c0 303 ServiceLen - The length of the service.
dflet 0:bbe98578d4c0 304 TextLen - The length of the service should be smaller than 64.
dflet 0:bbe98578d4c0 305 port - The port on this target host.
dflet 0:bbe98578d4c0 306 TTL - The TTL of the service
dflet 0:bbe98578d4c0 307 Options - bitwise parameters:
dflet 0:bbe98578d4c0 308 bit 0 - is unique (means if the service needs to be unique)
dflet 0:bbe98578d4c0 309 bit 31 - for internal use if the service should be added or deleted (set means ADD).
dflet 0:bbe98578d4c0 310 bit 1-30 for future.
dflet 0:bbe98578d4c0 311
dflet 0:bbe98578d4c0 312 The variables parameters are:
dflet 0:bbe98578d4c0 313
dflet 0:bbe98578d4c0 314 Service name(full service name) - The service name.
dflet 0:bbe98578d4c0 315 Example for service name:
dflet 0:bbe98578d4c0 316 1. PC1._ipp._tcp.local
dflet 0:bbe98578d4c0 317 2. PC2_server._ftp._tcp.local
dflet 0:bbe98578d4c0 318
dflet 0:bbe98578d4c0 319 Text - The description of the service.
dflet 0:bbe98578d4c0 320 should be as mentioned in the RFC
dflet 0:bbe98578d4c0 321 (according to type of the service IPP,FTP...)
dflet 0:bbe98578d4c0 322
dflet 0:bbe98578d4c0 323 NOTE - pay attention
dflet 0:bbe98578d4c0 324
dflet 0:bbe98578d4c0 325 1. Temporary - there is an allocation on stack of internal buffer.
dflet 0:bbe98578d4c0 326 Its size is NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH.
dflet 0:bbe98578d4c0 327 It means that the sum of the text length and service name length cannot be bigger than
dflet 0:bbe98578d4c0 328 NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH.
dflet 0:bbe98578d4c0 329 If it is - An error is returned.
dflet 0:bbe98578d4c0 330
dflet 0:bbe98578d4c0 331 2. According to now from certain constraints the variables parameters are set in the
dflet 0:bbe98578d4c0 332 attribute part (contain constant parameters)
dflet 0:bbe98578d4c0 333
dflet 0:bbe98578d4c0 334
dflet 0:bbe98578d4c0 335
dflet 0:bbe98578d4c0 336 RETURNS: Status - the immediate response of the command status.
dflet 0:bbe98578d4c0 337 0 means success.
dflet 0:bbe98578d4c0 338
dflet 0:bbe98578d4c0 339
dflet 0:bbe98578d4c0 340
dflet 0:bbe98578d4c0 341 ******************************************************************************/
dflet 0:bbe98578d4c0 342 #if _SL_INCLUDE_FUNC(sl_NetAppMDNSRegisterUnregisterService)
dflet 0:bbe98578d4c0 343
dflet 0:bbe98578d4c0 344 _i16 sl_NetAppMDNSRegisterUnregisterService( const _i8* pServiceName,
dflet 0:bbe98578d4c0 345 _u8 ServiceNameLen,
dflet 0:bbe98578d4c0 346 const _i8* pText,
dflet 0:bbe98578d4c0 347 _u8 TextLen,
dflet 0:bbe98578d4c0 348 _u16 Port,
dflet 0:bbe98578d4c0 349 _u32 TTL,
dflet 0:bbe98578d4c0 350 _u32 Options)
dflet 0:bbe98578d4c0 351
dflet 0:bbe98578d4c0 352 {
dflet 0:bbe98578d4c0 353 _SlNetappMdnsRegisterServiceMsg_u Msg;
dflet 0:bbe98578d4c0 354 _SlCmdExt_t CmdExt ;
dflet 0:bbe98578d4c0 355 _i8 ServiceNameAndTextBuffer[NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH];
dflet 0:bbe98578d4c0 356 _i8 *TextPtr;
dflet 0:bbe98578d4c0 357
dflet 0:bbe98578d4c0 358 /*
dflet 0:bbe98578d4c0 359
dflet 0:bbe98578d4c0 360 NOTE - pay attention
dflet 0:bbe98578d4c0 361
dflet 0:bbe98578d4c0 362 1. Temporary - there is an allocation on stack of internal buffer.
dflet 0:bbe98578d4c0 363 Its size is NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH.
dflet 0:bbe98578d4c0 364 It means that the sum of the text length and service name length cannot be bigger than
dflet 0:bbe98578d4c0 365 NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH.
dflet 0:bbe98578d4c0 366 If it is - An error is returned.
dflet 0:bbe98578d4c0 367
dflet 0:bbe98578d4c0 368 2. According to now from certain constraints the variables parameters are set in the
dflet 0:bbe98578d4c0 369 attribute part (contain constant parameters)
dflet 0:bbe98578d4c0 370
dflet 0:bbe98578d4c0 371
dflet 0:bbe98578d4c0 372 */
dflet 0:bbe98578d4c0 373
dflet 0:bbe98578d4c0 374 /*build the attribute part of the command.
dflet 0:bbe98578d4c0 375 It contains the constant parameters of the command*/
dflet 0:bbe98578d4c0 376
dflet 0:bbe98578d4c0 377 Msg.Cmd.ServiceNameLen = ServiceNameLen;
dflet 0:bbe98578d4c0 378 Msg.Cmd.Options = Options;
dflet 0:bbe98578d4c0 379 Msg.Cmd.Port = Port;
dflet 0:bbe98578d4c0 380 Msg.Cmd.TextLen = TextLen;
dflet 0:bbe98578d4c0 381 Msg.Cmd.TTL = TTL;
dflet 0:bbe98578d4c0 382
dflet 0:bbe98578d4c0 383 /*Build the payload part of the command
dflet 0:bbe98578d4c0 384 Copy the service name and text to one buffer.
dflet 0:bbe98578d4c0 385 NOTE - pay attention
dflet 0:bbe98578d4c0 386 The size of the service length + the text length should be smaller than 255,
dflet 0:bbe98578d4c0 387 Until the simplelink drive supports to variable length through SPI command. */
dflet 0:bbe98578d4c0 388 if(TextLen + ServiceNameLen > (NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH - 1 )) /*-1 is for giving a place to set null termination at the end of the text*/
dflet 0:bbe98578d4c0 389 {
dflet 0:bbe98578d4c0 390 return -1;
dflet 0:bbe98578d4c0 391 }
dflet 0:bbe98578d4c0 392
dflet 0:bbe98578d4c0 393 sl_Memset(ServiceNameAndTextBuffer,0,NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH);
dflet 0:bbe98578d4c0 394
dflet 0:bbe98578d4c0 395
dflet 0:bbe98578d4c0 396 /*Copy the service name*/
dflet 0:bbe98578d4c0 397 sl_Memcpy(ServiceNameAndTextBuffer,
dflet 0:bbe98578d4c0 398 pServiceName,
dflet 0:bbe98578d4c0 399 ServiceNameLen);
dflet 0:bbe98578d4c0 400
dflet 0:bbe98578d4c0 401 if(TextLen > 0 )
dflet 0:bbe98578d4c0 402 {
dflet 0:bbe98578d4c0 403
dflet 0:bbe98578d4c0 404 TextPtr = &ServiceNameAndTextBuffer[ServiceNameLen];
dflet 0:bbe98578d4c0 405 /*Copy the text just after the service name*/
dflet 0:bbe98578d4c0 406 sl_Memcpy(TextPtr,
dflet 0:bbe98578d4c0 407 pText,
dflet 0:bbe98578d4c0 408 TextLen);
dflet 0:bbe98578d4c0 409
dflet 0:bbe98578d4c0 410
dflet 0:bbe98578d4c0 411 }
dflet 0:bbe98578d4c0 412
dflet 0:bbe98578d4c0 413 CmdExt.TxPayloadLen = (TextLen + ServiceNameLen);
dflet 0:bbe98578d4c0 414 CmdExt.RxPayloadLen = 0;
dflet 0:bbe98578d4c0 415 CmdExt.pTxPayload = (_u8 *)ServiceNameAndTextBuffer;
dflet 0:bbe98578d4c0 416 CmdExt.pRxPayload = NULL;
dflet 0:bbe98578d4c0 417
dflet 0:bbe98578d4c0 418
dflet 0:bbe98578d4c0 419 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlRegisterServiceCtrl, &Msg, &CmdExt));
dflet 0:bbe98578d4c0 420
dflet 0:bbe98578d4c0 421 return (_i16)Msg.Rsp.status;
dflet 0:bbe98578d4c0 422
dflet 0:bbe98578d4c0 423
dflet 0:bbe98578d4c0 424 }
dflet 0:bbe98578d4c0 425 #endif
dflet 0:bbe98578d4c0 426
dflet 0:bbe98578d4c0 427 /**********************************************************************************************/
dflet 0:bbe98578d4c0 428 #if _SL_INCLUDE_FUNC(sl_NetAppMDNSRegisterService)
dflet 0:bbe98578d4c0 429
dflet 0:bbe98578d4c0 430 _i16 sl_NetAppMDNSRegisterService( const _i8* pServiceName,
dflet 0:bbe98578d4c0 431 _u8 ServiceNameLen,
dflet 0:bbe98578d4c0 432 const _i8* pText,
dflet 0:bbe98578d4c0 433 _u8 TextLen,
dflet 0:bbe98578d4c0 434 _u16 Port,
dflet 0:bbe98578d4c0 435 _u32 TTL,
dflet 0:bbe98578d4c0 436 _u32 Options)
dflet 0:bbe98578d4c0 437
dflet 0:bbe98578d4c0 438 {
dflet 0:bbe98578d4c0 439
dflet 0:bbe98578d4c0 440 /*
dflet 0:bbe98578d4c0 441
dflet 0:bbe98578d4c0 442 NOTE - pay attention
dflet 0:bbe98578d4c0 443
dflet 0:bbe98578d4c0 444 1. Temporary - there is an allocation on stack of internal buffer.
dflet 0:bbe98578d4c0 445 Its size is NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH.
dflet 0:bbe98578d4c0 446 It means that the sum of the text length and service name length cannot be bigger than
dflet 0:bbe98578d4c0 447 NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH.
dflet 0:bbe98578d4c0 448 If it is - An error is returned.
dflet 0:bbe98578d4c0 449
dflet 0:bbe98578d4c0 450 2. According to now from certain constraints the variables parameters are set in the
dflet 0:bbe98578d4c0 451 attribute part (contain constant parameters)
dflet 0:bbe98578d4c0 452
dflet 0:bbe98578d4c0 453 */
dflet 0:bbe98578d4c0 454
dflet 0:bbe98578d4c0 455 /*Set the add service bit in the options parameter.
dflet 0:bbe98578d4c0 456 In order not use different opcodes for the register service and unregister service
dflet 0:bbe98578d4c0 457 bit 31 in option is taken for this purpose. if it is set it means in NWP that the service should be added
dflet 0:bbe98578d4c0 458 if it is cleared it means that the service should be deleted and there is only meaning to pServiceName
dflet 0:bbe98578d4c0 459 and ServiceNameLen values. */
dflet 0:bbe98578d4c0 460 Options |= NETAPP_MDNS_OPTIONS_ADD_SERVICE_BIT;
dflet 0:bbe98578d4c0 461
dflet 0:bbe98578d4c0 462 return sl_NetAppMDNSRegisterUnregisterService( pServiceName,
dflet 0:bbe98578d4c0 463 ServiceNameLen,
dflet 0:bbe98578d4c0 464 pText,
dflet 0:bbe98578d4c0 465 TextLen,
dflet 0:bbe98578d4c0 466 Port,
dflet 0:bbe98578d4c0 467 TTL,
dflet 0:bbe98578d4c0 468 Options);
dflet 0:bbe98578d4c0 469
dflet 0:bbe98578d4c0 470
dflet 0:bbe98578d4c0 471 }
dflet 0:bbe98578d4c0 472 #endif
dflet 0:bbe98578d4c0 473 /**********************************************************************************************/
dflet 0:bbe98578d4c0 474
dflet 0:bbe98578d4c0 475
dflet 0:bbe98578d4c0 476
dflet 0:bbe98578d4c0 477 /**********************************************************************************************/
dflet 0:bbe98578d4c0 478 #if _SL_INCLUDE_FUNC(sl_NetAppMDNSUnRegisterService)
dflet 0:bbe98578d4c0 479
dflet 0:bbe98578d4c0 480 _i16 sl_NetAppMDNSUnRegisterService( const _i8* pServiceName,
dflet 0:bbe98578d4c0 481 _u8 ServiceNameLen)
dflet 0:bbe98578d4c0 482
dflet 0:bbe98578d4c0 483
dflet 0:bbe98578d4c0 484 {
dflet 0:bbe98578d4c0 485 _u32 Options = 0;
dflet 0:bbe98578d4c0 486
dflet 0:bbe98578d4c0 487 /*
dflet 0:bbe98578d4c0 488
dflet 0:bbe98578d4c0 489 NOTE - pay attention
dflet 0:bbe98578d4c0 490
dflet 0:bbe98578d4c0 491 The size of the service length should be smaller than 255,
dflet 0:bbe98578d4c0 492 Until the simplelink drive supports to variable length through SPI command.
dflet 0:bbe98578d4c0 493
dflet 0:bbe98578d4c0 494
dflet 0:bbe98578d4c0 495 */
dflet 0:bbe98578d4c0 496
dflet 0:bbe98578d4c0 497 /*Clear the add service bit in the options parameter.
dflet 0:bbe98578d4c0 498 In order not use different opcodes for the register service and unregister service
dflet 0:bbe98578d4c0 499 bit 31 in option is taken for this purpose. if it is set it means in NWP that the service should be added
dflet 0:bbe98578d4c0 500 if it is cleared it means that the service should be deleted and there is only meaning to pServiceName
dflet 0:bbe98578d4c0 501 and ServiceNameLen values.*/
dflet 0:bbe98578d4c0 502
dflet 0:bbe98578d4c0 503 Options &= (~NETAPP_MDNS_OPTIONS_ADD_SERVICE_BIT);
dflet 0:bbe98578d4c0 504
dflet 0:bbe98578d4c0 505 return sl_NetAppMDNSRegisterUnregisterService( pServiceName,
dflet 0:bbe98578d4c0 506 ServiceNameLen,
dflet 0:bbe98578d4c0 507 NULL,
dflet 0:bbe98578d4c0 508 0,
dflet 0:bbe98578d4c0 509 0,
dflet 0:bbe98578d4c0 510 0,
dflet 0:bbe98578d4c0 511 Options);
dflet 0:bbe98578d4c0 512
dflet 0:bbe98578d4c0 513
dflet 0:bbe98578d4c0 514 }
dflet 0:bbe98578d4c0 515 #endif
dflet 0:bbe98578d4c0 516 /**********************************************************************************************/
dflet 0:bbe98578d4c0 517
dflet 0:bbe98578d4c0 518
dflet 0:bbe98578d4c0 519
dflet 0:bbe98578d4c0 520 /*****************************************************************************/
dflet 0:bbe98578d4c0 521 /* sl_DnsGetHostByService */
dflet 0:bbe98578d4c0 522 /*****************************************************************************/
dflet 0:bbe98578d4c0 523 /*
dflet 0:bbe98578d4c0 524 * The below struct depicts the constant parameters of the command/API sl_DnsGetHostByService.
dflet 0:bbe98578d4c0 525 *
dflet 0:bbe98578d4c0 526 1. ServiceLen - The length of the service should be smaller than 255.
dflet 0:bbe98578d4c0 527 2. AddrLen - TIPv4 or IPv6 (SL_AF_INET , SL_AF_INET6).
dflet 0:bbe98578d4c0 528 *
dflet 0:bbe98578d4c0 529 */
dflet 0:bbe98578d4c0 530
dflet 0:bbe98578d4c0 531 typedef struct
dflet 0:bbe98578d4c0 532 {
dflet 0:bbe98578d4c0 533 _u8 ServiceLen;
dflet 0:bbe98578d4c0 534 _u8 AddrLen;
dflet 0:bbe98578d4c0 535 _u16 Padding;
dflet 0:bbe98578d4c0 536 }_GetHostByServiceCommand_t;
dflet 0:bbe98578d4c0 537
dflet 0:bbe98578d4c0 538
dflet 0:bbe98578d4c0 539
dflet 0:bbe98578d4c0 540 /*
dflet 0:bbe98578d4c0 541 * The below structure depict the constant parameters that are returned in the Async event answer
dflet 0:bbe98578d4c0 542 * according to command/API sl_DnsGetHostByService for IPv4 and IPv6.
dflet 0:bbe98578d4c0 543 *
dflet 0:bbe98578d4c0 544 1Status - The status of the response.
dflet 0:bbe98578d4c0 545 2.Address - Contains the IP address of the service.
dflet 0:bbe98578d4c0 546 3.Port - Contains the port of the service.
dflet 0:bbe98578d4c0 547 4.TextLen - Contains the max length of the text that the user wants to get.
dflet 0:bbe98578d4c0 548 it means that if the test of service is bigger that its value than
dflet 0:bbe98578d4c0 549 the text is cut to inout_TextLen value.
dflet 0:bbe98578d4c0 550 Output: Contain the length of the text that is returned. Can be full text or part
dflet 0:bbe98578d4c0 551 of the text (see above).
dflet 0:bbe98578d4c0 552
dflet 0:bbe98578d4c0 553 *
dflet 0:bbe98578d4c0 554 */
dflet 0:bbe98578d4c0 555 typedef struct
dflet 0:bbe98578d4c0 556 {
dflet 0:bbe98578d4c0 557 _u16 Status;
dflet 0:bbe98578d4c0 558 _u16 TextLen;
dflet 0:bbe98578d4c0 559 _u32 Port;
dflet 0:bbe98578d4c0 560 _u32 Address;
dflet 0:bbe98578d4c0 561 }_GetHostByServiceIPv4AsyncResponse_t;
dflet 0:bbe98578d4c0 562
dflet 0:bbe98578d4c0 563
dflet 0:bbe98578d4c0 564 typedef struct
dflet 0:bbe98578d4c0 565 {
dflet 0:bbe98578d4c0 566 _u16 Status;
dflet 0:bbe98578d4c0 567 _u16 TextLen;
dflet 0:bbe98578d4c0 568 _u32 Port;
dflet 0:bbe98578d4c0 569 _u32 Address[4];
dflet 0:bbe98578d4c0 570 }_GetHostByServiceIPv6AsyncResponse_t;
dflet 0:bbe98578d4c0 571
dflet 0:bbe98578d4c0 572
dflet 0:bbe98578d4c0 573 typedef union
dflet 0:bbe98578d4c0 574 {
dflet 0:bbe98578d4c0 575 _GetHostByServiceIPv4AsyncResponse_t IpV4;
dflet 0:bbe98578d4c0 576 _GetHostByServiceIPv6AsyncResponse_t IpV6;
dflet 0:bbe98578d4c0 577 }_GetHostByServiceAsyncResponseAttribute_u;
dflet 0:bbe98578d4c0 578
dflet 0:bbe98578d4c0 579 /*
dflet 0:bbe98578d4c0 580 * The below struct contains pointers to the output parameters that the user gives
dflet 0:bbe98578d4c0 581 *
dflet 0:bbe98578d4c0 582 */
dflet 0:bbe98578d4c0 583 typedef struct
dflet 0:bbe98578d4c0 584 {
dflet 0:bbe98578d4c0 585 _i16 Status;
dflet 0:bbe98578d4c0 586 _u32 *out_pAddr;
dflet 0:bbe98578d4c0 587 _u32 *out_pPort;
dflet 0:bbe98578d4c0 588 _u16 *inout_TextLen; // in: max len , out: actual len
dflet 0:bbe98578d4c0 589 _i8 *out_pText;
dflet 0:bbe98578d4c0 590 }_GetHostByServiceAsyncResponse_t;
dflet 0:bbe98578d4c0 591
dflet 0:bbe98578d4c0 592
dflet 0:bbe98578d4c0 593 typedef union
dflet 0:bbe98578d4c0 594 {
dflet 0:bbe98578d4c0 595 _GetHostByServiceCommand_t Cmd;
dflet 0:bbe98578d4c0 596 _BasicResponse_t Rsp;
dflet 0:bbe98578d4c0 597 }_SlGetHostByServiceMsg_u;
dflet 0:bbe98578d4c0 598
dflet 0:bbe98578d4c0 599 const _SlCmdCtrl_t _SlGetHostByServiceCtrl =
dflet 0:bbe98578d4c0 600 {
dflet 0:bbe98578d4c0 601 SL_OPCODE_NETAPP_MDNSGETHOSTBYSERVICE,
dflet 0:bbe98578d4c0 602 sizeof(_GetHostByServiceCommand_t),
dflet 0:bbe98578d4c0 603 sizeof(_BasicResponse_t)
dflet 0:bbe98578d4c0 604 };
dflet 0:bbe98578d4c0 605
dflet 0:bbe98578d4c0 606
dflet 0:bbe98578d4c0 607
dflet 0:bbe98578d4c0 608 /******************************************************************************/
dflet 0:bbe98578d4c0 609
dflet 0:bbe98578d4c0 610 #if _SL_INCLUDE_FUNC(sl_NetAppDnsGetHostByService)
dflet 0:bbe98578d4c0 611 _i32 sl_NetAppDnsGetHostByService(_i8 *pServiceName, /* string containing all (or only part): name + subtype + service */
dflet 0:bbe98578d4c0 612 _u8 ServiceLen,
dflet 0:bbe98578d4c0 613 _u8 Family, /* 4-IPv4 , 16-IPv6 */
dflet 0:bbe98578d4c0 614 _u32 pAddr[],
dflet 0:bbe98578d4c0 615 _u32 *pPort,
dflet 0:bbe98578d4c0 616 _u16 *pTextLen, /* in: max len , out: actual len */
dflet 0:bbe98578d4c0 617 _i8 *pText
dflet 0:bbe98578d4c0 618 )
dflet 0:bbe98578d4c0 619 {
dflet 0:bbe98578d4c0 620 _SlGetHostByServiceMsg_u Msg;
dflet 0:bbe98578d4c0 621 _SlCmdExt_t CmdExt ;
dflet 0:bbe98578d4c0 622 _GetHostByServiceAsyncResponse_t AsyncRsp;
dflet 0:bbe98578d4c0 623 _u8 ObjIdx = MAX_CONCURRENT_ACTIONS;
dflet 0:bbe98578d4c0 624
dflet 0:bbe98578d4c0 625 /*
dflet 0:bbe98578d4c0 626 Note:
dflet 0:bbe98578d4c0 627 1. The return's attributes are belonged to first service that is found.
dflet 0:bbe98578d4c0 628 It can be other services with the same service name will response to
dflet 0:bbe98578d4c0 629 the query. The results of these responses are saved in the peer cache of the NWP, and
dflet 0:bbe98578d4c0 630 should be read by another API.
dflet 0:bbe98578d4c0 631
dflet 0:bbe98578d4c0 632 2. Text length can be 120 bytes only - not more
dflet 0:bbe98578d4c0 633 It is because of constraints in the NWP on the buffer that is allocated for the Async event.
dflet 0:bbe98578d4c0 634
dflet 0:bbe98578d4c0 635 3.The API waits to Async event by blocking. It means that the API is finished only after an Async event
dflet 0:bbe98578d4c0 636 is sent by the NWP.
dflet 0:bbe98578d4c0 637
dflet 0:bbe98578d4c0 638 4.No rolling option!!! - only PTR type is sent.
dflet 0:bbe98578d4c0 639
dflet 0:bbe98578d4c0 640
dflet 0:bbe98578d4c0 641 */
dflet 0:bbe98578d4c0 642 /*build the attribute part of the command.
dflet 0:bbe98578d4c0 643 It contains the constant parameters of the command */
dflet 0:bbe98578d4c0 644
dflet 0:bbe98578d4c0 645 Msg.Cmd.ServiceLen = ServiceLen;
dflet 0:bbe98578d4c0 646 Msg.Cmd.AddrLen = Family;
dflet 0:bbe98578d4c0 647
dflet 0:bbe98578d4c0 648 /*Build the payload part of the command
dflet 0:bbe98578d4c0 649 Copy the service name and text to one buffer.*/
dflet 0:bbe98578d4c0 650 CmdExt.TxPayloadLen = ServiceLen;
dflet 0:bbe98578d4c0 651 CmdExt.RxPayloadLen = 0;
dflet 0:bbe98578d4c0 652 CmdExt.pTxPayload = (_u8 *)pServiceName;
dflet 0:bbe98578d4c0 653 CmdExt.pRxPayload = NULL;
dflet 0:bbe98578d4c0 654
dflet 0:bbe98578d4c0 655 /*set pointers to the output parameters (the returned parameters).
dflet 0:bbe98578d4c0 656 This pointers are belonged to local struct that is set to global Async response parameter.
dflet 0:bbe98578d4c0 657 It is done in order not to run more than one sl_DnsGetHostByService at the same time.
dflet 0:bbe98578d4c0 658 The API should be run only if global parameter is pointed to NULL. */
dflet 0:bbe98578d4c0 659 AsyncRsp.out_pText = pText;
dflet 0:bbe98578d4c0 660 AsyncRsp.inout_TextLen = (_u16* )pTextLen;
dflet 0:bbe98578d4c0 661 AsyncRsp.out_pPort = pPort;
dflet 0:bbe98578d4c0 662 AsyncRsp.out_pAddr = (_u32 *)pAddr;
dflet 0:bbe98578d4c0 663
dflet 0:bbe98578d4c0 664
dflet 0:bbe98578d4c0 665 /*Use Obj to issue the command, if not available try later */
dflet 0:bbe98578d4c0 666 ObjIdx = (_u8)_SlDrvWaitForPoolObj(GETHOSYBYSERVICE_ID,SL_MAX_SOCKETS);
dflet 0:bbe98578d4c0 667
dflet 0:bbe98578d4c0 668 if (MAX_CONCURRENT_ACTIONS == ObjIdx)
dflet 0:bbe98578d4c0 669 {
dflet 0:bbe98578d4c0 670 return SL_POOL_IS_EMPTY;
dflet 0:bbe98578d4c0 671 }
dflet 0:bbe98578d4c0 672
dflet 0:bbe98578d4c0 673 OSI_RET_OK_CHECK(sl_LockObjLock(&g_pCB->ProtectionLockObj, SL_OS_WAIT_FOREVER));
dflet 0:bbe98578d4c0 674
dflet 0:bbe98578d4c0 675 g_pCB->ObjPool[ObjIdx].pRespArgs = (unsigned char*)&AsyncRsp;//(unsigned char*) replaced (void*)
dflet 0:bbe98578d4c0 676
dflet 0:bbe98578d4c0 677 OSI_RET_OK_CHECK(sl_LockObjUnlock(&g_pCB->ProtectionLockObj));
dflet 0:bbe98578d4c0 678 /* set bit to indicate IPv6 address is expected */
dflet 0:bbe98578d4c0 679 if (SL_AF_INET6 == Family)
dflet 0:bbe98578d4c0 680 {
dflet 0:bbe98578d4c0 681 g_pCB->ObjPool[ObjIdx].AdditionalData |= SL_NETAPP_FAMILY_MASK;
dflet 0:bbe98578d4c0 682 }
dflet 0:bbe98578d4c0 683 /* Send the command */
dflet 0:bbe98578d4c0 684 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlGetHostByServiceCtrl, &Msg, &CmdExt));
dflet 0:bbe98578d4c0 685
dflet 0:bbe98578d4c0 686
dflet 0:bbe98578d4c0 687
dflet 0:bbe98578d4c0 688 /* If the immediate reponse is O.K. than wait for aSYNC event response. */
dflet 0:bbe98578d4c0 689 if(SL_RET_CODE_OK == Msg.Rsp.status)
dflet 0:bbe98578d4c0 690 {
dflet 0:bbe98578d4c0 691 OSI_RET_OK_CHECK(sl_SyncObjWait(&g_pCB->ObjPool[ObjIdx].SyncObj, SL_OS_WAIT_FOREVER));
dflet 0:bbe98578d4c0 692
dflet 0:bbe98578d4c0 693 /* If we are - it means that Async event was sent.
dflet 0:bbe98578d4c0 694 The results are copied in the Async handle return functions */
dflet 0:bbe98578d4c0 695
dflet 0:bbe98578d4c0 696 Msg.Rsp.status = AsyncRsp.Status;
dflet 0:bbe98578d4c0 697 }
dflet 0:bbe98578d4c0 698
dflet 0:bbe98578d4c0 699 _SlDrvReleasePoolObj(ObjIdx);
dflet 0:bbe98578d4c0 700 return Msg.Rsp.status;
dflet 0:bbe98578d4c0 701 }
dflet 0:bbe98578d4c0 702 #endif
dflet 0:bbe98578d4c0 703 /******************************************************************************/
dflet 0:bbe98578d4c0 704
dflet 0:bbe98578d4c0 705 /******************************************************************************
dflet 0:bbe98578d4c0 706 _sl_HandleAsync_DnsGetHostByService
dflet 0:bbe98578d4c0 707
dflet 0:bbe98578d4c0 708 CALLER NWP - Async event on sl_DnsGetHostByService with IPv4 Family
dflet 0:bbe98578d4c0 709
dflet 0:bbe98578d4c0 710
dflet 0:bbe98578d4c0 711 DESCRIPTION:
dflet 0:bbe98578d4c0 712
dflet 0:bbe98578d4c0 713 Async event on sl_DnsGetHostByService command with IPv4 Family.
dflet 0:bbe98578d4c0 714 Return service attributes like IP address, port and text according to service name.
dflet 0:bbe98578d4c0 715 The user sets a service name Full/Part (see example below), and should get the:
dflet 0:bbe98578d4c0 716 1. IP of the service
dflet 0:bbe98578d4c0 717 2. The port of service.
dflet 0:bbe98578d4c0 718 3. The text of service.
dflet 0:bbe98578d4c0 719
dflet 0:bbe98578d4c0 720 Hence it can make a connection to the specific service and use it.
dflet 0:bbe98578d4c0 721 It is similar to get host by name method.
dflet 0:bbe98578d4c0 722
dflet 0:bbe98578d4c0 723 It is done by a single shot query with PTR type on the service name.
dflet 0:bbe98578d4c0 724
dflet 0:bbe98578d4c0 725
dflet 0:bbe98578d4c0 726
dflet 0:bbe98578d4c0 727 Note:
dflet 0:bbe98578d4c0 728 1. The return's attributes are belonged to first service that is found.
dflet 0:bbe98578d4c0 729 It can be other services with the same service name will response to
dflet 0:bbe98578d4c0 730 the query. The results of these responses are saved in the peer cache of the NWP, and
dflet 0:bbe98578d4c0 731 should be read by another API.
dflet 0:bbe98578d4c0 732
dflet 0:bbe98578d4c0 733
dflet 0:bbe98578d4c0 734 PARAMETERS:
dflet 0:bbe98578d4c0 735
dflet 0:bbe98578d4c0 736 pVoidBuf - is point to opcode of the event.
dflet 0:bbe98578d4c0 737 it contains the outputs that are given to the user
dflet 0:bbe98578d4c0 738
dflet 0:bbe98578d4c0 739 outputs description:
dflet 0:bbe98578d4c0 740
dflet 0:bbe98578d4c0 741 1.out_pAddr[] - output: Contain the IP address of the service.
dflet 0:bbe98578d4c0 742 2.out_pPort - output: Contain the port of the service.
dflet 0:bbe98578d4c0 743 3.inout_TextLen - Input: Contain the max length of the text that the user wants to get.
dflet 0:bbe98578d4c0 744 it means that if the test of service is bigger that its value than
dflet 0:bbe98578d4c0 745 the text is cut to inout_TextLen value.
dflet 0:bbe98578d4c0 746 Output: Contain the length of the text that is returned. Can be full text or part
dflet 0:bbe98578d4c0 747 of the text (see above).
dflet 0:bbe98578d4c0 748
dflet 0:bbe98578d4c0 749 4.out_pText - Contain the text of the service (full or part see above- inout_TextLen description).
dflet 0:bbe98578d4c0 750
dflet 0:bbe98578d4c0 751 *
dflet 0:bbe98578d4c0 752
dflet 0:bbe98578d4c0 753
dflet 0:bbe98578d4c0 754 RETURNS: success or fail.
dflet 0:bbe98578d4c0 755
dflet 0:bbe98578d4c0 756
dflet 0:bbe98578d4c0 757
dflet 0:bbe98578d4c0 758
dflet 0:bbe98578d4c0 759
dflet 0:bbe98578d4c0 760 ******************************************************************************/
dflet 0:bbe98578d4c0 761 void _sl_HandleAsync_DnsGetHostByService(void *pVoidBuf)
dflet 0:bbe98578d4c0 762 {
dflet 0:bbe98578d4c0 763
dflet 0:bbe98578d4c0 764 _GetHostByServiceAsyncResponse_t* Res;
dflet 0:bbe98578d4c0 765 _u16 TextLen;
dflet 0:bbe98578d4c0 766 _u16 UserTextLen;
dflet 0:bbe98578d4c0 767
dflet 0:bbe98578d4c0 768
dflet 0:bbe98578d4c0 769 /*pVoidBuf - is point to opcode of the event.*/
dflet 0:bbe98578d4c0 770
dflet 0:bbe98578d4c0 771 /*set pMsgArgs to point to the attribute of the event.*/
dflet 0:bbe98578d4c0 772 _GetHostByServiceIPv4AsyncResponse_t *pMsgArgs = (_GetHostByServiceIPv4AsyncResponse_t *)_SL_RESP_ARGS_START(pVoidBuf);
dflet 0:bbe98578d4c0 773
dflet 0:bbe98578d4c0 774 VERIFY_SOCKET_CB(NULL != g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs);
dflet 0:bbe98578d4c0 775
dflet 0:bbe98578d4c0 776 /*IPv6*/
dflet 0:bbe98578d4c0 777 if(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].AdditionalData & SL_NETAPP_FAMILY_MASK)
dflet 0:bbe98578d4c0 778 {
dflet 0:bbe98578d4c0 779 return;
dflet 0:bbe98578d4c0 780 }
dflet 0:bbe98578d4c0 781 /*IPv4*/
dflet 0:bbe98578d4c0 782 else
dflet 0:bbe98578d4c0 783 {
dflet 0:bbe98578d4c0 784 /*************************************************************************************************
dflet 0:bbe98578d4c0 785
dflet 0:bbe98578d4c0 786 1. Copy the attribute part of the evnt to the attribute part of the response
dflet 0:bbe98578d4c0 787 sl_Memcpy(g_pCB->GetHostByServiceCB.pAsyncRsp, pMsgArgs, sizeof(_GetHostByServiceIPv4AsyncResponse_t));
dflet 0:bbe98578d4c0 788
dflet 0:bbe98578d4c0 789 set to TextLen the text length of the service.*/
dflet 0:bbe98578d4c0 790 TextLen = pMsgArgs->TextLen;
dflet 0:bbe98578d4c0 791
dflet 0:bbe98578d4c0 792 /*Res pointed to mDNS global object struct */
dflet 0:bbe98578d4c0 793 Res = (_GetHostByServiceAsyncResponse_t*)g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs;
dflet 0:bbe98578d4c0 794
dflet 0:bbe98578d4c0 795
dflet 0:bbe98578d4c0 796
dflet 0:bbe98578d4c0 797 /*It is 4 bytes so we avoid from memcpy*/
dflet 0:bbe98578d4c0 798 Res->out_pAddr[0] = pMsgArgs->Address;
dflet 0:bbe98578d4c0 799 Res->out_pPort[0] = pMsgArgs->Port;
dflet 0:bbe98578d4c0 800 Res->Status = pMsgArgs->Status;
dflet 0:bbe98578d4c0 801
dflet 0:bbe98578d4c0 802 /*set to TextLen the text length of the user (input fromthe user).*/
dflet 0:bbe98578d4c0 803 UserTextLen = Res->inout_TextLen[0];
dflet 0:bbe98578d4c0 804
dflet 0:bbe98578d4c0 805 /*Cut the service text if the user requested for smaller text.*/
dflet 0:bbe98578d4c0 806 UserTextLen = (TextLen <= UserTextLen) ? TextLen : UserTextLen;
dflet 0:bbe98578d4c0 807 Res->inout_TextLen[0] = UserTextLen ;
dflet 0:bbe98578d4c0 808
dflet 0:bbe98578d4c0 809 /**************************************************************************************************
dflet 0:bbe98578d4c0 810
dflet 0:bbe98578d4c0 811 2. Copy the payload part of the evnt (the text) to the payload part of the response
dflet 0:bbe98578d4c0 812 the lenght of the copy is according to the text length in the attribute part. */
dflet 0:bbe98578d4c0 813
dflet 0:bbe98578d4c0 814
dflet 0:bbe98578d4c0 815 sl_Memcpy(Res->out_pText ,
dflet 0:bbe98578d4c0 816 (_i8 *)(& pMsgArgs[1]) , /* & pMsgArgs[1] -> 1st byte after the fixed header = 1st byte of variable text.*/
dflet 0:bbe98578d4c0 817 UserTextLen );
dflet 0:bbe98578d4c0 818
dflet 0:bbe98578d4c0 819
dflet 0:bbe98578d4c0 820 /**************************************************************************************************/
dflet 0:bbe98578d4c0 821
dflet 0:bbe98578d4c0 822 OSI_RET_OK_CHECK(sl_SyncObjSignal(&g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj));
dflet 0:bbe98578d4c0 823 return;
dflet 0:bbe98578d4c0 824 }
dflet 0:bbe98578d4c0 825 }
dflet 0:bbe98578d4c0 826
dflet 0:bbe98578d4c0 827
dflet 0:bbe98578d4c0 828
dflet 0:bbe98578d4c0 829 /*****************************************************************************/
dflet 0:bbe98578d4c0 830 /* _sl_HandleAsync_DnsGetHostByAddr */
dflet 0:bbe98578d4c0 831 /*****************************************************************************/
dflet 0:bbe98578d4c0 832 void _sl_HandleAsync_DnsGetHostByAddr(void *pVoidBuf)
dflet 0:bbe98578d4c0 833 {
dflet 0:bbe98578d4c0 834 SL_TRACE0(DBG_MSG, MSG_303, "STUB: _sl_HandleAsync_DnsGetHostByAddr not implemented yet!");
dflet 0:bbe98578d4c0 835 return;
dflet 0:bbe98578d4c0 836 }
dflet 0:bbe98578d4c0 837
dflet 0:bbe98578d4c0 838 /*****************************************************************************/
dflet 0:bbe98578d4c0 839 /* sl_DnsGetHostByName */
dflet 0:bbe98578d4c0 840 /*****************************************************************************/
dflet 0:bbe98578d4c0 841 typedef union
dflet 0:bbe98578d4c0 842 {
dflet 0:bbe98578d4c0 843 _GetHostByNameIPv4AsyncResponse_t IpV4;
dflet 0:bbe98578d4c0 844 _GetHostByNameIPv6AsyncResponse_t IpV6;
dflet 0:bbe98578d4c0 845 }_GetHostByNameAsyncResponse_u;
dflet 0:bbe98578d4c0 846
dflet 0:bbe98578d4c0 847 typedef union
dflet 0:bbe98578d4c0 848 {
dflet 0:bbe98578d4c0 849 _GetHostByNameCommand_t Cmd;
dflet 0:bbe98578d4c0 850 _BasicResponse_t Rsp;
dflet 0:bbe98578d4c0 851 }_SlGetHostByNameMsg_u;
dflet 0:bbe98578d4c0 852
dflet 0:bbe98578d4c0 853 const _SlCmdCtrl_t _SlGetHostByNameCtrl =
dflet 0:bbe98578d4c0 854 {
dflet 0:bbe98578d4c0 855 SL_OPCODE_NETAPP_DNSGETHOSTBYNAME,
dflet 0:bbe98578d4c0 856 sizeof(_GetHostByNameCommand_t),
dflet 0:bbe98578d4c0 857 sizeof(_BasicResponse_t)
dflet 0:bbe98578d4c0 858 };
dflet 0:bbe98578d4c0 859 #if _SL_INCLUDE_FUNC(sl_NetAppDnsGetHostByName)
dflet 0:bbe98578d4c0 860 _i16 sl_NetAppDnsGetHostByName(_i8 * hostname, _u16 usNameLen, _u32* out_ip_addr,_u8 family)
dflet 0:bbe98578d4c0 861 {
dflet 0:bbe98578d4c0 862 _SlGetHostByNameMsg_u Msg;
dflet 0:bbe98578d4c0 863 _SlCmdExt_t ExtCtrl;
dflet 0:bbe98578d4c0 864 _GetHostByNameAsyncResponse_u AsyncRsp;
dflet 0:bbe98578d4c0 865 _u8 ObjIdx = MAX_CONCURRENT_ACTIONS;
dflet 0:bbe98578d4c0 866
dflet 0:bbe98578d4c0 867 ExtCtrl.TxPayloadLen = usNameLen;
dflet 0:bbe98578d4c0 868 ExtCtrl.RxPayloadLen = 0;
dflet 0:bbe98578d4c0 869 ExtCtrl.pTxPayload = (_u8 *)hostname;
dflet 0:bbe98578d4c0 870 ExtCtrl.pRxPayload = 0;
dflet 0:bbe98578d4c0 871
dflet 0:bbe98578d4c0 872 Msg.Cmd.Len = usNameLen;
dflet 0:bbe98578d4c0 873 Msg.Cmd.family = family;
dflet 0:bbe98578d4c0 874
dflet 0:bbe98578d4c0 875 /*Use Obj to issue the command, if not available try later */
dflet 0:bbe98578d4c0 876 ObjIdx = (_u8)_SlDrvWaitForPoolObj(GETHOSYBYNAME_ID,SL_MAX_SOCKETS);
dflet 0:bbe98578d4c0 877 if (MAX_CONCURRENT_ACTIONS == ObjIdx)
dflet 0:bbe98578d4c0 878 {
dflet 0:bbe98578d4c0 879 return SL_POOL_IS_EMPTY;
dflet 0:bbe98578d4c0 880 }
dflet 0:bbe98578d4c0 881 OSI_RET_OK_CHECK(sl_LockObjLock(&g_pCB->ProtectionLockObj, SL_OS_WAIT_FOREVER));
dflet 0:bbe98578d4c0 882
dflet 0:bbe98578d4c0 883 g_pCB->ObjPool[ObjIdx].pRespArgs = (_u8 *)&AsyncRsp;
dflet 0:bbe98578d4c0 884 /*set bit to indicate IPv6 address is expected */
dflet 0:bbe98578d4c0 885 if (SL_AF_INET6 == family)
dflet 0:bbe98578d4c0 886 {
dflet 0:bbe98578d4c0 887 g_pCB->ObjPool[ObjIdx].AdditionalData |= SL_NETAPP_FAMILY_MASK;
dflet 0:bbe98578d4c0 888 }
dflet 0:bbe98578d4c0 889
dflet 0:bbe98578d4c0 890 OSI_RET_OK_CHECK(sl_LockObjUnlock(&g_pCB->ProtectionLockObj));
dflet 0:bbe98578d4c0 891
dflet 0:bbe98578d4c0 892 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlGetHostByNameCtrl, &Msg, &ExtCtrl));
dflet 0:bbe98578d4c0 893
dflet 0:bbe98578d4c0 894 if(SL_RET_CODE_OK == Msg.Rsp.status)
dflet 0:bbe98578d4c0 895 {
dflet 0:bbe98578d4c0 896 OSI_RET_OK_CHECK(sl_SyncObjWait(&g_pCB->ObjPool[ObjIdx].SyncObj, SL_OS_WAIT_FOREVER));
dflet 0:bbe98578d4c0 897 Msg.Rsp.status = AsyncRsp.IpV4.status;
dflet 0:bbe98578d4c0 898
dflet 0:bbe98578d4c0 899 if(SL_OS_RET_CODE_OK == (_i16)Msg.Rsp.status)
dflet 0:bbe98578d4c0 900 {
dflet 0:bbe98578d4c0 901 sl_Memcpy((_i8 *)out_ip_addr,
dflet 0:bbe98578d4c0 902 (_i8 *)&AsyncRsp.IpV4.ip0,
dflet 0:bbe98578d4c0 903 (SL_AF_INET == family) ? SL_IPV4_ADDRESS_SIZE : SL_IPV6_ADDRESS_SIZE);
dflet 0:bbe98578d4c0 904 }
dflet 0:bbe98578d4c0 905 }
dflet 0:bbe98578d4c0 906 _SlDrvReleasePoolObj(ObjIdx);
dflet 0:bbe98578d4c0 907 return Msg.Rsp.status;
dflet 0:bbe98578d4c0 908 }
dflet 0:bbe98578d4c0 909 #endif
dflet 0:bbe98578d4c0 910 /******************************************************************************/
dflet 0:bbe98578d4c0 911 /* _sl_HandleAsync_DnsGetHostByName */
dflet 0:bbe98578d4c0 912 /******************************************************************************/
dflet 0:bbe98578d4c0 913 void _sl_HandleAsync_DnsGetHostByName(void *pVoidBuf)
dflet 0:bbe98578d4c0 914 {
dflet 0:bbe98578d4c0 915 _GetHostByNameIPv4AsyncResponse_t *pMsgArgs = (_GetHostByNameIPv4AsyncResponse_t *)_SL_RESP_ARGS_START(pVoidBuf);
dflet 0:bbe98578d4c0 916
dflet 0:bbe98578d4c0 917 OSI_RET_OK_CHECK(sl_LockObjLock(&g_pCB->ProtectionLockObj, SL_OS_WAIT_FOREVER));
dflet 0:bbe98578d4c0 918
dflet 0:bbe98578d4c0 919 VERIFY_SOCKET_CB(NULL != g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs);
dflet 0:bbe98578d4c0 920
dflet 0:bbe98578d4c0 921 /*IPv6 */
dflet 0:bbe98578d4c0 922 if(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].AdditionalData & SL_NETAPP_FAMILY_MASK)
dflet 0:bbe98578d4c0 923 {
dflet 0:bbe98578d4c0 924 sl_Memcpy(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs, pMsgArgs, sizeof(_GetHostByNameIPv6AsyncResponse_t));
dflet 0:bbe98578d4c0 925 }
dflet 0:bbe98578d4c0 926 /*IPv4 */
dflet 0:bbe98578d4c0 927 else
dflet 0:bbe98578d4c0 928 {
dflet 0:bbe98578d4c0 929 sl_Memcpy(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs, pMsgArgs, sizeof(_GetHostByNameIPv4AsyncResponse_t));
dflet 0:bbe98578d4c0 930 }
dflet 0:bbe98578d4c0 931 OSI_RET_OK_CHECK(sl_SyncObjSignal(&(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj)));
dflet 0:bbe98578d4c0 932
dflet 0:bbe98578d4c0 933 OSI_RET_OK_CHECK(sl_LockObjUnlock(&g_pCB->ProtectionLockObj));
dflet 0:bbe98578d4c0 934 return;
dflet 0:bbe98578d4c0 935 }
dflet 0:bbe98578d4c0 936
dflet 0:bbe98578d4c0 937
dflet 0:bbe98578d4c0 938 void CopyPingResultsToReport(_PingReportResponse_t *pResults,SlPingReport_t *pReport)
dflet 0:bbe98578d4c0 939 {
dflet 0:bbe98578d4c0 940 pReport->PacketsSent = pResults->numSendsPings;
dflet 0:bbe98578d4c0 941 pReport->PacketsReceived = pResults->numSuccsessPings;
dflet 0:bbe98578d4c0 942 pReport->MinRoundTime = pResults->rttMin;
dflet 0:bbe98578d4c0 943 pReport->MaxRoundTime = pResults->rttMax;
dflet 0:bbe98578d4c0 944 pReport->AvgRoundTime = pResults->rttAvg;
dflet 0:bbe98578d4c0 945 pReport->TestTime = pResults->testTime;
dflet 0:bbe98578d4c0 946 }
dflet 0:bbe98578d4c0 947
dflet 0:bbe98578d4c0 948
dflet 0:bbe98578d4c0 949 /*****************************************************************************/
dflet 0:bbe98578d4c0 950 /* _sl_HandleAsync_PingResponse */
dflet 0:bbe98578d4c0 951 /*****************************************************************************/
dflet 0:bbe98578d4c0 952 void _sl_HandleAsync_PingResponse(void *pVoidBuf)
dflet 0:bbe98578d4c0 953 {
dflet 0:bbe98578d4c0 954 _PingReportResponse_t *pMsgArgs = (_PingReportResponse_t *)_SL_RESP_ARGS_START(pVoidBuf);
dflet 0:bbe98578d4c0 955 SlPingReport_t pingReport;
dflet 0:bbe98578d4c0 956
dflet 0:bbe98578d4c0 957 if(pPingCallBackFunc)
dflet 0:bbe98578d4c0 958 {
dflet 0:bbe98578d4c0 959 CopyPingResultsToReport(pMsgArgs,&pingReport);
dflet 0:bbe98578d4c0 960 pPingCallBackFunc(&pingReport);
dflet 0:bbe98578d4c0 961 }
dflet 0:bbe98578d4c0 962 else
dflet 0:bbe98578d4c0 963 {
dflet 0:bbe98578d4c0 964
dflet 0:bbe98578d4c0 965 OSI_RET_OK_CHECK(sl_LockObjLock(&g_pCB->ProtectionLockObj, SL_OS_WAIT_FOREVER));
dflet 0:bbe98578d4c0 966 VERIFY_SOCKET_CB(NULL != g_pCB->PingCB.PingAsync.pAsyncRsp);
dflet 0:bbe98578d4c0 967
dflet 0:bbe98578d4c0 968 if (NULL != g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs)
dflet 0:bbe98578d4c0 969 {
dflet 0:bbe98578d4c0 970 sl_Memcpy(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs, pMsgArgs, sizeof(_PingReportResponse_t));
dflet 0:bbe98578d4c0 971 OSI_RET_OK_CHECK(sl_SyncObjSignal(&g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj));
dflet 0:bbe98578d4c0 972 }
dflet 0:bbe98578d4c0 973 OSI_RET_OK_CHECK(sl_LockObjUnlock(&g_pCB->ProtectionLockObj));
dflet 0:bbe98578d4c0 974 }
dflet 0:bbe98578d4c0 975 return;
dflet 0:bbe98578d4c0 976 }
dflet 0:bbe98578d4c0 977
dflet 0:bbe98578d4c0 978
dflet 0:bbe98578d4c0 979 /*****************************************************************************/
dflet 0:bbe98578d4c0 980 /* sl_PingStart */
dflet 0:bbe98578d4c0 981 /*****************************************************************************/
dflet 0:bbe98578d4c0 982 typedef union
dflet 0:bbe98578d4c0 983 {
dflet 0:bbe98578d4c0 984 _PingStartCommand_t Cmd;
dflet 0:bbe98578d4c0 985 _PingReportResponse_t Rsp;
dflet 0:bbe98578d4c0 986 }_SlPingStartMsg_u;
dflet 0:bbe98578d4c0 987
dflet 0:bbe98578d4c0 988
dflet 0:bbe98578d4c0 989 typedef enum
dflet 0:bbe98578d4c0 990 {
dflet 0:bbe98578d4c0 991 CMD_PING_TEST_RUNNING = 0,
dflet 0:bbe98578d4c0 992 CMD_PING_TEST_STOPPED
dflet 0:bbe98578d4c0 993 }_SlPingStatus_e;
dflet 0:bbe98578d4c0 994
dflet 0:bbe98578d4c0 995
dflet 0:bbe98578d4c0 996 #if _SL_INCLUDE_FUNC(sl_NetAppPingStart)
dflet 0:bbe98578d4c0 997 _i16 sl_NetAppPingStart(SlPingStartCommand_t* pPingParams,_u8 family,SlPingReport_t *pReport,const P_SL_DEV_PING_CALLBACK pPingCallback)
dflet 0:bbe98578d4c0 998 {
dflet 0:bbe98578d4c0 999 _SlCmdCtrl_t CmdCtrl = {0, sizeof(_PingStartCommand_t), sizeof(_BasicResponse_t)};
dflet 0:bbe98578d4c0 1000 _SlPingStartMsg_u Msg;
dflet 0:bbe98578d4c0 1001 _PingReportResponse_t PingRsp;
dflet 0:bbe98578d4c0 1002 _u8 ObjIdx = MAX_CONCURRENT_ACTIONS;
dflet 0:bbe98578d4c0 1003
dflet 0:bbe98578d4c0 1004 if( 0 == pPingParams->Ip ) // stop any ongoing ping
dflet 0:bbe98578d4c0 1005 {
dflet 0:bbe98578d4c0 1006 return _SlDrvBasicCmd(SL_OPCODE_NETAPP_PINGSTOP);
dflet 0:bbe98578d4c0 1007 }
dflet 0:bbe98578d4c0 1008
dflet 0:bbe98578d4c0 1009 if(SL_AF_INET == family)
dflet 0:bbe98578d4c0 1010 {
dflet 0:bbe98578d4c0 1011 CmdCtrl.Opcode = SL_OPCODE_NETAPP_PINGSTART;
dflet 0:bbe98578d4c0 1012 sl_Memcpy(&Msg.Cmd.ip0, &pPingParams->Ip, SL_IPV4_ADDRESS_SIZE);
dflet 0:bbe98578d4c0 1013 }
dflet 0:bbe98578d4c0 1014 else
dflet 0:bbe98578d4c0 1015 {
dflet 0:bbe98578d4c0 1016 CmdCtrl.Opcode = SL_OPCODE_NETAPP_PINGSTART_V6;
dflet 0:bbe98578d4c0 1017 sl_Memcpy(&Msg.Cmd.ip0, &pPingParams->Ip, SL_IPV6_ADDRESS_SIZE);
dflet 0:bbe98578d4c0 1018 }
dflet 0:bbe98578d4c0 1019
dflet 0:bbe98578d4c0 1020 Msg.Cmd.pingIntervalTime = pPingParams->PingIntervalTime;
dflet 0:bbe98578d4c0 1021 Msg.Cmd.PingSize = pPingParams->PingSize;
dflet 0:bbe98578d4c0 1022 Msg.Cmd.pingRequestTimeout = pPingParams->PingRequestTimeout;
dflet 0:bbe98578d4c0 1023 Msg.Cmd.totalNumberOfAttempts = pPingParams->TotalNumberOfAttempts;
dflet 0:bbe98578d4c0 1024 Msg.Cmd.flags = pPingParams->Flags;
dflet 0:bbe98578d4c0 1025
dflet 0:bbe98578d4c0 1026 if( pPingCallback )
dflet 0:bbe98578d4c0 1027 {
dflet 0:bbe98578d4c0 1028 pPingCallBackFunc = pPingCallback;
dflet 0:bbe98578d4c0 1029 }
dflet 0:bbe98578d4c0 1030 else
dflet 0:bbe98578d4c0 1031 {
dflet 0:bbe98578d4c0 1032 /*Use Obj to issue the command, if not available try later */
dflet 0:bbe98578d4c0 1033 ObjIdx = (_u8)_SlDrvWaitForPoolObj(PING_ID,SL_MAX_SOCKETS);
dflet 0:bbe98578d4c0 1034 if (MAX_CONCURRENT_ACTIONS == ObjIdx)
dflet 0:bbe98578d4c0 1035 {
dflet 0:bbe98578d4c0 1036 return SL_POOL_IS_EMPTY;
dflet 0:bbe98578d4c0 1037 }
dflet 0:bbe98578d4c0 1038 OSI_RET_OK_CHECK(sl_LockObjLock(&g_pCB->ProtectionLockObj, SL_OS_WAIT_FOREVER));
dflet 0:bbe98578d4c0 1039 /* async response handler for non callback mode */
dflet 0:bbe98578d4c0 1040 g_pCB->ObjPool[ObjIdx].pRespArgs = (_u8 *)&PingRsp;
dflet 0:bbe98578d4c0 1041 pPingCallBackFunc = NULL;
dflet 0:bbe98578d4c0 1042 OSI_RET_OK_CHECK(sl_LockObjUnlock(&g_pCB->ProtectionLockObj));
dflet 0:bbe98578d4c0 1043 }
dflet 0:bbe98578d4c0 1044
dflet 0:bbe98578d4c0 1045
dflet 0:bbe98578d4c0 1046 VERIFY_RET_OK(_SlDrvCmdOp(&CmdCtrl, &Msg, NULL));
dflet 0:bbe98578d4c0 1047 /*send the command*/
dflet 0:bbe98578d4c0 1048 if(CMD_PING_TEST_RUNNING == (_i16)Msg.Rsp.status || CMD_PING_TEST_STOPPED == (_i16)Msg.Rsp.status )
dflet 0:bbe98578d4c0 1049 {
dflet 0:bbe98578d4c0 1050 /* block waiting for results if no callback function is used */
dflet 0:bbe98578d4c0 1051 if( NULL == pPingCallback )
dflet 0:bbe98578d4c0 1052 {
dflet 0:bbe98578d4c0 1053 OSI_RET_OK_CHECK(sl_SyncObjWait(&g_pCB->ObjPool[ObjIdx].SyncObj, SL_OS_WAIT_FOREVER));
dflet 0:bbe98578d4c0 1054 if( SL_OS_RET_CODE_OK == (_i16)PingRsp.status )
dflet 0:bbe98578d4c0 1055 {
dflet 0:bbe98578d4c0 1056 CopyPingResultsToReport(&PingRsp,pReport);
dflet 0:bbe98578d4c0 1057 }
dflet 0:bbe98578d4c0 1058 _SlDrvReleasePoolObj(ObjIdx);
dflet 0:bbe98578d4c0 1059 }
dflet 0:bbe98578d4c0 1060 }
dflet 0:bbe98578d4c0 1061 else
dflet 0:bbe98578d4c0 1062 { /* ping failure, no async response */
dflet 0:bbe98578d4c0 1063 if( NULL == pPingCallback )
dflet 0:bbe98578d4c0 1064 {
dflet 0:bbe98578d4c0 1065 _SlDrvReleasePoolObj(ObjIdx);
dflet 0:bbe98578d4c0 1066 }
dflet 0:bbe98578d4c0 1067 }
dflet 0:bbe98578d4c0 1068
dflet 0:bbe98578d4c0 1069 return Msg.Rsp.status;
dflet 0:bbe98578d4c0 1070 }
dflet 0:bbe98578d4c0 1071 #endif
dflet 0:bbe98578d4c0 1072
dflet 0:bbe98578d4c0 1073 /*****************************************************************************/
dflet 0:bbe98578d4c0 1074 /* sl_NetAppSet */
dflet 0:bbe98578d4c0 1075 /*****************************************************************************/
dflet 0:bbe98578d4c0 1076 typedef union
dflet 0:bbe98578d4c0 1077 {
dflet 0:bbe98578d4c0 1078 _NetAppSetGet_t Cmd;
dflet 0:bbe98578d4c0 1079 _BasicResponse_t Rsp;
dflet 0:bbe98578d4c0 1080 }_SlNetAppMsgSet_u;
dflet 0:bbe98578d4c0 1081
dflet 0:bbe98578d4c0 1082 const _SlCmdCtrl_t _SlNetAppSetCmdCtrl =
dflet 0:bbe98578d4c0 1083 {
dflet 0:bbe98578d4c0 1084 SL_OPCODE_NETAPP_NETAPPSET,
dflet 0:bbe98578d4c0 1085 sizeof(_NetAppSetGet_t),
dflet 0:bbe98578d4c0 1086 sizeof(_BasicResponse_t)
dflet 0:bbe98578d4c0 1087 };
dflet 0:bbe98578d4c0 1088
dflet 0:bbe98578d4c0 1089 #if _SL_INCLUDE_FUNC(sl_NetAppSet)
dflet 0:bbe98578d4c0 1090 _i32 sl_NetAppSet(_u8 AppId ,_u8 Option,_u8 OptionLen, _u8 *pOptionValue)
dflet 0:bbe98578d4c0 1091 {
dflet 0:bbe98578d4c0 1092 _SlNetAppMsgSet_u Msg;
dflet 0:bbe98578d4c0 1093 _SlCmdExt_t CmdExt;
dflet 0:bbe98578d4c0 1094
dflet 0:bbe98578d4c0 1095 CmdExt.TxPayloadLen = (OptionLen+3) & (~3);
dflet 0:bbe98578d4c0 1096 CmdExt.RxPayloadLen = 0;
dflet 0:bbe98578d4c0 1097 CmdExt.pTxPayload = (_u8 *)pOptionValue;
dflet 0:bbe98578d4c0 1098 CmdExt.pRxPayload = NULL;
dflet 0:bbe98578d4c0 1099
dflet 0:bbe98578d4c0 1100
dflet 0:bbe98578d4c0 1101 Msg.Cmd.AppId = AppId;
dflet 0:bbe98578d4c0 1102 Msg.Cmd.ConfigLen = OptionLen;
dflet 0:bbe98578d4c0 1103 Msg.Cmd.ConfigOpt = Option;
dflet 0:bbe98578d4c0 1104
dflet 0:bbe98578d4c0 1105 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlNetAppSetCmdCtrl, &Msg, &CmdExt));
dflet 0:bbe98578d4c0 1106
dflet 0:bbe98578d4c0 1107 return (_i16)Msg.Rsp.status;
dflet 0:bbe98578d4c0 1108 }
dflet 0:bbe98578d4c0 1109 #endif
dflet 0:bbe98578d4c0 1110
dflet 0:bbe98578d4c0 1111 /*****************************************************************************/
dflet 0:bbe98578d4c0 1112 /* sl_NetAppSendTokenValue */
dflet 0:bbe98578d4c0 1113 /*****************************************************************************/
dflet 0:bbe98578d4c0 1114 typedef union
dflet 0:bbe98578d4c0 1115 {
dflet 0:bbe98578d4c0 1116 sl_NetAppHttpServerSendToken_t Cmd;
dflet 0:bbe98578d4c0 1117 _BasicResponse_t Rsp;
dflet 0:bbe98578d4c0 1118 }_SlNetAppMsgSendTokenValue_u;
dflet 0:bbe98578d4c0 1119
dflet 0:bbe98578d4c0 1120 const _SlCmdCtrl_t _SlNetAppSendTokenValueCmdCtrl =
dflet 0:bbe98578d4c0 1121 {
dflet 0:bbe98578d4c0 1122 SL_OPCODE_NETAPP_HTTPSENDTOKENVALUE,
dflet 0:bbe98578d4c0 1123 sizeof(sl_NetAppHttpServerSendToken_t),
dflet 0:bbe98578d4c0 1124 sizeof(_BasicResponse_t)
dflet 0:bbe98578d4c0 1125 };
dflet 0:bbe98578d4c0 1126
dflet 0:bbe98578d4c0 1127 _u16 sl_NetAppSendTokenValue(slHttpServerData_t * Token_value)
dflet 0:bbe98578d4c0 1128 {
dflet 0:bbe98578d4c0 1129 _SlNetAppMsgSendTokenValue_u Msg;
dflet 0:bbe98578d4c0 1130 _SlCmdExt_t CmdExt;
dflet 0:bbe98578d4c0 1131
dflet 0:bbe98578d4c0 1132 CmdExt.TxPayloadLen = (Token_value->value_len+3) & (~3);
dflet 0:bbe98578d4c0 1133 CmdExt.RxPayloadLen = 0;
dflet 0:bbe98578d4c0 1134 CmdExt.pTxPayload = (_u8 *) Token_value->token_value;
dflet 0:bbe98578d4c0 1135 CmdExt.pRxPayload = NULL;
dflet 0:bbe98578d4c0 1136
dflet 0:bbe98578d4c0 1137 Msg.Cmd.token_value_len = Token_value->value_len;
dflet 0:bbe98578d4c0 1138 Msg.Cmd.token_name_len = Token_value->name_len;
dflet 0:bbe98578d4c0 1139 sl_Memcpy(&Msg.Cmd.token_name[0], Token_value->token_name, Token_value->name_len);
dflet 0:bbe98578d4c0 1140
dflet 0:bbe98578d4c0 1141
dflet 0:bbe98578d4c0 1142 VERIFY_RET_OK(_SlDrvCmdSend((_SlCmdCtrl_t *)&_SlNetAppSendTokenValueCmdCtrl, &Msg, &CmdExt));
dflet 0:bbe98578d4c0 1143
dflet 0:bbe98578d4c0 1144 return Msg.Rsp.status;
dflet 0:bbe98578d4c0 1145 }
dflet 0:bbe98578d4c0 1146
dflet 0:bbe98578d4c0 1147 /*****************************************************************************/
dflet 0:bbe98578d4c0 1148 /* sl_NetAppGet */
dflet 0:bbe98578d4c0 1149 /*****************************************************************************/
dflet 0:bbe98578d4c0 1150 typedef union
dflet 0:bbe98578d4c0 1151 {
dflet 0:bbe98578d4c0 1152 _NetAppSetGet_t Cmd;
dflet 0:bbe98578d4c0 1153 _NetAppSetGet_t Rsp;
dflet 0:bbe98578d4c0 1154 }_SlNetAppMsgGet_u;
dflet 0:bbe98578d4c0 1155
dflet 0:bbe98578d4c0 1156 const _SlCmdCtrl_t _SlNetAppGetCmdCtrl =
dflet 0:bbe98578d4c0 1157 {
dflet 0:bbe98578d4c0 1158 SL_OPCODE_NETAPP_NETAPPGET,
dflet 0:bbe98578d4c0 1159 sizeof(_NetAppSetGet_t),
dflet 0:bbe98578d4c0 1160 sizeof(_NetAppSetGet_t)
dflet 0:bbe98578d4c0 1161 };
dflet 0:bbe98578d4c0 1162
dflet 0:bbe98578d4c0 1163 #if _SL_INCLUDE_FUNC(sl_NetAppGet)
dflet 0:bbe98578d4c0 1164 _i32 sl_NetAppGet(_u8 AppId, _u8 Option,_u8 *pOptionLen, _u8 *pOptionValue)
dflet 0:bbe98578d4c0 1165 {
dflet 0:bbe98578d4c0 1166 _SlNetAppMsgGet_u Msg;
dflet 0:bbe98578d4c0 1167 _SlCmdExt_t CmdExt;
dflet 0:bbe98578d4c0 1168
dflet 0:bbe98578d4c0 1169 if (*pOptionLen == 0)
dflet 0:bbe98578d4c0 1170 {
dflet 0:bbe98578d4c0 1171 return SL_EZEROLEN;
dflet 0:bbe98578d4c0 1172 }
dflet 0:bbe98578d4c0 1173 CmdExt.TxPayloadLen = 0;
dflet 0:bbe98578d4c0 1174 CmdExt.RxPayloadLen = *pOptionLen;
dflet 0:bbe98578d4c0 1175 CmdExt.pTxPayload = NULL;
dflet 0:bbe98578d4c0 1176 CmdExt.pRxPayload = (_u8 *)pOptionValue;
dflet 0:bbe98578d4c0 1177 CmdExt.ActualRxPayloadLen = 0;
dflet 0:bbe98578d4c0 1178
dflet 0:bbe98578d4c0 1179 Msg.Cmd.AppId = AppId;
dflet 0:bbe98578d4c0 1180 Msg.Cmd.ConfigOpt = Option;
dflet 0:bbe98578d4c0 1181 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlNetAppGetCmdCtrl, &Msg, &CmdExt));
dflet 0:bbe98578d4c0 1182
dflet 0:bbe98578d4c0 1183
dflet 0:bbe98578d4c0 1184 if (CmdExt.RxPayloadLen < CmdExt.ActualRxPayloadLen)
dflet 0:bbe98578d4c0 1185 {
dflet 0:bbe98578d4c0 1186 *pOptionLen = (_u8)CmdExt.RxPayloadLen;
dflet 0:bbe98578d4c0 1187 return SL_ESMALLBUF;
dflet 0:bbe98578d4c0 1188 }
dflet 0:bbe98578d4c0 1189 else
dflet 0:bbe98578d4c0 1190 {
dflet 0:bbe98578d4c0 1191 *pOptionLen = (_u8)CmdExt.ActualRxPayloadLen;
dflet 0:bbe98578d4c0 1192 }
dflet 0:bbe98578d4c0 1193
dflet 0:bbe98578d4c0 1194 return (_i16)Msg.Rsp.Status;
dflet 0:bbe98578d4c0 1195 }
dflet 0:bbe98578d4c0 1196 #endif
dflet 0:bbe98578d4c0 1197
dflet 0:bbe98578d4c0 1198
dflet 0:bbe98578d4c0 1199 /*****************************************************************************/
dflet 0:bbe98578d4c0 1200 /* _SlDrvNetAppEventHandler */
dflet 0:bbe98578d4c0 1201 /*****************************************************************************/
dflet 0:bbe98578d4c0 1202 void _SlDrvNetAppEventHandler(void *pArgs)
dflet 0:bbe98578d4c0 1203 {
dflet 0:bbe98578d4c0 1204 _SlResponseHeader_t *pHdr = (_SlResponseHeader_t *)pArgs;
dflet 0:bbe98578d4c0 1205 #ifdef sl_HttpServerCallback
dflet 0:bbe98578d4c0 1206 SlHttpServerEvent_t httpServerEvent;
dflet 0:bbe98578d4c0 1207 SlHttpServerResponse_t httpServerResponse;
dflet 0:bbe98578d4c0 1208 #endif
dflet 0:bbe98578d4c0 1209 switch(pHdr->GenHeader.Opcode)
dflet 0:bbe98578d4c0 1210 {
dflet 0:bbe98578d4c0 1211 case SL_OPCODE_NETAPP_DNSGETHOSTBYNAMEASYNCRESPONSE:
dflet 0:bbe98578d4c0 1212 case SL_OPCODE_NETAPP_DNSGETHOSTBYNAMEASYNCRESPONSE_V6:
dflet 0:bbe98578d4c0 1213 _sl_HandleAsync_DnsGetHostByName(pArgs);
dflet 0:bbe98578d4c0 1214 break;
dflet 0:bbe98578d4c0 1215 case SL_OPCODE_NETAPP_MDNSGETHOSTBYSERVICEASYNCRESPONSE:
dflet 0:bbe98578d4c0 1216 case SL_OPCODE_NETAPP_MDNSGETHOSTBYSERVICEASYNCRESPONSE_V6:
dflet 0:bbe98578d4c0 1217 _sl_HandleAsync_DnsGetHostByService(pArgs);
dflet 0:bbe98578d4c0 1218 break;
dflet 0:bbe98578d4c0 1219 case SL_OPCODE_NETAPP_PINGREPORTREQUESTRESPONSE:
dflet 0:bbe98578d4c0 1220 _sl_HandleAsync_PingResponse(pArgs);
dflet 0:bbe98578d4c0 1221 break;
dflet 0:bbe98578d4c0 1222 case SL_OPCODE_NETAPP_HTTPGETTOKENVALUE:
dflet 0:bbe98578d4c0 1223 {
dflet 0:bbe98578d4c0 1224 #ifdef sl_HttpServerCallback
dflet 0:bbe98578d4c0 1225 _u8 *pTokenName;
dflet 0:bbe98578d4c0 1226 slHttpServerData_t Token_value;
dflet 0:bbe98578d4c0 1227 sl_NetAppHttpServerGetToken_t *httpGetToken = (sl_NetAppHttpServerGetToken_t *)_SL_RESP_ARGS_START(pHdr);
dflet 0:bbe98578d4c0 1228 pTokenName = (_u8 *)((sl_NetAppHttpServerGetToken_t *)httpGetToken + 1);
dflet 0:bbe98578d4c0 1229
dflet 0:bbe98578d4c0 1230 httpServerResponse.Response = SL_NETAPP_HTTPSETTOKENVALUE;
dflet 0:bbe98578d4c0 1231 httpServerResponse.ResponseData.token_value.len = MAX_TOKEN_VALUE_LEN;
dflet 0:bbe98578d4c0 1232 httpServerResponse.ResponseData.token_value.data = (_u8 *)_SL_RESP_ARGS_START(pHdr) + MAX_TOKEN_NAME_LEN; //Reuse the async buffer for getting the token value response from the user
dflet 0:bbe98578d4c0 1233
dflet 0:bbe98578d4c0 1234 httpServerEvent.Event = SL_NETAPP_HTTPGETTOKENVALUE_EVENT;
dflet 0:bbe98578d4c0 1235 httpServerEvent.EventData.httpTokenName.len = httpGetToken->token_name_len;
dflet 0:bbe98578d4c0 1236 httpServerEvent.EventData.httpTokenName.data = pTokenName;
dflet 0:bbe98578d4c0 1237
dflet 0:bbe98578d4c0 1238 Token_value.token_name = pTokenName;
dflet 0:bbe98578d4c0 1239
dflet 0:bbe98578d4c0 1240 sl_HttpServerCallback (&httpServerEvent, &httpServerResponse);
dflet 0:bbe98578d4c0 1241
dflet 0:bbe98578d4c0 1242 Token_value.value_len = httpServerResponse.ResponseData.token_value.len;
dflet 0:bbe98578d4c0 1243 Token_value.name_len = httpServerEvent.EventData.httpTokenName.len;
dflet 0:bbe98578d4c0 1244
dflet 0:bbe98578d4c0 1245 Token_value.token_value = httpServerResponse.ResponseData.token_value.data;
dflet 0:bbe98578d4c0 1246
dflet 0:bbe98578d4c0 1247
dflet 0:bbe98578d4c0 1248 sl_NetAppSendTokenValue(&Token_value);
dflet 0:bbe98578d4c0 1249 #endif
dflet 0:bbe98578d4c0 1250 }
dflet 0:bbe98578d4c0 1251 break;
dflet 0:bbe98578d4c0 1252
dflet 0:bbe98578d4c0 1253 case SL_OPCODE_NETAPP_HTTPPOSTTOKENVALUE:
dflet 0:bbe98578d4c0 1254 {
dflet 0:bbe98578d4c0 1255 #ifdef sl_HttpServerCallback
dflet 0:bbe98578d4c0 1256 _u8 *pPostParams;
dflet 0:bbe98578d4c0 1257
dflet 0:bbe98578d4c0 1258 sl_NetAppHttpServerPostToken_t *httpPostTokenArgs = (sl_NetAppHttpServerPostToken_t *)_SL_RESP_ARGS_START(pHdr);
dflet 0:bbe98578d4c0 1259 pPostParams = (_u8 *)((sl_NetAppHttpServerPostToken_t *)httpPostTokenArgs + 1);
dflet 0:bbe98578d4c0 1260
dflet 0:bbe98578d4c0 1261 httpServerEvent.Event = SL_NETAPP_HTTPPOSTTOKENVALUE_EVENT;
dflet 0:bbe98578d4c0 1262
dflet 0:bbe98578d4c0 1263 httpServerEvent.EventData.httpPostData.action.len = httpPostTokenArgs->post_action_len;
dflet 0:bbe98578d4c0 1264 httpServerEvent.EventData.httpPostData.action.data = pPostParams;
dflet 0:bbe98578d4c0 1265 pPostParams+=httpPostTokenArgs->post_action_len;
dflet 0:bbe98578d4c0 1266
dflet 0:bbe98578d4c0 1267 httpServerEvent.EventData.httpPostData.token_name.len = httpPostTokenArgs->token_name_len;
dflet 0:bbe98578d4c0 1268 httpServerEvent.EventData.httpPostData.token_name.data = pPostParams;
dflet 0:bbe98578d4c0 1269 pPostParams+=httpPostTokenArgs->token_name_len;
dflet 0:bbe98578d4c0 1270
dflet 0:bbe98578d4c0 1271 httpServerEvent.EventData.httpPostData.token_value.len = httpPostTokenArgs->token_value_len;
dflet 0:bbe98578d4c0 1272 httpServerEvent.EventData.httpPostData.token_value.data = pPostParams;
dflet 0:bbe98578d4c0 1273
dflet 0:bbe98578d4c0 1274 httpServerResponse.Response = SL_NETAPP_RESPONSE_NONE;
dflet 0:bbe98578d4c0 1275
dflet 0:bbe98578d4c0 1276
dflet 0:bbe98578d4c0 1277 sl_HttpServerCallback (&httpServerEvent, &httpServerResponse);
dflet 0:bbe98578d4c0 1278 #endif
dflet 0:bbe98578d4c0 1279 }
dflet 0:bbe98578d4c0 1280 break;
dflet 0:bbe98578d4c0 1281 default:
dflet 0:bbe98578d4c0 1282 SL_ERROR_TRACE2(MSG_305, "ASSERT: _SlDrvNetAppEventHandler : invalid opcode = 0x%x = %1", pHdr->GenHeader.Opcode, pHdr->GenHeader.Opcode);
dflet 0:bbe98578d4c0 1283 VERIFY_PROTOCOL(0);
dflet 0:bbe98578d4c0 1284 }
dflet 0:bbe98578d4c0 1285 }
dflet 0:bbe98578d4c0 1286
dflet 0:bbe98578d4c0 1287 /*!
dflet 0:bbe98578d4c0 1288 \brief This function handles callback for the HTTP server events
dflet 0:bbe98578d4c0 1289
dflet 0:bbe98578d4c0 1290 \param[in] pHttpEvent - Contains the relevant event information
dflet 0:bbe98578d4c0 1291 \param[in] pHttpResponse - Should be filled by the user with the
dflet 0:bbe98578d4c0 1292 relevant response information
dflet 0:bbe98578d4c0 1293
dflet 0:bbe98578d4c0 1294 \return None
dflet 0:bbe98578d4c0 1295
dflet 0:bbe98578d4c0 1296 \note
dflet 0:bbe98578d4c0 1297
dflet 0:bbe98578d4c0 1298 \warning
dflet 0:bbe98578d4c0 1299 */
dflet 0:bbe98578d4c0 1300 void SimpleLinkHttpServerCallback(SlHttpServerEvent_t *pHttpEvent,
dflet 0:bbe98578d4c0 1301 SlHttpServerResponse_t *pHttpResponse)
dflet 0:bbe98578d4c0 1302 {
dflet 0:bbe98578d4c0 1303 /*
dflet 0:bbe98578d4c0 1304 * This application doesn't work with HTTP server - Hence these
dflet 0:bbe98578d4c0 1305 * events are not handled here
dflet 0:bbe98578d4c0 1306 */
dflet 0:bbe98578d4c0 1307 // CLI_Write((_u8 *)" [HTTP EVENT] Unexpected event \n\r");
dflet 0:bbe98578d4c0 1308 printf(" [HTTP EVENT] Unexpected event \n\r");
dflet 0:bbe98578d4c0 1309 }