20 #include <ti/drivers/net/wifi/simplelink.h>
21 #include <ti/drivers/net/wifi/source/protocol.h>
22 #include <ti/drivers/net/wifi/source/driver.h>
31 _SlReturnVal_t _SlNetAppHandleAsync_DnsGetHostByName(
void *pVoidBuf);
34 _SlReturnVal_t _SlNetAppHandleAsync_DnsGetHostByService(
void *pVoidBuf);
35 _SlReturnVal_t _SlNetAppHandleAsync_PingResponse(
void *pVoidBuf);
40 _i16 _SlNetAppMDNSRegisterUnregisterService(
const _i8* pServiceName,
41 const _u8 ServiceNameLen,
54 #define SL_NETAPP_SERVICE_SIZE_MASK (0x7)
55 #define SL_NETAPP_PING_GUARD_INTERVAL (20000)
57 static _u16 NetAppServiceSizeLUT[] =
73 }_SlNetAppStartStopMsg_u;
76 #if _SL_INCLUDE_FUNC(sl_NetAppStart)
81 SL_OPCODE_NETAPP_START_COMMAND,
88 _SlNetAppStartStopMsg_u Msg;
89 Msg.Cmd.AppId = AppBitMap;
93 VERIFY_API_ALLOWED(SL_OPCODE_SILO_NETAPP);
94 VERIFY_RET_OK(_SlDrvCmdOp((
_SlCmdCtrl_t *)&_SlNetAppStartCtrl, &Msg, NULL));
96 return Msg.Rsp.status;
103 #if _SL_INCLUDE_FUNC(sl_NetAppStop)
108 SL_OPCODE_NETAPP_STOP_COMMAND,
117 _SlNetAppStartStopMsg_u Msg;
121 VERIFY_API_ALLOWED(SL_OPCODE_SILO_NETAPP);
122 Msg.Cmd.AppId = AppBitMap;
123 VERIFY_RET_OK(_SlDrvCmdOp((
_SlCmdCtrl_t *)&_SlNetAppStopCtrl, &Msg, NULL));
125 return Msg.Rsp.status;
139 }NetappGetServiceListCMD_t;
143 NetappGetServiceListCMD_t Cmd;
145 }_SlNetappGetServiceListMsg_u;
148 #if _SL_INCLUDE_FUNC(sl_NetAppGetServiceList)
152 SL_OPCODE_NETAPP_NETAPP_MDNS_LOOKUP_SERVICE,
153 (_SlArgSize_t)
sizeof(NetappGetServiceListCMD_t),
158 const _u8 MaxServiceCount,
161 const _u32 BufferLength
166 _SlNetappGetServiceListMsg_u Msg;
168 _u16 ServiceSize = 0;
173 VERIFY_API_ALLOWED(SL_OPCODE_SILO_NETAPP);
181 ServiceSize = NetAppServiceSizeLUT[Flags & SL_NETAPP_SERVICE_SIZE_MASK];
182 BufferSize = MaxServiceCount * ServiceSize;
186 if(BufferLength < BufferSize)
188 return SL_ERROR_NET_APP_RX_BUFFER_LENGTH;
191 _SlDrvResetCmdExt(&CmdExt);
192 CmdExt.RxPayloadLen = (_i16)BufferSize;
193 CmdExt.pRxPayload = (_u8 *)pBuffer;
195 Msg.Cmd.IndexOffest = IndexOffest;
196 Msg.Cmd.MaxServiceCount = MaxServiceCount;
197 Msg.Cmd.Flags = Flags;
200 VERIFY_RET_OK(_SlDrvCmdOp((
_SlCmdCtrl_t *)&_SlGetServiceListeCtrl, &Msg, &CmdExt));
201 retVal = Msg.Rsp.status;
238 }NetappMdnsSetService_t;
242 NetappMdnsSetService_t Cmd;
244 }_SlNetappMdnsRegisterServiceMsg_u;
247 #if (_SL_INCLUDE_FUNC(sl_NetAppMDNSRegisterService) || _SL_INCLUDE_FUNC(sl_NetAppMDNSUnregisterService))
251 SL_OPCODE_NETAPP_MDNSREGISTERSERVICE,
252 (_SlArgSize_t)
sizeof(NetappMdnsSetService_t),
330 _i16 _SlNetAppMDNSRegisterUnregisterService(
const _i8* pServiceName,
331 const _u8 ServiceNameLen,
339 _SlNetappMdnsRegisterServiceMsg_u Msg;
341 _i8 ServiceNameAndTextBuffer[SL_NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH];
346 VERIFY_API_ALLOWED(SL_OPCODE_SILO_NETAPP);
366 Msg.Cmd.ServiceNameLen = ServiceNameLen;
367 Msg.Cmd.Options = Options;
369 Msg.Cmd.TextLen = TextLen;
377 if(TextLen + ServiceNameLen > (SL_NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH - 1 ))
382 _SlDrvMemZero(ServiceNameAndTextBuffer, (_u16)SL_NETAPP_MDNS_MAX_SERVICE_NAME_AND_TEXT_LENGTH);
386 sl_Memcpy(ServiceNameAndTextBuffer,
393 TextPtr = &ServiceNameAndTextBuffer[ServiceNameLen];
402 _SlDrvResetCmdExt(&CmdExt);
403 CmdExt.TxPayload1Len = (TextLen + ServiceNameLen);
404 CmdExt.pTxPayload1 = (_u8 *)ServiceNameAndTextBuffer;
407 VERIFY_RET_OK(_SlDrvCmdOp((
_SlCmdCtrl_t *)&_SlRegisterServiceCtrl, &Msg, &CmdExt));
409 return (_i16)Msg.Rsp.status;
416 #if _SL_INCLUDE_FUNC(sl_NetAppMDNSRegisterService)
419 const _u8 ServiceNameLen,
430 VERIFY_API_ALLOWED(SL_OPCODE_SILO_NETAPP);
452 Options |= SL_NETAPP_MDNS_OPTIONS_ADD_SERVICE_BIT;
454 return _SlNetAppMDNSRegisterUnregisterService( pServiceName,
470 #if _SL_INCLUDE_FUNC(sl_NetAppMDNSUnRegisterService)
473 const _u8 ServiceNameLen,_u32 Options)
480 VERIFY_API_ALLOWED(SL_OPCODE_SILO_NETAPP);
498 Options &= (~SL_NETAPP_MDNS_OPTIONS_ADD_SERVICE_BIT);
500 return _SlNetAppMDNSRegisterUnregisterService( pServiceName,
531 }_GetHostByServiceCommand_t;
557 }_GetHostByServiceIPv6AsyncResponse_t;
570 }_GetHostByServiceAsyncResponse_t;
576 _GetHostByServiceCommand_t Cmd;
578 }_SlGetHostByServiceMsg_u;
581 #if _SL_INCLUDE_FUNC(sl_NetAppDnsGetHostByService)
585 SL_OPCODE_NETAPP_MDNSGETHOSTBYSERVICE,
586 (_SlArgSize_t)
sizeof(_GetHostByServiceCommand_t),
593 const _u8 ServiceLen,
601 _SlGetHostByServiceMsg_u Msg;
603 _GetHostByServiceAsyncResponse_t AsyncRsp;
604 _u8 ObjIdx = MAX_CONCURRENT_ACTIONS;
608 VERIFY_API_ALLOWED(SL_OPCODE_SILO_NETAPP);
630 Msg.Cmd.ServiceLen = ServiceLen;
631 Msg.Cmd.AddrLen = Family;
636 _SlDrvResetCmdExt(&CmdExt);
637 CmdExt.TxPayload1Len = ServiceLen;
638 CmdExt.pTxPayload1 = (_u8 *)pServiceName;
644 AsyncRsp.out_pText = pText;
645 AsyncRsp.inout_TextLen = (_u16* )pTextLen;
646 AsyncRsp.out_pPort = pPort;
647 AsyncRsp.out_pAddr = (_u32 *)&pAddr[0];
649 ObjIdx = _SlDrvProtectAsyncRespSetting((_u8*)&AsyncRsp, GETHOSYBYSERVICE_ID, SL_MAX_SOCKETS);
651 if (MAX_CONCURRENT_ACTIONS == ObjIdx)
653 return SL_POOL_IS_EMPTY;
657 if (SL_AF_INET6 == Family)
659 g_pCB->ObjPool[ObjIdx].AdditionalData |= SL_NETAPP_FAMILY_MASK;
662 VERIFY_RET_OK(_SlDrvCmdOp((
_SlCmdCtrl_t *)&_SlGetHostByServiceCtrl, &Msg, &CmdExt));
667 if(SL_RET_CODE_OK == Msg.Rsp.status)
669 SL_DRV_SYNC_OBJ_WAIT_FOREVER(&g_pCB->ObjPool[ObjIdx].SyncObj);
674 Msg.Rsp.status = AsyncRsp.Status;
677 _SlDrvReleasePoolObj(ObjIdx);
678 return Msg.Rsp.status;
741 _SlReturnVal_t _SlNetAppHandleAsync_DnsGetHostByService(
void *pVoidBuf)
745 _GetHostByServiceAsyncResponse_t* Res= NULL;
746 _GetHostByServiceIPv6AsyncResponse_t *pMsgArgs = (_GetHostByServiceIPv6AsyncResponse_t *)_SL_RESP_ARGS_START(pVoidBuf);
748 VERIFY_SOCKET_CB(NULL != g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs);
750 Res = (_GetHostByServiceAsyncResponse_t*)g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs;
752 if(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].AdditionalData & SL_NETAPP_FAMILY_MASK)
754 Res->out_pAddr[1] = pMsgArgs->Address[1];
755 Res->out_pAddr[2] = pMsgArgs->Address[2];
756 Res->out_pAddr[3] = pMsgArgs->Address[3];
759 TextLen = pMsgArgs->TextLen;
762 Res->out_pAddr[0] = pMsgArgs->Address[0];
763 Res->out_pPort[0] = pMsgArgs->Port;
764 Res->Status = (_i16)pMsgArgs->Status;
766 UserTextLen = Res->inout_TextLen[0];
769 UserTextLen = (TextLen <= UserTextLen) ? TextLen : UserTextLen;
770 Res->inout_TextLen[0] = UserTextLen ;
779 if (g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].AdditionalData & SL_NETAPP_FAMILY_MASK)
781 sl_Memcpy(Res->out_pText ,
782 (_i8 *)(& pMsgArgs[1]) ,
787 sl_Memcpy(Res->out_pText ,
788 (_i8 *)(& pMsgArgs->Address[1]) ,
793 SL_DRV_SYNC_OBJ_SIGNAL(&g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj);
795 return SL_OS_RET_CODE_OK;
802 _SlReturnVal_t _SlNetAppHandleAsync_DnsGetHostByAddr(
void *pVoidBuf)
804 SL_TRACE0(DBG_MSG, MSG_303,
"STUB: _SlNetAppHandleAsync_DnsGetHostByAddr not implemented yet!");
805 return SL_OS_RET_CODE_OK;
816 }_GetHostByNameAsyncResponse_u;
822 }_SlGetHostByNameMsg_u;
825 #if _SL_INCLUDE_FUNC(sl_NetAppDnsGetHostByName)
828 SL_OPCODE_NETAPP_DNSGETHOSTBYNAME,
835 _SlGetHostByNameMsg_u Msg;
837 _GetHostByNameAsyncResponse_u AsyncRsp;
838 _u8 ObjIdx = MAX_CONCURRENT_ACTIONS;
842 VERIFY_API_ALLOWED(SL_OPCODE_SILO_NETAPP);
844 _SlDrvResetCmdExt(&ExtCtrl);
845 ExtCtrl.TxPayload1Len = NameLen;
846 ExtCtrl.pTxPayload1 = (_u8 *)pHostName;
848 Msg.Cmd.Len = NameLen;
849 Msg.Cmd.Family = Family;
852 ObjIdx = (_u8)_SlDrvWaitForPoolObj(GETHOSYBYNAME_ID,SL_MAX_SOCKETS);
853 if (MAX_CONCURRENT_ACTIONS == ObjIdx)
855 return SL_POOL_IS_EMPTY;
858 SL_DRV_PROTECTION_OBJ_LOCK_FOREVER();
860 g_pCB->ObjPool[ObjIdx].pRespArgs = (_u8 *)&AsyncRsp;
862 if (SL_AF_INET6 == Family)
864 g_pCB->ObjPool[ObjIdx].AdditionalData |= SL_NETAPP_FAMILY_MASK;
867 SL_DRV_PROTECTION_OBJ_UNLOCK();
869 VERIFY_RET_OK(_SlDrvCmdOp((
_SlCmdCtrl_t *)&_SlGetHostByNameCtrl, &Msg, &ExtCtrl));
871 if(SL_RET_CODE_OK == Msg.Rsp.status)
873 SL_DRV_SYNC_OBJ_WAIT_FOREVER(&g_pCB->ObjPool[ObjIdx].SyncObj);
875 Msg.Rsp.status = (_i16)AsyncRsp.IpV4.Status;
877 if(SL_OS_RET_CODE_OK == (_i16)Msg.Rsp.status)
879 sl_Memcpy((_i8 *)OutIpAddr,
880 (_i8 *)&AsyncRsp.IpV4.Ip0,
881 (SL_AF_INET == Family) ? SL_IPV4_ADDRESS_SIZE : SL_IPV6_ADDRESS_SIZE);
884 _SlDrvReleasePoolObj(ObjIdx);
885 return Msg.Rsp.status;
893 _SlReturnVal_t _SlNetAppHandleAsync_DnsGetHostByName(
void *pVoidBuf)
897 SL_DRV_PROTECTION_OBJ_LOCK_FOREVER();
899 VERIFY_SOCKET_CB(NULL != g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs);
902 if(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].AdditionalData & SL_NETAPP_FAMILY_MASK)
912 SL_DRV_SYNC_OBJ_SIGNAL(&g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj);
913 SL_DRV_PROTECTION_OBJ_UNLOCK();
914 return SL_OS_RET_CODE_OK;
921 pReport->PacketsSent = pResults->NumSendsPings;
922 pReport->PacketsReceived = pResults->NumSuccsessPings;
923 pReport->MinRoundTime = pResults->RttMin;
924 pReport->MaxRoundTime = pResults->RttMax;
925 pReport->AvgRoundTime = pResults->RttAvg;
926 pReport->TestTime = pResults->TestTime;
932 _SlReturnVal_t _SlNetAppHandleAsync_PingResponse(
void *pVoidBuf)
937 if(pPingCallBackFunc)
939 _SlNetAppCopyPingResultsToReport(pMsgArgs,&pingReport);
940 pPingCallBackFunc(&pingReport);
945 SL_DRV_PROTECTION_OBJ_LOCK_FOREVER();
947 VERIFY_SOCKET_CB(NULL != g_pCB->PingCB.PingAsync.pAsyncRsp);
949 if (NULL != g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs)
951 sl_Memcpy(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs, pMsgArgs,
sizeof(
SlPingReportResponse_t));
952 SL_DRV_SYNC_OBJ_SIGNAL(&g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj);
954 SL_DRV_PROTECTION_OBJ_UNLOCK();
957 return SL_OS_RET_CODE_OK;
973 CMD_PING_TEST_RUNNING = 0,
974 CMD_PING_TEST_STOPPED
978 #if _SL_INCLUDE_FUNC(sl_NetAppPing)
982 _SlPingStartMsg_u Msg;
984 _u8 ObjIdx = MAX_CONCURRENT_ACTIONS;
985 _u32 PingTimeout = 0;
989 VERIFY_API_ALLOWED(SL_OPCODE_SILO_NETAPP);
991 if(NULL != pPingParams)
994 if(SL_AF_INET == Family)
996 CmdCtrl.Opcode = SL_OPCODE_NETAPP_PINGSTART;
997 sl_Memcpy(&Msg.Cmd.Ip, &pPingParams->Ip, SL_IPV4_ADDRESS_SIZE);
1001 CmdCtrl.Opcode = SL_OPCODE_NETAPP_PINGSTART_V6;
1002 sl_Memcpy(&Msg.Cmd.Ip, &pPingParams->Ip, SL_IPV6_ADDRESS_SIZE);
1005 Msg.Cmd.PingIntervalTime = pPingParams->PingIntervalTime;
1006 Msg.Cmd.PingSize = pPingParams->PingSize;
1007 Msg.Cmd.PingRequestTimeout = pPingParams->PingRequestTimeout;
1008 Msg.Cmd.TotalNumberOfAttempts = pPingParams->TotalNumberOfAttempts;
1009 Msg.Cmd.Flags = pPingParams->Flags;
1013 PingTimeout = SL_NETAPP_PING_GUARD_INTERVAL + (pPingParams->PingIntervalTime * pPingParams->TotalNumberOfAttempts);
1015 if (Msg.Cmd.Ip != 0)
1023 if ((pPingCallback == NULL) && (pPingParams->Flags == 0) && (pPingParams->TotalNumberOfAttempts == 0))
1025 return SL_RET_CODE_NET_APP_PING_INVALID_PARAMS;
1030 pPingCallBackFunc = pPingCallback;
1035 ObjIdx = (_u8)_SlDrvWaitForPoolObj(PING_ID,SL_MAX_SOCKETS);
1036 if (MAX_CONCURRENT_ACTIONS == ObjIdx)
1038 return SL_POOL_IS_EMPTY;
1040 OSI_RET_OK_CHECK(sl_LockObjLock(&g_pCB->ProtectionLockObj, SL_OS_WAIT_FOREVER));
1042 g_pCB->ObjPool[ObjIdx].pRespArgs = (_u8 *)&PingRsp;
1043 pPingCallBackFunc = NULL;
1044 OSI_RET_OK_CHECK(sl_LockObjUnlock(&g_pCB->ProtectionLockObj));
1051 CmdCtrl.Opcode = SL_OPCODE_NETAPP_PINGSTART;
1055 VERIFY_RET_OK(_SlDrvCmdOp(&CmdCtrl, &Msg, NULL));
1056 if (Msg.Cmd.Ip != 0)
1058 if(CMD_PING_TEST_RUNNING == (_i16)Msg.Rsp.Status || CMD_PING_TEST_STOPPED == (_i16)Msg.Rsp.Status )
1061 if( NULL == pPingCallback )
1064 _SlDrvSyncObjWaitForever(&g_pCB->ObjPool[ObjIdx].SyncObj);
1066 SL_DRV_SYNC_OBJ_WAIT_TIMEOUT(&g_pCB->ObjPool[ObjIdx].SyncObj,
1068 SL_OPCODE_NETAPP_PINGREPORTREQUESTRESPONSE
1072 if( SL_OS_RET_CODE_OK == (_i16)PingRsp.Status )
1074 _SlNetAppCopyPingResultsToReport(&PingRsp,pReport);
1076 _SlDrvReleasePoolObj(ObjIdx);
1082 if( NULL == pPingCallback )
1084 _SlDrvReleasePoolObj(ObjIdx);
1089 return (_i16)Msg.Rsp.Status;
1103 #if _SL_INCLUDE_FUNC(sl_NetAppSet)
1107 SL_OPCODE_NETAPP_NETAPPSET,
1112 _i16
sl_NetAppSet(
const _u8 AppId ,
const _u8 Option,
const _u8 OptionLen,
const _u8 *pOptionValue)
1114 _SlNetAppMsgSet_u Msg;
1119 VERIFY_API_ALLOWED(SL_OPCODE_SILO_NETAPP);
1121 _SlDrvResetCmdExt(&CmdExt);
1122 CmdExt.TxPayload1Len = (OptionLen+3) & (~3);
1123 CmdExt.pTxPayload1 = (_u8 *)pOptionValue;
1126 Msg.Cmd.AppId = AppId;
1127 Msg.Cmd.ConfigLen = OptionLen;
1128 Msg.Cmd.ConfigOpt = Option;
1130 VERIFY_RET_OK(_SlDrvCmdOp((
_SlCmdCtrl_t *)&_SlNetAppSetCmdCtrl, &Msg, &CmdExt));
1132 return (_i16)Msg.Rsp.status;
1143 }_SlNetAppMsgSendTokenValue_u;
1148 SL_OPCODE_NETAPP_HTTPSENDTOKENVALUE,
1155 _SlNetAppMsgSendTokenValue_u Msg;
1158 _SlDrvMemZero(&CmdExt, (_u16)
sizeof(
_SlCmdExt_t));
1160 CmdExt.TxPayload1Len = (Token_value->ValueLen+3) & (~3);
1161 CmdExt.pTxPayload1 = (_u8 *) Token_value->pTokenValue;
1163 Msg.Cmd.TokenValueLen = Token_value->ValueLen;
1164 Msg.Cmd.TokenNameLen = Token_value->NameLen;
1165 sl_Memcpy(&Msg.Cmd.TokenName[0], Token_value->pTokenName, Token_value->NameLen);
1168 VERIFY_RET_OK(_SlDrvCmdSend_noLock((
_SlCmdCtrl_t *)&_SlNetAppSendTokenValueCmdCtrl, &Msg, &CmdExt));
1170 return Msg.Rsp.status;
1182 }_SlNetAppMsgSendResponse_u;
1187 SL_OPCODE_NETAPP_RESPONSE,
1194 _SlNetAppMsgSendResponse_u Msg;
1196 _SlReturnVal_t RetVal;
1199 _SlDrvMemZero(&CmdExt, (_u16)
sizeof(
_SlCmdExt_t));
1201 dataLen = NetAppResponse->ResponseData.MetadataLen + NetAppResponse->ResponseData.PayloadLen;
1203 if ((NetAppResponse->ResponseData.MetadataLen <= SL_NETAPP_REQUEST_MAX_METADATA_LEN) && (dataLen <= SL_NETAPP_REQUEST_MAX_DATA_LEN))
1208 CmdExt.pTxPayload1 = NetAppResponse->ResponseData.pMetadata;
1209 CmdExt.TxPayload1Len = NetAppResponse->ResponseData.MetadataLen;
1211 CmdExt.pTxPayload2 = NetAppResponse->ResponseData.pPayload;
1212 CmdExt.TxPayload2Len = NetAppResponse->ResponseData.PayloadLen;
1216 CmdExt.pTxPayload1 = NULL;
1217 CmdExt.pTxPayload2 = NULL;
1220 CmdExt.RxPayloadLen = 0;
1221 CmdExt.pRxPayload = NULL;
1223 Msg.Cmd.Handle = handle;
1224 Msg.Cmd.status = NetAppResponse->Status;
1225 Msg.Cmd.MetadataLen = NetAppResponse->ResponseData.MetadataLen;
1226 Msg.Cmd.PayloadLen = NetAppResponse->ResponseData.PayloadLen;
1227 Msg.Cmd.Flags = NetAppResponse->ResponseData.Flags;
1229 RetVal = _SlDrvCmdSend_noLock((
_SlCmdCtrl_t *)&_SlNetAppSendResponseCmdCtrl, &Msg, &CmdExt);
1235 RetVal = SL_ERROR_BSD_ENOMEM;
1249 }_SlNetAppReceiveMsg_u;
1251 #if _SL_INCLUDE_FUNC(sl_NetAppRecv)
1255 SL_OPCODE_NETAPP_RECEIVEREQUEST,
1260 _SlReturnVal_t
sl_NetAppRecv( _u16 Handle, _u16 *DataLen, _u8 *pData, _u32 *Flags)
1262 _SlNetAppReceiveMsg_u Msg;
1266 _SlReturnVal_t RetVal;
1267 _u8 ObjIdx = MAX_CONCURRENT_ACTIONS;
1271 if ((NULL == pData) || (0==DataLen))
1273 return SL_ERROR_BSD_EINVAL;
1277 _SlDrvResetCmdExt(&CmdExt);
1278 CmdExt.RxPayloadLen = *DataLen;
1279 CmdExt.pRxPayload = pData;
1282 Msg.Cmd.Handle = Handle;
1283 Msg.Cmd.MaxBufferLen = *DataLen;
1284 Msg.Cmd.Flags = *Flags;
1287 ObjIdx = (_u8)_SlDrvWaitForPoolObj(NETAPP_RECEIVE_ID, SL_MAX_SOCKETS);
1289 if (MAX_CONCURRENT_ACTIONS == ObjIdx)
1291 return SL_POOL_IS_EMPTY;
1295 AsyncRsp.Handle = Handle;
1297 AsyncRsp.PayloadLen = 0;
1299 _SlDrvProtectionObjLockWaitForever();
1301 pArgsData.pData = (_u8 *) &CmdExt;
1302 pArgsData.pArgs = (_u8 *) &AsyncRsp;
1304 g_pCB->ObjPool[ObjIdx].pRespArgs = (_u8 *)&pArgsData;
1306 _SlDrvProtectionObjUnLock();
1309 RetVal = _SlDrvCmdSend((
_SlCmdCtrl_t *)&_SlNetAppReceiveCmdCtrl, &Msg, &CmdExt);
1311 if(SL_OS_RET_CODE_OK == RetVal)
1314 _SlDrvSyncObjWaitForever(&g_pCB->ObjPool[ObjIdx].SyncObj);
1317 *DataLen = AsyncRsp.PayloadLen;
1318 *Flags = AsyncRsp.Flags;
1321 _SlDrvReleasePoolObj(ObjIdx);
1331 void _SlNetAppHandleAsync_NetAppReceive(
void *pVoidBuf)
1341 _SlDrvProtectionObjLockWaitForever();
1343 if (NULL != g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs)
1346 CmdExt = (
_SlCmdExt_t *) ((
_SlArgsData_t *)(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs))-> pData;
1348 if (pMsgArgs->Handle == AsyncRsp->Handle)
1350 if (pMsgArgs->PayloadLen <= CmdExt->RxPayloadLen)
1352 len = pMsgArgs->PayloadLen;
1356 len = CmdExt->RxPayloadLen;
1360 sl_Memcpy (CmdExt->pRxPayload, pData, len);
1363 AsyncRsp->PayloadLen = len;
1364 AsyncRsp->Flags = pMsgArgs->Flags;
1368 _SlDrvSyncObjSignal(&g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj);
1369 _SlDrvProtectionObjUnLock();
1383 }_SlNetAppMsgSend_u;
1388 SL_OPCODE_NETAPP_SEND,
1395 _SlNetAppMsgSend_u Msg;
1398 _SlDrvMemZero(&CmdExt, (_u16)
sizeof(
_SlCmdExt_t));
1400 if ((((Flags & SL_NETAPP_REQUEST_RESPONSE_FLAGS_METADATA) == SL_NETAPP_REQUEST_RESPONSE_FLAGS_METADATA) && (DataLen <= SL_NETAPP_REQUEST_MAX_METADATA_LEN)) ||
1401 (((Flags & SL_NETAPP_REQUEST_RESPONSE_FLAGS_METADATA) == 0) && (DataLen <= SL_NETAPP_REQUEST_MAX_DATA_LEN)))
1403 CmdExt.TxPayload1Len = (DataLen+3) & (~3);
1404 CmdExt.pTxPayload1 = (_u8 *) pData;
1406 Msg.Cmd.Handle = Handle;
1407 Msg.Cmd.DataLen = DataLen;
1408 Msg.Cmd.Flags = Flags;
1410 VERIFY_RET_OK(_SlDrvCmdOp((
_SlCmdCtrl_t *)&_SlNetAppSendCmdCtrl, &Msg, &CmdExt));
1414 Msg.Rsp.status = SL_ERROR_BSD_ENOMEM;
1417 return Msg.Rsp.status;
1431 #if _SL_INCLUDE_FUNC(sl_NetAppGet)
1434 SL_OPCODE_NETAPP_NETAPPGET,
1439 _i16
sl_NetAppGet(
const _u8 AppId,
const _u8 Option,_u8 *pOptionLen, _u8 *pOptionValue)
1441 _SlNetAppMsgGet_u Msg;
1446 VERIFY_API_ALLOWED(SL_OPCODE_SILO_NETAPP);
1448 if (*pOptionLen == 0)
1453 _SlDrvResetCmdExt(&CmdExt);
1454 CmdExt.RxPayloadLen = (_i16)(*pOptionLen);
1455 CmdExt.pRxPayload = (_u8 *)pOptionValue;
1457 Msg.Cmd.AppId = AppId;
1458 Msg.Cmd.ConfigOpt = Option;
1459 VERIFY_RET_OK(_SlDrvCmdOp((
_SlCmdCtrl_t *)&_SlNetAppGetCmdCtrl, &Msg, &CmdExt));
1462 if (CmdExt.RxPayloadLen < CmdExt.ActualRxPayloadLen)
1464 *pOptionLen = (_u8)CmdExt.RxPayloadLen;
1465 return SL_ESMALLBUF;
1469 *pOptionLen = (_u8)CmdExt.ActualRxPayloadLen;
1472 return (_i16)Msg.Rsp.Status;
1483 _SlReturnVal_t _SlNetAppEventHandler(
void* pArgs)
1486 #if defined(slcb_NetAppHttpServerHdlr) || defined(EXT_LIB_REGISTERED_HTTP_SERVER_EVENTS)
1490 switch(pHdr->GenHeader.Opcode)
1492 case SL_OPCODE_NETAPP_DNSGETHOSTBYNAMEASYNCRESPONSE:
1493 case SL_OPCODE_NETAPP_DNSGETHOSTBYNAMEASYNCRESPONSE_V6:
1494 _SlNetAppHandleAsync_DnsGetHostByName(pArgs);
1497 case SL_OPCODE_NETAPP_MDNSGETHOSTBYSERVICEASYNCRESPONSE:
1498 case SL_OPCODE_NETAPP_MDNSGETHOSTBYSERVICEASYNCRESPONSE_V6:
1499 _SlNetAppHandleAsync_DnsGetHostByService(pArgs);
1501 case SL_OPCODE_NETAPP_PINGREPORTREQUESTRESPONSE:
1502 _SlNetAppHandleAsync_PingResponse(pArgs);
1506 case SL_OPCODE_NETAPP_HTTPGETTOKENVALUE:
1508 #if defined(slcb_NetAppHttpServerHdlr) || defined(EXT_LIB_REGISTERED_HTTP_SERVER_EVENTS)
1514 httpServerResponse.Response = SL_NETAPP_HTTPSETTOKENVALUE;
1515 httpServerResponse.ResponseData.TokenValue.Len = SL_NETAPP_MAX_TOKEN_VALUE_LEN;
1518 httpServerResponse.ResponseData.TokenValue.pData = (_u8 *)_SL_RESP_ARGS_START(pHdr) + SL_NETAPP_MAX_TOKEN_NAME_LEN;
1520 httpServerEvent.Event = SL_NETAPP_EVENT_HTTP_TOKEN_GET;
1521 httpServerEvent.EventData.HttpTokenName.Len = httpGetToken->TokenNameLen;
1522 httpServerEvent.EventData.HttpTokenName.pData = pTokenName;
1524 Token_value.pTokenName = pTokenName;
1526 _SlDrvDispatchHttpServerEvents (&httpServerEvent, &httpServerResponse);
1528 Token_value.ValueLen = httpServerResponse.ResponseData.TokenValue.Len;
1529 Token_value.NameLen = httpServerEvent.EventData.HttpTokenName.Len;
1530 Token_value.pTokenValue = httpServerResponse.ResponseData.TokenValue.pData;
1532 _SlNetAppSendTokenValue(&Token_value);
1540 Token_value.pTokenName = pTokenName;
1541 Token_value.ValueLen = 0;
1542 Token_value.NameLen = httpGetToken->TokenNameLen;
1543 Token_value.pTokenValue = NULL;
1545 _SlNetAppSendTokenValue(&Token_value);
1550 case SL_OPCODE_NETAPP_HTTPPOSTTOKENVALUE:
1552 #if defined(slcb_NetAppHttpServerHdlr) || defined(EXT_LIB_REGISTERED_HTTP_SERVER_EVENTS)
1558 httpServerEvent.Event = SL_NETAPP_EVENT_HTTP_TOKEN_POST;
1560 httpServerEvent.EventData.HttpPostData.Action.Len = httpPostTokenArgs->PostActionLen;
1561 httpServerEvent.EventData.HttpPostData.Action.pData = pPostParams;
1562 pPostParams+=httpPostTokenArgs->PostActionLen;
1564 httpServerEvent.EventData.HttpPostData.TokenName.Len = httpPostTokenArgs->TokenNameLen;
1565 httpServerEvent.EventData.HttpPostData.TokenName.pData = pPostParams;
1566 pPostParams+=httpPostTokenArgs->TokenNameLen;
1568 httpServerEvent.EventData.HttpPostData.TokenValue.Len = httpPostTokenArgs->TokenValueLen;
1569 httpServerEvent.EventData.HttpPostData.TokenValue.pData = pPostParams;
1571 httpServerResponse.Response = SL_NETAPP_HTTPRESPONSE_NONE;
1573 _SlDrvDispatchHttpServerEvents (&httpServerEvent, &httpServerResponse);
1578 case SL_OPCODE_NETAPP_REQUEST:
1581 #if defined(slcb_NetAppRequestHdlr) || defined(EXT_LIB_REGISTERED_NETAPP_REQUEST_EVENTS)
1591 NetAppRequest.AppId = protocol_NetAppRequest->AppId;
1592 NetAppRequest.Type = protocol_NetAppRequest->RequestType;
1593 NetAppRequest.Handle = protocol_NetAppRequest->Handle;
1594 NetAppRequest.requestData.Flags = protocol_NetAppRequest->Flags;
1598 NetAppRequest.requestData.pMetadata = pData;
1599 NetAppRequest.requestData.MetadataLen = protocol_NetAppRequest->MetadataLen;
1602 pData+=protocol_NetAppRequest->MetadataLen;
1603 NetAppRequest.requestData.pPayload = pData;
1604 NetAppRequest.requestData.PayloadLen = protocol_NetAppRequest->PayloadLen;
1608 sl_Memset(&NetAppResponse, 0,
sizeof (NetAppResponse));
1609 NetAppResponse.Status = SL_NETAPP_HTTP_RESPONSE_404_NOT_FOUND;
1613 _SlDrvDispatchNetAppRequestEvents (&NetAppRequest, &NetAppResponse);
1616 status = _SlNetAppSendResponse(protocol_NetAppRequest->Handle, &NetAppResponse);
1618 #if (defined(SL_RUNTIME_EVENT_REGISTERATION) || defined(slcb_NetAppRequestMemFree))
1619 if(1 == _SlIsEventRegistered(SL_EVENT_HDL_MEM_FREE))
1621 if ((NetAppResponse.ResponseData.MetadataLen > 0) && (NetAppResponse.ResponseData.pMetadata != NULL))
1624 _SlDrvHandleNetAppRequestMemFreeEvents (NetAppResponse.ResponseData.pMetadata);
1628 if ((NetAppResponse.ResponseData.PayloadLen > 0) && (NetAppResponse.ResponseData.pPayload != NULL))
1631 _SlDrvHandleNetAppRequestMemFreeEvents (NetAppResponse.ResponseData.pPayload);
1640 NetAppResponse.Status = SL_NETAPP_HTTP_RESPONSE_404_NOT_FOUND;
1641 NetAppResponse.ResponseData.pMetadata = NULL;
1642 NetAppResponse.ResponseData.MetadataLen = 0;
1643 NetAppResponse.ResponseData.pPayload = NULL;
1644 NetAppResponse.ResponseData.PayloadLen = 0;
1645 NetAppResponse.ResponseData.Flags = 0;
1648 _SlNetAppSendResponse(protocol_NetAppRequest->Handle, &NetAppResponse);
1659 NetAppResponse.Status = SL_NETAPP_HTTP_RESPONSE_404_NOT_FOUND;
1660 NetAppResponse.ResponseData.pMetadata = NULL;
1661 NetAppResponse.ResponseData.MetadataLen = 0;
1662 NetAppResponse.ResponseData.pPayload = NULL;
1663 NetAppResponse.ResponseData.PayloadLen = 0;
1664 NetAppResponse.ResponseData.Flags = 0;
1667 _SlNetAppSendResponse(protocol_NetAppRequest->Handle, &NetAppResponse);
1676 SL_ERROR_TRACE2(MSG_305,
"ASSERT: _SlNetAppEventHandler : invalid opcode = 0x%x = %1", pHdr->GenHeader.Opcode, pHdr->GenHeader.Opcode);
1680 return SL_OS_RET_CODE_OK;
_i16 sl_NetAppSet(const _u8 AppId, const _u8 Option, const _u8 OptionLen, const _u8 *pOptionValue)
Setting network application configurations.
_i16 sl_NetAppMDNSUnRegisterService(const _i8 *pServiceName, const _u8 ServiceNameLen, _u32 Options)
Unregister mDNS service This function deletes the mDNS service from the mDNS package and the database...
_SlReturnVal_t sl_NetAppRecv(_u16 Handle, _u16 *DataLen, _u8 *pData, _u32 *Flags)
Function for retrieving data from the network processor following a Netapp request event (i...
_i16 sl_NetAppDnsGetHostByService(_i8 *pServiceName, const _u8 ServiceLen, const _u8 Family, _u32 pAddr[], _u32 *pPort, _u16 *pTextLen, _i8 *pText)
Return service attributes like IP address, port and text according to service name The user sets a s...
_i16 sl_NetAppDnsGetHostByName(_i8 *pHostName, const _u16 NameLen, _u32 *OutIpAddr, const _u8 Family)
Get host IP by name Obtain the IP Address of machine on network, by machine name. ...
_i16 sl_NetAppPing(const SlNetAppPingCommand_t *pPingParams, const _u8 Family, SlNetAppPingReport_t *pReport, const P_SL_DEV_PING_CALLBACK pPingCallback)
send ICMP ECHO_REQUEST to network hosts
_i16 sl_NetAppStart(const _u32 AppBitMap)
Starts a network application.
_i16 sl_NetAppMDNSRegisterService(const _i8 *pServiceName, const _u8 ServiceNameLen, const _i8 *pText, const _u8 TextLen, const _u16 Port, const _u32 TTL, _u32 Options)
Register a new mDNS service This function registers a new mDNS service to the mDNS package and the D...
_i16 sl_NetAppGetServiceList(const _u8 IndexOffest, const _u8 MaxServiceCount, const _u8 Flags, _i8 *pBuffer, const _u32 BufferLength)
Get service list Insert into out pBuffer a list of peer's services that are in the NWP without issui...
_i16 sl_NetAppStop(const _u32 AppBitMap)
Stops a network application.
_u16 sl_NetAppSend(_u16 Handle, _u16 DataLen, _u8 *pData, _u32 Flags)
Function for sending Netapp response or data following a Netapp request event (i.e. HTTP GET request)
_i16 sl_NetAppGet(const _u8 AppId, const _u8 Option, _u8 *pOptionLen, _u8 *pOptionValue)
Getting network applications configurations.