| /**************************************************************************** |
| * |
| * 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_cmdproc.c |
| * Library functions to handle all string command parsing and convert it |
| * to an internal format for DUT. They should be called by Control Agent |
| * and Test console while receiving commands from CLI or TM |
| * |
| */ |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <sys/socket.h> |
| #include "wfa_debug.h" |
| #include "wfa_types.h" |
| #include "wfa_tlv.h" |
| #include "wfa_tg.h" |
| #include "wfa_ca.h" |
| #include "wfa_cmds.h" |
| #include "wfa_miscs.h" |
| #include "wfa_agtctrl.h" |
| |
| extern int gSock; |
| extern void printProfile(tgProfile_t*); |
| int wfaStandardBoolParsing(char* str); |
| |
| /* command KEY WORD String table */ |
| typeNameStr_t keywordStr[] = { |
| {KW_PROFILE, "profile", NULL}, |
| {KW_DIRECTION, "direction", NULL}, |
| {KW_DIPADDR, "destination", NULL}, |
| {KW_DPORT, "destinationport", NULL}, |
| {KW_SIPADDR, "source", NULL}, |
| {KW_SPORT, "sourceport", NULL}, |
| {KW_FRATE, "framerate", NULL}, |
| {KW_DURATION, "duration", NULL}, |
| {KW_PLOAD, "payloadsize", NULL}, |
| {KW_TCLASS, "trafficClass", |
| NULL}, /* It is to indicate WMM traffic pattern */ |
| {KW_STREAMID, "streamid", NULL}, |
| {KW_STARTDELAY, "startdelay", |
| NULL}, /* It is used to schedule multi-stream test such as WMM */ |
| {KW_NUMFRAME, "numframes", NULL}, |
| {KW_USESYNCCLOCK, "useSyncClock", NULL}, |
| {KW_USERPRIORITY, "userpriority", NULL}, |
| {KW_MAXCNT, "maxcnt", NULL}, |
| {KW_TAGNAME, "tagName", NULL}}; |
| |
| /* profile type string table */ |
| typeNameStr_t profileStr[] = { |
| {PROF_FILE_TX, "file_transfer", NULL}, |
| {PROF_MCAST, "multicast", NULL}, |
| {PROF_IPTV, "iptv", NULL}, /* This is used for WMM, confused? */ |
| {PROF_TRANSC, "transaction", |
| NULL}, /* keep for temporary backward compat., will be removed */ |
| {PROF_START_SYNC, "start_sync", NULL}, |
| {PROF_CALI_RTD, "cali_rtd", NULL}, |
| {PROF_UAPSD, "uapsd", NULL}}; |
| |
| /* direction string table */ |
| typeNameStr_t direcStr[] = {{DIRECT_SEND, "send", NULL}, |
| {DIRECT_RECV, "receive", NULL}}; |
| |
| enum ProgramType programNameToType(const char* name) { |
| if (strlen(name) == 0) { |
| return PROG_TYPE_NONE; |
| } else if (strcasecmp(name, "PMF") == 0) { |
| return PROG_TYPE_PMF; |
| } else if (strcasecmp(name, "General") == 0) { |
| return PROG_TYPE_GEN; |
| } else if (strcasecmp(name, "TDLS") == 0) { |
| return PROG_TYPE_TDLS; |
| } else if (strcasecmp(name, "VOE") == 0) { |
| return PROG_TYPE_VENT; |
| } else if (strcasecmp(name, "WFD") == 0) { |
| return PROG_TYPE_WFD; |
| } else if (strcasecmp(name, "WFDS") == 0) { |
| return PROG_TYPE_WFDS; |
| } else if (strcasecmp(name, "11N") == 0) { |
| return PROG_TYPE_11N; |
| } else if (strcasecmp(name, "HE") == 0) { |
| return PROG_TYPE_HE; |
| } else if (strcasecmp(name, "MBO") == 0) { |
| return PROG_TYPE_MBO; |
| } else { |
| DPRINT_ERR(WFA_ERR, "Unknown program name: %s", name); |
| return PROG_UNSUPPORTED; |
| } |
| } |
| |
| /* |
| * getParamValueInt(): fetch the parameter value based on the parameter name, |
| * and stored in provided place holder after converting to |
| * integer from string. |
| * input: pcmdStr -- a string pointer to the command string |
| * input: pParam -- a string pointer to the parameter name |
| * input: paramValue -- a int pointer to hold the parameter value |
| * return on success 0 else -1 |
| */ |
| int getParamValueInt(char* pcmdStr, char* pParam, int* paramValue) { |
| char* str; |
| if (strcasecmp(pcmdStr, pParam) == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| *paramValue = atoi(str); |
| return 0; |
| } |
| return -1; |
| } |
| |
| /* |
| * getParamValueStr(): fetch the parameter value based on the parameter name, |
| * and stored in provided place holder as string. |
| * function explicitly put the null char at last to |
| * avoid string with out null in case src string longer. |
| * input: pcmdStr -- a string pointer to the command string |
| * input: pParam -- a string pointer to the parameter name |
| * input: paramValue -- a string pointer to hold the parameter value |
| * input: paramValLen -- length for the paramValue. |
| * return on success 0 else -1 |
| */ |
| int getParamValueStr(char* pcmdStr, |
| char* pParam, |
| char* paramValue, |
| int paramValLen) { |
| char* str; |
| if (strcasecmp(pcmdStr, pParam) == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(paramValue, str, (paramValLen - 1)); |
| paramValue[paramValLen] = 0; |
| return 0; |
| } |
| return -1; |
| } |
| |
| /* |
| * cmdProcNotDefinedYet(): a dummy function |
| */ |
| int cmdProcNotDefinedYet(char* pcmdStr, char* buf, int* len) { |
| WFA_UNUSED(pcmdStr); |
| WFA_UNUSED(buf); |
| WFA_UNUSED(len); |
| printf("The command processing function not defined.\n"); |
| |
| /* need to send back a response */ |
| |
| return (WFA_SUCCESS); |
| } |
| |
| extern unsigned short wfa_defined_debug; |
| |
| /* |
| * xcCmdProcGetVersion(): process the command get_version string from TM |
| * to convert it into a internal format |
| * input: pcmdStr -- a string pointer to the command string |
| */ |
| int xcCmdProcGetVersion(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| WFA_UNUSED(pcmdStr); |
| DPRINT_INFO(WFA_OUT, "start xcCmdProcGetVersion ...\n"); |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| /* encode the tag without values */ |
| wfaEncodeTLV(WFA_GET_VERSION_TLV, 0, NULL, aBuf); |
| |
| *aLen = 4; |
| |
| return WFA_SUCCESS; |
| } |
| |
| /* |
| * xcCmdProcAgentConfig(): process the command traffic_agent_config string |
| * from TM to convert it into a internal format |
| * input: pcmdStr -- a string pointer to the command string |
| */ |
| int xcCmdProcAgentConfig(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| char* str; |
| int i = 0, j = 0, kwcnt = 0; |
| wfaTLV* hdr = (wfaTLV*)aBuf; |
| tgProfile_t tgpf = {0, 0, "", -1, "", -1, 0, 0, 0, TG_WMM_AC_BE, 0, 0, ""}; |
| tgProfile_t* pf = &tgpf; |
| int userPrio = 0; |
| |
| DPRINT_INFO(WFA_OUT, "start xcCmdProcAgentConfig ...\n"); |
| DPRINT_INFO(WFA_OUT, "params: %s\n", pcmdStr); |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| while ((str = strtok_r(NULL, ",", (char**)&pcmdStr)) != NULL) { |
| for (i = 0; i < sizeof(keywordStr) / sizeof(typeNameStr_t); i++) { |
| if (strcasecmp(str, keywordStr[i].name) == 0) { |
| switch (keywordStr[i].type) { |
| case KW_PROFILE: |
| str = strtok_r(NULL, ",", (char**)&pcmdStr); |
| if (isString(str) == WFA_FAILURE) { |
| DPRINT_ERR(WFA_ERR, "Incorrect profile keyword format\n"); |
| return WFA_FAILURE; |
| } |
| |
| for (j = 0; j < PROF_LAST; j++) { |
| if (strcasecmp(str, profileStr[j].name) == 0) { |
| pf->profile = profileStr[j].type; |
| } |
| } |
| |
| DPRINT_INFO(WFA_OUT, "profile type %i\n", pf->profile); |
| kwcnt++; |
| str = NULL; |
| break; |
| |
| case KW_DIRECTION: |
| str = strtok_r(NULL, ",", (char**)&pcmdStr); |
| if (isString(str) == WFA_FAILURE) { |
| DPRINT_ERR(WFA_ERR, "Incorrect direction keyword format\n"); |
| return WFA_FAILURE; |
| } |
| |
| if (strcasecmp(str, "send") == 0) { |
| pf->direction = DIRECT_SEND; |
| } else if (strcasecmp(str, "receive") == 0) { |
| pf->direction = DIRECT_RECV; |
| } else |
| printf("Don't know direction\n"); |
| |
| DPRINT_INFO(WFA_OUT, "direction %i\n", pf->direction); |
| kwcnt++; |
| str = NULL; |
| break; |
| |
| case KW_DIPADDR: /* dest ip address */ |
| memcpy(pf->dipaddr, strtok_r(NULL, ",", &pcmdStr), |
| IPV4_ADDRESS_STRING_LEN); |
| if (isIpV4Addr(pf->dipaddr) == WFA_FAILURE) { |
| DPRINT_ERR(WFA_ERR, "Incorrect ipaddr format\n"); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "dipaddr %s\n", pf->dipaddr); |
| |
| kwcnt++; |
| str = NULL; |
| break; |
| |
| case KW_DPORT: |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (isNumber(str) == WFA_FAILURE) { |
| DPRINT_ERR(WFA_ERR, "Incorrect port number format\n"); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "dport %s\n", str); |
| pf->dport = atoi(str); |
| |
| kwcnt++; |
| str = NULL; |
| break; |
| |
| case KW_SIPADDR: |
| memcpy(pf->sipaddr, strtok_r(NULL, ",", &pcmdStr), |
| IPV4_ADDRESS_STRING_LEN); |
| |
| if (isIpV4Addr(pf->sipaddr) == WFA_FAILURE) { |
| DPRINT_ERR(WFA_ERR, "Incorrect ipaddr format\n"); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "sipaddr %s\n", pf->sipaddr); |
| kwcnt++; |
| str = NULL; |
| break; |
| |
| case KW_SPORT: |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (isNumber(str) == WFA_FAILURE) { |
| DPRINT_ERR(WFA_ERR, "Incorrect port number format\n"); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "sport %s\n", str); |
| pf->sport = atoi(str); |
| |
| kwcnt++; |
| str = NULL; |
| break; |
| |
| case KW_FRATE: |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (isNumber(str) == WFA_FAILURE) { |
| DPRINT_ERR(WFA_ERR, "Incorrect frame rate format\n"); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "framerate %s\n", str); |
| pf->rate = atoi(str); |
| kwcnt++; |
| str = NULL; |
| break; |
| |
| case KW_DURATION: |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (isNumber(str) == WFA_FAILURE) { |
| DPRINT_ERR(WFA_ERR, "Incorrect duration format\n"); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "duration %s\n", str); |
| pf->duration = atoi(str); |
| kwcnt++; |
| str = NULL; |
| break; |
| |
| case KW_PLOAD: |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (isNumber(str) == WFA_FAILURE) { |
| DPRINT_ERR(WFA_ERR, "Incorrect payload format\n"); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "payload %s\n", str); |
| pf->pksize = atoi(str); |
| kwcnt++; |
| str = NULL; |
| break; |
| |
| case KW_STARTDELAY: |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (isNumber(str) == WFA_FAILURE) { |
| DPRINT_ERR(WFA_ERR, "Incorrect startDelay format\n"); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "startDelay %s\n", str); |
| pf->startdelay = atoi(str); |
| kwcnt++; |
| str = NULL; |
| break; |
| |
| case KW_MAXCNT: |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (isNumber(str) == WFA_FAILURE) { |
| DPRINT_ERR(WFA_ERR, "Incorrect max count format\n"); |
| return WFA_FAILURE; |
| } |
| pf->maxcnt = atoi(str); |
| kwcnt++; |
| str = NULL; |
| break; |
| |
| case KW_TCLASS: |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| // if user priority is used, tclass is ignored. |
| if (userPrio == 1) |
| break; |
| |
| if (strcasecmp(str, "voice") == 0) { |
| pf->trafficClass = TG_WMM_AC_VO; |
| } else if (strcasecmp(str, "Video") == 0) { |
| pf->trafficClass = TG_WMM_AC_VI; |
| } else if (strcasecmp(str, "Background") == 0) { |
| pf->trafficClass = TG_WMM_AC_BK; |
| } else if (strcasecmp(str, "BestEffort") == 0) { |
| pf->trafficClass = TG_WMM_AC_BE; |
| } else { |
| pf->trafficClass = TG_WMM_AC_BE; |
| } |
| |
| kwcnt++; |
| str = NULL; |
| break; |
| |
| case KW_USERPRIORITY: |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "6") == 0) { |
| pf->trafficClass = TG_WMM_AC_UP6; |
| } else if (strcasecmp(str, "7") == 0) { |
| pf->trafficClass = TG_WMM_AC_UP7; |
| } else if (strcasecmp(str, "5") == 0) { |
| pf->trafficClass = TG_WMM_AC_UP5; |
| } else if (strcasecmp(str, "4") == 0) { |
| pf->trafficClass = TG_WMM_AC_UP4; |
| } else if (strcasecmp(str, "1") == 0) { |
| pf->trafficClass = TG_WMM_AC_UP1; |
| } else if (strcasecmp(str, "2") == 0) { |
| pf->trafficClass = TG_WMM_AC_UP2; |
| } else if (strcasecmp(str, "0") == 0) { |
| pf->trafficClass = TG_WMM_AC_UP0; |
| } else if (strcasecmp(str, "3") == 0) { |
| pf->trafficClass = TG_WMM_AC_UP3; |
| } |
| |
| // if User Priority is used |
| userPrio = 1; |
| |
| kwcnt++; |
| str = NULL; |
| break; |
| |
| case KW_STREAMID: |
| kwcnt++; |
| break; |
| |
| case KW_NUMFRAME: |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (isNumber(str) == WFA_FAILURE) { |
| DPRINT_ERR(WFA_ERR, "Incorrect numframe format\n"); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "num frame %s\n", str); |
| kwcnt++; |
| str = NULL; |
| break; |
| |
| case KW_USESYNCCLOCK: |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (isNumber(str) == WFA_FAILURE) { |
| DPRINT_ERR(WFA_ERR, "Incorrect sync clock format\n"); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "sync clock %s\n", str); |
| kwcnt++; |
| str = NULL; |
| break; |
| |
| case KW_TAGNAME: |
| str = strtok_r(NULL, ",", &pcmdStr); |
| // Note that #char to copy should not exceed the destination size. |
| strncpy(pf->WmmpsTagName, str, sizeof(pf->WmmpsTagName)); |
| pf->WmmpsTagName[sizeof(pf->WmmpsTagName) - 1] = '\0'; |
| printf("Got name %s\n", pf->WmmpsTagName); |
| break; |
| |
| default:; |
| } /* switch */ |
| |
| if (str == NULL) |
| break; |
| } /* if */ |
| } /* for */ |
| } /* while */ |
| |
| #if 0 |
| if(kwcnt < 8) |
| { |
| printf("Incorrect command, missing parameters\n"); |
| return WFA_FAILURE; |
| } |
| #endif |
| |
| printProfile(pf); |
| hdr->tag = WFA_TRAFFIC_AGENT_CONFIG_TLV; |
| hdr->len = sizeof(tgProfile_t); |
| |
| memcpy(aBuf + 4, pf, sizeof(tgpf)); |
| |
| *aLen = 4 + sizeof(tgProfile_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| /* |
| * xcCmdProcAgentSend(): Process and send the Control command |
| * "traffic_agent_send" |
| * input - pcmdStr parameter string pointer |
| * return - WFA_SUCCESS or WFA_FAILURE; |
| */ |
| int xcCmdProcAgentSend(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| wfaTLV* hdr = (wfaTLV*)aBuf; |
| char *str, *sid; |
| int strid; |
| int id_cnt = 0; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, 512); |
| |
| DPRINT_INFO(WFA_OUT, "Entering xcCmdProcAgentSend ...\n"); |
| /* there is only one stream for baseline. Will support |
| * multiple streams later. |
| */ |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (str == NULL || str[0] == '\0') |
| return WFA_FAILURE; |
| |
| /* take the stream ids */ |
| if (strcasecmp(str, "streamid") != 0) { |
| DPRINT_ERR(WFA_ERR, "invalid type name\n"); |
| return WFA_FAILURE; |
| } |
| |
| /* |
| * To handle there are multiple stream ids such as WMM |
| */ |
| while (1) { |
| sid = strtok_r(NULL, " ", &pcmdStr); |
| if (sid == NULL) |
| break; |
| |
| printf("sid %s\n", sid); |
| if (isNumber(sid) == WFA_FAILURE) |
| continue; |
| |
| strid = atoi(sid); |
| printf("id %i\n", strid); |
| id_cnt++; |
| |
| memcpy(aBuf + 4 * id_cnt, (char*)&strid, 4); |
| } |
| |
| hdr->tag = WFA_TRAFFIC_AGENT_SEND_TLV; |
| hdr->len = 4 * id_cnt; /* multiple 4s if more streams */ |
| |
| *aLen = 4 + 4 * id_cnt; |
| |
| #if 1 |
| { |
| int i; |
| for (i = 0; i < *aLen; i++) |
| printf("%x ", aBuf[i]); |
| |
| printf("\n"); |
| } |
| #endif |
| |
| return WFA_SUCCESS; |
| } |
| |
| /* |
| * xcCmdProcAgentReset(): Process and send the Control command |
| * "traffic_agent_reset" |
| * input - pcmdStr parameter string pointer |
| * return - WFA_SUCCESS or WFA_FAILURE; |
| */ |
| int xcCmdProcAgentReset(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| wfaTLV* hdr = (wfaTLV*)aBuf; |
| |
| DPRINT_INFO(WFA_OUT, "Entering xcCmdProcAgentReset ...\n"); |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| hdr->tag = WFA_TRAFFIC_AGENT_RESET_TLV; |
| hdr->len = 0; /* multiple 4s if more streams */ |
| |
| *aLen = 4; |
| |
| return WFA_SUCCESS; |
| } |
| |
| /* |
| * xcCmdProcAgentRecvStart(): Process and send the Control command |
| * "traffic_agent_receive_start" |
| * input - pcmdStr parameter string pointer |
| * return - WFA_SUCCESS or WFA_FAILURE; |
| */ |
| int xcCmdProcAgentRecvStart(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| wfaTLV* hdr = (wfaTLV*)aBuf; |
| char *str, *sid; |
| int strid; |
| int id_cnt = 0; |
| |
| DPRINT_INFO(WFA_OUT, "Entering xcCmdProcAgentRecvStart ...%s\n", pcmdStr); |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| /* there is only one stream for baseline. Will support |
| * multiple streams later. |
| */ |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (str == NULL || str[0] == '\0') { |
| DPRINT_ERR(WFA_ERR, "Null string\n"); |
| return WFA_FAILURE; |
| } |
| |
| if (strcasecmp(str, "streamid") != 0) { |
| DPRINT_ERR(WFA_ERR, "invalid type name\n"); |
| return WFA_FAILURE; |
| } |
| |
| while (1) { |
| sid = strtok_r(NULL, " ", &pcmdStr); |
| if (sid == NULL) |
| break; |
| |
| if (isNumber(sid) == WFA_FAILURE) |
| continue; |
| |
| strid = atoi(sid); |
| id_cnt++; |
| |
| memcpy(aBuf + 4 * id_cnt, (char*)&strid, 4); |
| } |
| |
| hdr->tag = WFA_TRAFFIC_AGENT_RECV_START_TLV; |
| hdr->len = 4 * id_cnt; /* multiple 4s if more streams */ |
| |
| *aLen = 4 + 4 * id_cnt; |
| |
| #if 1 |
| { |
| int i; |
| for (i = 0; i < *aLen; i++) |
| printf("%x ", aBuf[i]); |
| |
| printf("\n"); |
| } |
| #endif |
| return WFA_SUCCESS; |
| } |
| |
| /* |
| * xcCmdProcAgentRecvStop(): Process and send the Control command |
| * "traffic_agent_receive_stop" |
| * input - pcmdStr parameter string pointer |
| * return - WFA_SUCCESS or WFA_FAILURE; |
| */ |
| int xcCmdProcAgentRecvStop(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| wfaTLV* hdr = (wfaTLV*)aBuf; |
| char *str, *sid; |
| int strid; |
| int id_cnt = 0; |
| |
| DPRINT_INFO(WFA_OUT, "Entering xcCmdProcAgentRecvStop ...\n"); |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| /* there is only one stream for baseline. Will support |
| * multiple streams later. |
| */ |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (str == NULL || str[0] == '\0') |
| return WFA_FAILURE; |
| |
| if (strcasecmp(str, "streamid") != 0) { |
| DPRINT_ERR(WFA_ERR, "invalid type name\n"); |
| return WFA_FAILURE; |
| } |
| while (1) { |
| sid = strtok_r(NULL, " ", &pcmdStr); |
| if (sid == NULL) |
| break; |
| |
| if (isNumber(sid) == WFA_FAILURE) |
| continue; |
| |
| strid = atoi(sid); |
| id_cnt++; |
| |
| memcpy(aBuf + 4 * id_cnt, (char*)&strid, 4); |
| } |
| |
| hdr->tag = WFA_TRAFFIC_AGENT_RECV_STOP_TLV; |
| hdr->len = 4 * id_cnt; /* multiple 4s if more streams */ |
| |
| *aLen = 4 + 4 * id_cnt; |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcAgentSendPing(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| wfaTLV* hdr = (wfaTLV*)aBuf; |
| tgPingStart_t* staping = (tgPingStart_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| staping->type = 0; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "destination") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staping->dipaddr, str, 39); |
| DPRINT_INFO(WFA_OUT, "destination %s ", staping->dipaddr); |
| } |
| if (strcasecmp(str, "frameSize") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staping->frameSize = atoi(str); |
| DPRINT_INFO(WFA_OUT, "framesize %i ", staping->frameSize); |
| } |
| if (strcasecmp(str, "frameRate") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staping->frameRate = atof(str); |
| DPRINT_INFO(WFA_OUT, "framerate %f ", staping->frameRate); |
| } |
| if (strcasecmp(str, "duration") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staping->duration = atoi(str); |
| DPRINT_INFO(WFA_OUT, "duration %i \n", staping->duration); |
| } |
| if (strcasecmp(str, "type") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "udp") == 0) |
| staping->type = 1; |
| else |
| staping->type = 0; |
| } |
| if (strcasecmp(str, "iptype") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staping->iptype = atoi(str); |
| DPRINT_INFO(WFA_OUT, "iptype %i \n", staping->iptype); |
| } |
| if (strcasecmp(str, "dscp") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staping->dscp = atoi(str); |
| DPRINT_INFO(WFA_OUT, "dscp %i\n", staping->dscp); |
| } |
| if (strcasecmp(str, "qos") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "vo") == 0) { |
| staping->qos = TG_WMM_AC_VO; |
| } else if (strcasecmp(str, "vi") == 0) { |
| staping->qos = TG_WMM_AC_VI; |
| } else if (strcasecmp(str, "be") == 0) { |
| staping->qos = TG_WMM_AC_BE; |
| } else if (strcasecmp(str, "bk") == 0) { |
| staping->qos = TG_WMM_AC_BK; |
| } else { |
| // be |
| staping->qos = TG_WMM_AC_BE; |
| } |
| } |
| } |
| |
| hdr->tag = WFA_TRAFFIC_SEND_PING_TLV; |
| hdr->len = sizeof(tgPingStart_t); |
| |
| *aLen = hdr->len + 4; |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcAgentStopPing(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| wfaTLV* hdr = (wfaTLV*)aBuf; |
| char* str; |
| int strid; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| if (str == NULL || str[0] == '\0') |
| return WFA_FAILURE; |
| |
| if (strcasecmp(str, "streamid") == 0) |
| str = strtok_r(NULL, ",", &pcmdStr); |
| else { |
| DPRINT_ERR(WFA_ERR, "invalid type name\n"); |
| return WFA_FAILURE; |
| } |
| |
| if (isNumber(str) == WFA_FAILURE) |
| return WFA_FAILURE; |
| |
| strid = atoi(str); |
| |
| memcpy(aBuf + 4, (char*)&strid, 4); |
| |
| hdr->tag = WFA_TRAFFIC_STOP_PING_TLV; |
| hdr->len = 4; /* multiple 4s if more streams */ |
| |
| *aLen = 8; |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaGetIpConfig(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| int slen; |
| char* str = NULL; |
| dutCommand_t getipconf; |
| memset(&getipconf, 0, sizeof(dutCommand_t)); |
| |
| DPRINT_INFO(WFA_OUT, "Entering xcCmdProcStaGetIpConfig ...\n"); |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| str = strtok_r(NULL, ",", &pcmdStr); |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL) |
| return WFA_FAILURE; |
| |
| slen = strlen(str); |
| memcpy(getipconf.intf, str, slen); |
| wfaEncodeTLV(WFA_STA_GET_IP_CONFIG_TLV, sizeof(dutCommand_t), |
| (BYTE*)&getipconf, aBuf); |
| |
| *aLen = 4 + sizeof(getipconf); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetIpConfig(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| dutCommand_t staSetIpConfig; |
| caStaSetIpConfig_t* setip = |
| (caStaSetIpConfig_t*)&staSetIpConfig.cmdsu.ipconfig; |
| caStaSetIpConfig_t defparams = {"", 0, "", "", "", "", ""}; |
| char* str; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memcpy(setip, &defparams, sizeof(caStaSetIpConfig_t)); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setip->intf, str, 15); |
| DPRINT_INFO(WFA_OUT, "interface %s\n", setip->intf); |
| } else if (strcasecmp(str, "dhcp") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setip->isDhcp = atoi(str); |
| DPRINT_INFO(WFA_OUT, "dhcp %i\n", setip->isDhcp); |
| } else if (strcasecmp(str, "ip") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setip->ipaddr, str, 15); |
| DPRINT_INFO(WFA_OUT, "ip %s\n", setip->ipaddr); |
| } else if (strcasecmp(str, "mask") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setip->mask, str, 15); |
| DPRINT_INFO(WFA_OUT, "mask %s\n", setip->mask); |
| } else if (strcasecmp(str, "defaultGateway") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setip->defGateway, str, 15); |
| DPRINT_INFO(WFA_OUT, "gw %s\n", setip->defGateway); |
| } else if (strcasecmp(str, "primary-dns") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setip->pri_dns, str, 15); |
| DPRINT_INFO(WFA_OUT, "dns p %s\n", setip->pri_dns); |
| } else if (strcasecmp(str, "secondary-dns") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setip->sec_dns, str, 15); |
| DPRINT_INFO(WFA_OUT, "dns s %s\n", setip->sec_dns); |
| } else { |
| DPRINT_ERR(WFA_ERR, "invalid command %s\n", str); |
| return WFA_FAILURE; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_SET_IP_CONFIG_TLV, sizeof(staSetIpConfig), |
| (BYTE*)&staSetIpConfig, aBuf); |
| |
| *aLen = 4 + sizeof(staSetIpConfig); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaGetMacAddress(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| int slen; |
| char* str = NULL; |
| dutCommand_t getmac; |
| |
| DPRINT_INFO(WFA_OUT, "Entering xcCmdProcStaGetMacAddress ...\n"); |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| memset(&getmac, 0, sizeof(getmac)); |
| str = strtok_r(NULL, ",", &pcmdStr); |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL) |
| return WFA_FAILURE; |
| |
| slen = strlen(str); |
| memcpy(getmac.intf, str, slen); |
| wfaEncodeTLV(WFA_STA_GET_MAC_ADDRESS_TLV, sizeof(getmac), (BYTE*)&getmac, |
| aBuf); |
| |
| *aLen = 4 + sizeof(getmac); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetMacAddress(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| char* str = NULL; |
| dutCommand_t setmac; |
| |
| DPRINT_INFO(WFA_OUT, "Entering xcCmdProcStaSetMacAddress ...\n"); |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setmac.intf, str, 15); |
| DPRINT_INFO(WFA_OUT, "interface %s\n", setmac.intf); |
| } else if (strcasecmp(str, "mac") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setmac.cmdsu.macaddr, str, 17); |
| DPRINT_INFO(WFA_OUT, "mac %s\n", setmac.cmdsu.macaddr); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_SET_MAC_ADDRESS_TLV, sizeof(setmac), (BYTE*)&setmac, |
| aBuf); |
| |
| *aLen = 4 + sizeof(setmac); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaIsConnected(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| int slen; |
| char* str = NULL; |
| dutCommand_t isconnected; |
| |
| DPRINT_INFO(WFA_OUT, "Entering xcCmdProcStaIsConnected\n"); |
| |
| memset(&isconnected, 0, sizeof(isconnected)); |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| str = strtok_r(NULL, ",", &pcmdStr); |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL) |
| return WFA_FAILURE; |
| |
| slen = strlen(str); |
| memcpy(isconnected.intf, str, slen); |
| wfaEncodeTLV(WFA_STA_IS_CONNECTED_TLV, sizeof(isconnected), |
| (BYTE*)&isconnected, aBuf); |
| |
| *aLen = 4 + sizeof(isconnected); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaVerifyIpConnection(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| wfaTLV* hdr = (wfaTLV*)aBuf; |
| dutCommand_t* verifyip = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| DPRINT_INFO(WFA_OUT, "Entering xcCmdProcStaVerifyIpConnection ...\n"); |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(verifyip->intf, str, 15); |
| DPRINT_INFO(WFA_OUT, "interface %s %zu\n", verifyip->intf, |
| strlen(verifyip->intf)); |
| } else if (strcasecmp(str, "destination") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(verifyip->cmdsu.verifyIp.dipaddr, str, 15); |
| DPRINT_INFO(WFA_OUT, "ip %s\n", verifyip->cmdsu.verifyIp.dipaddr); |
| } else if (strcasecmp(str, "timeout") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| verifyip->cmdsu.verifyIp.timeout = atoi(str); |
| DPRINT_INFO(WFA_OUT, "timeout %i\n", verifyip->cmdsu.verifyIp.timeout); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_VERIFY_IP_CONNECTION_TLV, sizeof(verifyip), |
| (BYTE*)&verifyip, aBuf); |
| |
| hdr->tag = WFA_STA_VERIFY_IP_CONNECTION_TLV; |
| hdr->len = sizeof(dutCommand_t); |
| |
| *aLen = 4 + sizeof(dutCommand_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaGetBSSID(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| char* str = NULL; |
| dutCommand_t getbssid; |
| |
| DPRINT_INFO(WFA_OUT, "Entering xcCmdProcStaGetBSSID ...\n"); |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| memset(&getbssid, 0, sizeof(getbssid)); |
| str = strtok_r(NULL, ",", &pcmdStr); |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL) |
| return WFA_FAILURE; |
| |
| memcpy(getbssid.intf, str, WFA_IF_NAME_LEN - 1); |
| getbssid.intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| wfaEncodeTLV(WFA_STA_GET_BSSID_TLV, sizeof(getbssid), (BYTE*)&getbssid, aBuf); |
| |
| *aLen = 4 + sizeof(getbssid); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaGetStats(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| char* str = NULL; |
| dutCommand_t getstats; |
| |
| DPRINT_INFO(WFA_OUT, "Entering xcCmdProcStaGetStats ...\n"); |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| memset(&getstats, 0, sizeof(getstats)); |
| str = strtok_r(NULL, ",", &pcmdStr); |
| /* need to check if the parameter name is called interface */ |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL) |
| return WFA_FAILURE; |
| |
| memcpy(getstats.intf, str, WFA_IF_NAME_LEN - 1); |
| getstats.intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| wfaEncodeTLV(WFA_STA_GET_STATS_TLV, sizeof(getstats), (BYTE*)&getstats, aBuf); |
| |
| *aLen = 4 + sizeof(getstats); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetEncryption(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetEncryption_t* setencryp = |
| (caStaSetEncryption_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| caStaSetEncryption_t defparams = {"", "", 0, {"", "", "", ""}, 0}; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memcpy((void*)setencryp, (void*)&defparams, sizeof(caStaSetEncryption_t)); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setencryp->intf, str, 15); |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setencryp->ssid, str, WFA_SSID_NAME_LEN - 1); |
| } else if (strcasecmp(str, "encpType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "wep") == 0) |
| setencryp->encpType = ENCRYPT_WEP; |
| else |
| setencryp->encpType = 0; |
| } else if (strcasecmp(str, "key1") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy((char*)setencryp->keys[0], str, 26); |
| DPRINT_INFO(WFA_OUT, "%s\n", setencryp->keys[0]); |
| setencryp->activeKeyIdx = 0; |
| } else if (strcasecmp(str, "key2") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy((char*)setencryp->keys[1], str, 26); |
| DPRINT_INFO(WFA_OUT, "%s\n", setencryp->keys[1]); |
| } else if (strcasecmp(str, "key3") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy((char*)setencryp->keys[2], str, 26); |
| DPRINT_INFO(WFA_OUT, "%s\n", setencryp->keys[2]); |
| } else if (strcasecmp(str, "key4") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy((char*)setencryp->keys[3], str, 26); |
| DPRINT_INFO(WFA_OUT, "%s\n", setencryp->keys[3]); |
| } else if (strcasecmp(str, "activeKey") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setencryp->activeKeyIdx = atoi(str); |
| } else { |
| DPRINT_INFO(WFA_WNG, "Incorrect Command, check syntax\n"); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_SET_ENCRYPTION_TLV, sizeof(caStaSetEncryption_t), |
| (BYTE*)setencryp, aBuf); |
| |
| *aLen = 4 + sizeof(caStaSetEncryption_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetSecurity(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| int ret = WFA_SUCCESS; |
| |
| #ifndef WFA_PC_CONSOLE |
| dutCommand_t* cmd = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| caStaSetSecurity_t* ssec = &cmd->cmdsu.setsec; |
| char* str; |
| int secType = 0; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(cmd->intf, str, 15); |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(ssec->ssid, str, WFA_SSID_NAME_LEN - 1); |
| DPRINT_INFO(WFA_OUT, "ssid %s\n", ssec->ssid); |
| } else if (strcasecmp(str, "encpType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "tkip") == 0 || strcasecmp(str, "aes-ccmp") == 0) |
| strncpy(ssec->encpType, str, 8); |
| } else if (strcasecmp(str, "pmf") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "optional") == 0) |
| ssec->pmf = WFA_OPTIONAL; |
| else if (strcasecmp(str, "required") == 0) |
| ssec->pmf = WFA_REQUIRED; |
| else |
| ssec->pmf = WFA_DISABLED; |
| } |
| |
| else if (strcasecmp(str, "type") == 0) { |
| /* process the specific type of security */ |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "psk") == 0) { |
| ssec->type = secType = SEC_TYPE_PSK; |
| |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "passphrase") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(ssec->secu.passphrase, str, 63); |
| } |
| } else if (strcasecmp(str, "eaptls") == 0) { |
| ssec->type = secType = SEC_TYPE_EAPTLS; |
| } else if (strcasecmp(str, "eapttls") == 0) { |
| ssec->type = secType = SEC_TYPE_EAPTTLS; |
| } else if (strcasecmp(str, "eappeap") == 0) { |
| ssec->type = secType = SEC_TYPE_EAPPEAP; |
| } else if (strcasecmp(str, "eapsim") == 0) { |
| ssec->type = secType = SEC_TYPE_EAPSIM; |
| } else if (strcasecmp(str, "eapfast") == 0) { |
| ssec->type = secType = SEC_TYPE_EAPFAST; |
| } else if (strcasecmp(str, "eapaka") == 0) { |
| ssec->type = secType = SEC_TYPE_EAPAKA; |
| } |
| } |
| } |
| #endif |
| return ret; |
| } |
| |
| int xcCmdProcStaSetPSK(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetPSK_t* setencryp = (caStaSetPSK_t*)(aBuf + sizeof(wfaTLV)); |
| #ifndef WFA_PC_CONSOLE |
| char* str; |
| caStaSetPSK_t defparams = {"", "", "", "", 0, WFA_DISABLED}; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memcpy((void*)setencryp, (void*)&defparams, sizeof(caStaSetPSK_t)); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setencryp->intf, str, 15); |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setencryp->ssid, str, WFA_SSID_NAME_LEN - 1); |
| DPRINT_INFO(WFA_OUT, "ssid %s\n", setencryp->ssid); |
| } else if (strcasecmp(str, "passPhrase") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy((char*)setencryp->passphrase, str, 63); |
| } else if (strcasecmp(str, "keyMgmtType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setencryp->keyMgmtType, str, 15); |
| } else if (strcasecmp(str, "encpType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "tkip") == 0) |
| setencryp->encpType = ENCRYPT_TKIP; |
| else if (strcasecmp(str, "aes-ccmp") == 0) |
| setencryp->encpType = ENCRYPT_AESCCMP; |
| else if (strcasecmp(str, "aes-ccmp-tkip") == 0) |
| setencryp->encpType = ENCRYPT_AESCCMP_TKIP; |
| } else if (strcasecmp(str, "pmf") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "enable") == 0 || strcasecmp(str, "optional") == 0) |
| setencryp->pmf = WFA_ENABLED; |
| else if (strcasecmp(str, "required") == 0) |
| setencryp->pmf = WFA_REQUIRED; |
| else |
| setencryp->pmf = WFA_DISABLED; |
| } else if (strcasecmp(str, "micAlg") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "SHA-1") != 0) |
| strncpy(setencryp->micAlg, str, 15); |
| else |
| strncpy(setencryp->micAlg, "SHA-1", 15); |
| } else if (strcasecmp(str, "Prog") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setencryp->prog, str, 15); |
| } else if (strcasecmp(str, "Prefer") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setencryp->prefer = (atoi(str) == 1) ? 1 : 0; |
| } |
| } |
| #endif |
| wfaEncodeTLV(WFA_STA_SET_PSK_TLV, sizeof(caStaSetPSK_t), (BYTE*)setencryp, |
| aBuf); |
| |
| *aLen = 4 + sizeof(caStaSetPSK_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetEapTLS(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetEapTLS_t* setsec = (caStaSetEapTLS_t*)(aBuf + sizeof(wfaTLV)); |
| #ifndef WFA_PC_CONSOLE |
| char* str; |
| caStaSetEapTLS_t defparams = {"", "", "", "", "", "", "", 0, ""}; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memcpy((void*)setsec, (void*)&defparams, sizeof(caStaSetEapTLS_t)); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->intf, str, 15); |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->ssid, str, WFA_SSID_NAME_LEN - 1); |
| } else if (strcasecmp(str, "username") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->username, str, 31); |
| } else if (strcasecmp(str, "keyMgmtType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->keyMgmtType, str, 7); |
| } else if (strcasecmp(str, "encpType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->encrptype, str, 8); |
| } else if (strcasecmp(str, "trustedRootCA") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(setsec->trustedRootCA, str); |
| } else if (strcasecmp(str, "clientCertificate") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(setsec->clientCertificate, str); |
| } else if (strcasecmp(str, "pmf") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "enable") == 0 || strcasecmp(str, "optional") == 0) |
| setsec->pmf = WFA_ENABLED; |
| else if (strcasecmp(str, "required") == 0) |
| setsec->pmf = WFA_REQUIRED; |
| else if (strcasecmp(str, "forced_required") == 0) |
| setsec->pmf = WFA_F_REQUIRED; |
| else if (strcasecmp(str, "forced_disabled") == 0) |
| setsec->pmf = WFA_F_DISABLED; |
| else |
| setsec->pmf = WFA_DISABLED; |
| } else if (strcasecmp(str, "micAlg") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "SHA-1") != 0) |
| strncpy(setsec->micAlg, str, 15); |
| else |
| strncpy(setsec->micAlg, "SHA-1", 15); |
| } |
| } |
| |
| #endif |
| wfaEncodeTLV(WFA_STA_SET_EAPTLS_TLV, sizeof(caStaSetEapTLS_t), (BYTE*)setsec, |
| aBuf); |
| |
| *aLen = 4 + sizeof(caStaSetEapTLS_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetEapTTLS(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetEapTTLS_t* setsec = (caStaSetEapTTLS_t*)(aBuf + sizeof(wfaTLV)); |
| #ifndef WFA_PC_CONSOLE |
| caStaSetEapTTLS_t defparams = {"", "", "", "", "", "", "", ""}; |
| char* str; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memcpy((void*)setsec, (void*)&defparams, sizeof(caStaSetEapTTLS_t)); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->intf, str, 15); |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->ssid, str, WFA_SSID_NAME_LEN - 1); |
| } else if (strcasecmp(str, "username") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->username, str, 31); |
| } else if (strcasecmp(str, "password") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(setsec->passwd, str); |
| } else if (strcasecmp(str, "keyMgmtType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->keyMgmtType, str, 7); |
| } else if (strcasecmp(str, "encpType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->encrptype, str, 8); |
| } else if (strcasecmp(str, "trustedRootCA") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(setsec->trustedRootCA, str); |
| } else if (strcasecmp(str, "clientCertificate") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(setsec->clientCertificate, str); |
| } else if (strcasecmp(str, "pmf") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "enable") == 0 || strcasecmp(str, "optional") == 0) |
| setsec->pmf = WFA_ENABLED; |
| else if (strcasecmp(str, "required") == 0) |
| setsec->pmf = WFA_REQUIRED; |
| else |
| setsec->pmf = WFA_DISABLED; |
| } else if (strcasecmp(str, "micALg") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "SHA-1") != 0) |
| strncpy(setsec->micAlg, str, 15); |
| else |
| strncpy(setsec->micAlg, "SHA-1", 15); |
| } else if (strcasecmp(str, "Prog") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->prog, str, 15); |
| } else if (strcasecmp(str, "Prefer") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setsec->prefer = (atoi(str) == 1) ? 1 : 0; |
| } |
| } |
| |
| #endif |
| wfaEncodeTLV(WFA_STA_SET_EAPTTLS_TLV, sizeof(caStaSetEapTTLS_t), |
| (BYTE*)setsec, aBuf); |
| |
| *aLen = 4 + sizeof(caStaSetEapTTLS_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetEapSIM(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetEapSIM_t* setsec = (caStaSetEapSIM_t*)(aBuf + sizeof(wfaTLV)); |
| #ifndef WFA_PC_CONSOLE |
| char* str; |
| caStaSetEapSIM_t defparams = {"", "", "", "", "", "", 0, {"", "", ""}}; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memcpy((void*)setsec, (void*)&defparams, sizeof(caStaSetEapSIM_t)); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->intf, str, 15); |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->ssid, str, WFA_SSID_NAME_LEN - 1); |
| } else if (strcasecmp(str, "username") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->username, str, 31); |
| } else if (strcasecmp(str, "password") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(setsec->passwd, str); |
| } else if (strcasecmp(str, "keyMgmtType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->keyMgmtType, str, 7); |
| } else if (strcasecmp(str, "encpType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->encrptype, str, 8); |
| } else if (strcasecmp(str, "triplet1") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy((char*)setsec->tripletSet[0], str, 63); |
| DPRINT_INFO(WFA_OUT, "Triplet1 : %s\n", setsec->tripletSet[0]); |
| setsec->tripletCount = 1; |
| } else if (strcasecmp(str, "triplet2") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy((char*)setsec->tripletSet[1], str, 63); |
| DPRINT_INFO(WFA_OUT, "Triplet2 : %s\n", setsec->tripletSet[1]); |
| setsec->tripletCount = 2; |
| } else if (strcasecmp(str, "triplet3") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy((char*)setsec->tripletSet[2], str, 63); |
| DPRINT_INFO(WFA_OUT, "Triplet1 : %s\n", setsec->tripletSet[2]); |
| setsec->tripletCount = 3; |
| } else if (strcasecmp(str, "pmf") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "enable") == 0 || strcasecmp(str, "optional") == 0) |
| setsec->pmf = WFA_ENABLED; |
| else if (strcasecmp(str, "required") == 0) |
| setsec->pmf = WFA_REQUIRED; |
| else |
| setsec->pmf = WFA_DISABLED; |
| } |
| } |
| |
| #endif |
| wfaEncodeTLV(WFA_STA_SET_EAPSIM_TLV, sizeof(caStaSetEapSIM_t), (BYTE*)setsec, |
| aBuf); |
| |
| *aLen = 4 + sizeof(caStaSetEapSIM_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetPEAP(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetEapPEAP_t* setsec = (caStaSetEapPEAP_t*)(aBuf + sizeof(wfaTLV)); |
| #ifndef WFA_PC_CONSOLE |
| char* str; |
| caStaSetEapPEAP_t defparams = {"", "", "", "", "", "", "", "", 0}; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memcpy((void*)setsec, (void*)&defparams, sizeof(caStaSetEapPEAP_t)); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->intf, str, 15); |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->ssid, str, WFA_SSID_NAME_LEN - 1); |
| } else if (strcasecmp(str, "username") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->username, str, 31); |
| } else if (strcasecmp(str, "password") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(setsec->passwd, str); |
| } else if (strcasecmp(str, "keyMgmtType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->keyMgmtType, str, 7); |
| } else if (strcasecmp(str, "encpType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->encrptype, str, 8); |
| } else if (strcasecmp(str, "innerEAP") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(setsec->innerEAP, str); |
| } else if (strcasecmp(str, "trustedRootCA") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->trustedRootCA, str, 31); |
| } else if (strcasecmp(str, "peapVersion") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setsec->peapVersion = atoi(str); |
| } else if (strcasecmp(str, "pmf") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "enable") == 0 || strcasecmp(str, "optional") == 0) |
| setsec->pmf = WFA_ENABLED; |
| else if (strcasecmp(str, "required") == 0) |
| setsec->pmf = WFA_REQUIRED; |
| else |
| setsec->pmf = WFA_DISABLED; |
| } |
| } |
| |
| #endif |
| wfaEncodeTLV(WFA_STA_SET_PEAP_TLV, sizeof(caStaSetEapPEAP_t), (BYTE*)setsec, |
| aBuf); |
| |
| *aLen = 4 + sizeof(caStaSetEapPEAP_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetIBSS(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetIBSS_t* setibss = (caStaSetIBSS_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| int i = 0; |
| caStaSetIBSS_t defparams = {"", "", 0, 0, {"", "", "", ""}, 0xFF}; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memcpy((void*)setibss, (void*)&defparams, sizeof(caStaSetIBSS_t)); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setibss->intf, str, 15); |
| DPRINT_INFO(WFA_OUT, "interface %s\n", setibss->intf); |
| |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setibss->ssid, str, WFA_SSID_NAME_LEN - 1); |
| DPRINT_INFO(WFA_OUT, "ssid %s\n", setibss->ssid); |
| } else if (strcasecmp(str, "channel") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setibss->channel = atoi(str); |
| } else if (strcasecmp(str, "encpType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "wep") == 0) |
| setibss->encpType = ENCRYPT_WEP; |
| else |
| setibss->encpType = 0; |
| } else if (strncasecmp(str, "key1", 4) == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setibss->keys[i++], str, 26); |
| setibss->activeKeyIdx = 0; |
| } else if (strncasecmp(str, "key2", 4) == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setibss->keys[i++], str, 26); |
| } else if (strncasecmp(str, "key3", 4) == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setibss->keys[i++], str, 26); |
| } else if (strncasecmp(str, "key4", 4) == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setibss->keys[i++], str, 26); |
| } else if (strcasecmp(str, "activeKey") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setibss->activeKeyIdx = atoi(str); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_SET_IBSS_TLV, sizeof(caStaSetIBSS_t), (BYTE*)setibss, |
| aBuf); |
| |
| *aLen = 4 + sizeof(caStaSetIBSS_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcDeviceGetInfo(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| dutCommand_t* dutCmd = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| caDevInfo_t* dinfo = &dutCmd->cmdsu.dev; |
| char* str; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| printf("entering device get info\n"); |
| memset(aBuf, 0, *aLen); |
| |
| dinfo->fw = 0; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str != NULL && str[0] != '\0') { |
| if (strcasecmp(str, "firmware") == 0) { |
| dinfo->fw = 1; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_DEVICE_GET_INFO_TLV, sizeof(dutCommand_t), (BYTE*)dutCmd, |
| aBuf); |
| |
| *aLen = 4 + sizeof(dutCommand_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaGetInfo(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| char* str; |
| dutCommand_t* getInfo = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| return WFA_FAILURE; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(getInfo->intf, str, 15); |
| DPRINT_INFO(WFA_OUT, "interface %s\n", getInfo->intf); |
| } |
| |
| wfaEncodeTLV(WFA_STA_GET_INFO_TLV, sizeof(dutCommand_t), (BYTE*)getInfo, |
| aBuf); |
| |
| *aLen = 4 + sizeof(dutCommand_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaUpload(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| char* str; |
| dutCommand_t* dutCmd = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| caStaUpload_t* tdp = &dutCmd->cmdsu.upload; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| return WFA_FAILURE; |
| |
| if (strcasecmp(str, "test") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "voice") == 0) { |
| tdp->type = WFA_UPLOAD_VHSO_RPT; |
| DPRINT_INFO(WFA_OUT, "testdata voice %i\n", tdp->type); |
| str = strtok_r(NULL, ",", &pcmdStr); |
| tdp->next = atoi(str); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_UPLOAD_TLV, sizeof(dutCommand_t), (BYTE*)dutCmd, aBuf); |
| |
| *aLen = 4 + sizeof(dutCommand_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaAssociate(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| dutCommand_t* setassoc = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| caStaAssociate_t* assoc = &setassoc->cmdsu.assoc; |
| caStaAssociate_t defparams = {"", "", WFA_DISABLED}; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memcpy(assoc, &defparams, sizeof(caStaAssociate_t)); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setassoc->intf, str, 15); |
| DPRINT_INFO(WFA_OUT, "interface %s\n", setassoc->intf); |
| |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setassoc->cmdsu.assoc.ssid, str, WFA_SSID_NAME_LEN - 1); |
| DPRINT_INFO(WFA_OUT, "ssid %s\n", setassoc->cmdsu.assoc.ssid); |
| } else if (strcasecmp(str, "bssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setassoc->cmdsu.assoc.bssid, str, 17); |
| DPRINT_INFO(WFA_OUT, "bssid %s\n", setassoc->cmdsu.assoc.bssid); |
| } else if (strcasecmp(str, "wps") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "enabled") == 0) |
| setassoc->cmdsu.assoc.wps = WFA_ENABLED; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_ASSOCIATE_TLV, sizeof(dutCommand_t), (BYTE*)setassoc, |
| aBuf); |
| |
| *aLen = 4 + sizeof(dutCommand_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaReAssociate(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| dutCommand_t* setassoc = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| caStaAssociate_t* assoc = &setassoc->cmdsu.assoc; |
| caStaAssociate_t defparams = {"", "", WFA_DISABLED}; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memcpy(assoc, &defparams, sizeof(caStaAssociate_t)); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setassoc->intf, str, 15); |
| DPRINT_INFO(WFA_OUT, "interface %s\n", setassoc->intf); |
| |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setassoc->cmdsu.assoc.ssid, str, WFA_SSID_NAME_LEN - 1); |
| DPRINT_INFO(WFA_OUT, "ssid %s\n", setassoc->cmdsu.assoc.ssid); |
| } else if (strcasecmp(str, "bssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setassoc->cmdsu.assoc.bssid, str, 17); |
| DPRINT_INFO(WFA_OUT, "bssid %s\n", setassoc->cmdsu.assoc.bssid); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_REASSOCIATE_TLV, sizeof(dutCommand_t), (BYTE*)setassoc, |
| aBuf); |
| |
| *aLen = 4 + sizeof(dutCommand_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcDeviceListIF(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| dutCommand_t* getdevlist = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| return WFA_FAILURE; |
| |
| if (strcasecmp(str, "interfaceType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcmp(str, "802.11") == 0) |
| getdevlist->cmdsu.iftype = IF_80211; |
| |
| DPRINT_INFO(WFA_OUT, "interface type %i\n", getdevlist->cmdsu.iftype); |
| } |
| |
| wfaEncodeTLV(WFA_DEVICE_LIST_IF_TLV, sizeof(dutCommand_t), (BYTE*)getdevlist, |
| aBuf); |
| |
| *aLen = 4 + sizeof(dutCommand_t); |
| |
| #if DEBUG |
| for (i = 0; i < len; i++) |
| printf("%x ", buf[i]); |
| |
| printf("\n"); |
| #endif |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetUAPSD(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetUAPSD_t* setuapsd = (caStaSetUAPSD_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| wfaTLV* hdr = (wfaTLV*)aBuf; |
| caStaSetUAPSD_t defparams = {"", "", 0, 0, 0, 0, 0}; |
| |
| DPRINT_INFO(WFA_OUT, "start xcCmdProcAgentConfig ...\n"); |
| DPRINT_INFO(WFA_OUT, "params: %s\n", pcmdStr); |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memcpy((void*)setuapsd, (void*)&defparams, sizeof(caStaSetUAPSD_t)); |
| setuapsd->acBE = 0; |
| setuapsd->acBK = 0; |
| setuapsd->acVI = 0; |
| setuapsd->acVO = 0; |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setuapsd->intf, str, 15); |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setuapsd->ssid, str, WFA_SSID_NAME_LEN - 1); |
| } else if (strcasecmp(str, "maxSP") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setuapsd->maxSPLength = atoi(str); |
| } else if (strcasecmp(str, "acBE") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setuapsd->acBE = atoi(str); |
| |
| } else if (strcasecmp(str, "acBK") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setuapsd->acBK = atoi(str); |
| |
| } else if (strcasecmp(str, "acVI") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setuapsd->acVI = atoi(str); |
| } else if (strcasecmp(str, "acVO") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setuapsd->acVO = atoi(str); |
| } else if (strcasecmp(str, "type") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setuapsd->type = atoi(str); |
| } else if (strcasecmp(str, "peer") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setuapsd->peer, str, 17); |
| } |
| } |
| hdr->tag = WFA_STA_SET_UAPSD_TLV; |
| hdr->len = sizeof(caStaSetUAPSD_t); |
| |
| memcpy(aBuf + 4, setuapsd, sizeof(caStaSetUAPSD_t)); |
| |
| *aLen = 4 + sizeof(caStaSetUAPSD_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaDebugSet(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| dutCommand_t* debugSet = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "level") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (atoi(str) == WFA_DEBUG_INFO || atoi(str) == WFA_DEBUG_WARNING) { |
| debugSet->cmdsu.dbg.level = atoi(str); |
| DPRINT_INFO(WFA_OUT, "dbg level %i\n", debugSet->cmdsu.dbg.level); |
| } else |
| return WFA_FAILURE; /* not support */ |
| |
| } else if (strcasecmp(str, "enable") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| printf("enable %i\n", atoi(str)); |
| switch (atoi(str)) /* enable */ |
| { |
| case 1: |
| debugSet->cmdsu.dbg.state = 1; |
| printf("enable\n"); |
| break; |
| case 0: |
| debugSet->cmdsu.dbg.state = 0; |
| printf("disable\n"); |
| break; |
| default: |
| printf("wrong\n"); |
| return WFA_FAILURE; /* command invalid */ |
| } |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_DEBUG_SET_TLV, sizeof(dutCommand_t), (BYTE*)debugSet, |
| aBuf); |
| |
| *aLen = 4 + sizeof(dutCommand_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetMode(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetMode_t* setmode = (caStaSetMode_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| caStaSetMode_t defparams = {"", "", 0, 0, 0, {"", "", "", ""}, 0xFF}; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memcpy((void*)setmode, (void*)&defparams, sizeof(caStaSetMode_t)); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setmode->intf, str, 15); |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setmode->ssid, str, WFA_SSID_NAME_LEN - 1); |
| } else if (strcasecmp(str, "encpType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "wep") == 0) |
| setmode->encpType = ENCRYPT_WEP; |
| else |
| setmode->encpType = 0; |
| } else if (strcasecmp(str, "key1") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy((char*)setmode->keys[0], str, 26); |
| DPRINT_INFO(WFA_OUT, "%s\n", setmode->keys[0]); |
| setmode->activeKeyIdx = 0; |
| } else if (strcasecmp(str, "key2") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy((char*)setmode->keys[1], str, 26); |
| DPRINT_INFO(WFA_OUT, "%s\n", setmode->keys[1]); |
| } else if (strcasecmp(str, "key3") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy((char*)setmode->keys[2], str, 26); |
| DPRINT_INFO(WFA_OUT, "%s\n", setmode->keys[2]); |
| } else if (strcasecmp(str, "key4") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy((char*)setmode->keys[3], str, 26); |
| DPRINT_INFO(WFA_OUT, "%s\n", setmode->keys[3]); |
| } else if (strcasecmp(str, "activeKey") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setmode->activeKeyIdx = atoi(str); |
| } else if (strcasecmp(str, "mode") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| printf("\r\n mode is %s\n", str); |
| if (strcasecmp(str, "adhoc") == 0) |
| setmode->mode = 1; |
| else |
| setmode->mode = 0; |
| } else if (strcasecmp(str, "channel") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setmode->channel = atoi(str); |
| } else { |
| DPRINT_INFO(WFA_WNG, "Incorrect Command, check syntax\n"); |
| printf("\r\n mode is %s\n", str); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_SET_MODE_TLV, sizeof(caStaSetMode_t), (BYTE*)setmode, |
| aBuf); |
| *aLen = 4 + sizeof(caStaSetMode_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaGetP2pDevAddress(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| dutCommand_t* getP2pDevAdd = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(getP2pDevAdd->intf, str, WFA_IF_NAME_LEN - 1); |
| getP2pDevAdd->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_GET_DEV_ADDRESS_TLV, sizeof(dutCommand_t), |
| (BYTE*)getP2pDevAdd, aBuf); |
| |
| *aLen = 4 + sizeof(dutCommand_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaSetP2p(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetP2p_t* staSetP2p = (caStaSetP2p_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSetP2p->intf, str, WFA_IF_NAME_LEN - 1); |
| staSetP2p->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| |
| } else if (strcasecmp(str, "listen_chn") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->listen_chn = atoi(str); |
| staSetP2p->listen_chn_flag = 1; |
| } else if (strcasecmp(str, "p2p_mode") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSetP2p->p2p_mode, str, 15); |
| staSetP2p->p2p_mode_flag = 1; |
| } else if (strcasecmp(str, "persistent") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->presistent = atoi(str); |
| staSetP2p->presistent_flag = 1; |
| } else if (strcasecmp(str, "intra_bss") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->intra_bss = atoi(str); |
| staSetP2p->intra_bss_flag = 1; |
| } else if (strcasecmp(str, "noa_duration") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->noa_duration = atoi(str); |
| staSetP2p->noa_duration_flag = 1; |
| } else if (strcasecmp(str, "noa_interval") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->noa_interval = atoi(str); |
| staSetP2p->noa_interval_flag = 1; |
| } else if (strcasecmp(str, "noa_count") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->noa_count = atoi(str); |
| staSetP2p->noa_count_flag = 1; |
| } else if (strcasecmp(str, "concurrency") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->concurrency = atoi(str); |
| staSetP2p->concurrency_flag = 1; |
| } else if (strcasecmp(str, "p2pinvitation") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->p2p_invitation = atoi(str); |
| staSetP2p->p2p_invitation_flag = 1; |
| } else if (strcasecmp(str, "bcn_int") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->bcn_int = atoi(str); |
| staSetP2p->bcn_int_flag = 1; |
| } else if (strcasecmp(str, "ext_listen_time_interval") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->ext_listen_time_int = atoi(str); |
| staSetP2p->ext_listen_time_int_flag = 1; |
| } else if (strcasecmp(str, "ext_listen_time_period") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->ext_listen_time_period = atoi(str); |
| staSetP2p->ext_listen_time_period_flag = 1; |
| } else if (strcasecmp(str, "discoverability") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->discoverability = atoi(str); |
| staSetP2p->discoverability_flag = 1; |
| } else if (strcasecmp(str, "service_discovery") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->service_discovery = atoi(str); |
| staSetP2p->service_discovry_flag = 1; |
| } else if (strcasecmp(str, "crossconnection") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->crossconnection = atoi(str); |
| staSetP2p->crossconnection_flag = 1; |
| } else if (strcasecmp(str, "p2pmanaged") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->p2pmanaged = atoi(str); |
| staSetP2p->p2pmanaged_flag = 1; |
| } else if (strcasecmp(str, "go_apsd") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetP2p->go_apsd = atoi(str); |
| staSetP2p->go_apsd_flag = 1; |
| } else if (strcasecmp(str, "DiscoverType") == 0) { |
| staSetP2p->discover_type_flag = 1; |
| |
| str = strtok_r(NULL, ",", &pcmdStr); |
| printf("DiscoverType is %s\n", str); |
| if (strcasecmp(str, "WFD") == 0) |
| staSetP2p->discoverType = 1; |
| else if (strcasecmp(str, "P2P") == 0) |
| staSetP2p->discoverType = 2; |
| else if (strcasecmp(str, "TDLS") == 0) |
| staSetP2p->discoverType = 3; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_SETP2P_TLV, sizeof(caStaSetP2p_t), (BYTE*)staSetP2p, |
| aBuf); |
| |
| *aLen = 4 + sizeof(caStaSetP2p_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaP2pConnect(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaP2pConnect_t* staP2pConnect = |
| (caStaP2pConnect_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staP2pConnect->intf, str, WFA_IF_NAME_LEN - 1); |
| staP2pConnect->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "groupid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staP2pConnect->grpid, str, WFA_P2P_GRP_ID_LEN - 1); |
| staP2pConnect->grpid[WFA_P2P_GRP_ID_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "p2pdevid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staP2pConnect->devId, str, WFA_P2P_DEVID_LEN - 1); |
| staP2pConnect->devId[WFA_P2P_DEVID_LEN - 1] = '\0'; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_CONNECT_TLV, sizeof(caStaP2pConnect_t), |
| (BYTE*)staP2pConnect, aBuf); |
| |
| *aLen = 4 + sizeof(caStaP2pConnect_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaP2pStartGroupFormation(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaP2pStartGrpForm_t* staP2pStartGrpForm = |
| (caStaP2pStartGrpForm_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staP2pStartGrpForm->intf, str, WFA_IF_NAME_LEN - 1); |
| staP2pStartGrpForm->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "p2pdevid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staP2pStartGrpForm->devId, str, WFA_P2P_DEVID_LEN - 1); |
| staP2pStartGrpForm->devId[WFA_P2P_DEVID_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "intent_val") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staP2pStartGrpForm->intent_val = atoi(str); |
| } else if (strcasecmp(str, "init_go_neg") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staP2pStartGrpForm->init_go_neg = atoi(str); |
| } else if (strcasecmp(str, "oper_chn") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staP2pStartGrpForm->oper_chn = atoi(str); |
| staP2pStartGrpForm->oper_chn_flag = 1; |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staP2pStartGrpForm->ssid, str, WFA_SSID_NAME_LEN - 1); |
| staP2pStartGrpForm->ssid[WFA_SSID_NAME_LEN - 1] = '\0'; |
| staP2pStartGrpForm->ssid_flag = 1; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_START_GRP_FORMATION_TLV, |
| sizeof(caStaP2pStartGrpForm_t), (BYTE*)staP2pStartGrpForm, aBuf); |
| |
| *aLen = 4 + sizeof(caStaP2pStartGrpForm_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaP2pDissolve(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaP2pDissolve_t* staP2pDissolve = |
| (caStaP2pDissolve_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staP2pDissolve->intf, str, WFA_IF_NAME_LEN - 1); |
| staP2pDissolve->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "groupid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staP2pDissolve->grpId, str, WFA_P2P_GRP_ID_LEN - 1); |
| staP2pDissolve->grpId[WFA_P2P_GRP_ID_LEN - 1] = '\0'; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_DISSOLVE_TLV, sizeof(caStaP2pDissolve_t), |
| (BYTE*)staP2pDissolve, aBuf); |
| |
| *aLen = 4 + sizeof(caStaP2pDissolve_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaSendP2pInvReq(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSendP2pInvReq_t* staSendP2pInvReq = |
| (caStaSendP2pInvReq_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSendP2pInvReq->intf, str, WFA_IF_NAME_LEN - 1); |
| staSendP2pInvReq->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "groupid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSendP2pInvReq->grpId, str, WFA_P2P_GRP_ID_LEN - 1); |
| staSendP2pInvReq->grpId[WFA_P2P_GRP_ID_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "p2pdevid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSendP2pInvReq->devId, str, WFA_P2P_DEVID_LEN - 1); |
| staSendP2pInvReq->devId[WFA_P2P_DEVID_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "reinvoke") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSendP2pInvReq->reinvoke = atoi(str); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_SEND_INV_REQ_TLV, sizeof(caStaSendP2pInvReq_t), |
| (BYTE*)staSendP2pInvReq, aBuf); |
| |
| *aLen = 4 + sizeof(caStaSendP2pInvReq_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaAcceptP2pInvReq(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaAcceptP2pInvReq_t* staAccceptP2pInvReq = |
| (caStaAcceptP2pInvReq_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staAccceptP2pInvReq->intf, str, WFA_IF_NAME_LEN - 1); |
| staAccceptP2pInvReq->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "groupid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staAccceptP2pInvReq->grpId, str, WFA_P2P_GRP_ID_LEN - 1); |
| staAccceptP2pInvReq->grpId[WFA_P2P_GRP_ID_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "p2pdevid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staAccceptP2pInvReq->devId, str, WFA_P2P_DEVID_LEN - 1); |
| staAccceptP2pInvReq->devId[WFA_P2P_DEVID_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "reinvoke") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staAccceptP2pInvReq->reinvoke = atoi(str); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_ACCEPT_INV_REQ_TLV, sizeof(caStaAcceptP2pInvReq_t), |
| (BYTE*)staAccceptP2pInvReq, aBuf); |
| |
| *aLen = 4 + sizeof(caStaAcceptP2pInvReq_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaSendP2pProvDisReq(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSendP2pProvDisReq_t* staSendP2pProvDisReq = |
| (caStaSendP2pProvDisReq_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSendP2pProvDisReq->intf, str, WFA_IF_NAME_LEN - 1); |
| staSendP2pProvDisReq->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "configmethod") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSendP2pProvDisReq->confMethod, str, 15); |
| } else if (strcasecmp(str, "p2pdevid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSendP2pProvDisReq->devId, str, WFA_P2P_DEVID_LEN - 1); |
| staSendP2pProvDisReq->devId[WFA_P2P_DEVID_LEN - 1] = '\0'; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_SEND_PROV_DIS_REQ_TLV, |
| sizeof(caStaSendP2pProvDisReq_t), (BYTE*)staSendP2pProvDisReq, |
| aBuf); |
| |
| *aLen = 4 + sizeof(caStaSendP2pProvDisReq_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaSetWpsPbc(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetWpsPbc_t* staSetWpsPbc = (caStaSetWpsPbc_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSetWpsPbc->intf, str, WFA_IF_NAME_LEN - 1); |
| staSetWpsPbc->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "groupid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSetWpsPbc->grpId, str, WFA_P2P_GRP_ID_LEN - 1); |
| staSetWpsPbc->grpId[WFA_P2P_GRP_ID_LEN - 1] = '\0'; |
| staSetWpsPbc->grpid_flag = 1; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_WPS_SETWPS_PBC_TLV, sizeof(caStaSetWpsPbc_t), |
| (BYTE*)staSetWpsPbc, aBuf); |
| |
| *aLen = 4 + sizeof(caStaSetWpsPbc_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaWpsReadPin(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaWpsReadPin_t* staWpsReadPin = |
| (caStaWpsReadPin_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staWpsReadPin->intf, str, WFA_IF_NAME_LEN - 1); |
| staWpsReadPin->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "groupid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staWpsReadPin->grpId, str, WFA_P2P_GRP_ID_LEN - 1); |
| staWpsReadPin->grpId[WFA_P2P_GRP_ID_LEN - 1] = '\0'; |
| staWpsReadPin->grpid_flag = 1; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_WPS_READ_PIN_TLV, sizeof(caStaWpsReadPin_t), |
| (BYTE*)staWpsReadPin, aBuf); |
| |
| *aLen = 4 + sizeof(caStaWpsReadPin_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaWpsReadLabel(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaWpsReadLabel_t* staWpsReadLabel = |
| (caStaWpsReadLabel_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staWpsReadLabel->intf, str, WFA_IF_NAME_LEN - 1); |
| staWpsReadLabel->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "groupid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staWpsReadLabel->grpId, str, WFA_P2P_GRP_ID_LEN - 1); |
| staWpsReadLabel->grpId[WFA_P2P_GRP_ID_LEN - 1] = '\0'; |
| staWpsReadLabel->grpid_flag = 1; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_WPS_READ_LABEL_TLV, sizeof(caStaWpsReadLabel_t), |
| (BYTE*)staWpsReadLabel, aBuf); |
| |
| *aLen = 4 + sizeof(caStaWpsReadLabel_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaWpsEnterPin(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaWpsEnterPin_t* staWpsEnterPin = |
| (caStaWpsEnterPin_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staWpsEnterPin->intf, str, WFA_IF_NAME_LEN - 1); |
| staWpsEnterPin->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "pin") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staWpsEnterPin->wpsPin, str, WFA_WPS_PIN_LEN - 1); |
| staWpsEnterPin->wpsPin[WFA_WPS_PIN_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "groupid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staWpsEnterPin->grpId, str, WFA_P2P_GRP_ID_LEN - 1); |
| staWpsEnterPin->grpId[WFA_P2P_GRP_ID_LEN - 1] = '\0'; |
| staWpsEnterPin->grpid_flag = 1; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_WPS_ENTER_PIN_TLV, sizeof(caStaWpsEnterPin_t), |
| (BYTE*)staWpsEnterPin, aBuf); |
| |
| *aLen = 4 + sizeof(caStaWpsEnterPin_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaGetPsk(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaGetPsk_t* staGetPsk = (caStaGetPsk_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staGetPsk->intf, str, WFA_IF_NAME_LEN - 1); |
| staGetPsk->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "groupid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staGetPsk->grpId, str, WFA_P2P_GRP_ID_LEN - 1); |
| staGetPsk->grpId[WFA_P2P_GRP_ID_LEN - 1] = '\0'; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_GET_PSK_TLV, sizeof(caStaGetPsk_t), (BYTE*)staGetPsk, |
| aBuf); |
| |
| *aLen = 4 + sizeof(caStaGetPsk_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaP2pStartAutoGo(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaStartAutoGo_t* staP2pStartAutoGo = |
| (caStaStartAutoGo_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staP2pStartAutoGo->intf, str, WFA_IF_NAME_LEN - 1); |
| staP2pStartAutoGo->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "oper_chn") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staP2pStartAutoGo->oper_chn = atoi(str); |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staP2pStartAutoGo->ssid, str, WFA_SSID_NAME_LEN - 1); |
| staP2pStartAutoGo->ssid[WFA_SSID_NAME_LEN - 1] = '\0'; |
| staP2pStartAutoGo->ssid_flag = 1; |
| } else if (strcasecmp(str, "RTSP") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staP2pStartAutoGo->rtsp_flag = 1; |
| staP2pStartAutoGo->rtsp = atoi(str); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_START_AUTO_GO_TLV, sizeof(caStaStartAutoGo_t), |
| (BYTE*)staP2pStartAutoGo, aBuf); |
| |
| *aLen = 4 + sizeof(caStaStartAutoGo_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaP2pReset(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| dutCommand_t* staP2pReset = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staP2pReset->intf, str, WFA_IF_NAME_LEN - 1); |
| staP2pReset->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_RESET_TLV, sizeof(dutCommand_t), (BYTE*)staP2pReset, |
| aBuf); |
| |
| *aLen = 4 + sizeof(dutCommand_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaGetP2pIpConfig(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaGetP2pIpConfig_t* staGetP2pIpConfig = |
| (caStaGetP2pIpConfig_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staGetP2pIpConfig->intf, str, WFA_IF_NAME_LEN - 1); |
| staGetP2pIpConfig->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "groupid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staGetP2pIpConfig->grpId, str, WFA_P2P_GRP_ID_LEN - 1); |
| staGetP2pIpConfig->grpId[WFA_P2P_GRP_ID_LEN - 1] = '\0'; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_GET_IP_CONFIG_TLV, sizeof(caStaGetP2pIpConfig_t), |
| (BYTE*)staGetP2pIpConfig, aBuf); |
| |
| *aLen = 4 + sizeof(caStaGetP2pIpConfig_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaSendServiceDiscoveryReq(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSendServiceDiscoveryReq_t* staSendServiceDiscoveryReq = |
| (caStaSendServiceDiscoveryReq_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSendServiceDiscoveryReq->intf, str, WFA_IF_NAME_LEN - 1); |
| staSendServiceDiscoveryReq->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "p2pdevid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSendServiceDiscoveryReq->devId, str, WFA_P2P_DEVID_LEN - 1); |
| staSendServiceDiscoveryReq->devId[WFA_P2P_DEVID_LEN - 1] = '\0'; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_SEND_SERVICE_DISCOVERY_REQ_TLV, |
| sizeof(caStaSendServiceDiscoveryReq_t), |
| (BYTE*)staSendServiceDiscoveryReq, aBuf); |
| |
| *aLen = 4 + sizeof(caStaSendServiceDiscoveryReq_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaSendP2pPresenceReq(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSendP2pPresenceReq_t* staSendP2pPresenceReq = |
| (caStaSendP2pPresenceReq_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSendP2pPresenceReq->intf, str, WFA_IF_NAME_LEN - 1); |
| staSendP2pPresenceReq->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "interval") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSendP2pPresenceReq->interval = atoll(str); |
| } else if (strcasecmp(str, "duration") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSendP2pPresenceReq->duration = atoll(str); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_SEND_PRESENCE_REQ_TLV, |
| sizeof(caStaSendP2pPresenceReq_t), (BYTE*)staSendP2pPresenceReq, |
| aBuf); |
| |
| *aLen = 4 + sizeof(caStaSendP2pPresenceReq_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaSetSleepReq(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetSleep_t* staSetSleep = (caStaSetSleep_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSetSleep->intf, str, WFA_IF_NAME_LEN - 1); |
| staSetSleep->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "groupid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSetSleep->grpId, str, WFA_P2P_GRP_ID_LEN - 1); |
| staSetSleep->grpId[WFA_P2P_GRP_ID_LEN - 1] = '\0'; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_SET_SLEEP_TLV, sizeof(caStaSetSleep_t), |
| (BYTE*)staSetSleep, aBuf); |
| |
| *aLen = 4 + sizeof(caStaSetSleep_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaSetOpportunistcPsReq(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetOpprPs_t* staSetOpprPs = (caStaSetOpprPs_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSetOpprPs->intf, str, WFA_IF_NAME_LEN - 1); |
| staSetOpprPs->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "ctwindow") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetOpprPs->ctwindow = atoi(str); |
| } else if (strcasecmp(str, "groupid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSetOpprPs->grpId, str, WFA_P2P_GRP_ID_LEN - 1); |
| staSetOpprPs->grpId[WFA_P2P_GRP_ID_LEN - 1] = '\0'; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_SET_OPPORTUNISTIC_PS_TLV, sizeof(caStaSetOpprPs_t), |
| (BYTE*)staSetOpprPs, aBuf); |
| |
| *aLen = 4 + sizeof(caStaSetOpprPs_t); |
| |
| return TRUE; |
| } |
| int xcCmdProcStaAddARPTableEntry(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaAddARPTableEntry_t* staAddARPTableEntry = |
| (caStaAddARPTableEntry_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staAddARPTableEntry->intf, str, WFA_IF_NAME_LEN - 1); |
| staAddARPTableEntry->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "macaddress") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(staAddARPTableEntry->macaddress, str); |
| } else if (strcasecmp(str, "ipaddress") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(staAddARPTableEntry->ipaddress, str); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_ADD_ARP_TABLE_ENTRY_TLV, |
| sizeof(caStaAddARPTableEntry_t), (BYTE*)staAddARPTableEntry, |
| aBuf); |
| |
| *aLen = 4 + sizeof(caStaAddARPTableEntry_t); |
| |
| return TRUE; |
| } |
| int xcCmdProcStaBlockICMPResponse(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaBlockICMPResponse_t* staBlockICMPResponse = |
| (caStaBlockICMPResponse_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staBlockICMPResponse->intf, str, WFA_IF_NAME_LEN - 1); |
| staBlockICMPResponse->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "groupid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(staBlockICMPResponse->grpId, str); |
| } else if (strcasecmp(str, "ipaddress") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(staBlockICMPResponse->ipaddress, str); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_P2P_BLOCK_ICMP_RESPONSE_TLV, |
| sizeof(caStaBlockICMPResponse_t), (BYTE*)staBlockICMPResponse, |
| aBuf); |
| |
| *aLen = 4 + sizeof(caStaBlockICMPResponse_t); |
| |
| return TRUE; |
| } |
| |
| int xcCmdProcStaSetPwrSave(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetPwrSave_t* setps = (caStaSetPwrSave_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setps->intf, str, 15); |
| } else if (strcasecmp(str, "mode") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setps->mode, str, 7); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_SET_PWRSAVE_TLV, sizeof(caStaSetPwrSave_t), (BYTE*)setps, |
| aBuf); |
| *aLen = 4 + sizeof(caStaSetPwrSave_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetWMM(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| #ifdef WFA_WMM_AC |
| caStaSetWMM_t* setwmm = (caStaSetWMM_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| wfaTLV* hdr = (wfaTLV*)aBuf; |
| |
| DPRINT_INFO(WFA_OUT, "start xcCmdProcStaSetWMM ...\n"); |
| DPRINT_INFO(WFA_OUT, "params: %s\n", pcmdStr); |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| /* Some default values, in case they are not specified*/ |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setwmm->intf, str, 15); |
| } else if (strcasecmp(str, "GROUP") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "WMMAC") == 0) |
| setwmm->group = GROUP_WMMAC; |
| else if (strcasecmp(str, "WMM-CONFIG") == 0) { |
| setwmm->group = GROUP_WMMCONF; |
| setwmm->actions.config.frag_thr = 2346; |
| setwmm->actions.config.rts_thr = 2346; |
| setwmm->actions.config.wmm = 1; |
| } |
| } else if (strcasecmp(str, "ACTION") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "addts") == 0) { |
| //Put default values for the tspec element |
| setwmm->action = WMMAC_ADDTS; |
| setwmm->actions.addts.accesscat = WMMAC_AC_BE; |
| setwmm->actions.addts.tspec.tsinfo.dummy1 = 1; |
| setwmm->actions.addts.tspec.tsinfo.dummy2 = 0; |
| } else if (strcasecmp(str, "delts") == 0) |
| setwmm->action = WMMAC_DELTS; |
| DPRINT_INFO(WFA_OUT, "action is %d\n", setwmm->action); |
| } else if (strcasecmp(str, "RTS_thr") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.config.rts_thr = atoi(str); |
| } else if (strcasecmp(str, "wmm") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (atoi(str) != 0) |
| setwmm->actions.config.wmm = 1; |
| else |
| setwmm->actions.config.wmm = 0; |
| } else if (strcasecmp(str, "Frag_thr") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.config.frag_thr = atoi(str); |
| } else if (strcasecmp(str, "DIALOG_TOKEN") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.dialog_token = atoi(str); |
| } else if (strcasecmp(str, "TID") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (setwmm->action == WMMAC_ADDTS) |
| setwmm->actions.addts.tspec.tsinfo.TID = atoi(str); |
| else |
| setwmm->actions.delts = atoi(str); |
| } else if (strcasecmp(str, "SENDTRIG") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "true") == 0) |
| setwmm->send_trig = 1; |
| else |
| setwmm->send_trig = 0; |
| } else if (strcasecmp(str, "DEST") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setwmm->dipaddr, str, 15); |
| } else if (strcasecmp(str, "trigac") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "VO") == 0) |
| setwmm->trig_ac = WMMAC_AC_VO; |
| else if (strcasecmp(str, "VI") == 0) |
| setwmm->trig_ac = WMMAC_AC_VI; |
| else if (strcasecmp(str, "BE") == 0) |
| setwmm->trig_ac = WMMAC_AC_BE; |
| else if (strcasecmp(str, "BK") == 0) |
| setwmm->trig_ac = WMMAC_AC_BK; |
| } else if (strcasecmp(str, "DIRECTION") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "UP") == 0) |
| setwmm->actions.addts.tspec.tsinfo.direction = WMMAC_UPLINK; |
| else if (strcasecmp(str, "DOWN") == 0) |
| setwmm->actions.addts.tspec.tsinfo.direction = WMMAC_DOWNLINK; |
| else if (strcasecmp(str, "BIDI") == 0) |
| setwmm->actions.addts.tspec.tsinfo.direction = WMMAC_BIDIR; |
| } else if (strcasecmp(str, "PSB") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "UAPSD") == 0) |
| setwmm->actions.addts.tspec.tsinfo.PSB = 1; |
| else |
| setwmm->actions.addts.tspec.tsinfo.PSB = 0; |
| } else if (strcasecmp(str, "UP") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.tsinfo.UP = atoi(str); |
| } else if (strcasecmp(str, "Fixed") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "true") == 0) |
| setwmm->actions.addts.tspec.Fixed = 1; |
| else |
| setwmm->actions.addts.tspec.Fixed = 0; |
| } else if (strcasecmp(str, "SIZE") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.size = atoi(str); |
| } else if (strcasecmp(str, "MAXSIZE") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.maxsize = atoi(str); |
| } else if (strcasecmp(str, "MIN_SRVC_INTRVL") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.min_srvc = atoi(str); |
| } else if (strcasecmp(str, "MAX_SRVC_INTRVL") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.max_srvc = atoi(str); |
| } else if (strcasecmp(str, "INACTIVITY") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.inactivity = atoi(str); |
| } else if (strcasecmp(str, "SUSPENSION") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.suspension = atoi(str); |
| } else if (strcasecmp(str, "SRVCSTARTTIME") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.srvc_strt_tim = atoi(str); |
| } else if (strcasecmp(str, "MINDATARATE") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.mindatarate = atoi(str); |
| } else if (strcasecmp(str, "MEANDATARATE") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.meandatarate = atoi(str); |
| } else if (strcasecmp(str, "PEAKDATARATE") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.peakdatarate = atoi(str); |
| } else if (strcasecmp(str, "BURSTSIZE") == 0 || |
| strcasecmp(str, "MSDUAGGR") == 0) { |
| // which is used is depending on BurstSizeDef |
| // additional checking will be needed. |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.burstsize = atoi(str); |
| } else if (strcasecmp(str, "DELAYBOUND") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.delaybound = atoi(str); |
| } else if (strcasecmp(str, "PHYRATE") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.PHYrate = atoi(str); |
| } else if (strcasecmp(str, "SBA") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.sba = atof(str); |
| } else if (strcasecmp(str, "MEDIUM_TIME") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| setwmm->actions.addts.tspec.medium_time = atoi(str); |
| } else if (strcasecmp(str, "ACCESSCAT") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "VO") == 0) |
| setwmm->actions.addts.accesscat = WMMAC_AC_VO; |
| else if (strcasecmp(str, "VI") == 0) |
| setwmm->actions.addts.accesscat = WMMAC_AC_VI; |
| else if (strcasecmp(str, "BE") == 0) |
| setwmm->actions.addts.accesscat = WMMAC_AC_BE; |
| else if (strcasecmp(str, "BK") == 0) |
| setwmm->actions.addts.accesscat = WMMAC_AC_BK; |
| } else if (strcasecmp(str, "infoAck") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "HT") == 0) { |
| setwmm->actions.addts.tspec.tsinfo.infoAck = 1; |
| } else // normal |
| { |
| setwmm->actions.addts.tspec.tsinfo.infoAck = 0; |
| } |
| } else if (strcasecmp(str, "BurstSizeDef") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "SET") == 0) { |
| setwmm->actions.addts.tspec.tsinfo.bstSzDef = 1; |
| } else // CLEAR |
| { |
| setwmm->actions.addts.tspec.tsinfo.bstSzDef = 0; |
| } |
| } |
| } |
| if (setwmm->action == WMMAC_ADDTS) |
| printf( |
| "ADDTS AC PARAMS: dialog id: %d, TID: %d, DIRECTION: %d, PSB: %d, UP: %d, INFOACK: %d BURST SIZE DEFN: %d\ |
| Fixed %d, MSDU Size: %d, Max MSDU Size %d, MIN SERVICE INTERVAL: %d, MAX SERVICE INTERVAL: %d\ |
| ,INACTIVITY: %d,SUSPENSION %d,SERVICE START TIME: %d,MIN DATARATE: %d,MEAN DATA RATE: %d\ |
| , PEAK DATA RATE: %d,BURSTSIZE or MSDU Aggreg: %d,DELAY BOUND: %d,PHYRATE: %d, SPLUSBW: %f,MEDIUM TIME: %d, ACCESSCAT: %d\n", |
| setwmm->actions.addts.dialog_token, |
| setwmm->actions.addts.tspec.tsinfo.TID, |
| setwmm->actions.addts.tspec.tsinfo.direction, |
| setwmm->actions.addts.tspec.tsinfo.PSB, |
| setwmm->actions.addts.tspec.tsinfo.UP, |
| setwmm->actions.addts.tspec.tsinfo.infoAck, |
| setwmm->actions.addts.tspec.tsinfo.bstSzDef, |
| setwmm->actions.addts.tspec.Fixed, setwmm->actions.addts.tspec.size, |
| setwmm->actions.addts.tspec.maxsize, |
| setwmm->actions.addts.tspec.min_srvc, |
| setwmm->actions.addts.tspec.max_srvc, |
| setwmm->actions.addts.tspec.inactivity, |
| setwmm->actions.addts.tspec.suspension, |
| setwmm->actions.addts.tspec.srvc_strt_tim, |
| setwmm->actions.addts.tspec.mindatarate, |
| setwmm->actions.addts.tspec.meandatarate, |
| setwmm->actions.addts.tspec.peakdatarate, |
| setwmm->actions.addts.tspec.burstsize, |
| setwmm->actions.addts.tspec.delaybound, |
| setwmm->actions.addts.tspec.PHYrate, setwmm->actions.addts.tspec.sba, |
| setwmm->actions.addts.tspec.medium_time, |
| setwmm->actions.addts.accesscat); |
| else |
| printf("DELTS AC PARAMS: TID: %d\n", setwmm->actions.delts); |
| |
| hdr->tag = WFA_STA_SET_WMM_TLV; |
| hdr->len = sizeof(caStaSetWMM_t); |
| |
| memcpy(aBuf + 4, setwmm, sizeof(caStaSetWMM_t)); |
| |
| *aLen = 4 + sizeof(caStaSetWMM_t); |
| #endif |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetEapFAST(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetEapFAST_t* setsec = (caStaSetEapFAST_t*)(aBuf + sizeof(wfaTLV)); |
| #ifndef WFA_PC_CONSOLE |
| caStaSetEapFAST_t defparams = {"", "", "", "", "", "", "", "", 0, ""}; |
| char* str; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memcpy((void*)setsec, (void*)&defparams, sizeof(caStaSetEapFAST_t)); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->intf, str, 15); |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->ssid, str, WFA_SSID_NAME_LEN - 1); |
| } else if (strcasecmp(str, "username") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->username, str, 31); |
| } else if (strcasecmp(str, "password") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(setsec->passwd, str); |
| } else if (strcasecmp(str, "keyMgmtType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->keyMgmtType, str, 7); |
| } else if (strcasecmp(str, "encpType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->encrptype, str, 8); |
| } else if (strcasecmp(str, "trustedRootCA") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->trustedRootCA, str, 31); |
| } else if (strcasecmp(str, "innerEAP") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(setsec->innerEAP, str); |
| } else if (strcasecmp(str, "validateServer") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "yes") == 0) { |
| setsec->validateServer = 1; |
| } else if (strcasecmp(str, "no") == 0) { |
| setsec->validateServer = 0; |
| } |
| } else if (strcasecmp(str, "pacFile") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(setsec->pacFileName, str); |
| } else if (strcasecmp(str, "pmf") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "enable") == 0 || strcasecmp(str, "optional") == 0) |
| setsec->pmf = WFA_ENABLED; |
| else if (strcasecmp(str, "required") == 0) |
| setsec->pmf = WFA_REQUIRED; |
| else |
| setsec->pmf = WFA_DISABLED; |
| } |
| } |
| |
| #endif |
| wfaEncodeTLV(WFA_STA_SET_EAPFAST_TLV, sizeof(caStaSetEapFAST_t), |
| (BYTE*)setsec, aBuf); |
| |
| *aLen = 4 + sizeof(caStaSetEapFAST_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetEapAKA(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetEapAKA_t* setsec = (caStaSetEapAKA_t*)(aBuf + sizeof(wfaTLV)); |
| #ifndef WFA_PC_CONSOLE |
| char* str; |
| caStaSetEapAKA_t defparams = {"", "", "", "", "", "", 0, {"", "", ""}}; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memcpy((void*)setsec, (void*)&defparams, sizeof(caStaSetEapAKA_t)); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->intf, str, 15); |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->ssid, str, WFA_SSID_NAME_LEN - 1); |
| } else if (strcasecmp(str, "username") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->username, str, 31); |
| } else if (strcasecmp(str, "password") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strcpy(setsec->passwd, str); |
| } else if (strcasecmp(str, "keyMgmtType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->keyMgmtType, str, 7); |
| } else if (strcasecmp(str, "encpType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(setsec->encrptype, str, 8); |
| } else if (strcasecmp(str, "triplet1") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy((char*)setsec->tripletSet[0], str, 63); |
| DPRINT_INFO(WFA_OUT, "Triplet1 : %s\n", setsec->tripletSet[0]); |
| setsec->tripletCount = 1; |
| } else if (strcasecmp(str, "triplet2") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy((char*)setsec->tripletSet[1], str, 63); |
| DPRINT_INFO(WFA_OUT, "Triplet2 : %s\n", setsec->tripletSet[1]); |
| setsec->tripletCount = 2; |
| } else if (strcasecmp(str, "triplet3") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy((char*)setsec->tripletSet[2], str, 63); |
| DPRINT_INFO(WFA_OUT, "Triplet1 : %s\n", setsec->tripletSet[2]); |
| setsec->tripletCount = 3; |
| } else if (strcasecmp(str, "pmf") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "enable") == 0 || strcasecmp(str, "optional") == 0) |
| setsec->pmf = WFA_ENABLED; |
| else if (strcasecmp(str, "required") == 0) |
| setsec->pmf = WFA_REQUIRED; |
| else |
| setsec->pmf = WFA_DISABLED; |
| } |
| } |
| |
| #endif |
| wfaEncodeTLV(WFA_STA_SET_EAPAKA_TLV, sizeof(caStaSetEapAKA_t), (BYTE*)setsec, |
| aBuf); |
| |
| *aLen = 4 + sizeof(caStaSetEapAKA_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetSystime(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetSystime_t* systime = (caStaSetSystime_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "month") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| systime->month = atoi(str); |
| DPRINT_INFO(WFA_OUT, "\n month %i \n", systime->month); |
| } else if (strcasecmp(str, "date") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| systime->date = atoi(str); |
| DPRINT_INFO(WFA_OUT, "\n date %i \n", systime->date); |
| } else if (strcasecmp(str, "year") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| systime->year = atoi(str); |
| DPRINT_INFO(WFA_OUT, "\n year %i \n", systime->year); |
| } else if (strcasecmp(str, "hours") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| systime->hours = atoi(str); |
| DPRINT_INFO(WFA_OUT, "\n hours %i \n", systime->hours); |
| } else if (strcasecmp(str, "minutes") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| systime->minutes = atoi(str); |
| DPRINT_INFO(WFA_OUT, "\n minutes %i \n", systime->minutes); |
| } else if (strcasecmp(str, "seconds") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| systime->seconds = atoi(str); |
| DPRINT_INFO(WFA_OUT, "\n seconds %i \n", systime->seconds); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_SET_SYSTIME_TLV, sizeof(caStaSetSystime_t), |
| (BYTE*)systime, aBuf); |
| |
| *aLen = 4 + sizeof(caStaSetSystime_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaDisconnect(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| dutCommand_t* disc = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(disc->intf, str, WFA_IF_NAME_LEN - 1); |
| disc->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_DISCONNECT_TLV, sizeof(dutCommand_t), (BYTE*)disc, aBuf); |
| |
| *aLen = 4 + sizeof(dutCommand_t); |
| return WFA_SUCCESS; |
| } |
| |
| //#ifdef WFA_STA_TB |
| /* Check for enable/disable and return WFA_ENABLE/WFA_DISABLE. WFA_INVALID_BOOL if invalid */ |
| int wfaStandardBoolParsing(char* str) { |
| int rc; |
| |
| if (strcasecmp(str, "enable") == 0) |
| rc = WFA_ENABLED; |
| else if (strcasecmp(str, "disable") == 0) |
| rc = WFA_DISABLED; |
| else |
| rc = WFA_INVALID_BOOL; |
| |
| return rc; |
| } |
| //#endif |
| |
| int xcCmdProcStaSendNeigReq(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| char* str; |
| dutCommand_t* getInfo = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| return FALSE; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(getInfo->intf, str, 15); |
| DPRINT_INFO(WFA_OUT, "interface %s\n", getInfo->intf); |
| } |
| |
| wfaEncodeTLV(WFA_STA_SEND_NEIGREQ_TLV, sizeof(dutCommand_t), (BYTE*)getInfo, |
| aBuf); |
| |
| *aLen = 4 + sizeof(dutCommand_t); |
| |
| return TRUE; |
| } |
| int xcCmdProcStaDevSendFrame(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| char* str; |
| dutCommand_t* cmd = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| caStaDevSendFrame_t* sf = &cmd->cmdsu.sf; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(cmd->intf, str, 15); |
| DPRINT_INFO(WFA_OUT, "interface %s\n", cmd->intf); |
| } else if (strcasecmp(str, "program") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "PMF") == 0) { |
| pmfFrame_t* pmf = &sf->frameType.pmf; |
| |
| sf->program = PROG_TYPE_PMF; |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "framename") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "disassoc") == 0) { |
| pmf->eFrameName = PMF_TYPE_DISASSOC; |
| } else if (strcasecmp(str, "saquery") == 0) { |
| pmf->eFrameName = PMF_TYPE_SAQUERY; |
| } else if (strcasecmp(str, "assocreq") == 0) { |
| pmf->eFrameName = PMF_TYPE_ASSOCREQ; |
| } else if (strcasecmp(str, "reassocreq") == 0) { |
| pmf->eFrameName = PMF_TYPE_REASSOCREQ; |
| } else if (strcasecmp(str, "deauth") == 0) { |
| pmf->eFrameName = PMF_TYPE_DEAUTH; |
| } |
| } else if (strcasecmp(str, "protected") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "correctKey") == 0) { |
| pmf->eProtected = PMF_PROT_CORRECTKEY; |
| } else if (strcasecmp(str, "incorrectKey") == 0) { |
| pmf->eProtected = PMF_PROT_INCORRECTKEY; |
| } else if (strcasecmp(str, "unprotected") == 0) { |
| pmf->eProtected = PMF_PROT_UNPROTECTED; |
| } |
| } else if (strcasecmp(str, "stationid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(pmf->staid, str, WFA_MAC_ADDR_STR_LEN - 1); |
| pmf->staid[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "sender") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(pmf->sender, str, 7); |
| pmf->sender[7] = '\0'; |
| pmf->sender_flag = 1; |
| } else if (strcasecmp(str, "bssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(pmf->bssid, str, WFA_MAC_ADDR_STR_LEN - 1); |
| pmf->bssid[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| pmf->bssid_flag = 1; |
| } |
| } /* for */ |
| } /* if PMF */ |
| else if (strcasecmp(str, "TDLS") == 0) { |
| tdlsFrame_t* tdls = &sf->frameType.tdls; |
| |
| sf->program = PROG_TYPE_TDLS; |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "type") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "discovery") == 0) { |
| tdls->eFrameName = TDLS_TYPE_DISCOVERY; |
| } else if (strcasecmp(str, "setup") == 0) { |
| tdls->eFrameName = TDLS_TYPE_SETUP; |
| } else if (strcasecmp(str, "teardown") == 0) { |
| tdls->eFrameName = TDLS_TYPE_TEARDOWN; |
| } |
| #if 0 /* TTG to decide whether to have this needed */ |
| else if (strcasecmp(str, "channelswitch") == 0) |
| { |
| tdls->eFrameName = TDLS_TYPE_CHANNELSWITCH; |
| } |
| #endif |
| else if (strcasecmp(str, "psnull") == 0) { |
| tdls->eFrameName = TDLS_TYPE_NULLFRAME; |
| } |
| } else if (strcasecmp(str, "peer") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(tdls->peer, str, WFA_MAC_ADDR_STR_LEN - 1); |
| tdls->peer[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "timeout") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| tdls->timeout = atoi(str); |
| if (tdls->timeout < 301) |
| return WFA_FAILURE; |
| tdls->timeout_flag = 1; |
| } else if (strcasecmp(str, "bssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(tdls->bssid, str, WFA_MAC_ADDR_STR_LEN - 1); |
| tdls->bssid[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| tdls->bssid_flag = 1; |
| } else if (strcasecmp(str, "switchtime") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| tdls->switchtime = atoi(str); |
| tdls->switchtime_flag = 1; |
| } else if (strcasecmp(str, "channel") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| tdls->channel = atoi(str); |
| tdls->channel_flag = 1; |
| } else if (strcasecmp(str, "channelOffset") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(tdls->offset, str, 4); |
| tdls->offset[3] = 1; |
| tdls->offset_flag = 1; |
| } else if (strcasecmp(str, "status") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| tdls->status = atoi(str); |
| if (tdls->status != 0 && tdls->status != 37) |
| return WFA_FAILURE; |
| tdls->status_flag = 1; |
| } else if (strcasecmp(str, "reason") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| tdls->reason = atoi(str); |
| tdls->reason_flag = 1; |
| } |
| } /* for */ |
| } /* TDLS */ |
| else if (strcasecmp(str, "VENT") == 0) { |
| ventFrame_t* vent = &sf->frameType.vent; |
| |
| sf->program = PROG_TYPE_VENT; |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "framename") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "neigreq") == 0) { |
| vent->type = VENT_TYPE_NEIGREQ; |
| } |
| if (strcasecmp(str, "transmgmt") == 0) { |
| vent->type = VENT_TYPE_TRANSMGMT; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(vent->ssid, str, WFA_SSID_NAME_LEN); |
| } |
| } |
| } |
| } else if (strcasecmp(str, "WFD") == 0) { |
| wfdFrame_t* wfd = &sf->frameType.wfd; |
| |
| sf->program = PROG_TYPE_WFD; |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "framename") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "wfd_probereq") == 0) { |
| wfd->eframe = WFD_FRAME_PRBREQ; |
| } |
| if (strcasecmp(str, "rtsp") == 0) { |
| wfd->eframe = WFD_FRAME_RTSP; |
| } |
| if (strcasecmp(str, "WFD_ServDiscReq") == 0) { |
| wfd->eframe = WFD_FRAME_SERVDISC_REQ; |
| } |
| if (strcasecmp(str, "WFD_ProbeReqTdls") == 0) { |
| wfd->eframe = WFD_FRAME_PRBREQ_TDLS_REQ; |
| } |
| if (strcasecmp(str, "11v_TimingMsrReq") == 0) { |
| wfd->eframe = WFD_FRAME_11V_TIMING_MSR_REQ; |
| } |
| |
| } else if (strcasecmp(str, "source") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(wfd->sa, str, WFA_MAC_ADDR_STR_LEN - 1); |
| wfd->sa[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "destination") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(wfd->da, str, WFA_MAC_ADDR_STR_LEN - 1); |
| wfd->da[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "devtype") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "source") == 0) { |
| wfd->eDevType = WFD_DEV_TYPE_SOURCE; |
| } |
| if (strcasecmp(str, "p-sink") == 0) { |
| wfd->eDevType = WFD_DEV_TYPE_PSINK; |
| } |
| if (strcasecmp(str, "s-sink") == 0) { |
| wfd->eDevType = WFD_DEV_TYPE_SSINK; |
| } |
| wfd->devtype_flag = 1; |
| } else if (strcasecmp(str, "rtspmsgtype") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "pause") == 0) { |
| wfd->eRtspMsgType = WFD_RTSP_PAUSE; |
| } |
| if (strcasecmp(str, "play") == 0) { |
| wfd->eRtspMsgType = WFD_RTSP_PLAY; |
| } |
| if (strcasecmp(str, "teardown") == 0) { |
| wfd->eRtspMsgType = WFD_RTSP_TEARDOWN; |
| } |
| if (strcasecmp(str, "trigger-pause") == 0) { |
| wfd->eRtspMsgType = WFD_RTSP_TRIG_PAUSE; |
| } |
| if (strcasecmp(str, "trigger-play") == 0) { |
| wfd->eRtspMsgType = WFD_RTSP_TRIG_PLAY; |
| } |
| if (strcasecmp(str, "trigger-teardown") == 0) { |
| wfd->eRtspMsgType = WFD_RTSP_TRIG_TEARDOWN; |
| } |
| if (strcasecmp(str, "set_parameter") == 0) { |
| wfd->eRtspMsgType = WFD_RTSP_SET_PARAMETER; |
| } |
| wfd->rtspmsg_flag = 1; |
| } else if (strcasecmp(str, "wfdsession") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(wfd->wfdSessionID, str, WFA_WFD_SESSION_ID_LEN - 1); |
| wfd->wfdSessionID[WFA_WFD_SESSION_ID_LEN - 1] = '\0'; |
| wfd->wfdsessionid_flag = 1; |
| } else if (strcasecmp(str, "setparameter") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "capUibcKeyBoard") == 0) { |
| wfd->eSetParams = WFD_CAP_UIBC_KEYBOARD; |
| } |
| if (strcasecmp(str, "CapUibcMouse") == 0) { |
| wfd->eSetParams = WFD_CAP_UIBC_MOUSE; |
| } |
| if (strcasecmp(str, "capReNego") == 0) { |
| wfd->eSetParams = WFD_CAP_RE_NEGO; |
| } |
| if (strcasecmp(str, "standBy") == 0) { |
| wfd->eSetParams = WFD_STANDBY; |
| } |
| if (strcasecmp(str, "UibcSettingEnable") == 0) { |
| wfd->eSetParams = WFD_UIBC_SETTINGS_ENABLE; |
| } |
| if (strcasecmp(str, "UibcSettingDisable") == 0) { |
| wfd->eSetParams = WFD_UIBC_SETTINGS_DISABLE; |
| } |
| if (strcasecmp(str, "route_audio") == 0) { |
| wfd->eSetParams = WFD_ROUTE_AUDIO; |
| } |
| if (strcasecmp(str, "3dVideoParam") == 0) { |
| wfd->eSetParams = WFD_3D_VIDEOPARAM; |
| } |
| if (strcasecmp(str, "2dVideoParam") == 0) { |
| wfd->eSetParams = WFD_2D_VIDEOPARAM; |
| } |
| wfd->setparm_flag = 1; |
| } else if (strcasecmp(str, "audioDest") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "p-sink") == 0) { |
| wfd->eAudioDest = WFD_DEV_TYPE_PSINK; |
| } |
| if (strcasecmp(str, "s-sink") == 0) { |
| wfd->eAudioDest = WFD_DEV_TYPE_SSINK; |
| } |
| wfd->audioDest_flag = 1; |
| } else if (strcasecmp(str, "bssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(wfd->bssid, str, WFA_MAC_ADDR_STR_LEN - 1); |
| wfd->bssid[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| wfd->bssid_flag = 1; |
| } else if (strcasecmp(str, "MsrReqAction") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "enable") == 0) { |
| wfd->eMsrAction = eEnable; |
| } else { |
| wfd->eMsrAction = eDisable; |
| } |
| wfd->msrReqAction_flag = 1; |
| } else if (strcasecmp(str, "CapReNegotiateParam") == 0) { |
| int temp1; |
| char *tstr1, *tstr2; |
| wfd->capReNego_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| printf("\n The Video format is : %s", str); |
| tstr1 = strtok_r(str, "-", &str); |
| tstr2 = strtok_r(str, "-", &str); |
| temp1 = atoi(tstr2); |
| printf("\n The Video format is : %s****%d*****", tstr1, temp1); |
| |
| if (strcasecmp(tstr1, "cea") == 0) { |
| wfd->ecapReNego = eCEA + 1 + temp1; |
| } else if (strcasecmp(tstr1, "vesa") == 0) { |
| wfd->ecapReNego = eVesa + 1 + temp1; |
| } else { |
| wfd->ecapReNego = eHH + 1 + temp1; |
| } |
| } |
| } |
| } else if (strcasecmp(str, "HS2-R2") == 0) { |
| hs2Frame_t* hs2 = &sf->frameType.hs2_r2; |
| |
| sf->program = PROG_TYPE_HS2_R2; |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "framename") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "ANQPQuery") == 0) { |
| hs2->eframe = HS2_FRAME_ANQPQuery; |
| } |
| if (strcasecmp(str, "DLSRequest") == 0) { |
| hs2->eframe = HS2_FRAME_DLSRequest; |
| } |
| if (strcasecmp(str, "GARPReq") == 0) { |
| hs2->eframe = HS2_FRAME_GARPReq; |
| } |
| if (strcasecmp(str, "GARPRes") == 0) { |
| hs2->eframe = HS2_FRAME_GARPRes; |
| } |
| if (strcasecmp(str, "NeighAdv") == 0) { |
| hs2->eframe = HS2_FRAME_NeighAdv; |
| } |
| if (strcasecmp(str, "ARPProbe") == 0) { |
| hs2->eframe = HS2_FRAME_ARPProbe; |
| } |
| if (strcasecmp(str, "ARPAnnounce") == 0) { |
| hs2->eframe = HS2_FRAME_ARPAnnounce; |
| } |
| if (strcasecmp(str, "NeighSolicitReq") == 0) { |
| hs2->eframe = HS2_FRAME_NeighSolicitReq; |
| } |
| if (strcasecmp(str, "ARPReply") == 0) { |
| hs2->eframe = HS2_FRAME_ARPReply; |
| } |
| |
| } /* if (strcasecmp(str, "framename") == 0) */ |
| |
| else if (strcasecmp(str, "dest") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(hs2->sDestMac, str, WFA_MAC_ADDR_STR_LEN - 1); |
| hs2->sDestMac[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } |
| /* boolean or 1/0 binary values */ |
| else if (strcasecmp(str, "ANQP_CAP_LIST") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->bAnqpCapList = atoi(str); |
| } else if (strcasecmp(str, "NAI_REALM_LIST") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->bNaiRealmList = atoi(str); |
| } else if (strcasecmp(str, "3GPP_INFO") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->b3gppInfo = atoi(str); |
| } else if (strcasecmp(str, "DOMAIN_LIST") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->bDomainList = atoi(str); |
| } else if (strcasecmp(str, "HS_CAP_LIST") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->bHsCapList = atoi(str); |
| } else if (strcasecmp(str, "OPER_NAME") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->bOperName = atoi(str); |
| } else if (strcasecmp(str, "NAI_HOME_REALM_LIST") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->bNaiHomeRealmList = atoi(str); |
| } else if (strcasecmp(str, "VENUE_NAME") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->bVenueName = atoi(str); |
| } |
| |
| else if (strcasecmp(str, "ROAMING_CONS") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->bRoamingCons = atoi(str); |
| } else if (strcasecmp(str, "ESS_DISASSOC_IMM") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->bEssDisassocImm = atoi(str); |
| } else if (strcasecmp(str, "WAN_MAT") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->bWanMat = atoi(str); |
| } else if (strcasecmp(str, "OP_CLASS") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->bOpClass = atoi(str); |
| } else if (strcasecmp(str, "OSU_PROVIDER_LIST") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->bOsuProviderList = atoi(str); |
| } else if (strcasecmp(str, "NET_AUTH_TYPE") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->bNetAuthType = atoi(str); |
| } |
| /* integer values */ |
| else if (strcasecmp(str, "DISASSOC_TIMER") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->nDisassocTimer = atoi(str); |
| } else if (strcasecmp(str, "NFrames") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| hs2->nFrames = atoi(str); |
| } |
| /* string vars */ |
| else if (strcasecmp(str, "SESS_INFO_URL") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| memset(hs2->sSessInfoUrl, 0, WFA_URL_STRING_LEN); |
| strncpy(hs2->sSessInfoUrl, str, WFA_URL_STRING_LEN - 1); |
| hs2->sSessInfoUrl[WFA_URL_STRING_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "Name ") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| memset(hs2->sDevName, 0, WFA_SSID_NAME_LEN); |
| strncpy(hs2->sDevName, str, WFA_SSID_NAME_LEN - 1); |
| hs2->sDevName[WFA_SSID_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "ICON_REQUEST") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| memset(hs2->sIconRequest, 0, WFA_SSID_NAME_LEN); |
| strncpy(hs2->sIconRequest, str, WFA_SSID_NAME_LEN - 1); |
| hs2->sIconRequest[WFA_SSID_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "SenderMAC") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| memset(hs2->sSenderMac, 0, WFA_MAC_ADDR_STR_LEN); |
| strncpy(hs2->sSenderMac, str, WFA_MAC_ADDR_STR_LEN - 1); |
| hs2->sSenderMac[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "DestIP") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| memset(hs2->sDestIp, 0, IPV6_ADDRESS_STRING_LEN); |
| strncpy(hs2->sDestIp, str, IPV6_ADDRESS_STRING_LEN - 1); |
| hs2->sDestIp[IPV6_ADDRESS_STRING_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "SenderIP") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| memset(hs2->sSenderIp, 0, IPV6_ADDRESS_STRING_LEN); |
| strncpy(hs2->sSenderIp, str, IPV6_ADDRESS_STRING_LEN - 1); |
| hs2->sSenderIp[IPV6_ADDRESS_STRING_LEN - 1] = '\0'; |
| } |
| } /* for loop: hs2_r2 each prometers */ |
| } /* HS2-R2 */ |
| else if (strcasecmp(str, "LOC") == 0) { |
| locFrame_t* loc = &sf->frameType.loc; |
| |
| sf->program = PROG_TYPE_LOC; |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "framename") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "ANQPQUERY") == 0) { |
| loc->eframe = LOC_TYPE_ANQPQUERY; |
| } |
| if (strcasecmp(str, "NeighReportReq") == 0) { |
| loc->eframe = LOC_TYPE_NeighReportReq; |
| } |
| if (strcasecmp(str, "RadioMsntReq") == 0) { |
| loc->eframe = LOC_TYPE_RadioMsntReq; |
| } |
| } |
| |
| else if (strcasecmp(str, "destmac") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(loc->sDestMac, str, WFA_MAC_ADDR_STR_LEN - 1); |
| loc->sDestMac[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "askForLocCivic") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| loc->baskForLocCivic = atoi(str); |
| } else if (strcasecmp(str, "askForLCI") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| loc->baskForLCI = atoi(str); |
| } else if (strcasecmp(str, "address3") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| loc->baddress3 = atoi(str); |
| } else if (strcasecmp(str, "MsntType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| loc->bmsntType = atoi(str); |
| } else if (strcasecmp(str, "MaxAgeSubelem") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| loc->bmaxAgeSubelem = atoi(str); |
| } else if (strcasecmp(str, "RandInterval") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| loc->brandInterval = atoi(str); |
| } else if (strcasecmp(str, "MinAPcount") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| loc->bminApcount = atoi(str); |
| } else if (strcasecmp(str, "AskForPublicIdentifierURI-FQDN") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| loc->baskForPublicIdentifierURI_FQDN = atoi(str); |
| } |
| } |
| } else if (strcasecmp(str, "HE") == 0) { |
| heFrame_t* he = &sf->frameType.he; |
| sf->program = PROG_TYPE_HE; |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "framename") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "wnm_notify") == 0) { |
| he->eframe = HE_TYPE_WNMNOTIFY; |
| } |
| } |
| } |
| } else if (strcasecmp(str, "MBO") == 0) { |
| mboFrame_t* mbo = &sf->frameType.mbo; |
| sf->program = PROG_TYPE_MBO; |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "framename") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "wnm_notify") == 0) { |
| mbo->eframe = MBO_TYPE_WNMNOTIFY; |
| } |
| } |
| } |
| } /* MBO */ |
| } /* program */ |
| } /* for loop : each programs*/ |
| |
| wfaEncodeTLV(WFA_STA_DEV_SEND_FRAME_TLV, sizeof(dutCommand_t), (BYTE*)cmd, |
| aBuf); |
| |
| *aLen = 4 + sizeof(dutCommand_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaTestBedCmd(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| WFA_UNUSED(pcmdStr); |
| dutCommand_t* info = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| |
| DPRINT_INFO(WFA_OUT, "This is a TestBed Station Command ONLY\n"); |
| |
| wfaEncodeTLV(WFA_STA_SEND_NEIGREQ_TLV, sizeof(dutCommand_t), (BYTE*)info, |
| aBuf); |
| |
| *aLen = 4 + sizeof(dutCommand_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| //#ifdef WFA_STA_TB |
| int xcCmdProcStaPresetTestParameters(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaPresetParameters_t* presetTestParams = |
| (caStaPresetParameters_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| char *tstr1, *tstr2; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memset(presetTestParams, 0, sizeof(caStaPresetParameters_t)); |
| |
| for (;;) { |
| str = strtok_r(pcmdStr, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(presetTestParams->intf, str, 15); |
| } else if (strcasecmp(str, "mode") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| printf("modeis %s\n", str); |
| |
| if (strcasecmp(str, "11b") == 0 || strcasecmp(str, "b") == 0) |
| presetTestParams->wirelessMode = eModeB; |
| else if (strcasecmp(str, "11g") == 0 || strcasecmp(str, "g") == 0 || |
| strcasecmp(str, "bg") == 0) |
| presetTestParams->wirelessMode = eModeBG; |
| else if (strcasecmp(str, "11a") == 0 || strcasecmp(str, "a") == 0) |
| presetTestParams->wirelessMode = eModeA; |
| else if (strcasecmp(str, "11abg") == 0 || strcasecmp(str, "abg") == 0) |
| presetTestParams->wirelessMode = eModeABG; |
| else if (strcasecmp(str, "11na") == 0) |
| presetTestParams->wirelessMode = eModeAN; |
| else if (strcasecmp(str, "11ng") == 0) |
| presetTestParams->wirelessMode = eModeGN; |
| else if (strcasecmp(str, "11nl") == 0) |
| presetTestParams->wirelessMode = eModeNL; // n+abg |
| else if (strcasecmp(str, "11ac") == 0) |
| presetTestParams->wirelessMode = eModeAC; |
| else if (strcasecmp(str, "11ax") == 0) |
| presetTestParams->wirelessMode = eModeAX; |
| |
| presetTestParams->modeFlag = 1; |
| printf("\nSetting Mode as %d\n", presetTestParams->wirelessMode); |
| } else if (strcasecmp(str, "powersave") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| printf("powersave is %s\n", str); |
| if (strcasecmp(str, "on") == 0 || strcasecmp(str, "pspoll") == 0) |
| presetTestParams->legacyPowerSave = 1; |
| else if (strcasecmp(str, "fast") == 0) |
| presetTestParams->legacyPowerSave = 2; |
| else if (strcasecmp(str, "psnonpoll") == 0) |
| presetTestParams->legacyPowerSave = 3; |
| else |
| presetTestParams->legacyPowerSave = 0; |
| |
| presetTestParams->psFlag = 1; |
| printf("\nSetting legacyPowerSave as %d\n", |
| presetTestParams->legacyPowerSave); |
| } else if (strcasecmp(str, "wmm") == 0) { |
| presetTestParams->wmmFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| printf("wmm is %s\n", str); |
| |
| if (strcasecmp(str, "on") == 0) |
| presetTestParams->wmmState = 1; |
| else if (strcasecmp(str, "off") == 0) |
| presetTestParams->wmmState = 0; |
| } else if (strcasecmp(str, "noack") == 0) { |
| /* uncomment and use it char *ackpol; */ |
| char* setvalues = strtok_r(NULL, ",", &pcmdStr); |
| if (setvalues != NULL) { |
| /* BE */ |
| /* str=strtok_r(NULL, ":", &setvalues); |
| if(str != NULL) |
| { |
| if(strcasecmp(str, "enable") == 0) |
| presetTestParams->noack_be = 2; |
| else if(strcasecmp(str, "disable") == 0) |
| presetTestParams->noack_be = 1; |
| }*/ |
| /* BK */ |
| /* str=strtok_r(NULL, ":", &setvalues); |
| if(str != NULL) |
| { |
| if(strcasecmp(str, "enable") == 0) |
| presetTestParams->noack_bk = 2; |
| else if(strcasecmp(str, "disable") == 0) |
| presetTestParams->noack_bk = 1; |
| }*/ |
| /* VI */ |
| /*str=strtok_r(NULL, ":", &setvalues); |
| if(str != NULL) |
| { |
| if(strcasecmp(str, "enable") == 0) |
| presetTestParams->noack_vi = 2; |
| else if(strcasecmp(str, "disable") == 0) |
| presetTestParams->noack_vi = 1; |
| }*/ |
| /* VO */ |
| /* str=strtok_r(NULL, ":", &setvalues); |
| if(str != NULL) |
| { |
| if(strcasecmp(str, "enable") == 0) |
| presetTestParams->noack_vo = 2; |
| else if(strcasecmp(str, "disable") == 0) |
| presetTestParams->noack_vo = 1; |
| }*/ |
| } |
| } else if (strcasecmp(str, "ht") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "on") == 0) { |
| presetTestParams->ht = 1; |
| } else { |
| presetTestParams->ht = 0; |
| } |
| } else if (strcasecmp(str, "reset") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "11n") == 0) { |
| presetTestParams->reset = eResetProg11n; |
| printf("reset to %s\n", str); |
| } |
| } else if (strcasecmp(str, "ft_oa") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->ftoa = eEnable; |
| printf("ft_oa enabled\n"); |
| } else { |
| presetTestParams->ftoa = eDisable; |
| } |
| } else if (strcasecmp(str, "ft_ds") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->ftds = eEnable; |
| printf("ft_ds enabled\n"); |
| } else { |
| presetTestParams->ftds = eDisable; |
| } |
| } else if (strcasecmp(str, "active_scan") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->activescan = eEnable; |
| printf("active scan enabled\n"); |
| } else { |
| presetTestParams->activescan = eDisable; |
| } |
| } |
| #if 0 |
| else if(strcasecmp(str, "ignoreChswitchProhibit") == 0) |
| { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if(strcasecmp(str, "Enabled") == 0) |
| { |
| presetTestParams->ignChSwitchProh = eEnable; |
| } |
| else |
| { |
| presetTestParams->ignChSwitchProh = eDisable; |
| } |
| } |
| #endif |
| else if (strcasecmp(str, "tdls") == 0) { |
| presetTestParams->tdlsFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enabled") == 0) { |
| presetTestParams->tdls = eEnable; |
| } else { |
| presetTestParams->tdls = eDisable; |
| } |
| } else if (strcasecmp(str, "tdlsmode") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Default") == 0) { |
| presetTestParams->tdlsMode = eDef; |
| } else if (strcasecmp(str, "HiLoMac") == 0) { |
| presetTestParams->tdlsMode = eHiLoMac; |
| } else if (strcasecmp(str, "ExistLink") == 0) { |
| presetTestParams->tdlsMode = eExistLink; |
| } else if (strcasecmp(str, "APProhibit") == 0) { |
| presetTestParams->tdlsMode = eAPProhibit; |
| } else if (strcasecmp(str, "WeakSecurity") == 0) { |
| presetTestParams->tdlsMode = eWeakSec; |
| } else if (strcasecmp(str, "IgnoreChswitchProhibit") == 0) { |
| presetTestParams->tdlsMode = eIgnChnlSWProh; |
| } |
| } else if (strcasecmp(str, "wfddevtype") == 0) { |
| presetTestParams->wfdDevTypeFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "source") == 0) { |
| presetTestParams->wfdDevType = eSource; |
| } else if (strcasecmp(str, "p-sink") == 0) { |
| presetTestParams->wfdDevType = ePSink; |
| } else if (strcasecmp(str, "s-sink") == 0) { |
| presetTestParams->wfdDevType = eSSink; |
| } else if (strcasecmp(str, "dual") == 0) { |
| presetTestParams->wfdDevType = eDual; |
| } |
| } else if (strcasecmp(str, "uibc_gen") == 0) { |
| presetTestParams->wfdUibcGenFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdUibcGen = eEnable; |
| } else { |
| presetTestParams->wfdUibcGen = eDisable; |
| } |
| } else if (strcasecmp(str, "uibc_hid") == 0) { |
| presetTestParams->wfdUibcHidFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdUibcHid = eEnable; |
| } else { |
| presetTestParams->wfdUibcHid = eDisable; |
| } |
| } else if (strcasecmp(str, "ui_input") == 0) { |
| char* uilist; |
| presetTestParams->wfdUiInputFlag = 1; |
| |
| uilist = strtok_r(NULL, ",", &pcmdStr); |
| presetTestParams->wfdUiInputs = 0; |
| for (;;) { |
| str = strtok_r(uilist, " ", &uilist); |
| if (str == NULL || str[0] == '\0') |
| break; |
| printf("\n The UI input is : %s", str); |
| |
| if (strcasecmp(str, "keyboard") == 0) { |
| presetTestParams->wfdUiInput[presetTestParams->wfdUiInputs] = |
| eKeyBoard; |
| } else if (strcasecmp(str, "mouse") == 0) { |
| presetTestParams->wfdUiInput[presetTestParams->wfdUiInputs] = eMouse; |
| } |
| presetTestParams->wfdUiInputs++; |
| } |
| } else if (strcasecmp(str, "hdcp") == 0) { |
| presetTestParams->wfdHdcpFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdHdcp = eEnable; |
| } else { |
| presetTestParams->wfdHdcp = eDisable; |
| } |
| } else if (strcasecmp(str, "frameskip") == 0) { |
| presetTestParams->wfdFrameSkipFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdFrameSkip = eEnable; |
| } else { |
| presetTestParams->wfdFrameSkip = eDisable; |
| } |
| } else if (strcasecmp(str, "avchange") == 0) { |
| presetTestParams->wfdAvChangeFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdAvChange = eEnable; |
| } else { |
| presetTestParams->wfdAvChange = eDisable; |
| } |
| } else if (strcasecmp(str, "standby") == 0) { |
| presetTestParams->wfdStandByFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdStandBy = eEnable; |
| } else { |
| presetTestParams->wfdStandBy = eDisable; |
| } |
| } else if (strcasecmp(str, "inputcontent") == 0) { |
| presetTestParams->wfdInVideoFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Protected") == 0) { |
| presetTestParams->wfdInVideo = eProtected; |
| } else if (strcasecmp(str, "Unprotected") == 0) { |
| presetTestParams->wfdInVideo = eUnprotected; |
| } else if (strcasecmp(str, "ProtectedVideoOnly") == 0) { |
| presetTestParams->wfdInVideo = eProtectedVideoOnly; |
| } |
| } else if (strcasecmp(str, "videoformat") == 0) { |
| int temp1; |
| char* videolist; |
| presetTestParams->wfdVideoFmatFlag = 1; |
| |
| videolist = strtok_r(NULL, ",", &pcmdStr); |
| presetTestParams->wfdInputVideoFmats = 0; |
| |
| for (;;) { |
| str = strtok_r(videolist, " ", &videolist); |
| if (str == NULL || str[0] == '\0') |
| break; |
| printf("\n The Video format is : %s", str); |
| |
| tstr1 = strtok_r(str, "-", &str); |
| tstr2 = strtok_r(str, "-", &str); |
| |
| temp1 = atoi(tstr2); |
| printf("\n The Video format is : %s****%d*****", tstr1, temp1); |
| |
| if (strcasecmp(tstr1, "cea") == 0) { |
| presetTestParams->wfdVideoFmt[presetTestParams->wfdInputVideoFmats] = |
| eCEA + 1 + temp1; |
| } else if (strcasecmp(tstr1, "vesa") == 0) { |
| presetTestParams->wfdVideoFmt[presetTestParams->wfdInputVideoFmats] = |
| eVesa + 1 + temp1; |
| } else { |
| presetTestParams->wfdVideoFmt[presetTestParams->wfdInputVideoFmats] = |
| eHH + 1 + temp1; |
| } |
| presetTestParams->wfdInputVideoFmats++; |
| } |
| } else if (strcasecmp(str, "AudioFormat") == 0) { |
| presetTestParams->wfdAudioFmatFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Mandatory") == 0) { |
| presetTestParams->wfdAudioFmt = eMandatoryAudioMode; |
| } else { |
| presetTestParams->wfdAudioFmt = eDefaultAudioMode; |
| } |
| } |
| |
| else if (strcasecmp(str, "i2c") == 0) { |
| presetTestParams->wfdI2cFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdI2c = eEnable; |
| } else { |
| presetTestParams->wfdI2c = eDisable; |
| } |
| } else if (strcasecmp(str, "videorecovery") == 0) { |
| presetTestParams->wfdVideoRecoveryFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdVideoRecovery = eEnable; |
| } else { |
| presetTestParams->wfdVideoRecovery = eDisable; |
| } |
| } else if (strcasecmp(str, "PrefDisplay") == 0) { |
| presetTestParams->wfdPrefDisplayFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdPrefDisplay = eEnable; |
| } else { |
| presetTestParams->wfdPrefDisplay = eDisable; |
| } |
| } else if (strcasecmp(str, "ServiceDiscovery") == 0) { |
| presetTestParams->wfdServiceDiscoveryFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdServiceDiscovery = eEnable; |
| } else { |
| presetTestParams->wfdServiceDiscovery = eDisable; |
| } |
| } else if (strcasecmp(str, "3dVideo") == 0) { |
| presetTestParams->wfd3dVideoFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfd3dVideo = eEnable; |
| } else { |
| presetTestParams->wfd3dVideo = eDisable; |
| } |
| } else if (strcasecmp(str, "MultiTxStream") == 0) { |
| presetTestParams->wfdMultiTxStreamFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdMultiTxStream = eEnable; |
| } else { |
| presetTestParams->wfdMultiTxStream = eDisable; |
| } |
| } else if (strcasecmp(str, "TimeSync") == 0) { |
| presetTestParams->wfdTimeSyncFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdTimeSync = eEnable; |
| } else { |
| presetTestParams->wfdTimeSync = eDisable; |
| } |
| } else if (strcasecmp(str, "EDID") == 0) { |
| presetTestParams->wfdEDIDFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdEDID = eEnable; |
| } else { |
| presetTestParams->wfdEDID = eDisable; |
| } |
| } else if (strcasecmp(str, "UIBC_Prepare") == 0) { |
| presetTestParams->wfdUIBCPrepareFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdUIBCPrepare = eEnable; |
| } else { |
| presetTestParams->wfdUIBCPrepare = eDisable; |
| } |
| } else if (strcasecmp(str, "OptionalFeature") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "DisableAll") == 0) { |
| presetTestParams->wfdOptionalFeatureFlag = eEnable; |
| } else { |
| presetTestParams->wfdOptionalFeatureFlag = eDisable; |
| } |
| } else if (strcasecmp(str, "SessionAvailability") == 0) { |
| presetTestParams->wfdSessionAvailFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdSessionAvail = eEnable; |
| } else { |
| presetTestParams->wfdSessionAvail = eDisable; |
| } |
| } else if (strcasecmp(str, "DeviceDiscoverability") == 0) { |
| presetTestParams->wfdDeviceDiscoverabilityFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdDeviceDiscoverability = eEnable; |
| } else { |
| presetTestParams->wfdDeviceDiscoverability = eDisable; |
| } |
| } else if (strcasecmp(str, "oper_chn") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| presetTestParams->oper_chn = atoi(str); |
| } else if (strcasecmp(str, "program") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| presetTestParams->program = programNameToType(str); |
| } else if (strcasecmp(str, "CoupledCap") == 0) { |
| presetTestParams->wfdCoupledCapFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Enable") == 0) { |
| presetTestParams->wfdCoupledCap = eEnable; |
| } else { |
| presetTestParams->wfdCoupledCap = eDisable; |
| } |
| } else if (strcasecmp(str, "supplicant") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Default") == 0 || |
| strcasecmp(str, "WPA_Supplicant") == 0) { |
| presetTestParams->supplicant = eWpaSupplicant; |
| } |
| } else if (strcasecmp(str, "type") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "AcceptPD") == 0) { |
| presetTestParams->wfdsType = eAcceptPD; |
| } else if (strcasecmp(str, "RejectPD") == 0) { |
| presetTestParams->wfdsType = eRejectPD; |
| } else if (strcasecmp(str, "IgnorePD") == 0) { |
| presetTestParams->wfdsType = eIgnorePD; |
| } |
| |
| } else if (strcasecmp(str, "connectionCapabilityInfo") == 0) { |
| presetTestParams->wfdsConnectionCapabilityFlag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "GO") == 0) { |
| presetTestParams->wfdsConnectionCapability = eWfdsGO; |
| } else if (strcasecmp(str, "CLI") == 0) { |
| presetTestParams->wfdsConnectionCapability = eWfdsCLI; |
| } else if (strcasecmp(str, "NewGO") == 0) { |
| presetTestParams->wfdsConnectionCapability = eWfdsNewGO; |
| } else if (strcasecmp(str, "New") == 0) { |
| presetTestParams->wfdsConnectionCapability = eWfdsNew; |
| } else if (strcasecmp(str, "CliGO") == 0) { |
| presetTestParams->wfdsConnectionCapability = eWfdsCliGO; |
| } |
| } else if (strcasecmp(str, "ch_pref") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(presetTestParams->ch_pref, str, |
| sizeof(presetTestParams->ch_pref) - 1); |
| presetTestParams->ch_pref[sizeof(presetTestParams->ch_pref) - 1] = 0; |
| } else if (strcasecmp(str, "ch_op_class") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| presetTestParams->ch_op_class = atoi(str); |
| } else if (strcasecmp(str, "ch_pref_num") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| presetTestParams->ch_pref_num = atoi(str); |
| } else if (strcasecmp(str, "ch_reason_code") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| presetTestParams->ch_reason_code = atoi(str); |
| } else if (strcasecmp(str, "Cellular_Data_Cap") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| presetTestParams->cellular_data_cap = atoi(str); |
| presetTestParams->cellular_data_cap_flag = 1; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_PRESET_PARAMETERS_TLV, sizeof(caStaPresetParameters_t), |
| (BYTE*)presetTestParams, aBuf); |
| |
| *aLen = 4 + sizeof(caStaPresetParameters_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaResetDefault(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaResetDefault_t* reset = (caStaResetDefault_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(reset->intf, str, 15); |
| } else if (strcasecmp(str, "prog") == |
| 0) // VHT, 11n, VOE; HS2; HS2-R2, NAN, LOC etc |
| { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| reset->program = programNameToType(str); |
| } else if (strcasecmp(str, "type") == 0) // dut or sta |
| { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(reset->type, str, sizeof(reset->type) - 1); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_RESET_DEFAULT_TLV, sizeof(caStaResetDefault_t), |
| (BYTE*)reset, aBuf); |
| *aLen = 4 + sizeof(caStaResetDefault_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetRadio(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| char* str; |
| dutCommand_t* cmd = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| caStaSetRadio_t* sr = &cmd->cmdsu.sr; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(cmd->intf, str, 15); |
| DPRINT_INFO(WFA_OUT, "interface %s\n", cmd->intf); |
| } else if (strcasecmp(str, "mode") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "off") == 0) { |
| sr->mode = WFA_OFF; |
| } else { |
| sr->mode = WFA_ON; |
| } |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_SET_RADIO_TLV, sizeof(dutCommand_t), (BYTE*)cmd, aBuf); |
| *aLen = 4 + sizeof(dutCommand_t); |
| return WFA_SUCCESS; |
| } |
| |
| /* If you decide to use CLI, the function is to be disabled */ |
| |
| int xcCmdProcStaSetWireless(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetWireless_t* staWirelessParams = |
| (caStaSetWireless_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| DPRINT_INFO(WFA_OUT, "xcCmdProcStaSetWireless Starts..."); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staWirelessParams->intf, str, 15); |
| } else if (strcasecmp(str, "band") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staWirelessParams->band, str, 7); |
| DPRINT_INFO(WFA_OUT, "\n Band -%s- \n", staWirelessParams->band); |
| } else if (strcasecmp(str, "noack") == 0) { |
| char* ackpol; |
| int ackpolcnt = 0; |
| char* setvalues = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (setvalues != NULL) { |
| while ((ackpol = strtok_r(NULL, ":", &setvalues)) != NULL && |
| ackpolcnt < 4) { |
| if (strcasecmp(str, "enable") == 0) |
| staWirelessParams->noAck[ackpolcnt] = 1; |
| else if (strcasecmp(str, "disable") == 0) |
| staWirelessParams->noAck[ackpolcnt] = 0; |
| |
| ackpolcnt++; |
| } |
| } |
| } else if (strcasecmp(str, "program") == 0) // VHT or 11n or Voice |
| { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staWirelessParams->program, str, WFA_PROGNAME_LEN - 1); |
| |
| if (strcasecmp(staWirelessParams->program, "VHT") == 0) { |
| // process addba_reject, ampdu, amsdu, stbc_rx, width, smps, txsp_stream, rxsp_stream, band, DYN_BW_SGNL |
| // SGI80, TXBF, LDPC, Opt_md_notif_ie, nss_mcs_cap, tx_lgi_rate, zero_crc, vht_tkip, vht_wep, bw_sgnl |
| } |
| } else if (strcasecmp(str, "ldpc") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staWirelessParams->ldpc = strcasecmp(str, "enable") == 0; |
| staWirelessParams->ldpc_flag = |
| staWirelessParams->ldpc || strcasecmp(str, "disable") == 0; |
| } else if (strcasecmp(str, "bcc") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staWirelessParams->bcc = strcasecmp(str, "enable") == 0; |
| staWirelessParams->bcc_flag = |
| staWirelessParams->bcc || strcasecmp(str, "disable") == 0; |
| } else if (strcasecmp(str, "addbareq_bufsize") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staWirelessParams->addbareq_bufsize, str, |
| sizeof(staWirelessParams->addbareq_bufsize) - 1); |
| } else if (strcasecmp(str, "addbaresp_bufsize") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staWirelessParams->addbaresp_bufsize, str, |
| sizeof(staWirelessParams->addbaresp_bufsize) - 1); |
| } else if (strcasecmp(str, "omcontrol") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staWirelessParams->omcontrol = strcasecmp(str, "enable") == 0; |
| staWirelessParams->omcontrol_flag = |
| staWirelessParams->omcontrol || strcasecmp(str, "disable") == 0; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_SET_WIRELESS_TLV, sizeof(caStaSetWireless_t), |
| (BYTE*)staWirelessParams, aBuf); |
| *aLen = 4 + sizeof(caStaSetWireless_t); |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSendADDBA(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetSendADDBA_t* staSendADDBA = |
| (caStaSetSendADDBA_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| DPRINT_INFO(WFA_OUT, "xcCmdProcStaSendADDBA Starts..."); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSendADDBA->intf, str, 15); |
| } else if (strcasecmp(str, "tid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSendADDBA->tid = atoi(str); |
| DPRINT_INFO(WFA_OUT, "\n TID -%i- \n", staSendADDBA->tid); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_SEND_ADDBA_TLV, sizeof(caStaSetSendADDBA_t), |
| (BYTE*)staSendADDBA, aBuf); |
| *aLen = 4 + sizeof(caStaSetSendADDBA_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSetRIFS(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSetRIFS_t* staSetRIFS = (caStaSetRIFS_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| DPRINT_INFO(WFA_OUT, "xcCmdProcSetRIFS starts ...\n"); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSetRIFS->intf, str, 15); |
| } else if (strcasecmp(str, "action") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staSetRIFS->action = wfaStandardBoolParsing(str); |
| DPRINT_INFO(WFA_OUT, "\n TID -%i- \n", staSetRIFS->action); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_SET_RIFS_TEST_TLV, sizeof(caStaSetRIFS_t), |
| (BYTE*)staSetRIFS, aBuf); |
| *aLen = 4 + sizeof(caStaSetRIFS_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSendCoExistMGMT(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaSendCoExistMGMT_t* staSendMGMT = |
| (caStaSendCoExistMGMT_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| DPRINT_INFO(WFA_OUT, "xcCmdProcSendCoExistMGMT starts ...\n"); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSendMGMT->intf, str, 15); |
| } else if (strcasecmp(str, "type") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSendMGMT->type, str, 15); |
| } else if (strcasecmp(str, "value") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staSendMGMT->value, str, 15); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_SEND_COEXIST_MGMT_TLV, sizeof(caStaSendCoExistMGMT_t), |
| (BYTE*)staSendMGMT, aBuf); |
| *aLen = 4 + sizeof(caStaSendCoExistMGMT_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaSet11n(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caSta11n_t* v11nParams = (caSta11n_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| caSta11n_t init11nParams = {"wifi0", 0xFF, 0xFF, 0xFF, 0xFF, |
| 0xFF, 0xFF, 0xFFFF, 0xFFFF, "", |
| "", 0xFF, 0xFF, 0xFF, 0xFF}; |
| |
| DPRINT_INFO(WFA_OUT, "xcCmdProcStaSet11n Starts..."); |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| memcpy(v11nParams, &init11nParams, sizeof(caSta11n_t)); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(v11nParams->intf, str, WFA_IF_NAME_LEN - 1); |
| v11nParams->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } |
| |
| if (strcasecmp(str, "ampdu") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| v11nParams->ampdu = wfaStandardBoolParsing(str); |
| if (v11nParams->ampdu < 0) { |
| DPRINT_INFO(WFA_OUT, "Invalid AMPDU Value %s\n", str); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "\n AMPDU -%i- \n", v11nParams->ampdu); |
| } else if (strcasecmp(str, "40_intolerant") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| v11nParams->_40_intolerant = wfaStandardBoolParsing(str); |
| if (v11nParams->_40_intolerant < 0) { |
| DPRINT_INFO(WFA_OUT, "Invalid _40_intolerant Value %s\n", str); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "\n _40_intolerant -%i- \n", |
| v11nParams->_40_intolerant); |
| } else if (strcasecmp(str, "sgi20") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| v11nParams->sgi20 = wfaStandardBoolParsing(str); |
| if (v11nParams->sgi20 < 0) { |
| DPRINT_INFO(WFA_OUT, "Invalid sgi20 Value %s\n", str); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "\n sgi20 -%i- \n", v11nParams->sgi20); |
| } else if (strcasecmp(str, "amsdu") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| v11nParams->amsdu = wfaStandardBoolParsing(str); |
| if (v11nParams->amsdu < 0) { |
| DPRINT_INFO(WFA_OUT, "Invalid amsdu Value %s\n", str); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "\n amsdu -%i- \n", v11nParams->amsdu); |
| } else if (strcasecmp(str, "addba_reject") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| v11nParams->addba_reject = wfaStandardBoolParsing(str); |
| if (v11nParams->addba_reject < 0) { |
| DPRINT_INFO(WFA_OUT, "Invalid addba_reject Value %s\n", str); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "\n addba_reject -%i- \n", v11nParams->addba_reject); |
| } else if (strcasecmp(str, "greenfield") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| v11nParams->greenfield = wfaStandardBoolParsing(str); |
| if (v11nParams->greenfield < 0) { |
| DPRINT_INFO(WFA_OUT, "Invalid greenfield Value %s\n", str); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "\n greenfield -%i- \n", v11nParams->greenfield); |
| } else if (strcasecmp(str, "mcs32") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| v11nParams->mcs32 = wfaStandardBoolParsing(str); |
| if (v11nParams->mcs32 < 0) { |
| DPRINT_INFO(WFA_OUT, "Invalid mcs32 Value %s\n", str); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "\n mcs32 -%i- \n", v11nParams->mcs32); |
| } else if (strcasecmp(str, "rifs_test") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| v11nParams->rifs_test = wfaStandardBoolParsing(str); |
| if (v11nParams->rifs_test < 0) { |
| DPRINT_INFO(WFA_OUT, "Invalid rifs_test Value %s\n", str); |
| return WFA_FAILURE; |
| } |
| DPRINT_INFO(WFA_OUT, "\n rifs_test -%i- \n", v11nParams->rifs_test); |
| } else if (strcasecmp(str, "width") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(v11nParams->width, str, 7); |
| DPRINT_INFO(WFA_OUT, "\n width -%s- \n", v11nParams->width); |
| } else if (strcasecmp(str, "mcs_fixedrate") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(v11nParams->mcs_fixedrate, str, 3); |
| DPRINT_INFO(WFA_OUT, "\n mcs fixedrate -%s- \n", |
| v11nParams->mcs_fixedrate); |
| } else if (strcasecmp(str, "stbc_rx") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| v11nParams->stbc_rx = atoi(str); |
| DPRINT_INFO(WFA_OUT, "\n stbc rx -%d- \n", v11nParams->stbc_rx); |
| } else if (strcasecmp(str, "smps") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "dynamic") == 0) { |
| v11nParams->smps = 0; |
| } else if (strcasecmp(str, "static") == 0) { |
| v11nParams->smps = 1; |
| } else if (strcasecmp(str, "nolimit") == 0) { |
| v11nParams->smps = 2; |
| } |
| DPRINT_INFO(WFA_OUT, "\n smps -%d- \n", v11nParams->smps); |
| } else if (strcasecmp(str, "txsp_stream") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| v11nParams->txsp_stream = atoi(str); |
| DPRINT_INFO(WFA_OUT, "\n txsp_stream -%d- \n", v11nParams->txsp_stream); |
| } else if (strcasecmp(str, "rxsp_stream") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| v11nParams->rxsp_stream = atoi(str); |
| DPRINT_INFO(WFA_OUT, "\n rxsp_stream -%d- \n", v11nParams->rxsp_stream); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_SET_11N_TLV, sizeof(caSta11n_t), (BYTE*)v11nParams, |
| aBuf); |
| *aLen = 4 + sizeof(caSta11n_t); |
| return WFA_SUCCESS; |
| } |
| |
| //#endif |
| |
| int xcCmdProcStaSetRFeature(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| dutCommand_t* dutcmd = (dutCommand_t*)(aBuf + sizeof(wfaTLV)); |
| caStaRFeat_t* rfeat = (caStaRFeat_t*)&dutcmd->cmdsu.rfeat; |
| char* str; |
| |
| if (aBuf == NULL) |
| return WFA_FAILURE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(dutcmd->intf, str, 15); |
| } else if (strcasecmp(str, "prog") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(rfeat->prog, str, 7); |
| } else if (strcasecmp(str, "uapsd") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "enable") == 0) |
| rfeat->uapsd = eEnable; |
| else |
| rfeat->uapsd = eDisable; |
| } else if (strcasecmp(str, "peer") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(rfeat->peer, str, 17); |
| } else if (strcasecmp(str, "tpktimer") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "enable") == 0) |
| rfeat->tpktimer = eEnable; |
| else |
| rfeat->tpktimer = eDisable; |
| } else if (strcasecmp(str, "ChSwitchMode") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(rfeat->chswitchmode, str, sizeof(rfeat->chswitchmode) - 1); |
| } else if (strcasecmp(str, "OffChNum") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| rfeat->offchnum = atoi(str); |
| } else if (strcasecmp(str, "SecChOffset") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(rfeat->secchoffset, str, sizeof(rfeat->secchoffset) - 1); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_SET_RFEATURE_TLV, sizeof(caStaRFeat_t), (BYTE*)rfeat, |
| aBuf); |
| *aLen = 4 + sizeof(caStaRFeat_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaStartWfdConnection(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaStartWfdConn_t* staStartWfdConn = |
| (caStaStartWfdConn_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| BYTE tmp_cnt; |
| char* tmp_str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(pcmdStr, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staStartWfdConn->intf, str, WFA_IF_NAME_LEN - 1); |
| staStartWfdConn->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "peeraddress") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| for (tmp_cnt = 0;; tmp_cnt++) { |
| tmp_str = strtok_r(str, " ", &str); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| strncpy(staStartWfdConn->peer[tmp_cnt], tmp_str, |
| WFA_MAC_ADDR_STR_LEN - 1); |
| staStartWfdConn->peer[tmp_cnt][WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } |
| } else if (strcasecmp(str, "init_wfd") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staStartWfdConn->init_wfd = atoi(str); |
| staStartWfdConn->init_wfd_flag = 1; |
| } else if (strcasecmp(str, "intent_val") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staStartWfdConn->intent_val = atoi(str); |
| staStartWfdConn->intent_val_flag = 1; |
| } else if (strcasecmp(str, "oper_chn") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staStartWfdConn->oper_chn = atoi(str); |
| staStartWfdConn->oper_chn_flag = 1; |
| } else if (strcasecmp(str, "coupledSession") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staStartWfdConn->coupledSession = atoi(str); |
| staStartWfdConn->coupledSession_flag = 1; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_START_WFD_CONNECTION_TLV, sizeof(caStaStartWfdConn_t), |
| (BYTE*)staStartWfdConn, aBuf); |
| |
| *aLen = 4 + sizeof(caStaStartWfdConn_t); |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaCliCommand(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| printf("\n The CA CLI command to DUT is : %s", pcmdStr); |
| printf("\n The CA CLI command to DUT Length : %zu", strlen(pcmdStr)); |
| wfaEncodeTLV(WFA_STA_CLI_CMD_TLV, strlen(pcmdStr), (BYTE*)pcmdStr, aBuf); |
| |
| *aLen = 4 + strlen(pcmdStr); |
| return TRUE; |
| } |
| |
| int xcCmdProcStaConnectGoStartWfd(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaConnectGoStartWfd_t* staConnectGoStartWfd = |
| (caStaConnectGoStartWfd_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staConnectGoStartWfd->intf, str, WFA_IF_NAME_LEN - 1); |
| staConnectGoStartWfd->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "groupid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staConnectGoStartWfd->grpid, str, WFA_P2P_GRP_ID_LEN - 1); |
| staConnectGoStartWfd->grpid[WFA_P2P_GRP_ID_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "p2pdevid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staConnectGoStartWfd->devId, str, WFA_P2P_DEVID_LEN - 1); |
| staConnectGoStartWfd->devId[WFA_P2P_DEVID_LEN - 1] = '\0'; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_CONNECT_GO_START_WFD_TLV, |
| sizeof(caStaConnectGoStartWfd_t), (BYTE*)staConnectGoStartWfd, |
| aBuf); |
| |
| *aLen = 4 + sizeof(caStaConnectGoStartWfd_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaGenerateEvent(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaGenEvent_t* staGenEvent = (caStaGenEvent_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| caWfdStaGenEvent_t* pWfdEvent; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, '\0', *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staGenEvent->intf, str, WFA_IF_NAME_LEN - 1); |
| staGenEvent->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "program") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "WFD") == 0) { |
| staGenEvent->program = PROG_TYPE_WFD; |
| pWfdEvent = (caWfdStaGenEvent_t*)&staGenEvent->wfdEvent; |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "type") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "uibc_gen") == 0) { |
| pWfdEvent->type = eUibcGen; |
| } |
| if (strcasecmp(str, "uibc_hid") == 0) { |
| pWfdEvent->type = eUibcHid; |
| } |
| if (strcasecmp(str, "frameskip") == 0) { |
| pWfdEvent->type = eFrameSkip; |
| } |
| if (strcasecmp(str, "inputContent") == 0) { |
| pWfdEvent->type = eInputContent; |
| } |
| if (strcasecmp(str, "i2cread") == 0) { |
| pWfdEvent->type = eI2cRead; |
| } |
| if (strcasecmp(str, "i2cwrite") == 0) { |
| pWfdEvent->type = eI2cWrite; |
| } |
| if (strcasecmp(str, "idrReq") == 0) { |
| pWfdEvent->type = eIdrReq; |
| } |
| } else if (strcasecmp(str, "sessionid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(pWfdEvent->wfdSessionID, str, WFA_WFD_SESSION_ID_LEN - 1); |
| pWfdEvent->wfdSessionID[WFA_WFD_SESSION_ID_LEN - 1] = '\0'; |
| pWfdEvent->wfdSessionIdflag = 1; |
| } else if (strcasecmp(str, "uibceventtype") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "KeyBoard") == 0) { |
| pWfdEvent->wfdUibcEventType = eKeyBoardEvent; |
| } |
| if (strcasecmp(str, "Mouse") == 0) { |
| pWfdEvent->wfdUibcEventType = eMouseEvent; |
| } |
| pWfdEvent->wfdUibcEventTypeflag = 1; |
| } else if (strcasecmp(str, "uibc_prepare") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "KeyBoard") == 0) { |
| pWfdEvent->wfdUibcEventPrepare = eKeyBoardEvent; |
| } |
| if (strcasecmp(str, "Mouse") == 0) { |
| pWfdEvent->wfdUibcEventPrepare = eMouseEvent; |
| } |
| pWfdEvent->wfdUibcEventPrepareflag = 1; |
| } else if (strcasecmp(str, "frameSkip") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Start") == 0) { |
| pWfdEvent->wfdFrameSkipRateflag = 1; |
| } else { |
| pWfdEvent->wfdFrameSkipRateflag = 0; |
| } |
| } else if (strcasecmp(str, "InputContentType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Protected") == 0) { |
| pWfdEvent->wfdInputContentType = eProtected; |
| } |
| if (strcasecmp(str, "Unprotected") == 0) { |
| pWfdEvent->wfdInputContentType = eUnprotected; |
| } |
| if (strcasecmp(str, "ProtectedVideoOnly") == 0) { |
| pWfdEvent->wfdInputContentType = eProtectedVideoOnly; |
| } |
| pWfdEvent->wfdInputContentTypeflag = 1; |
| } else if (strcasecmp(str, "I2c_Struct") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(pWfdEvent->wfdI2cData, str, 31); |
| pWfdEvent->wfdI2cData[31] = '\0'; |
| pWfdEvent->wfdI2cDataflag = 1; |
| } |
| } |
| } |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_GENERATE_EVENT_TLV, sizeof(caStaGenEvent_t), |
| (BYTE*)staGenEvent, aBuf); |
| |
| *aLen = 4 + sizeof(caStaGenEvent_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaReinvokeWfdSession(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaReinvokeWfdSession_t* staReinvokeWfdSession = |
| (caStaReinvokeWfdSession_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staReinvokeWfdSession->intf, str, WFA_IF_NAME_LEN - 1); |
| staReinvokeWfdSession->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "groupid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staReinvokeWfdSession->grpid, str, WFA_P2P_GRP_ID_LEN - 1); |
| staReinvokeWfdSession->grpid[WFA_P2P_GRP_ID_LEN - 1] = '\0'; |
| staReinvokeWfdSession->grpid_flag = 1; |
| } else if (strcasecmp(str, "PeerAddress") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staReinvokeWfdSession->peer, str, WFA_MAC_ADDR_STR_LEN - 1); |
| staReinvokeWfdSession->peer[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "invitationaction") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Send") == 0) { |
| staReinvokeWfdSession->wfdInvitationAction = eInvitationSend; |
| } else if (strcasecmp(str, "Accept") == 0) { |
| staReinvokeWfdSession->wfdInvitationAction = eInvitationAccept; |
| } |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_REINVOKE_WFD_SESSION_TLV, |
| sizeof(caStaReinvokeWfdSession_t), (BYTE*)staReinvokeWfdSession, |
| aBuf); |
| *aLen = 4 + sizeof(caStaReinvokeWfdSession_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaGetParameter(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaGetParameter_t* staGetParameter = |
| (caStaGetParameter_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staGetParameter->intf, str, WFA_IF_NAME_LEN - 1); |
| staGetParameter->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "program") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "WFD") == 0) { |
| staGetParameter->program = PROG_TYPE_WFD; |
| } else if (strcasecmp(str, "WFDS") == 0) { |
| staGetParameter->program = PROG_TYPE_WFDS; |
| } |
| |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Parameter") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "DiscoveredDevList") == 0) { |
| staGetParameter->getParamValue = eDiscoveredDevList; |
| } else if (strcasecmp(str, "OpenPorts") == 0) { |
| staGetParameter->getParamValue = eOpenPorts; |
| } else if (strcasecmp(str, "NAN") == 0) { |
| staGetParameter->program = PROG_TYPE_NAN; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Parameter") == 0) { |
| staGetParameter->getParamValue = eMasterPref; |
| } |
| } |
| } |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_GET_PARAMETER_TLV, sizeof(caStaGetParameter_t), |
| (BYTE*)staGetParameter, aBuf); |
| |
| *aLen = 4 + sizeof(caStaGetParameter_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaNfcAction(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaNfcAction_t* staNfcAction = (caStaNfcAction_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staNfcAction->intf, str, WFA_IF_NAME_LEN - 1); |
| staNfcAction->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "operation") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "write_select") == 0) { |
| staNfcAction->nfcOperation = eNfcWriteSelect; |
| } else if (strcasecmp(str, "read_tag") == 0) { |
| staNfcAction->nfcOperation = eNfcReadTag; |
| } else if (strcasecmp(str, "conn_hndovr") == 0) { |
| staNfcAction->nfcOperation = eNfcHandOver; |
| } else if (strcasecmp(str, "write_config") == 0) { |
| staNfcAction->nfcOperation = eNfcWriteConfig; |
| } else if (strcasecmp(str, "write_passwd") == 0) { |
| staNfcAction->nfcOperation = eNfcWritePasswd; |
| } else if (strcasecmp(str, "wps_conn_hndovr") == 0) { |
| staNfcAction->nfcOperation = eNfcWpsHandOver; |
| } |
| } else if (strcasecmp(str, "intent_val") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staNfcAction->intent_val = atoi(str); |
| staNfcAction->intent_val_flag = 1; |
| } else if (strcasecmp(str, "oper_chn") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staNfcAction->oper_chn = atoi(str); |
| staNfcAction->oper_chn_flag = 1; |
| } else if (strcasecmp(str, "ssid") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staNfcAction->ssid, str, WFA_SSID_NAME_LEN - 1); |
| staNfcAction->ssid[WFA_SSID_NAME_LEN - 1] = '\0'; |
| staNfcAction->ssid_flag = 1; |
| } else if (strcasecmp(str, "init") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staNfcAction->nfc_init = atoi(str); |
| staNfcAction->nfc_init_flag = 1; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_NFC_ACTION_TLV, sizeof(caStaNfcAction_t), |
| (BYTE*)staNfcAction, aBuf); |
| |
| *aLen = 4 + sizeof(caStaNfcAction_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaExecAction(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaExecAction_t* staExecAction = |
| (caStaExecAction_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->intf, str, WFA_IF_NAME_LEN - 1); |
| staExecAction->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "prog") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "NAN") == 0) { |
| staExecAction->prog = PROG_TYPE_NAN; |
| } |
| } else if (strcasecmp(str, "nanOp") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->nanOp, str, 7); |
| } else if (strcasecmp(str, "masterPref") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->masterPref, str, 7); |
| } else if (strcasecmp(str, "randFactor") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->randFactor, str, 7); |
| } else if (strcasecmp(str, "hopCount") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->hopCount, str, 7); |
| } else if (strcasecmp(str, "highTsf") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->highTsf, str, 7); |
| } else if (strcasecmp(str, "methodType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->methodType, str, 15); |
| } else if (strcasecmp(str, "furtherAvailInd") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->furtherAvailInd, str, 7); |
| } else if (strcasecmp(str, "mac") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->mac, str, WFA_MAC_ADDR_STR_LEN - 1); |
| staExecAction->mac[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "band") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->band, str, 7); |
| } else if (strcasecmp(str, "fiveGHzOnly") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staExecAction->fiveGHzOnly = atoi(str); |
| } else if (strcasecmp(str, "publishType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->publishType, str, 15); |
| } else if (strcasecmp(str, "subscribeType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->subscribeType, str, 15); |
| } else if (strcasecmp(str, "serviceName") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->serviceName, str, 63); |
| } else if (strcasecmp(str, "sdfTxDw") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staExecAction->sdfTxDw = atoi(str); |
| } else if (strcasecmp(str, "sdfDelay") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staExecAction->sdfDelay = atoi(str); |
| } else if (strcasecmp(str, "rxMatchFilter") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->rxMatchFilter, str, 63); |
| } else if (strcasecmp(str, "txMatchFilter") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->txMatchFilter, str, 63); |
| } else if (strcasecmp(str, "discRangeLtd") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staExecAction->discRangeLtd = atoi(str); |
| } else if (strcasecmp(str, "discRangeIgnore") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staExecAction->discRangeIgnore = atoi(str); |
| } else if (strcasecmp(str, "includeBit") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staExecAction->includeBit = atoi(str); |
| } else if (strcasecmp(str, "srfType") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staExecAction->srfType = atoi(str); |
| } else if (strcasecmp(str, "remoteInstanceID") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staExecAction->remoteInstanceID = atoi(str); |
| } else if (strcasecmp(str, "localInstanceID") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staExecAction->localInstanceID = atoi(str); |
| } else if (strcasecmp(str, "destMac") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->destMac, str, WFA_MAC_ADDR_STR_LEN - 1); |
| staExecAction->destMac[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "trigger") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staExecAction->trigger, str, 15); |
| } else if (strcasecmp(str, "askForLocCivic") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staExecAction->askForLocCivic = atoi(str); |
| } else if (strcasecmp(str, "askForLCI") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staExecAction->askForLCI = atoi(str); |
| } else if (strcasecmp(str, "burstsExponent") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staExecAction->burstsExponent = atoi(str); |
| } else if (strcasecmp(str, "asap") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staExecAction->asap = atoi(str); |
| } else if (strcasecmp(str, "formatBwFTM") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staExecAction->formatBwFTM = atoi(str); |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_EXEC_ACTION_TLV, sizeof(caStaExecAction_t), |
| (BYTE*)staExecAction, aBuf); |
| |
| *aLen = 4 + sizeof(caStaExecAction_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaInvokeCommand(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaInvokeCmd_t* staInvokeCmd = (caStaInvokeCmd_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staInvokeCmd->intf, str, WFA_IF_NAME_LEN - 1); |
| staInvokeCmd->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "prog") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "WFDS") == 0) { |
| staInvokeCmd->program = PROG_TYPE_WFDS; |
| } |
| } else if (strcasecmp(str, "command_type") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Primitive") == 0) { |
| staInvokeCmd->cmdType = ePrimitiveCmdType; |
| } else if (strcasecmp(str, "Message") == 0) { |
| staInvokeCmd->cmdType = eMessageCmdType; |
| } |
| } |
| |
| else if (strcasecmp(str, "primitive_type") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Advertise") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.AdvPrim.PrimType = |
| eCmdPrimTypeAdvt; |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "service_name") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "OOB") == 0) { |
| strcpy(staInvokeCmd->InvokeCmds.primtiveType.AdvPrim.serviceName, |
| "OOB"); |
| } else { |
| char buf[64]; |
| strncpy(buf, str, 63); |
| buf[63] = '\0'; |
| strcpy(staInvokeCmd->InvokeCmds.primtiveType.AdvPrim.serviceName, |
| buf); |
| } |
| |
| staInvokeCmd->InvokeCmds.primtiveType.AdvPrim.serviceName_flag = 1; |
| } else if (strcasecmp(str, "auto_accept") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.AdvPrim.autoAccept_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| staInvokeCmd->InvokeCmds.primtiveType.AdvPrim.autoAccpet = |
| atoi(str); |
| |
| } else if (strcasecmp(str, "service_info") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.AdvPrim.serviceInfo_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| char buf[64]; |
| strncpy(buf, str, 63); |
| buf[63] = '\0'; |
| strcpy(staInvokeCmd->InvokeCmds.primtiveType.AdvPrim.serviceName, |
| buf); |
| |
| } else if (strcasecmp(str, "service_status") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.AdvPrim.serviceStatus_flag = |
| 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.AdvPrim.serviceStaus = |
| atoi(str); |
| } |
| } |
| |
| } |
| |
| else if (strcasecmp(str, "Seek") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.SeekPrim.PrimType = |
| eCmdPrimTypeSeek; |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "service_name") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "OOB") == 0) { |
| strcpy(staInvokeCmd->InvokeCmds.primtiveType.SeekPrim.serviceName, |
| "OOB"); |
| } else { |
| char buf[64]; |
| strncpy(buf, str, 63); |
| buf[63] = '\0'; |
| strcpy(staInvokeCmd->InvokeCmds.primtiveType.SeekPrim.serviceName, |
| buf); |
| } |
| staInvokeCmd->InvokeCmds.primtiveType.SeekPrim.serviceName_flag = 1; |
| } else if (strcasecmp(str, "exact_search") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.SeekPrim.exactSearch_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.SeekPrim.exactSearch = |
| atoi(str); |
| } else if (strcasecmp(str, "mac_address") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.SeekPrim.macAddress_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staInvokeCmd->InvokeCmds.primtiveType.SeekPrim.macaddress, |
| str, WFA_MAC_ADDR_STR_LEN - 1); |
| staInvokeCmd->InvokeCmds.primtiveType.SeekPrim |
| .macaddress[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "service_info") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.SeekPrim.serviceInfo_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staInvokeCmd->InvokeCmds.primtiveType.SeekPrim.serviceInfo, |
| str, 63); |
| staInvokeCmd->InvokeCmds.primtiveType.SeekPrim.serviceInfo[63] = |
| '\0'; |
| } |
| } |
| } else if (strcasecmp(str, "Cancel") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.CancelPrim.PrimType = |
| eCmdPrimTypeCancel; |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "cancelMethod") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.CancelPrim.cancelMethod_flag = |
| 1; |
| if (strcasecmp(str, "Seek") == 0) |
| staInvokeCmd->InvokeCmds.primtiveType.CancelPrim.cancelMethod = |
| eCmdPrimTypeSeek; |
| else if (strcasecmp(str, "Advertise") == |
| 0) // not defined in CAPI, just for information |
| staInvokeCmd->InvokeCmds.primtiveType.CancelPrim.cancelMethod = |
| eCmdPrimTypeAdvt; |
| } |
| } |
| } else if (strcasecmp(str, "ConnectSession") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.PrimType = |
| eCmdPrimTypeConnSession; |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "service_mac") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.serviceMac_flag = |
| 1; |
| strncpy( |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.serviceMac, |
| str, WFA_MAC_ADDR_STR_LEN - 1); |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim |
| .serviceMac[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "AdvID") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.advId_flag = 1; |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.advID = |
| strtol(str, NULL, 16); |
| } else if (strcasecmp(str, "session_info") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim |
| .sessionInfo_flag = 1; |
| strncpy( |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.sessionInfo, |
| str, 63); |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.sessionInfo[63] = |
| '\0'; |
| } else if (strcasecmp(str, "network_role") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim |
| .networkRole_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.networkRole = |
| atoi(str); |
| } else if (strcasecmp(str, "connectionCapabilityInfo") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim |
| .connCapInfo_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "GO") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.connCapInfo = |
| eWfdsGO; |
| } else if (strcasecmp(str, "CLI") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.connCapInfo = |
| eWfdsCLI; |
| } else if (strcasecmp(str, "NewGO") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.connCapInfo = |
| eWfdsNewGO; |
| } else if (strcasecmp(str, "New") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.connCapInfo = |
| eWfdsNew; |
| } else if (strcasecmp(str, "CliGO") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.connCapInfo = |
| eWfdsCliGO; |
| } |
| } else if (strcasecmp(str, "ssid") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.ssid_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.ssid, |
| str, 63); |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.ssid[63] = '\0'; |
| } else if (strcasecmp(str, "Oper_chn") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.operChn_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.ConnSessPrim.operChn = |
| atoi(str); |
| } |
| } |
| |
| } |
| |
| else if (strcasecmp(str, "ConfirmSession") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.ConfSessPrim.PrimType = |
| eCmdPrimTypeConfirmSession; |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "session_mac") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.ConfSessPrim.sessionMac_flag = |
| 1; |
| strncpy( |
| staInvokeCmd->InvokeCmds.primtiveType.ConfSessPrim.sessionMac, |
| str, WFA_MAC_ADDR_STR_LEN - 1); |
| staInvokeCmd->InvokeCmds.primtiveType.ConfSessPrim |
| .sessionMac[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "session_id") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.ConfSessPrim.sessionID_flag = |
| 1; |
| staInvokeCmd->InvokeCmds.primtiveType.ConfSessPrim.sessionID = |
| strtol(str, NULL, 16); |
| } else if (strcasecmp(str, "confirmed") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.ConfSessPrim.confirmed_flag = |
| 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.ConfSessPrim.confirmed = |
| atoi(str); |
| } |
| } |
| } else if (strcasecmp(str, "SetSessionReady") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.SetSessRdyPrim.PrimType = |
| eCmdPrimTypeSetSessionReady; |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "session_mac") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.SetSessRdyPrim |
| .sessionMac_flag = 1; |
| strncpy( |
| staInvokeCmd->InvokeCmds.primtiveType.SetSessRdyPrim.sessionMac, |
| str, WFA_MAC_ADDR_STR_LEN - 1); |
| staInvokeCmd->InvokeCmds.primtiveType.SetSessRdyPrim |
| .sessionMac[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "session_id") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.SetSessRdyPrim |
| .sessionID_flag = 1; |
| staInvokeCmd->InvokeCmds.primtiveType.SetSessRdyPrim.sessionID = |
| strtol(str, NULL, 16); |
| } |
| } |
| } else if (strcasecmp(str, "BoundPort") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.BoundPortPrim.PrimType = |
| eCmdPrimTypeBoundPort; |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "session_mac") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.BoundPortPrim |
| .sessionMac_flag = 1; |
| strncpy( |
| staInvokeCmd->InvokeCmds.primtiveType.BoundPortPrim.sessionMac, |
| str, WFA_MAC_ADDR_STR_LEN - 1); |
| staInvokeCmd->InvokeCmds.primtiveType.BoundPortPrim |
| .sessionMac[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "session_id") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.BoundPortPrim.sessionID_flag = |
| 1; |
| staInvokeCmd->InvokeCmds.primtiveType.BoundPortPrim.sessionID = |
| strtol(str, NULL, 16); |
| } else if (strcasecmp(str, "port") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.BoundPortPrim.port_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.BoundPortPrim.port = |
| atoi(str); |
| } |
| } |
| |
| } else if (strcasecmp(str, "ServiceStatusChange") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.ServStatusChngPrim.PrimType = |
| eCmdPrimTypeServiceStatusChange; |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "advId") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.ServStatusChngPrim |
| .advId_flag = 1; |
| staInvokeCmd->InvokeCmds.primtiveType.ServStatusChngPrim.advID = |
| strtol(str, NULL, 16); |
| } else if (strcasecmp(str, "ServiceStatus") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.ServStatusChngPrim |
| .serviceStatus_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.ServStatusChngPrim |
| .serviceStatus = atoi(str); |
| } |
| } |
| |
| } else if (strcasecmp(str, "CloseSession") == 0) { |
| staInvokeCmd->InvokeCmds.primtiveType.CloseSessPrim.PrimType = |
| eCmdPrimTypeCloseSession; |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "session_mac") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.CloseSessPrim |
| .sessionMac_flag = 1; |
| strncpy( |
| staInvokeCmd->InvokeCmds.primtiveType.CloseSessPrim.sessionMac, |
| str, WFA_MAC_ADDR_STR_LEN - 1); |
| staInvokeCmd->InvokeCmds.primtiveType.CloseSessPrim |
| .sessionMac[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "session_id") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.primtiveType.CloseSessPrim.sessionID_flag = |
| 1; |
| staInvokeCmd->InvokeCmds.primtiveType.CloseSessPrim.sessionID = |
| strtol(str, NULL, 16); |
| } |
| } |
| } |
| |
| } |
| |
| else if (strcasecmp(str, "opcode") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "REQUEST_SESSION") == 0) |
| staInvokeCmd->InvokeCmds.Msg.opcode = eMsgReqSession; |
| else if (strcasecmp(str, "REMOVE_SESSION") == 0) |
| staInvokeCmd->InvokeCmds.Msg.opcode = eMsgRmvSession; |
| else if (strcasecmp(str, "REJECT_SESSION") == 0) |
| staInvokeCmd->InvokeCmds.Msg.opcode = eMsgRejSession; |
| else if (strcasecmp(str, "ADDED_SESSION") == 0) |
| staInvokeCmd->InvokeCmds.Msg.opcode = eMsgAddedSession; |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "session_id") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.Msg.sessionId_flag = 1; |
| staInvokeCmd->InvokeCmds.Msg.sessionID = strtol(str, NULL, 16); |
| } else if (strcasecmp(str, "session_mac") == |
| 0) // not defined in CAPI, just for information |
| { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staInvokeCmd->InvokeCmds.Msg.sessionMac_flag = 1; |
| strncpy(staInvokeCmd->InvokeCmds.Msg.sessionMac, str, |
| WFA_MAC_ADDR_STR_LEN - 1); |
| staInvokeCmd->InvokeCmds.Msg.sessionMac[WFA_MAC_ADDR_STR_LEN - 1] = |
| '\0'; |
| } |
| } |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_INVOKE_COMMAND_TLV, sizeof(caStaInvokeCmd_t), |
| (BYTE*)staInvokeCmd, aBuf); |
| |
| *aLen = 4 + sizeof(caStaInvokeCmd_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaManageService(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaMngServ_t* staManageServCmd = (caStaMngServ_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staManageServCmd->intf, str, WFA_IF_NAME_LEN - 1); |
| staManageServCmd->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "prog") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "WFDS") == 0) { |
| staManageServCmd->program = PROG_TYPE_WFDS; |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| if (strcasecmp(str, "service_name") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Send") == 0) { |
| staManageServCmd->MngCmds.MgtServ.serviceName = eServiceNameSend; |
| } else if (strcasecmp(str, "Display") == 0) { |
| staManageServCmd->MngCmds.MgtServ.serviceName = |
| eServiceNameDisplay; |
| } else if (strcasecmp(str, "Play") == 0) { |
| staManageServCmd->MngCmds.MgtServ.serviceName = eServiceNamePlay; |
| } else if (strcasecmp(str, "Print") == 0) { |
| staManageServCmd->MngCmds.MgtServ.serviceName = eServiceNamePrint; |
| } |
| |
| } else if (strcasecmp(str, "service_role") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "Tx") == 0) |
| staManageServCmd->MngCmds.MgtServ.serviceRole = eServiceRoleTx; |
| else |
| staManageServCmd->MngCmds.MgtServ.serviceRole = eServiceRoleRx; |
| } |
| |
| if (strcasecmp(str, "service_mac") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staManageServCmd->MngCmds.MgtServ.serviceMac_flag = 1; |
| strncpy(staManageServCmd->MngCmds.MgtServ.serviceMac, str, |
| WFA_MAC_ADDR_STR_LEN - 1); |
| staManageServCmd->MngCmds.MgtServ |
| .serviceMac[WFA_MAC_ADDR_STR_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "AdvID") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staManageServCmd->MngCmds.MgtServ.advId_flag = 1; |
| staManageServCmd->MngCmds.MgtServ.advID = strtol(str, NULL, 16); |
| ; |
| } else if (strcasecmp(str, "session_info") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staManageServCmd->MngCmds.MgtServ.sessionInfo_flag = 1; |
| strncpy(staManageServCmd->MngCmds.MgtServ.sessionInfo, str, 63); |
| staManageServCmd->MngCmds.MgtServ.sessionInfo[63] = '\0'; |
| } else if (strcasecmp(str, "network_role") == 0) { |
| staManageServCmd->MngCmds.MgtServ.networkRole_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| staManageServCmd->MngCmds.MgtServ.networkRole = atoi(str); |
| } else if (strcasecmp(str, "connectionCapabilityInfo") == 0) { |
| staManageServCmd->MngCmds.MgtServ.connCapInfo_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "GO") == 0) { |
| staManageServCmd->MngCmds.MgtServ.connCapInfo = eWfdsGO; |
| } else if (strcasecmp(str, "CLI") == 0) { |
| staManageServCmd->MngCmds.MgtServ.connCapInfo = eWfdsCLI; |
| } else if (strcasecmp(str, "NewGO") == 0) { |
| staManageServCmd->MngCmds.MgtServ.connCapInfo = eWfdsNewGO; |
| } else if (strcasecmp(str, "New") == 0) { |
| staManageServCmd->MngCmds.MgtServ.connCapInfo = eWfdsNew; |
| } else if (strcasecmp(str, "CliGO") == 0) { |
| staManageServCmd->MngCmds.MgtServ.connCapInfo = eWfdsCliGO; |
| } |
| } else if (strcasecmp(str, "manage_actions") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mngActions_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| char *str2, *subtoken, *saveptr2; |
| int index = 0; |
| for (str2 = str;; str2 = NULL) { |
| subtoken = strtok_r(str2, " ", &saveptr2); |
| if (subtoken == NULL) |
| break; |
| if (strcasecmp(str, "transfer") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsTransfer; |
| } else if (strcasecmp(str, "pause") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsPause; |
| } else if (strcasecmp(str, "resume") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsResume; |
| } else if (strcasecmp(str, "modify") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsModify; |
| } else if (strcasecmp(str, "cancel") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsCancel; |
| } else if (strcasecmp(str, "amidClose") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsAmidClose; |
| } else if (strcasecmp(str, "close") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsClose; |
| } else if (strcasecmp(str, "receive") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsReceive; |
| } else if (strcasecmp(str, "play") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsPlay; |
| } else if (strcasecmp(str, "display") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsDisplay; |
| } else if (strcasecmp(str, "GetPrinterAttr") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsGetPrintAttr; |
| } else if (strcasecmp(str, "PrintJobOperation") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsPrintJobOper; |
| } else if (strcasecmp(str, "GetJobAttr") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsGetJobAttr; |
| } else if (strcasecmp(str, "CreateJobOper") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsCreateJobOper; |
| } else if (strcasecmp(str, "SendPrintDoc") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsSendPrintDoc; |
| } else if (strcasecmp(str, "DoNothing") == 0) { |
| staManageServCmd->MngCmds.MgtServ.mgtActions[index] = |
| eWfdsMgtActionsDoNothing; |
| } |
| |
| index++; |
| } |
| |
| staManageServCmd->MngCmds.MgtServ.numMngActions = index; |
| |
| } else if (strcasecmp(str, "send_fileList") == 0) { |
| staManageServCmd->MngCmds.MgtServ.sendFileList_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| char *str2, *subtoken, *saveptr2; |
| int index = 0; |
| for (str2 = str;; str2 = NULL) { |
| subtoken = strtok_r(str2, " ", &saveptr2); |
| if (subtoken == NULL) |
| break; |
| const size_t fileSize = |
| sizeof(staManageServCmd->MngCmds.MgtServ.fileList[index]); |
| strncpy(staManageServCmd->MngCmds.MgtServ.fileList[index], str, |
| fileSize); |
| staManageServCmd->MngCmds.MgtServ.fileList[index][fileSize - 1] = |
| '\0'; |
| index++; |
| } |
| staManageServCmd->MngCmds.MgtServ.numModFiles = index; |
| } else if (strcasecmp(str, "sendModify_FileList") == 0) { |
| staManageServCmd->MngCmds.MgtServ.modSendFileList_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| char *str2, *subtoken, *saveptr2; |
| int index = 0; |
| for (str2 = str;; str2 = NULL) { |
| subtoken = strtok_r(str2, " ", &saveptr2); |
| if (subtoken == NULL) |
| break; |
| strncpy(staManageServCmd->MngCmds.MgtServ.modFileList[index], str, |
| 16); |
| staManageServCmd->MngCmds.MgtServ.modFileList[index][15] = '\0'; |
| index++; |
| } |
| staManageServCmd->MngCmds.MgtServ.numModFiles = index; |
| } else if (strcasecmp(str, "PdlType") == 0) { |
| staManageServCmd->MngCmds.MgtServ.PdlType_flag = 1; |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (strcasecmp(str, "PCLM") == 0) { |
| staManageServCmd->MngCmds.MgtServ.PdlType = ePclmPdr; |
| } else if (strcasecmp(str, "PWG") == 0) { |
| staManageServCmd->MngCmds.MgtServ.PdlType = ePwgPdr; |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_MANAGE_SERVICE_TLV, sizeof(caStaMngServ_t), |
| (BYTE*)staManageServCmd, aBuf); |
| |
| *aLen = 4 + sizeof(caStaMngServ_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaGetEvents(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaGetEvents_t* staGetEvents = (caStaGetEvents_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staGetEvents->intf, str, WFA_IF_NAME_LEN - 1); |
| staGetEvents->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "program") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "WFDS") == 0) { |
| staGetEvents->program = PROG_TYPE_WFDS; |
| } |
| if (strcasecmp(str, "NAN") == 0) { |
| staGetEvents->program = PROG_TYPE_NAN; |
| } |
| } else if (strcasecmp(str, "action") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staGetEvents->action, str, WFA_EVT_ACTION_LEN - 1); |
| staGetEvents->action[WFA_EVT_ACTION_LEN - 1] = '\0'; |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_GET_EVENTS_TLV, sizeof(caStaGetEvents_t), |
| (BYTE*)staGetEvents, aBuf); |
| |
| *aLen = 4 + sizeof(caStaGetEvents_t); |
| |
| return WFA_SUCCESS; |
| } |
| |
| int xcCmdProcStaGetEventDetails(char* pcmdStr, BYTE* aBuf, int* aLen) { |
| caStaGetEventDetails_t* staGetEventDetails = |
| (caStaGetEventDetails_t*)(aBuf + sizeof(wfaTLV)); |
| char* str; |
| |
| if (aBuf == NULL) |
| return FALSE; |
| |
| memset(aBuf, 0, *aLen); |
| |
| for (;;) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| if (str == NULL || str[0] == '\0') |
| break; |
| |
| if (strcasecmp(str, "interface") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| strncpy(staGetEventDetails->intf, str, WFA_IF_NAME_LEN - 1); |
| staGetEventDetails->intf[WFA_IF_NAME_LEN - 1] = '\0'; |
| } else if (strcasecmp(str, "program") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "WFDS") == 0) { |
| staGetEventDetails->program = PROG_TYPE_WFDS; |
| } |
| } else if (strcasecmp(str, "EventName") == 0) { |
| str = strtok_r(NULL, ",", &pcmdStr); |
| |
| if (strcasecmp(str, "SearchResult") == 0) { |
| staGetEventDetails->eventId = eSearchResult; |
| } else if (strcasecmp(str, "SearchTerminated") == 0) { |
| staGetEventDetails->eventId = eSearchTerminated; |
| } else if (strcasecmp(str, "AdvertiseStatus") == 0) { |
| staGetEventDetails->eventId = eAdvertiseStatus; |
| } else if (strcasecmp(str, "SessionRequest") == 0) { |
| staGetEventDetails->eventId = eSessionRequest; |
| } else if (strcasecmp(str, "ConnectStatus") == 0) { |
| staGetEventDetails->eventId = eConnectStatus; |
| } else if (strcasecmp(str, "SessionStatus") == 0) { |
| staGetEventDetails->eventId = eSessionStatus; |
| } else if (strcasecmp(str, "PortStatus") == 0) { |
| staGetEventDetails->eventId = ePortStatus; |
| } |
| } |
| } |
| |
| wfaEncodeTLV(WFA_STA_GET_EVENT_DETAILS_TLV, sizeof(caStaGetEventDetails_t), |
| (BYTE*)staGetEventDetails, aBuf); |
| |
| *aLen = 4 + sizeof(caStaGetEventDetails_t); |
| |
| return WFA_SUCCESS; |
| } |