| /**************************************************************************** | |
| * (c) Copyright 2006 Wi-Fi Alliance. All Rights Reserved | |
| * | |
| * | |
| * LICENSE | |
| * | |
| * License is granted only to Wi-Fi Alliance members and designated Wi-Fi | |
| * contractors ("Authorized Licensees"). Authorized Licensees are hereby | |
| * granted the limited right to use this software solely for noncommercial | |
| * applications and solely for testing Wi-Fi equipment. Authorized Licensees | |
| * may embed this software into their proprietary equipment and distribute this | |
| * software with such equipment under a license with at least the same | |
| * restrictions as contained in this License, including, without limitation, | |
| * the disclaimer of warranty and limitation of liability, below. Other than | |
| * expressly granted herein, this License is not transferable or sublicensable, | |
| * and it does not extend to and may not be used with non-Wi-Fi applications. | |
| * | |
| * Commercial derivative works of this software or applications that use the | |
| * Wi-Fi scripts generated by this software are NOT AUTHORIZED without specific | |
| * prior written permission from Wi-Fi Alliance. | |
| * | |
| * Non-Commercial derivative works of this software for internal use are | |
| * authorized and are limited by the same restrictions; provided, however, | |
| * that the Authorized Licensee shall provide Wi-Fi with a copy of such | |
| * derivative works under a perpetual, payment-free license to use, modify, | |
| * and distribute such derivative works for purposes of testing Wi-Fi equipment. | |
| * | |
| * Neither the name of the author nor "Wi-Fi Alliance" may be used to endorse | |
| * or promote products that are derived from or that use this software without | |
| * specific prior written permission from Wi-Fi Alliance. | |
| * | |
| * THIS SOFTWARE IS PROVIDED BY WI-FI ALLIANCE "AS IS" AND ANY EXPRESSED OR | |
| * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |
| * OF MERCHANTABILITY, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE, | |
| * ARE DISCLAIMED. IN NO EVENT SHALL WI-FI ALLIANCE BE LIABLE FOR ANY DIRECT, | |
| * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
| * (INCLUDING, BUT NOT LIMITED TO, THE COST OF PROCUREMENT OF SUBSTITUTE GOODS | |
| * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
| * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
| * LIABILITY, OR TORT (INCLUDING NEGLIGENCE) ARISING IN ANY WAY OUT OF THE USE | |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| ****************************************************************************** | |
| */ | |
| /* | |
| * File: ca_cli.c | |
| * This is the main program for sending a text string based command to | |
| * Control Agent (see reference document). | |
| * | |
| * Revision History: | |
| * 06/30/2006 -- 00.10 Release by qhu | |
| * 09/01/2006 -- 01.05 Release by qhu | |
| * 03/30/2007 -- 01.40 WPA2 and Official WMM Beta Release by qhu | |
| * 04/20/2007 -- 02.00 WPA2 and Official WMM Release by qhu | |
| */ | |
| /* | |
| * All the buffer size changed from 512 to MAX_CMD_BUFF(1024) | |
| * | |
| */ | |
| #ifndef WIN32 | |
| #include <sys/socket.h> | |
| #include <arpa/inet.h> | |
| #include <unistd.h> | |
| #include <errno.h> | |
| #endif | |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <string.h> | |
| #include "wfa_types.h" | |
| #include "wfa_debug.h" | |
| #include "wfa_sock.h" | |
| #include "wfa_main.h" | |
| #include "wfa_tlv.h" | |
| #include "wfa_tg.h" | |
| #include "wfa_ca_resp.h" | |
| #include "wfa_cmds.h" | |
| #include "wfa_miscs.h" | |
| #define WFA_ENV_AGENT_IPADDR "WFA_ENV_CA_IPADDR" | |
| #define WFA_ENV_CA_PORT "WFA_ENV_CA_PORT" | |
| extern int xcCmdProcGetVersion(unsigned char *parms); | |
| unsigned short wfa_defined_debug = WFA_DEBUG_ERR; | |
| int sock; | |
| char gnetIf[32]; | |
| int gtgTransac; | |
| int | |
| main(int argc, char *argv[]) | |
| { | |
| struct sockaddr_in servAddr; | |
| unsigned short servPort; | |
| char *servIP = NULL, *tstr = NULL; | |
| int bytesRcvd; | |
| char cmdName[MAX_CMD_BUFF]; /* Modified as per BRCM ASD 1.3 */ | |
| int isFound = 0; | |
| int done, errno; | |
| int byteSent; | |
| int rspCnt = 0; | |
| BYTE caCmdBuf[MAX_CMD_BUFF]; /* Modified as per BRCM ASD 1.3 */ | |
| memset(caCmdBuf, 0, 512); | |
| if ((argc != 2)) | |
| { | |
| DPRINT_ERR(WFA_ERR, "Usage: %s <command string>\n", argv[0]); | |
| exit(1); | |
| } | |
| if ((tstr = getenv("WFA_ENV_CA_IPADDR")) == NULL) | |
| { | |
| DPRINT_ERR(WFA_ERR, "Environment variable WFA_ENV_CA_IPADDR not set\n"); | |
| exit(1); | |
| } | |
| if (isIpV4Addr(tstr) == FALSE){ | |
| DPRINT_ERR(WFA_ERR, "incorrect IP number\n"); | |
| exit(1); | |
| } | |
| servIP = tstr; | |
| if ((tstr = getenv("WFA_ENV_CA_PORT")) == NULL) | |
| { | |
| DPRINT_ERR(WFA_ERR, "Environment variable WFA_ENV_CA_PORT not set\n"); | |
| exit(1); | |
| } | |
| if (isNumber(tstr) == FALSE){ | |
| DPRINT_ERR(WFA_ERR, "incorrect port number\n"); | |
| exit(1); | |
| } | |
| if((errno = Start_Socket_Service()) != 0){ | |
| DPRINT_ERR(WFA_ERR, "Start_Socket_Service failed\n"); | |
| return 0; | |
| } | |
| servPort = atoi(tstr); | |
| if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) | |
| { | |
| DPRINT_ERR(WFA_ERR, "socket() failed"); | |
| if((errno = Stop_Socket_Service()) != 0){ | |
| DPRINT_ERR(WFA_ERR, "Stop_Socket_Service failed\n"); | |
| } | |
| return 0; | |
| } | |
| memset(&servAddr, 0, sizeof(servAddr)); | |
| servAddr.sin_family = AF_INET; | |
| servAddr.sin_addr.s_addr = inet_addr(servIP); | |
| servAddr.sin_port = htons(servPort); | |
| if (connect(sock, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0) | |
| { | |
| DPRINT_ERR(WFA_ERR, "connect() failed"); | |
| if((errno = Stop_Socket_Service()) != 0){ | |
| DPRINT_ERR(WFA_ERR, "Stop_Socket_Service failed\n"); | |
| } | |
| return 0; | |
| } | |
| isFound = 0; | |
| memset(cmdName, 0, MAX_CMD_BUFF); | |
| memcpy(cmdName, argv[1], MAX_CMD_BUFF); /* Modified as per BRCM ASD 1.3 */ | |
| strcat(cmdName, " \r\n"); | |
| byteSent = wfaCtrlSend(sock, (BYTE *)cmdName, strlen(cmdName)); | |
| /* Modified as per BRCM ASD 1.3 */ | |
| memset(caCmdBuf, 0, MAX_CMD_BUFF); | |
| bytesRcvd = recv(sock, caCmdBuf, MAX_CMD_BUFF, 0); /* Modified as per BRCM ASD 1.3 */ | |
| rspCnt++; | |
| asd_sleep(1); | |
| done = 1; | |
| while (done) | |
| { | |
| printf("=======Response======\n"); | |
| printf("%s\n", caCmdBuf); | |
| asd_sleep(1); | |
| if (strncmp("status,COMPLETE", (char *)caCmdBuf, 15) == 0 || | |
| strncmp("status,INVALID", (char *)caCmdBuf, 14) == 0 || | |
| strncmp("status,ERROR", (char *)caCmdBuf, 12) == 0) | |
| { | |
| break; | |
| } | |
| if (rspCnt == 3) | |
| break; | |
| memset(caCmdBuf, 0, MAX_CMD_BUFF); | |
| bytesRcvd = recv(sock, caCmdBuf, MAX_CMD_BUFF, 0); | |
| /* Modified as per BRCM ASD 1.3 */ | |
| rspCnt++; | |
| } | |
| asd_closeSocket(sock); | |
| /* Tell the user that we could not find a usable */ | |
| /* WinSock DLL. */ | |
| if((errno = Stop_Socket_Service()) != 0){ | |
| DPRINT_ERR(WFA_ERR, "Stop_Socket_Service failed\n"); | |
| } | |
| return 0; | |
| } |