blob: de8037de49366eb0beecf1a18c36d396350cf906 [file] [edit]
/****************************************************************************
*
* Copyright (c) 2016 Wi-Fi Alliance
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
* USE OR PERFORMANCE OF THIS SOFTWARE.
*
*****************************************************************************/
/*
* File: wfa_ca_resp.c
* All functions are designated to handle the command responses from
* a DUT and inform TM the command status.
* They will be called by Control Agent.
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include "wfa_debug.h"
#include "wfa_types.h"
#include "wfa_main.h"
#include "wfa_tlv.h"
#include "wfa_tg.h"
#include "wfa_miscs.h"
#include "wfa_ca.h"
#include "wfa_rsp.h"
#include "wfa_sock.h"
#include "wfa_ca_resp.h"
#include "wfa_cmds.h"
extern unsigned short wfa_defined_debug;
char gRespStr[WFA_BUFF_1K];
dutCommandRespFuncPtr wfaCmdRespProcFuncTbl[WFA_STA_RESPONSE_END + 1] = {
caCmdNotDefinedYet,
wfaGetVersionResp, /* WFA_GET_VERSION_RESP_TLV - WFA_STA_COMMANDS_END (1) */
wfaTrafficAgentPingStartResp, /* WFA_TRAFFIC_SEND_PING_RESP_TLV - WFA_STA_COMMANDS_END (2) */
wfaTrafficAgentPingStopResp, /* WFA_TRAFFIC_STOP_PING_RESP_TLV - WFA_STA_COMMANDS_END (3) */
wfaTrafficAgentConfigResp, /* WFA_TRAFFIC_AGENT_CONFIG_RESP_TLV - WFA_STA_COMMANDS_END (4) */
wfaTrafficAgentSendResp, /* WFA_TRAFFIC_AGENT_SEND_RESP_TLV - WFA_STA_COMMANDS_END (5) */
wfaStaGenericResp, /* WFA_TRAFFIC_AGENT_RECV_START_RESP_TLV - WFA_STA_COMMANDS_END (6) */
wfaTrafficAgentRecvStopResp, /* WFA_TRAFFIC_AGENT_RECV_STOP_RESP_TLV - WFA_STA_COMMANDS_END (7) */
wfaStaGenericResp, /* WFA_TRAFFIC_AGENT_RESET_RESP_TLV - WFA_STA_COMMANDS_END (8) */
caCmdNotDefinedYet, /* WFA_TRAFFIC_AGENT_STATUS_RESP_TLV - WFA_STA_COMMANDS_END (9) */
wfaStaGetIpConfigResp, /* WFA_STA_GET_IP_CONFIG_RESP_TLV - WFA_STA_COMMANDS_END (10) */
wfaStaGenericResp, /* WFA_STA_SET_IP_CONFIG_RESP_TLV - WFA_STA_COMMANDS_END (11) */
wfaStaGetMacAddressResp, /* WFA_STA_GET_MAC_ADDRESS_RESP_TLV - WFA_STA_COMMANDS_END (12) */
wfaStaGenericResp, /* WFA_STA_SET_MAC_ADDRESS_RESP_TLV - WFA_STA_COMMANDS_END (13) */
wfaStaIsConnectedResp, /* WFA_STA_IS_CONNECTED_RESP_TLV - WFA_STA_COMMANDS_END (14) */
wfaStaVerifyIpConnectResp, /* WFA_STA_VERIFY_IP_CONNECTION_RESP_TLV - WFA_STA_COMMANDS_END (15) */
wfaStaGetBSSIDResp, /* WFA_STA_GET_BSSID_RESP_TLV - WFA_STA_COMMANDS_END (16) */
wfaStaGetStatsResp, /* WFA_STA_GET_STATS_RESP_TLV - WFA_STA_COMMANDS_END (17) */
wfaStaSetEncryptionResp, /* WFA_STA_SET_ENCRYPTION_RESP_TLV - WFA_STA_COMMANDS_END (18) */
wfaStaGenericResp, /* WFA_STA_SET_PSK_RESP_TLV - WFA_STA_COMMANDS_END (19) */
wfaStaGenericResp, /* WFA_STA_SET_EAPTLS_RESP_TLV - WFA_STA_COMMANDS_END (20) */
wfaStaGenericResp, /* WFA_STA_SET_UAPSD_RESP_TLV - WFA_STA_COMMANDS_END (21) */
wfaStaGenericResp, /* WFA_STA_ASSOCIATE_RESP_TLV - WFA_STA_COMMANDS_END (22) */
wfaStaGenericResp, /* WFA_STA_SET_EAPTTLS_RESP_TLV - WFA_STA_COMMANDS_END (23) */
wfaStaGenericResp, /* WFA_STA_SET_EAPSIM_RESP_TLV - WFA_STA_COMMANDS_END (24) */
wfaStaGenericResp, /* WFA_STA_SET_PEAP_RESP_TLV - WFA_STA_COMMANDS_END (25) */
wfaStaGenericResp, /* WFA_STA_SET_IBSS_RESP_TLV - WFA_STA_COMMANDS_END (26) */
wfaStaGetInfoResp, /* WFA_STA_GET_INFO_RESP_TLV - WFA_STA_COMMANDS_END (27) */
wfaDeviceGetInfoResp, /* WFA_DEVICE_GET_INFO_RESP_TLV - WFA_STA_COMMANDS_END (28) */
wfaDeviceListIFResp, /* WFA_DEVICE_LIST_IF_RESP_TLV - WFA_STA_COMMANDS_END (29) */
wfaStaGenericResp, /* WFA_STA_DEBUG_SET_RESP_TLV - WFA_STA_COMMANDS_END (30) */
wfaStaGenericResp, /* WFA_STA_SET_MODE_RESP_TLV - WFA_STA_COMMANDS_END (31) */
wfaStaUploadResp, /* WFA_STA_UPLOAD_RESP_TLV - WFA_STA_COMMANDS_END (32) */
wfaStaGenericResp, /* WFA_STA_SET_WMM_RESP_TLV - WFA_STA_COMMANDS_END (33) */
wfaStaGenericResp, /* WFA_STA_REASSOCIATE_RESP_TLV - WFA_STA_COMMANDS_END (34) */
wfaStaGenericResp, /* WFA_STA_SET_PWRSAVE_RESP_TLV - WFA_STA_CMMANDS_END (35) */
wfaStaGenericResp, /* WFA_STA_SEND_NEIGREQ_RESP_TLV - WFA_STA_COMMANDS_END (36) */
wfaStaGenericResp, /* (37) */
wfaStaGenericResp, /* (38)*/
wfaStaGenericResp, /* (39)*/
wfaStaGenericResp, /* (40)*/
wfaStaGenericResp, /* (41)*/
wfaStaGenericResp, /* (42)*/
wfaStaGenericResp, /* (43)*/
wfaStaGenericResp, /* (44)*/
wfaStaGenericResp, /* (45)*/
wfaStaGenericResp, /* (46)*/
wfaStaGenericResp, /* (47)*/
wfaStaGenericResp, /* (48)*/
wfaStaGenericResp, /* (49)*/
/* P2P */
wfaStaGetP2pDevAddressResp, /* (WFA_STA_DISCONNECT_RESP_TLV - 524 */
wfaStaGenericResp, /* (WFA_STA_GET_P2P_DEV_ADDRESS_RESP_TLV - */
wfaStaGenericResp, /* (WFA_STA_SET_P2P_RESP_TLV - */
wfaStaStartAutoGO, /* (WFA_STA_P2P_CONNECT_RESP_TLV - */
wfaStaP2pStartGrpFormResp, /* (WFA_STA_P2P_START_AUTO_GO_RESP_TLV - */
wfaStaGenericResp, /* (WFA_STA_P2P_START_GRP_FORM_RESP_TLV - */
wfaStaGenericResp, /* (WFA_STA_P2P_DISSOLVE_RESP_TLV - */
wfaStaGenericResp, /* (WFA_STA_SEND_P2P_INV_REQ_RESP_TLV - */
wfaStaGenericResp, /* (WFA_STA_ACCEPT_P2P_REQ_RESP_TLV - */
wfaStaGenericResp, /* (WFA_STA_SEND_P2P_PROV_DIS_REQ_RESP_TLV - */
wfaStaWpsReadPinResp, /* (WFA_STA_SET_WPS_PBC_RESP_TLV - */
wfaStaGenericResp, /* (WFA_STA_WPS_READ_PIN_RESP_TLV - */
wfaStaGetPskResp, /* (WFA_STA_WPS_ENTER_PIN_RESP_TLV - */
wfaStaGenericResp, /* (WFA_STA_GET_PSK_RESP_TLV - */
wfaStaWpsReadLabelResp, /* (WFA_STA_P2P_RESET_RESP_TLV - */
wfaStaGetP2pIpConfigResp, /* (WFA_STA_WPS_READ_LABEL_RESP_TLV - */
wfaStaGenericResp, /* (WFA_STA_GET_P2P_IP_CONFIG_RESP_TLV - */
wfaStaGenericResp, /* (WFA_STA_SEND_SERVICE_DISCOVERY_REQ_RESP_TLV - */
wfaStaGenericResp, /* (WFA_STA_SEND_P2P_PRESENCE_REQ_RESP_TLV - */
wfaStaGenericResp, /* (WFA_STA_SET_SLEEP_REQ_RESP_TLV - */
wfaStaGenericResp, /* (WFA_STA_DISCONNECT_RESP_TLV */
wfaStaGenericResp, /* (WFA_STA_ADD_ARP_TABLE_ENTRY_RESP_TLV - 545 */
/* P2P */
wfaStaGenericResp, wfaStaGenericResp, wfaStaStartWfdConnectionResp,
wfaStaCliCmdResp, /* 75 */
wfaStaConnectGoStartWfdResp, /* 76 */
wfaStaGenericResp, /* 77 */
wfaStaGenericResp, /* 78 */
wfaStaGetParameterResp, /* 79 */
wfaStaNfcActionResp, /* 80*/
wfaStaInvokeCommandResp, /* 81*/
wfaStaManageServiceResp, /* 82*/
wfaStaGetEventsResp, /* 83*/
wfaStaGetEventDataResp, /* 84*/
wfaStaGenericResp, /* 85 */
wfaStaExecActionResp, /* 86 */
};
extern int gSock, gCaSockfd;
int caCmdNotDefinedYet(BYTE* cmdBuf) {
int done;
WFA_UNUSED(cmdBuf);
sprintf(gRespStr, "status,ERROR,Command Not Defined\r\n");
/* make sure if getting send error, will close the socket */
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
done = 0;
return done;
}
int wfaStaVerifyIpConnectResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* verifyResp = (dutCmdResponse_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaStaVerifyIpConnectResp\n");
switch (verifyResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaVerifyConnect running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,connected,%i\r\n",
verifyResp->cmdru.connected);
DPRINT_INFO(WFA_OUT, "%s", gRespStr);
break;
case STATUS_ERROR:
sprintf(gRespStr, "status,ERROR\r\n");
DPRINT_INFO(WFA_OUT, "%s", gRespStr);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaIsConnectedResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* connectedResp = (dutCmdResponse_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaStaIsConnectedResp ...\n");
switch (connectedResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaIsConnectd running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,connected,%i\r\n",
connectedResp->cmdru.connected);
break;
case STATUS_ERROR:
sprintf(gRespStr, "status,ERROR\r\n");
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaGetIpConfigResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* getIpConfigResp = (dutCmdResponse_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaStaGetIpConfigResp ...\n");
switch (getIpConfigResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaGetIpConfig running ...\n");
done = 1;
break;
case STATUS_ERROR:
sprintf(gRespStr, "status,ERROR\r\n");
break;
case STATUS_COMPLETE:
if (strlen(getIpConfigResp->cmdru.getIfconfig.dns[0]) == 0)
*getIpConfigResp->cmdru.getIfconfig.dns[0] = '\0';
if (strlen(getIpConfigResp->cmdru.getIfconfig.dns[1]) == 0)
*getIpConfigResp->cmdru.getIfconfig.dns[1] = '\0';
sprintf(gRespStr,
"status,COMPLETE,dhcp,%i,ip,%s,mask,%s,primary-dns,%s,secondary-"
"dns,%s\r\n",
getIpConfigResp->cmdru.getIfconfig.isDhcp,
getIpConfigResp->cmdru.getIfconfig.ipaddr,
getIpConfigResp->cmdru.getIfconfig.mask,
getIpConfigResp->cmdru.getIfconfig.dns[0],
getIpConfigResp->cmdru.getIfconfig.dns[1]);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaGetVersionResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* getverResp = (dutCmdResponse_t*)(cmdBuf + 4);
switch (getverResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaGetVersion running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,version,%s\r\n",
getverResp->cmdru.version);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaGetInfoResp(BYTE* cmdBuf) {
dutCmdResponse_t* infoResp = (dutCmdResponse_t*)(cmdBuf + 4);
int done = 0;
switch (infoResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaGetInfo running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,%s\r\n", infoResp->cmdru.info);
DPRINT_INFO(WFA_OUT, "info: %s\n", infoResp->cmdru.info);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaTrafficAgentConfigResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* agtConfigResp = (dutCmdResponse_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaTrafficAgentConfigResp ...\n");
switch (agtConfigResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaTrafficAgentConfig running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,streamID,%i\r\n",
agtConfigResp->streamId);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaTrafficAgentSendResp(BYTE* cmdBuf) {
int done = 1, i;
char copyBuf[64];
int errorStatus = 0;
wfaTLV* ptlv = (wfaTLV*)cmdBuf;
int len = ptlv->len;
int numStreams;
dutCmdResponse_t* statResp = (dutCmdResponse_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaTrafficAgentSendResp ...\n");
numStreams = (len / sizeof(dutCmdResponse_t));
printf("total %i streams\n", numStreams);
for (i = 0; i < numStreams; i++) {
if (statResp->status != STATUS_COMPLETE) {
errorStatus = 1;
}
}
if (errorStatus) {
sprintf(gRespStr, "status,ERROR");
} else {
sprintf(gRespStr, "status,COMPLETE,streamID,");
// Available size for gRespStr. Note that it reserves 2 bytes for
// ending "\r\n".
const size_t strSize = sizeof(gRespStr) - 3;
for (i = 0; i < numStreams; i++) {
sprintf(copyBuf, " %i", statResp[i].streamId);
strncat(gRespStr, copyBuf, strSize - strlen(gRespStr));
}
printf("streamids %s\n", gRespStr);
strncat(gRespStr, ",txFrames,", strSize - strlen(gRespStr));
for (i = 0; i < numStreams; i++) {
sprintf(copyBuf, "%i ", statResp[i].cmdru.stats.txFrames);
strncat(gRespStr, copyBuf, strSize - strlen(gRespStr));
}
strncat(gRespStr, ",rxFrames,", strSize - strlen(gRespStr));
for (i = 0; i < numStreams; i++) {
sprintf(copyBuf, "%i ", statResp[i].cmdru.stats.rxFrames);
strncat(gRespStr, copyBuf, strSize - strlen(gRespStr));
}
strncat(gRespStr, ",txPayloadBytes,", strSize - strlen(gRespStr));
for (i = 0; i < numStreams; i++) {
sprintf(copyBuf, "%llu ", statResp[i].cmdru.stats.txPayloadBytes);
strncat(gRespStr, copyBuf, strSize - strlen(gRespStr));
}
strncat(gRespStr, ",rxPayloadBytes,", strSize - strlen(gRespStr));
for (i = 0; i < numStreams; i++) {
sprintf(copyBuf, " %llu ", statResp[i].cmdru.stats.rxPayloadBytes);
strncat(gRespStr, copyBuf, strSize - strlen(gRespStr));
}
strncat(gRespStr, ",outOfSequenceFrames,", strSize - strlen(gRespStr));
for (i = 0; i < numStreams; i++) {
sprintf(copyBuf, "%i ", statResp[i].cmdru.stats.outOfSequenceFrames);
strncat(gRespStr, copyBuf, strSize - strlen(gRespStr));
}
printf("jitter %lu\n", statResp[i].cmdru.stats.jitter);
strncat(gRespStr, "\r\n", sizeof(gRespStr) - strlen(gRespStr) - 1);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaTrafficAgentRecvStopResp(BYTE* cmdBuf) {
int done = 1;
int i = 0;
int errorStatus = 0;
char copyBuf[64];
BYTE* dutRsp = cmdBuf + 4;
BYTE* startRsp = dutRsp;
wfaTLV* ptlv = (wfaTLV*)cmdBuf;
int len = ptlv->len;
int numStreams = len / sizeof(dutCmdResponse_t);
DPRINT_INFO(WFA_OUT, "Entering wfaTrafficAgentRecvStopResp ...\n");
dutCmdResponse_t statResp[WFA_MAX_TRAFFIC_STREAMS];
for (i = 0; i < numStreams; i++) {
dutRsp = startRsp + i * sizeof(dutCmdResponse_t);
memcpy(&statResp[i], dutRsp, sizeof(dutCmdResponse_t));
}
for (i = 0; i < numStreams; i++) {
if (statResp[i].status != STATUS_COMPLETE)
errorStatus = 1;
}
if (errorStatus) {
sprintf(gRespStr, "status,ERROR");
} else {
sprintf(gRespStr, "status,COMPLETE,streamID,");
// Available size for gRespStr. Note that it reserves 2 bytes for
// ending "\r\n".
const size_t strSize = sizeof(gRespStr) - 3;
for (i = 0; i < numStreams; i++) {
sprintf(copyBuf, " %d", statResp[i].streamId);
strncat(gRespStr, copyBuf, strSize - strlen(gRespStr));
}
strncat(gRespStr, ",txFrames,", strSize - strlen(gRespStr));
for (i = 0; i < numStreams; i++) {
sprintf(copyBuf, " %u", statResp[i].cmdru.stats.txFrames);
strncat(gRespStr, copyBuf, strSize - strlen(gRespStr));
}
strncat(gRespStr, ",rxFrames,", strSize - strlen(gRespStr));
for (i = 0; i < numStreams; i++) {
sprintf(copyBuf, " %u", statResp[i].cmdru.stats.rxFrames);
strncat(gRespStr, copyBuf, strSize - strlen(gRespStr));
}
strncat(gRespStr, ",txPayloadBytes,", strSize - strlen(gRespStr));
for (i = 0; i < numStreams; i++) {
sprintf(copyBuf, " %llu", statResp[i].cmdru.stats.txPayloadBytes);
strncat(gRespStr, copyBuf, strSize - strlen(gRespStr));
}
strncat(gRespStr, ",rxPayloadBytes,", strSize - strlen(gRespStr));
for (i = 0; i < numStreams; i++) {
sprintf(copyBuf, " %llu", statResp[i].cmdru.stats.rxPayloadBytes);
strncat(gRespStr, copyBuf, strSize - strlen(gRespStr));
}
strncat(gRespStr, ",outOfSequenceFrames,", strSize - strlen(gRespStr));
for (i = 0; i < numStreams; i++) {
sprintf(copyBuf, " %d", statResp[i].cmdru.stats.outOfSequenceFrames);
strncat(gRespStr, copyBuf, strSize - strlen(gRespStr));
}
strncat(gRespStr, "\r\n", sizeof(gRespStr) - strlen(gRespStr) - 1);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
printf("gRespStr = %s", gRespStr);
return done;
}
int wfaTrafficAgentPingStartResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* staPingResp = (dutCmdResponse_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaTrafficAgentPingStartResp ...\n");
switch (staPingResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaTrafficAgentPingStart running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,streamID,%i\r\n",
staPingResp->streamId);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
return done;
}
int wfaTrafficAgentPingStopResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* stpResp = (dutCmdResponse_t*)(cmdBuf + 4);
switch (stpResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaTrafficAgentPingStop running ...\n");
done = 1;
break;
case STATUS_COMPLETE: {
sprintf(gRespStr, "status,COMPLETE,sent,%d,replies,%d\r\n",
stpResp->cmdru.pingStp.sendCnt,
stpResp->cmdru.pingStp.repliedCnt);
DPRINT_INFO(WFA_OUT, "%s\n", gRespStr);
break;
}
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaGetMacAddressResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* getmacResp = (dutCmdResponse_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaStaGetMacAddressResp ...\n");
switch (getmacResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaGetMacAddress running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,mac,%s\r\n", getmacResp->cmdru.mac);
printf("status,COMPLETE,mac,%s\r\n", getmacResp->cmdru.mac);
break;
case STATUS_ERROR:
printf("status,ERROR\n");
sprintf(gRespStr, "status,COMPLETE,mac,00:00:00:00:00:00\r\n");
break;
default:
sprintf(gRespStr, "status,COMPLETE,mac,00:00:00:00:00:00\r\n");
printf("unknown status\n");
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaGetBSSIDResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* getBssidResp = (dutCmdResponse_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaStaGetMacAddressResp ...\n");
switch (getBssidResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaGetBSSID running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,bssid,%s\r\n",
getBssidResp->cmdru.bssid);
printf("status,COMPLETE,bssid,%s\r\n", getBssidResp->cmdru.bssid);
break;
case STATUS_ERROR:
printf("status,ERROR\n");
sprintf(gRespStr, "status,COMPLETE,mac,00:00:00:00:00:00\r\n");
break;
default:
sprintf(gRespStr, "status,COMPLETE,mac,00:00:00:00:00:00\r\n");
printf("unknown status\n");
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaSetEncryptionResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* setEncryptionResp = (dutCmdResponse_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaStaSetEncryptionResp ...\n");
switch (setEncryptionResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaSetEncryption running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE\r\n");
printf("status,COMPLETE\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
break;
case STATUS_ERROR:
sprintf(gRespStr, "status,ERROR\r\n");
printf("status,ERROR\r\n");
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
#if 0
int wfaStaReAssociateResp(BYTE *cmdBuf)
{
int done=0;
dutCmdResponse_t *assocResp = (dutCmdResponse_t *) (cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaStaReAssociateResp ...\n");
switch(assocResp->status)
{
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaReAssociate running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE *)gRespStr, strlen(gRespStr));
return done;
}
#endif
int wfaStaGetStatsResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* getStatsResp = (dutCmdResponse_t*)(cmdBuf + 4);
caStaGetStatsResp_t* stats = &getStatsResp->cmdru.ifStats;
DPRINT_INFO(WFA_OUT, "Entering wfaStaGetStatsResp ...\n");
switch (getStatsResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaGetStats running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr,
"status,COMPLETE,txFrames,%i,rxFrames,%i,txMulticast,%i,"
"rxMulticast,%i,fcsErrors,%i,txRetries,%i\r\n",
stats->txFrames, stats->rxFrames, stats->txMulticast,
stats->rxMulticast, stats->fcsErrors, stats->txRetries);
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
break;
case STATUS_ERROR:
sprintf(gRespStr, "status,ERROR\r\n");
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaDeviceGetInfoResp(BYTE* cmdBuf) {
int done = 1;
dutCmdResponse_t* devInfoResp = (dutCmdResponse_t*)(cmdBuf + 4);
caDeviceGetInfoResp_t* dinfo = &devInfoResp->cmdru.devInfo;
switch (devInfoResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaDeviceGetInfo running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
if (dinfo->firmware[0] != '\0' && dinfo->firmware[0] != '\n')
sprintf(gRespStr, "status,COMPLETE,firmware,%s\r\n", dinfo->firmware);
else
sprintf(gRespStr, "status,COMPLETE,vendor,%s,model,%s,version,%s\r\n",
dinfo->vendor, dinfo->model, dinfo->version);
DPRINT_INFO(WFA_OUT, "%s\n", gRespStr);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaDeviceListIFResp(BYTE* cmdBuf) {
int done = 0, i;
dutCmdResponse_t* devListIfResp = (dutCmdResponse_t*)(cmdBuf + 4);
caDeviceListIFResp_t* ifResp = &devListIfResp->cmdru.ifList;
switch (devListIfResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaDeviceListIF running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
if (ifResp->iftype == IF_80211) {
sprintf(gRespStr, "status,COMPLETE,interfaceType,802.11,interfaceID");
DPRINT_INFO(WFA_OUT, "%s\n", gRespStr);
DPRINT_INFO(WFA_OUT, "%s\n", ifResp->ifs[0]);
} else if (ifResp->iftype == IF_ETH)
sprintf(gRespStr, "status,COMPLETE,interfaceType,Ethernet,interfaceID");
for (i = 0; i < 1; i++) {
if (ifResp->ifs[i][0] != '\0') {
strcat(gRespStr, ",");
strcat(gRespStr, ifResp->ifs[i]);
strcat(gRespStr, "\r\n");
}
}
DPRINT_INFO(WFA_OUT, "%s\n", gRespStr);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaUploadResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* uploadResp = (dutCmdResponse_t*)(cmdBuf + 4);
caStaUploadResp_t* upld = &uploadResp->cmdru.uld;
switch (uploadResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaUpload running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,code,%i,%s\r\n", upld->seqnum,
upld->bytes);
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
break;
case STATUS_ERROR:
sprintf(gRespStr, "status,ERROR\r\n");
printf("status,COMPLETE\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
break;
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaGetP2pDevAddressResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* p2pDevAddResp = (dutCmdResponse_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaStaGetP2pDevAddressResp ...\n");
printf("Inside response function...");
printf("Inside response function...");
printf("Inside response function...");
printf("Inside response function...");
printf("Inside response function...");
switch (p2pDevAddResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaGetP2pDevAddressResp running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,devid,%s\r\n",
p2pDevAddResp->cmdru.devid);
printf("status,COMPLETE,devid,%s\r\n", p2pDevAddResp->cmdru.devid);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaStartAutoGO(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* p2pResp = (dutCmdResponse_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaStaStartAutoGO ...\n");
switch (p2pResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaStartAutoGO running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,groupid,%s\r\n", p2pResp->cmdru.grpid);
printf("status,COMPLETE,groupid,%s\r\n", p2pResp->cmdru.grpid);
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaP2pStartGrpFormResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* p2pResp = (dutCmdResponse_t*)(cmdBuf + 4);
caP2pStartGrpFormResp_t* grpInfo = &p2pResp->cmdru.grpFormInfo;
DPRINT_INFO(WFA_OUT, "Entering wfaStaP2pStartGrpFormResp ...\n");
switch (p2pResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaP2pStartGrpFormResp running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,result,%s,groupid,%s\r\n",
grpInfo->result, grpInfo->grpId);
printf("status,COMPLETE,result,%s,groupid,%s\r\n", grpInfo->result,
grpInfo->grpId);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaWpsReadPinResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* p2pResp = (dutCmdResponse_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaStaWpsReadPinResp ...\n");
switch (p2pResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaWpsReadPinResp running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,pin,%s\r\n", p2pResp->cmdru.wpsPin);
printf("status,COMPLETE,pin,%s\r\n", p2pResp->cmdru.wpsPin);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaGetPskResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* p2pResp = (dutCmdResponse_t*)(cmdBuf + 4);
caP2pStaGetPskResp_t* pskInfo = &p2pResp->cmdru.pskInfo;
DPRINT_INFO(WFA_OUT, "Entering wfaStaGetPskResp ...\n");
switch (p2pResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaGetPskResp running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,passphrase,%s,ssid,%s\r\n",
pskInfo->passPhrase, pskInfo->ssid);
printf("status,COMPLETE,passphrase,%s,ssid,%s\r\n", pskInfo->passPhrase,
pskInfo->ssid);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaWpsReadLabelResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* p2pResp = (dutCmdResponse_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaStaWpsReadLabelResp ...\n");
switch (p2pResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaWpsReadLabelResp running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,label,%s\r\n", p2pResp->cmdru.wpsPin);
printf("status,COMPLETE,label,%s\r\n", p2pResp->cmdru.wpsPin);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaGetP2pIpConfigResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* getIpConfigResp = (dutCmdResponse_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaStaGetP2pIpConfigResp ...\n");
switch (getIpConfigResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaGetP2pIpConfigResp running ...\n");
done = 1;
break;
case STATUS_ERROR:
sprintf(gRespStr, "status,ERROR\r\n");
break;
case STATUS_COMPLETE:
if (strlen(getIpConfigResp->cmdru.getIfconfig.dns[0]) == 0)
*getIpConfigResp->cmdru.getIfconfig.dns[0] = '\0';
if (strlen(getIpConfigResp->cmdru.getIfconfig.dns[1]) == 0)
*getIpConfigResp->cmdru.getIfconfig.dns[1] = '\0';
sprintf(gRespStr,
"status,COMPLETE,dhcp,%i,ip,%s,mask,%s,primary-dns,%s,"
"p2pinterfaceaddress,%s\r\n",
getIpConfigResp->cmdru.getIfconfig.isDhcp,
getIpConfigResp->cmdru.getIfconfig.ipaddr,
getIpConfigResp->cmdru.getIfconfig.mask,
getIpConfigResp->cmdru.getIfconfig.dns[0],
getIpConfigResp->cmdru.getIfconfig.mac);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaGenericResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* setwmmResp = (dutCmdResponse_t*)(cmdBuf + 4);
switch (setwmmResp->status) {
case STATUS_RUNNING:
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE\r\n");
printf("status,COMPLETE\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
break;
case STATUS_ERROR:
sprintf(gRespStr, "status,ERROR\r\n");
printf("status,COMPLETE\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaStartWfdConnectionResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* wfdResp = (dutCmdResponse_t*)(cmdBuf + 4);
caStaStartWfdConnResp_t* wfdConnInfo = &wfdResp->cmdru.wfdConnInfo;
DPRINT_INFO(WFA_OUT, "Entering wfaStaStartWfdConnectionResp ...\n");
switch (wfdResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaStartWfdConnectionResp running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr,
"status,COMPLETE,result,%s,groupid,%s,wfdsessionid,%s\r\n",
wfdConnInfo->result, wfdConnInfo->p2pGrpId,
wfdConnInfo->wfdSessionId);
printf("status,COMPLETE,result,%s,groupid,%s,wfdsessionid,%s\r\n",
wfdConnInfo->result, wfdConnInfo->p2pGrpId,
wfdConnInfo->wfdSessionId);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaCliCmdResp(BYTE* cmdBuf) {
int done = 0;
caStaCliCmdResp_t* staCliCmdResp = (caStaCliCmdResp_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaStaCliCmdResp ...\n");
switch (staCliCmdResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaCliCmdResp running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
if (staCliCmdResp->resFlag == 1) {
sprintf(gRespStr, "status,COMPLETE,%s\r\n", staCliCmdResp->result);
printf("\nstatus,COMPLETE,%s****\r\n", staCliCmdResp->result);
} else {
sprintf(gRespStr, "status,COMPLETE\r\n");
printf("status,COMPLETE\r\n");
}
break;
case STATUS_ERROR:
sprintf(gRespStr, "status,ERROR\r\n");
printf("status,ERROR\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaConnectGoStartWfdResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* wfdResp = (dutCmdResponse_t*)(cmdBuf + 4);
caStaStartWfdConnResp_t* wfdConnInfo = &wfdResp->cmdru.wfdConnInfo;
DPRINT_INFO(WFA_OUT, "Entering wfaStaConnectGoStartWfdResp ...\n");
switch (wfdResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaConnectGoStartWfdResp running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,wfdsessionid,%s\r\n",
wfdConnInfo->wfdSessionId);
printf("status,COMPLETE,wfdsessionid,%s\r\n", wfdConnInfo->wfdSessionId);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaGetParameterResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* wfdResp = (dutCmdResponse_t*)(cmdBuf + 4);
caStaGetParameterResp_t* getParamInfo = &wfdResp->cmdru.getParamValue;
DPRINT_INFO(WFA_OUT, "Entering wfaStaGetParameterResp ...\n");
switch (wfdResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaGetParameterResp running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
if (getParamInfo->getParamType == eDiscoveredDevList) {
sprintf(gRespStr, "status,COMPLETE,DeviceList,%s\r\n",
getParamInfo->devList);
printf("status,COMPLETE,DeviceList,%s\r\n", getParamInfo->devList);
break;
} else if (getParamInfo->getParamType == eOpenPorts) {
sprintf(gRespStr, "status,COMPLETE,OpenPortList,%s\r\n",
getParamInfo->devList);
printf("status,COMPLETE,OpenPortList,%s\r\n", getParamInfo->devList);
break;
} else if (getParamInfo->getParamType == eMasterPref) {
sprintf(gRespStr, "status,COMPLETE,MasterPref,%s\r\n",
getParamInfo->masterPref);
printf("status,COMPLETE,MasterPref,%s\r\n", getParamInfo->masterPref);
break;
} else {
sprintf(gRespStr, "status,COMPLETE,UnkownGetParmResp\r\n");
printf("status,COMPLETE,UnkownGetParmResp\r\n");
break;
}
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaNfcActionResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* p2pResp = (dutCmdResponse_t*)(cmdBuf + 4);
caStaNfcActionResp_t* nfcAction = &p2pResp->cmdru.staNfcAction;
DPRINT_INFO(WFA_OUT, "Entering wfaStaNfcActionResp ...\n");
switch (p2pResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaNfcActionResp running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,result,%s,groupid,%s,peerRoole,%i\r\n",
nfcAction->result, nfcAction->grpId, nfcAction->peerRole);
printf("status,COMPLETE,result,%s,groupid,%s,peerRoole,%i\r\n",
nfcAction->result, nfcAction->grpId, nfcAction->peerRole);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaExecActionResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* execActionResp = (dutCmdResponse_t*)(cmdBuf + 4);
DPRINT_INFO(WFA_OUT, "Entering wfaStaExecActionResp ...\n");
switch (execActionResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaExecActionResp running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr, "status,COMPLETE,mac,%s\r\n",
execActionResp->cmdru.execAction.mac);
printf("status,COMPLETE,mac,%s\r\n",
execActionResp->cmdru.execAction.mac);
break;
case STATUS_ERROR:
sprintf(gRespStr, "status,ERROR\r\n");
printf("status,COMPLETE\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaInvokeCommandResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* dutResp = (dutCmdResponse_t*)(cmdBuf + 4);
caStaInvokeCmdResp_t* invokeCmdResp = &dutResp->cmdru.staInvokeCmd;
DPRINT_INFO(WFA_OUT, "Entering wfaStaInvokeCommandResp ...\n");
switch (dutResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaInvokeCommandResp running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
if (invokeCmdResp->invokeCmdRspType == eCmdPrimTypeAdvt) {
int i;
char advidList[256];
char serviceList[256];
char serviceMac[256];
char hexBuf[128];
memset(advidList, '\0', 256);
memset(serviceList, '\0', 256);
memset(serviceMac, '\0', 256);
for (i = 0; i < invokeCmdResp->invokeCmdResp.advRsp.numServInfo; i++) {
if (serviceList[0] == '\0') {
strcpy(serviceList,
invokeCmdResp->invokeCmdResp.advRsp.servAdvInfo[i].servName);
} else {
strcat(strcat(serviceList, " "),
invokeCmdResp->invokeCmdResp.advRsp.servAdvInfo[i].servName);
}
sprintf(hexBuf, " %lx",
invokeCmdResp->invokeCmdResp.advRsp.servAdvInfo[i].advtID);
strcat(advidList, hexBuf);
strcat(strcat(serviceMac, " "),
invokeCmdResp->invokeCmdResp.advRsp.servAdvInfo[i].serviceMac);
}
sprintf(gRespStr,
"status,COMPLETE,ServName,%s,AdvID,%s,Service_Mac,%s\r\n",
serviceList, advidList, serviceMac);
printf("status,COMPLETE,ServName,%s,AdvID,%s,Service_Mac,%s\r\n",
serviceList, advidList, serviceMac);
} else if (invokeCmdResp->invokeCmdRspType == eCmdPrimTypeSeek) {
sprintf(gRespStr, "status,COMPLETE,SearchID,%lx\r\n",
invokeCmdResp->invokeCmdResp.seekRsp.searchID);
printf("status,COMPLETE,SearchID,%lx\r\n",
invokeCmdResp->invokeCmdResp.seekRsp.searchID);
} else if (invokeCmdResp->invokeCmdRspType == eCmdPrimTypeConnSession) {
sprintf(gRespStr,
"status,COMPLETE,Session_id,%lx,P2P_result,%s,groupid,%s\r\n",
invokeCmdResp->invokeCmdResp.connSessResp.sessionID,
invokeCmdResp->invokeCmdResp.connSessResp.result,
invokeCmdResp->invokeCmdResp.connSessResp.grpId);
printf("status,COMPLETE,Session_id,%lx,P2P_result,%s,groupid,%s\r\n",
invokeCmdResp->invokeCmdResp.connSessResp.sessionID,
invokeCmdResp->invokeCmdResp.connSessResp.result,
invokeCmdResp->invokeCmdResp.connSessResp.grpId);
} else if (invokeCmdResp->invokeCmdRspType == eCmdPrimTypeCancel ||
invokeCmdResp->invokeCmdRspType ==
eCmdPrimTypeConfirmSession ||
invokeCmdResp->invokeCmdRspType ==
eCmdPrimTypeSetSessionReady ||
invokeCmdResp->invokeCmdRspType == eCmdPrimTypeBoundPort ||
invokeCmdResp->invokeCmdRspType ==
eCmdPrimTypeServiceStatusChange ||
invokeCmdResp->invokeCmdRspType == eCmdPrimTypeCloseSession) {
sprintf(gRespStr, "status,COMPLETE\r\n");
printf("status,COMPLETE\r\n");
}
else {
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaManageServiceResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* dutResp = (dutCmdResponse_t*)(cmdBuf + 4);
caStaConnSessCmdResp_t* mangeServ = &dutResp->cmdru.staManageServ;
DPRINT_INFO(WFA_OUT, "Entering wfaStaManageServiceResp ...\n");
switch (dutResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaManageServiceResp running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr,
"status,COMPLETE,Session_id,%lx,P2P_result,%s,groupid,%s\r\n",
mangeServ->sessionID, mangeServ->result, mangeServ->grpId);
printf("status,COMPLETE,Session_id,%lx,P2P_result,%s,groupid,%s\r\n",
mangeServ->sessionID, mangeServ->result, mangeServ->grpId);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaGetEventsResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* getEventsResp = (dutCmdResponse_t*)(cmdBuf + 4);
caStaGetEventsResp_t* getEvents = &getEventsResp->cmdru.getEvents;
DPRINT_INFO(WFA_OUT, "Entering wfaStaGetEventsResp ...\n");
switch (getEventsResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaGetEventsResp running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
sprintf(gRespStr,
"status,COMPLETE,EventName,%s,RemoteInstanceID,%u,"
"LocalInstanceID,%u,mac,%s\r\n",
getEvents->eventName, getEvents->remoteInstanceID,
getEvents->localInstanceID, getEvents->mac);
printf(
"status,COMPLETE,EventName,%s,RemoteInstanceID,%u,LocalInstanceID,%u,"
"mac,%s\r\n",
getEvents->eventName, getEvents->remoteInstanceID,
getEvents->localInstanceID, getEvents->mac);
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}
int wfaStaGetEventDataResp(BYTE* cmdBuf) {
int done = 0;
dutCmdResponse_t* dutResp = (dutCmdResponse_t*)(cmdBuf + 4);
caStaGetEventDetailsCmdResp_t* evntDataResp =
&dutResp->cmdru.staGetEventDetails;
DPRINT_INFO(WFA_OUT, "Entering wfaStaGetEventDataResp ...\n");
switch (dutResp->status) {
case STATUS_RUNNING:
DPRINT_INFO(WFA_OUT, "wfaStaGetEventDataResp running ...\n");
done = 1;
break;
case STATUS_COMPLETE:
if (evntDataResp->eventID == eSearchResult) {
sprintf(gRespStr,
"status,COMPLETE,SerchId,%lx,Service_Mac,%s,AdvID,%lx,Service_"
"name,%s,service_status,%i\r\n",
evntDataResp->getEventDetails.searchResult.searchID,
evntDataResp->getEventDetails.searchResult.serviceMac,
evntDataResp->getEventDetails.searchResult.advID,
evntDataResp->getEventDetails.searchResult.serviceName,
evntDataResp->getEventDetails.searchResult.serviceStatus);
printf(
"status,COMPLETE,SerchId,%lx,Service_Mac,%s,AdvID,%lx,Service_name,"
"%s,service_status,%i\r\n",
evntDataResp->getEventDetails.searchResult.searchID,
evntDataResp->getEventDetails.searchResult.serviceMac,
evntDataResp->getEventDetails.searchResult.advID,
evntDataResp->getEventDetails.searchResult.serviceName,
evntDataResp->getEventDetails.searchResult.serviceStatus);
} else if (evntDataResp->eventID == eSearchTerminated) {
sprintf(gRespStr, "status,COMPLETE,SearchID,%lx\r\n",
evntDataResp->getEventDetails.searchTerminated.searchID);
printf("status,COMPLETE,SearchID,%lx\r\n",
evntDataResp->getEventDetails.searchTerminated.searchID);
} else if (evntDataResp->eventID == eAdvertiseStatus) {
char t_status[32];
if (evntDataResp->getEventDetails.advStatus.status == eAdvertised)
strcpy(t_status, "Advertised");
else
strcpy(t_status, "NotAdvertised");
sprintf(gRespStr, "status,COMPLETE,AdvID,%lx,status,%s\r\n",
evntDataResp->getEventDetails.advStatus.advID, t_status);
printf("status,COMPLETE,AdvID,%lx,status,%s\r\n",
evntDataResp->getEventDetails.advStatus.advID, t_status);
} else if (evntDataResp->eventID == eSessionRequest) {
sprintf(gRespStr,
"status,COMPLETE,AdvID,%lx,Session_Mac,%s,session_ID,%lx\r\n",
evntDataResp->getEventDetails.sessionReq.advID,
evntDataResp->getEventDetails.sessionReq.sessionMac,
evntDataResp->getEventDetails.sessionReq.sessionID);
printf("status,COMPLETE,AdvID,%lx,Session_Mac,%s,session_ID,%lx\r\n",
evntDataResp->getEventDetails.sessionReq.advID,
evntDataResp->getEventDetails.sessionReq.sessionMac,
evntDataResp->getEventDetails.sessionReq.sessionID);
}
else if (evntDataResp->eventID == eSessionStatus) {
char t_status[32];
if (evntDataResp->getEventDetails.sessionStatus.state ==
eSessionStateOpen)
strcpy(t_status, "OPEN");
else if (evntDataResp->getEventDetails.sessionStatus.state ==
eSessionStateInitiated)
strcpy(t_status, "INITIATED");
else if (evntDataResp->getEventDetails.sessionStatus.state ==
eSessionStateRequested)
strcpy(t_status, "REQUESTED");
else if (evntDataResp->getEventDetails.sessionStatus.state ==
eSessionStateClosed)
strcpy(t_status, "CLOSED");
sprintf(gRespStr,
"status,COMPLETE,session_ID,%lx,Session_Mac,%s,state,%s\r\n",
evntDataResp->getEventDetails.sessionStatus.sessionID,
evntDataResp->getEventDetails.sessionStatus.sessionMac,
t_status);
printf("status,COMPLETE,session_ID,%lx,Session_Mac,%s,state,%s\r\n",
evntDataResp->getEventDetails.sessionStatus.sessionID,
evntDataResp->getEventDetails.sessionStatus.sessionMac,
t_status);
}
else if (evntDataResp->eventID == eConnectStatus) {
char t_status[32];
if (evntDataResp->getEventDetails.connStatus.status ==
eNetworkRoleRejected)
strcpy(t_status, "NetworkRoleRejected");
else if (evntDataResp->getEventDetails.connStatus.status ==
eServiceRequestReceived)
strcpy(t_status, "ServiceRequestReceived");
else if (evntDataResp->getEventDetails.connStatus.status ==
eServiceRequestDifferred)
strcpy(t_status, "ServiceRequestDifferred");
else if (evntDataResp->getEventDetails.connStatus.status ==
eServiceRequestAccepted)
strcpy(t_status, "ServiceRequestAccepted");
else if (evntDataResp->getEventDetails.connStatus.status ==
eServiceRequestFailed)
strcpy(t_status, "ServiceRequestFailed");
else if (evntDataResp->getEventDetails.connStatus.status ==
eGroupFormationStarted)
strcpy(t_status, "GroupFormationStarted");
else if (evntDataResp->getEventDetails.connStatus.status ==
eGroupFormationComplete)
strcpy(t_status, "GroupFormationComplete");
else if (evntDataResp->getEventDetails.connStatus.status ==
eGroupFormationFailed)
strcpy(t_status, "GroupFormationFailed");
sprintf(gRespStr,
"status,COMPLETE,session_ID,%lx,Session_Mac,%s,status,%s\r\n",
evntDataResp->getEventDetails.connStatus.sessionID,
evntDataResp->getEventDetails.connStatus.sessionMac, t_status);
printf("status,COMPLETE,session_ID,%lx,Session_Mac,%s,status,%s\r\n",
evntDataResp->getEventDetails.connStatus.sessionID,
evntDataResp->getEventDetails.connStatus.sessionMac, t_status);
}
else if (evntDataResp->eventID == ePortStatus) {
char t_status[32];
if (evntDataResp->getEventDetails.portStatus.status ==
eLocalPortAllowed)
strcpy(t_status, "LocalPortAllowed");
else if (evntDataResp->getEventDetails.portStatus.status ==
eLocalPortBlocked)
strcpy(t_status, "LocalPortBlocked");
else if (evntDataResp->getEventDetails.portStatus.status == eFailure)
strcpy(t_status, "Failure");
else if (evntDataResp->getEventDetails.portStatus.status ==
eRemotePortAllowed)
strcpy(t_status, "RemotePortAllowed");
sprintf(gRespStr,
"status,COMPLETE,session_ID,%lx,Session_Mac,%s,port,%i,status,%"
"s\r\n",
evntDataResp->getEventDetails.portStatus.sessionID,
evntDataResp->getEventDetails.portStatus.sessionMac,
evntDataResp->getEventDetails.portStatus.port, t_status);
printf(
"status,COMPLETE,session_ID,%lx,Session_Mac,%s,port,%i,status,%"
"s\r\n",
evntDataResp->getEventDetails.portStatus.sessionID,
evntDataResp->getEventDetails.portStatus.sessionMac,
evntDataResp->getEventDetails.portStatus.port, t_status);
}
else {
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
break;
default:
sprintf(gRespStr, "status,INVALID\r\n");
DPRINT_INFO(WFA_OUT, " %s\n", gRespStr);
}
wfaCtrlSend(gCaSockfd, (BYTE*)gRespStr, strlen(gRespStr));
return done;
}