Code uploaded as per p4 label WLAN_LIBRA_SOFTAP_LAFY_7630_REL10
Change-Id: Ib4973da98606f4cdbea5c6b9621999fbb06c2528
This commit is contained in:
@@ -143,7 +143,7 @@ static void softap_handle_iface_event(void)
|
|||||||
(struct sockaddr *)&rtnl_local, &slen);
|
(struct sockaddr *)&rtnl_local, &slen);
|
||||||
|
|
||||||
if (cnt <= 0) {
|
if (cnt <= 0) {
|
||||||
buffer[0] = '\0';
|
buffer[0] = '\0';
|
||||||
LOGD("recvfrom failed");
|
LOGD("recvfrom failed");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,18 @@ LOCAL_C_INCLUDES :=
|
|||||||
|
|
||||||
LOCAL_MODULE:= libqsap_sdk
|
LOCAL_MODULE:= libqsap_sdk
|
||||||
|
|
||||||
|
ifdef WIFI_DRIVER_MODULE_PATH
|
||||||
|
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_PATH=\"$(WIFI_DRIVER_MODULE_PATH)\"
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef WIFI_DRIVER_MODULE_ARG
|
||||||
|
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_ARG=\"$(WIFI_DRIVER_MODULE_ARG)\"
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef WIFI_DRIVER_MODULE_NAME
|
||||||
|
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_NAME=\"$(WIFI_DRIVER_MODULE_NAME)\"
|
||||||
|
endif
|
||||||
|
|
||||||
LOCAL_SRC_FILES := qsap_api.c \
|
LOCAL_SRC_FILES := qsap_api.c \
|
||||||
qsap.c
|
qsap.c
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,32 @@
|
|||||||
|
|
||||||
#include <sys/system_properties.h>
|
#include <sys/system_properties.h>
|
||||||
|
|
||||||
|
#ifndef WIFI_DRIVER_MODULE_PATH
|
||||||
|
#define WIFI_DRIVER_MODULE_PATH "/system/lib/modules/wlan.ko"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WIFI_DRIVER_MODULE_NAME
|
||||||
|
#define WIFI_DRIVER_MODULE_NAME "wlan"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WIFI_SDIO_IF_DRIVER_MODULE_PATH
|
||||||
|
#define WIFI_SDIO_IF_DRIVER_MODULE_PATH "/system/lib/modules/librasdioif.ko"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WIFI_SDIO_IF_DRIVER_MODULE_NAME
|
||||||
|
#define WIFI_SDIO_IF_DRIVER_MODULE_NAME "librasdioif"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WIFI_SDIO_IF_DRIVER_MODULE_ARG
|
||||||
|
#define WIFI_SDIO_IF_DRIVER_MODULE_ARG ""
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WIFI_DRIVER_MODULE_ARG
|
||||||
|
#undef WIFI_DRIVER_MODULE_ARG
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define WIFI_DRIVER_MODULE_ARG "con_mode=1"
|
||||||
|
|
||||||
extern int init_module(const char *name, u32, const s8 *);
|
extern int init_module(const char *name, u32, const s8 *);
|
||||||
extern int delete_module(const char *name, int);
|
extern int delete_module(const char *name, int);
|
||||||
|
|
||||||
@@ -161,15 +187,7 @@ s32 wifi_qsap_load_driver(void)
|
|||||||
LOGE("Could not turn on the polling...");
|
LOGE("Could not turn on the polling...");
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SDIO_IF_DRV "/system/lib/modules/librasdioif.ko"
|
ret = insmod(WIFI_SDIO_IF_DRIVER_MODULE_PATH, WIFI_SDIO_IF_DRIVER_MODULE_ARG, WIFI_SDIO_IF_DRIVER_MODULE_NAME " ");
|
||||||
#define SDIO_IF_DRV_ARG ""
|
|
||||||
#define SDIO_IF_DRV_TAG "librasdioif"
|
|
||||||
|
|
||||||
#define SOFTAP_DRV "/system/lib/modules/libra.ko"
|
|
||||||
#define SOFTAP_DRV_ARG "con_mode=1"
|
|
||||||
#define SOFTAP_DRV_TAG "libra"
|
|
||||||
|
|
||||||
ret = insmod(SDIO_IF_DRV, SDIO_IF_DRV_ARG, SDIO_IF_DRV_TAG " ");
|
|
||||||
|
|
||||||
if ( ret != 0 ) {
|
if ( ret != 0 ) {
|
||||||
LOGE("init_module failed sdioif\n");
|
LOGE("init_module failed sdioif\n");
|
||||||
@@ -178,7 +196,7 @@ s32 wifi_qsap_load_driver(void)
|
|||||||
|
|
||||||
sched_yield();
|
sched_yield();
|
||||||
|
|
||||||
ret = insmod(SOFTAP_DRV, SOFTAP_DRV_ARG, SOFTAP_DRV_TAG " ");
|
ret = insmod(WIFI_DRIVER_MODULE_PATH, WIFI_DRIVER_MODULE_ARG, WIFI_DRIVER_MODULE_NAME " ");
|
||||||
|
|
||||||
if ( ret != 0 ) {
|
if ( ret != 0 ) {
|
||||||
LOGE("init_module failed libra_softap\n");
|
LOGE("init_module failed libra_softap\n");
|
||||||
@@ -202,8 +220,8 @@ s32 wifi_qsap_unload_wifi_sta_driver(void)
|
|||||||
LOGE("Could not turn on the polling...");
|
LOGE("Could not turn on the polling...");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( check_driver_loaded(SOFTAP_DRV_TAG " ") ) {
|
if ( check_driver_loaded(WIFI_DRIVER_MODULE_NAME " ") ) {
|
||||||
if ( rmmod(SOFTAP_DRV_TAG) ) {
|
if ( rmmod(WIFI_DRIVER_MODULE_NAME) ) {
|
||||||
LOGE("Unable to unload the station mode wifi driver...\n");
|
LOGE("Unable to unload the station mode wifi driver...\n");
|
||||||
ret = 1;
|
ret = 1;
|
||||||
goto end;
|
goto end;
|
||||||
@@ -212,8 +230,8 @@ s32 wifi_qsap_unload_wifi_sta_driver(void)
|
|||||||
|
|
||||||
sched_yield();
|
sched_yield();
|
||||||
|
|
||||||
if ( check_driver_loaded(SDIO_IF_DRV_TAG " ") ) {
|
if ( check_driver_loaded(WIFI_SDIO_IF_DRIVER_MODULE_NAME " ") ) {
|
||||||
if ( rmmod(SDIO_IF_DRV_TAG) ) {
|
if ( rmmod(WIFI_SDIO_IF_DRIVER_MODULE_NAME) ) {
|
||||||
LOGE("Unable to unload the station mode librasdioif driver\n");
|
LOGE("Unable to unload the station mode librasdioif driver\n");
|
||||||
ret = 1;
|
ret = 1;
|
||||||
goto end;
|
goto end;
|
||||||
@@ -236,8 +254,8 @@ s32 wifi_qsap_unload_driver()
|
|||||||
LOGE("Could not turn on the polling...");
|
LOGE("Could not turn on the polling...");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( check_driver_loaded(SOFTAP_DRV_TAG " ") ) {
|
if ( check_driver_loaded(WIFI_DRIVER_MODULE_NAME " ") ) {
|
||||||
if ( rmmod(SOFTAP_DRV_TAG) ) {
|
if ( rmmod(WIFI_DRIVER_MODULE_NAME) ) {
|
||||||
LOGE("Unable to unload the libra_softap driver\n");
|
LOGE("Unable to unload the libra_softap driver\n");
|
||||||
ret = 1;
|
ret = 1;
|
||||||
goto end;
|
goto end;
|
||||||
@@ -246,8 +264,8 @@ s32 wifi_qsap_unload_driver()
|
|||||||
|
|
||||||
sched_yield();
|
sched_yield();
|
||||||
|
|
||||||
if ( check_driver_loaded(SDIO_IF_DRV_TAG " ") ) {
|
if ( check_driver_loaded(WIFI_SDIO_IF_DRIVER_MODULE_NAME " ") ) {
|
||||||
if ( rmmod(SDIO_IF_DRV_TAG) ) {
|
if ( rmmod(WIFI_SDIO_IF_DRIVER_MODULE_NAME) ) {
|
||||||
LOGE("Unable to unload the librasdioif driver\n");
|
LOGE("Unable to unload the librasdioif driver\n");
|
||||||
ret = 1;
|
ret = 1;
|
||||||
goto end;
|
goto end;
|
||||||
@@ -334,11 +352,15 @@ s32 commit(void)
|
|||||||
LOGE("%s: stop bss failed \n", __func__);
|
LOGE("%s: stop bss failed \n", __func__);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
sleep(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
sleep(1);
|
ret = wifi_qsap_start_softap();
|
||||||
|
|
||||||
return wifi_qsap_start_softap();
|
if( eSUCCESS != ret )
|
||||||
|
wifi_qsap_unload_driver();
|
||||||
|
|
||||||
|
return ret;
|
||||||
#else
|
#else
|
||||||
return eSUCCESS;
|
return eSUCCESS;
|
||||||
#endif
|
#endif
|
||||||
@@ -407,6 +429,7 @@ s32 wifi_qsap_reload_softap()
|
|||||||
sleep(1);
|
sleep(1);
|
||||||
|
|
||||||
if (eSUCCESS != wifi_qsap_start_softap()) {
|
if (eSUCCESS != wifi_qsap_start_softap()) {
|
||||||
|
wifi_qsap_unload_driver();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,6 @@
|
|||||||
#include "cutils/properties.h"
|
#include "cutils/properties.h"
|
||||||
#include "cutils/log.h"
|
#include "cutils/log.h"
|
||||||
|
|
||||||
|
|
||||||
#define SKIP_BLANK_SPACE(x) {while(*x != '\0') { if((*x == ' ') || (*x == '\t')) x++; else break; }}
|
#define SKIP_BLANK_SPACE(x) {while(*x != '\0') { if((*x == ' ') || (*x == '\t')) x++; else break; }}
|
||||||
|
|
||||||
/** If this variable is enabled, the soft AP is reloaded, after the commit
|
/** If this variable is enabled, the soft AP is reloaded, after the commit
|
||||||
@@ -175,9 +174,10 @@ char *fIni = INI_FILE;
|
|||||||
* @param plen [IN-OUT] The length of the buffer is provided as input.
|
* @param plen [IN-OUT] The length of the buffer is provided as input.
|
||||||
* The length of the configuration parameter value, stored
|
* The length of the configuration parameter value, stored
|
||||||
* in the 'presp', is provided as the output
|
* in the 'presp', is provided as the output
|
||||||
|
* @param ignore_comment [IN] if set, read the commented value also
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
static s32 qsap_read_cfg(s8 *pfile, s8 *pcmd, s8 *presp, u32 *plen, s8 *var)
|
static s32 qsap_read_cfg(s8 *pfile, s8 *pcmd, s8 *presp, u32 *plen, s8 *var, s32 ignore_comment)
|
||||||
{
|
{
|
||||||
FILE *fcfg;
|
FILE *fcfg;
|
||||||
s8 buf[MAX_CONF_LINE_LEN];
|
s8 buf[MAX_CONF_LINE_LEN];
|
||||||
@@ -200,7 +200,10 @@ static s32 qsap_read_cfg(s8 *pfile, s8 *pcmd, s8 *presp, u32 *plen, s8 *var)
|
|||||||
|
|
||||||
/** Skip the commented lines */
|
/** Skip the commented lines */
|
||||||
if(buf[0] == '#') {
|
if(buf[0] == '#') {
|
||||||
continue;
|
if (ignore_comment) {
|
||||||
|
pline++;
|
||||||
|
}
|
||||||
|
else continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Identify the configuration parameter in the configuration file */
|
/** Identify the configuration parameter in the configuration file */
|
||||||
@@ -256,8 +259,12 @@ static s32 qsap_write_cfg(s8 *pfile, s8 * pcmd, s8 *pVal, s8 *presp, u32 *plen,
|
|||||||
return eERR_FILE_OPEN;
|
return eERR_FILE_OPEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pfile)) {
|
||||||
|
buf[MAX_CONF_LINE_LEN] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
/** Open a temporary file */
|
/** Open a temporary file */
|
||||||
ftmp = fopen(TMP_FILE, "w");
|
ftmp = fopen(buf, "w+");
|
||||||
if(NULL == ftmp) {
|
if(NULL == ftmp) {
|
||||||
LOGE("%s : unable to open tmp file \n", __func__);
|
LOGE("%s : unable to open tmp file \n", __func__);
|
||||||
*plen = snprintf(presp, *plen, "%s", ERR_RES_UNAVAILABLE);
|
*plen = snprintf(presp, *plen, "%s", ERR_RES_UNAVAILABLE);
|
||||||
@@ -307,13 +314,17 @@ static s32 qsap_write_cfg(s8 *pfile, s8 * pcmd, s8 *pVal, s8 *presp, u32 *plen,
|
|||||||
fclose(fcfg);
|
fclose(fcfg);
|
||||||
fclose(ftmp);
|
fclose(ftmp);
|
||||||
|
|
||||||
|
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pfile)) {
|
||||||
|
buf[MAX_CONF_LINE_LEN] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
/** Restore the updated configuration file */
|
/** Restore the updated configuration file */
|
||||||
result = rename(TMP_FILE, pfile);
|
result = rename(buf, pfile);
|
||||||
|
|
||||||
*plen = snprintf(presp, *plen, "%s", (result == eERR_UNKNOWN) ? ERR_FEATURE_NOT_ENABLED : SUCCESS);
|
*plen = snprintf(presp, *plen, "%s", (result == eERR_UNKNOWN) ? ERR_FEATURE_NOT_ENABLED : SUCCESS);
|
||||||
|
|
||||||
/** Remove the temporary file. Dont care the return value */
|
/** Remove the temporary file. Dont care the return value */
|
||||||
unlink(TMP_FILE);
|
unlink(buf);
|
||||||
|
|
||||||
if(result == eERR_UNKNOWN)
|
if(result == eERR_UNKNOWN)
|
||||||
return eERR_FEATURE_NOT_ENABLED;
|
return eERR_FEATURE_NOT_ENABLED;
|
||||||
@@ -336,7 +347,7 @@ static sec_mode_t qsap_read_security_mode(s8 *pfile, s8 *presp, u32 *plen)
|
|||||||
u32 temp = *plen;
|
u32 temp = *plen;
|
||||||
|
|
||||||
/** Read the WEP default key */
|
/** Read the WEP default key */
|
||||||
qsap_read_cfg(pfile, cmd_list[eCMD_DEFAULT_KEY], presp, plen, NULL);
|
qsap_read_cfg(pfile, cmd_list[eCMD_DEFAULT_KEY], presp, plen, NULL, GET_ENABLED_ONLY);
|
||||||
|
|
||||||
if ( !strcmp(presp, ERR_FEATURE_NOT_ENABLED) ) {
|
if ( !strcmp(presp, ERR_FEATURE_NOT_ENABLED) ) {
|
||||||
*plen = temp;
|
*plen = temp;
|
||||||
@@ -344,7 +355,7 @@ static sec_mode_t qsap_read_security_mode(s8 *pfile, s8 *presp, u32 *plen)
|
|||||||
/* WEP, is not enabled */
|
/* WEP, is not enabled */
|
||||||
|
|
||||||
/** Read WPA security status */
|
/** Read WPA security status */
|
||||||
qsap_read_cfg(pfile, qsap_str[STR_WPA], presp, plen, NULL);
|
qsap_read_cfg(pfile, qsap_str[STR_WPA], presp, plen, NULL, GET_ENABLED_ONLY);
|
||||||
if ( !strcmp(presp, ERR_FEATURE_NOT_ENABLED) ) {
|
if ( !strcmp(presp, ERR_FEATURE_NOT_ENABLED) ) {
|
||||||
/** WPA is disabled, No security */
|
/** WPA is disabled, No security */
|
||||||
mode = SEC_MODE_NONE;
|
mode = SEC_MODE_NONE;
|
||||||
@@ -362,7 +373,7 @@ static sec_mode_t qsap_read_security_mode(s8 *pfile, s8 *presp, u32 *plen)
|
|||||||
else {
|
else {
|
||||||
/** Verify if, WPA is disabled */
|
/** Verify if, WPA is disabled */
|
||||||
*plen = temp;
|
*plen = temp;
|
||||||
qsap_read_cfg(pfile, qsap_str[STR_WPA], presp, plen, NULL);
|
qsap_read_cfg(pfile, qsap_str[STR_WPA], presp, plen, NULL, GET_ENABLED_ONLY);
|
||||||
if ( !strcmp(presp, ERR_FEATURE_NOT_ENABLED) ) {
|
if ( !strcmp(presp, ERR_FEATURE_NOT_ENABLED) ) {
|
||||||
/** WPA is disabled, hence WEP is enabled */
|
/** WPA is disabled, hence WEP is enabled */
|
||||||
mode = SEC_MODE_WEP;
|
mode = SEC_MODE_WEP;
|
||||||
@@ -404,9 +415,13 @@ static s32 qsap_change_cfg(s8 *pfile, s8 *pcmd, u32 status)
|
|||||||
LOGE("%s : unable to open file \n", __func__);
|
LOGE("%s : unable to open file \n", __func__);
|
||||||
return eERR_UNKNOWN;
|
return eERR_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pfile)) {
|
||||||
|
buf[MAX_CONF_LINE_LEN] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
/** Open a temporary file */
|
/** Open a temporary file */
|
||||||
ftmp = fopen(TMP_FILE, "w");
|
ftmp = fopen(buf, "w");
|
||||||
if(NULL == ftmp) {
|
if(NULL == ftmp) {
|
||||||
LOGE("%s : unable to open tmp file \n", __func__);
|
LOGE("%s : unable to open tmp file \n", __func__);
|
||||||
fclose(fcfg);
|
fclose(fcfg);
|
||||||
@@ -440,14 +455,18 @@ static s32 qsap_change_cfg(s8 *pfile, s8 *pcmd, u32 status)
|
|||||||
fclose(fcfg);
|
fclose(fcfg);
|
||||||
fclose(ftmp);
|
fclose(ftmp);
|
||||||
|
|
||||||
|
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pfile)) {
|
||||||
|
buf[MAX_CONF_LINE_LEN] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
/** Restore the new configuration file */
|
/** Restore the new configuration file */
|
||||||
if(eERR_UNKNOWN == rename(TMP_FILE, pfile)) {
|
if(eERR_UNKNOWN == rename(buf, pfile)) {
|
||||||
LOGE("unable to rename the file \n");
|
LOGE("unable to rename the file \n");
|
||||||
return eERR_UNKNOWN;
|
return eERR_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Delete the temporary file */
|
/** Delete the temporary file */
|
||||||
unlink(TMP_FILE);
|
unlink(buf);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -600,7 +619,7 @@ end:
|
|||||||
*/
|
*/
|
||||||
static s8 *qsap_get_allow_deny_file_name(s8 *pcfgfile, s8 *pcmd, s8 *pfile, u32 *plen)
|
static s8 *qsap_get_allow_deny_file_name(s8 *pcfgfile, s8 *pcmd, s8 *pfile, u32 *plen)
|
||||||
{
|
{
|
||||||
if(eSUCCESS == qsap_read_cfg(pcfgfile, pcmd, pfile, plen, NULL)) {
|
if(eSUCCESS == qsap_read_cfg(pcfgfile, pcmd, pfile, plen, NULL, GET_ENABLED_ONLY)) {
|
||||||
pfile[*plen] = '\0';
|
pfile[*plen] = '\0';
|
||||||
return strchr(pfile, '=') + 1;
|
return strchr(pfile, '=') + 1;
|
||||||
}
|
}
|
||||||
@@ -665,18 +684,18 @@ static void qsap_add_mac_to_file(s8 *pfile, s8 *pVal, s8 *presp, u32 *plen)
|
|||||||
fclose(fp);
|
fclose(fp);
|
||||||
fp = fopen(pfile, "r+");
|
fp = fopen(pfile, "r+");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(NULL == fp) {
|
if(NULL == fp) {
|
||||||
LOGE("%s : unable to open the file \n", __func__);
|
LOGE("%s : unable to open the file \n", __func__);
|
||||||
*plen = snprintf(presp, *plen, "%s", ERR_RES_UNAVAILABLE);
|
*plen = snprintf(presp, *plen, "%s", ERR_RES_UNAVAILABLE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** count the MAC address in the MAC list file */
|
/** count the MAC address in the MAC list file */
|
||||||
while(NULL != (fgets(buf, 32, fp))) {
|
while(NULL != (fgets(buf, 32, fp))) {
|
||||||
num_macs++;
|
num_macs++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Evaluate the allowed limit */
|
/** Evaluate the allowed limit */
|
||||||
if(num_macs >= MAX_ALLOWED_MAC) {
|
if(num_macs >= MAX_ALLOWED_MAC) {
|
||||||
LOGE("%s : File is full\n", __func__);
|
LOGE("%s : File is full\n", __func__);
|
||||||
@@ -695,7 +714,7 @@ static void qsap_add_mac_to_file(s8 *pfile, s8 *pVal, s8 *presp, u32 *plen)
|
|||||||
macbuf[i] = *pVal;
|
macbuf[i] = *pVal;
|
||||||
i++;
|
i++;
|
||||||
pVal++;
|
pVal++;
|
||||||
|
|
||||||
if(i == MAC_ADDR_LEN)
|
if(i == MAC_ADDR_LEN)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -724,7 +743,7 @@ static void qsap_add_mac_to_file(s8 *pfile, s8 *pVal, s8 *presp, u32 *plen)
|
|||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
*plen = snprintf(presp, *plen, "%s", SUCCESS);
|
*plen = snprintf(presp, *plen, "%s", SUCCESS);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -755,8 +774,12 @@ static void qsap_remove_from_file(s8 *pfile, s8 *pVal, s8 *presp, u32 *plen)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pfile)) {
|
||||||
|
buf[MAX_CONF_LINE_LEN] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
/** Open a temporary file */
|
/** Open a temporary file */
|
||||||
ftmp = fopen(TMP_FILE, "w");
|
ftmp = fopen(buf, "w");
|
||||||
|
|
||||||
if(ftmp == NULL) {
|
if(ftmp == NULL) {
|
||||||
LOGE("%s : unable to open the file \n", __func__);
|
LOGE("%s : unable to open the file \n", __func__);
|
||||||
@@ -803,12 +826,16 @@ static void qsap_remove_from_file(s8 *pfile, s8 *pVal, s8 *presp, u32 *plen)
|
|||||||
fclose(fp);
|
fclose(fp);
|
||||||
fclose(ftmp);
|
fclose(ftmp);
|
||||||
|
|
||||||
|
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pfile)) {
|
||||||
|
buf[MAX_CONF_LINE_LEN] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
/** Restore the configuration file */
|
/** Restore the configuration file */
|
||||||
status = rename(TMP_FILE, pfile);
|
status = rename(buf, pfile);
|
||||||
|
|
||||||
snprintf(presp, *plen, "%s", (status == eERR_UNKNOWN) ? ERR_FEATURE_NOT_ENABLED : SUCCESS);
|
snprintf(presp, *plen, "%s", (status == eERR_UNKNOWN) ? ERR_FEATURE_NOT_ENABLED : SUCCESS);
|
||||||
|
|
||||||
unlink(TMP_FILE);
|
unlink(buf);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -881,7 +908,7 @@ static void qsap_get_mac_list(s8 *fconfile, esap_cmd_t cNum, s8 *presp, u32 *ple
|
|||||||
|
|
||||||
/** Identify the allow or deny file */
|
/** Identify the allow or deny file */
|
||||||
if(eCMD_ALLOW_LIST == cNum) {
|
if(eCMD_ALLOW_LIST == cNum) {
|
||||||
sNum = STR_ACCEPT_MAC_FILE;
|
sNum = STR_ACCEPT_MAC_FILE;
|
||||||
}
|
}
|
||||||
else if(eCMD_DENY_LIST == cNum) {
|
else if(eCMD_DENY_LIST == cNum) {
|
||||||
sNum = STR_DENY_MAC_FILE;
|
sNum = STR_DENY_MAC_FILE;
|
||||||
@@ -891,7 +918,7 @@ static void qsap_get_mac_list(s8 *fconfile, esap_cmd_t cNum, s8 *presp, u32 *ple
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get the MAC allow or MAC deny file path */
|
/** Get the MAC allow or MAC deny file path */
|
||||||
len_remain = MAX_CONF_LINE_LEN;
|
len_remain = MAX_CONF_LINE_LEN;
|
||||||
if(NULL == (pfile = qsap_get_allow_deny_file_name(fconfile, qsap_str[sNum], buf, &len_remain))) {
|
if(NULL == (pfile = qsap_get_allow_deny_file_name(fconfile, qsap_str[sNum], buf, &len_remain))) {
|
||||||
LOGE("%s:Unknown error\n", __func__);
|
LOGE("%s:Unknown error\n", __func__);
|
||||||
@@ -899,7 +926,7 @@ static void qsap_get_mac_list(s8 *fconfile, esap_cmd_t cNum, s8 *presp, u32 *ple
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Open allow / deny file, and read the MAC addresses */
|
/** Open allow / deny file, and read the MAC addresses */
|
||||||
fp = fopen(pfile, "r");
|
fp = fopen(pfile, "r");
|
||||||
if(NULL == fp) {
|
if(NULL == fp) {
|
||||||
LOGE("%s: file open error\n",__func__);
|
LOGE("%s: file open error\n",__func__);
|
||||||
@@ -920,7 +947,7 @@ static void qsap_get_mac_list(s8 *fconfile, esap_cmd_t cNum, s8 *presp, u32 *ple
|
|||||||
while(NULL != (fgets(buf, MAX_CONF_LINE_LEN, fp))) {
|
while(NULL != (fgets(buf, MAX_CONF_LINE_LEN, fp))) {
|
||||||
u32 len;
|
u32 len;
|
||||||
|
|
||||||
/** Avoid the commented lines */
|
/** Avoid the commented lines */
|
||||||
if(buf[0] == '#')
|
if(buf[0] == '#')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -933,7 +960,7 @@ static void qsap_get_mac_list(s8 *fconfile, esap_cmd_t cNum, s8 *presp, u32 *ple
|
|||||||
*pOut = '\0';
|
*pOut = '\0';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = snprintf(pOut, *plen, "%s ", buf);
|
len = snprintf(pOut, *plen, "%s ", buf);
|
||||||
cnt++;
|
cnt++;
|
||||||
|
|
||||||
@@ -961,7 +988,7 @@ static int qsap_read_mac_address(s8 *presp, u32 *plen)
|
|||||||
|
|
||||||
len = *plen;
|
len = *plen;
|
||||||
|
|
||||||
if(eSUCCESS != qsap_read_cfg(fIni, qsap_str[STR_MAC_IN_INI], presp, plen, cmd_list[eCMD_MAC_ADDR])) {
|
if(eSUCCESS != qsap_read_cfg(fIni, qsap_str[STR_MAC_IN_INI], presp, plen, cmd_list[eCMD_MAC_ADDR], GET_ENABLED_ONLY)) {
|
||||||
LOGE("%s :MAC addr read failure \n",__func__);
|
LOGE("%s :MAC addr read failure \n",__func__);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
@@ -1007,7 +1034,7 @@ static void qsap_read_wmm(s8 *presp, u32 *plen)
|
|||||||
u32 tlen = *plen;
|
u32 tlen = *plen;
|
||||||
u32 status;
|
u32 status;
|
||||||
|
|
||||||
if(eSUCCESS != qsap_read_cfg(fIni, qsap_str[STR_WMM_IN_INI], presp, &tlen, cmd_list[eCMD_WMM_STATE])) {
|
if(eSUCCESS != qsap_read_cfg(fIni, qsap_str[STR_WMM_IN_INI], presp, &tlen, cmd_list[eCMD_WMM_STATE], GET_ENABLED_ONLY)) {
|
||||||
*plen = snprintf(presp, *plen, "%s", ERR_NOT_SUPPORTED);
|
*plen = snprintf(presp, *plen, "%s", ERR_NOT_SUPPORTED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1030,27 +1057,11 @@ static void qsap_read_wmm(s8 *presp, u32 *plen)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qsap_read_wps_state(s8 *presp, u32 *plen)
|
|
||||||
{
|
|
||||||
u32 tlen = *plen;
|
|
||||||
s32 status = ENABLE;
|
|
||||||
|
|
||||||
if(eSUCCESS != qsap_read_cfg(pconffile, cmd_list[eCMD_WPS_STATE], presp, &tlen, NULL)) {
|
|
||||||
/** unable to read the wps configuration, WPS is disabled !*/
|
|
||||||
LOGE("%s :Failed to read wps_state from cfg \n", __func__);
|
|
||||||
status = DISABLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
*plen = snprintf(presp, *plen, "%s %s=%lu", SUCCESS, cmd_list[eCMD_WPS_STATE], status);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
s8 *qsap_get_config_value(s8 *pfile, s8 *pcmd, s8 *pbuf, u32 *plen)
|
s8 *qsap_get_config_value(s8 *pfile, s8 *pcmd, s8 *pbuf, u32 *plen)
|
||||||
{
|
{
|
||||||
s8 *ptr = NULL;
|
s8 *ptr = NULL;
|
||||||
|
|
||||||
if(eSUCCESS == qsap_read_cfg(pfile, pcmd, pbuf, (u32 *)plen, NULL)) {
|
if(eSUCCESS == qsap_read_cfg(pfile, pcmd, pbuf, (u32 *)plen, NULL, GET_ENABLED_ONLY)) {
|
||||||
ptr = strchr(pbuf, '=');
|
ptr = strchr(pbuf, '=');
|
||||||
if(NULL != ptr){
|
if(NULL != ptr){
|
||||||
ptr++;
|
ptr++;
|
||||||
@@ -1063,6 +1074,26 @@ s8 *qsap_get_config_value(s8 *pfile, s8 *pcmd, s8 *pbuf, u32 *plen)
|
|||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void qsap_read_wps_state(s8 *presp, u32 *plen)
|
||||||
|
{
|
||||||
|
u32 tlen = *plen;
|
||||||
|
s32 status;
|
||||||
|
s8 *pstate;
|
||||||
|
|
||||||
|
if(NULL == (pstate = qsap_get_config_value(pconffile, cmd_list[eCMD_WPS_STATE], presp, &tlen))) {
|
||||||
|
/** unable to read the wps configuration, WPS is disabled !*/
|
||||||
|
LOGE("%s :Failed to read wps_state from cfg \n", __func__);
|
||||||
|
status = DISABLE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
status = (atoi(pstate) == WPS_STATE_ENABLE) ? ENABLE : DISABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*plen = snprintf(presp, *plen, "success %s=%ld", cmd_list[eCMD_WPS_STATE], status);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the channel being used in the soft AP.
|
* Get the channel being used in the soft AP.
|
||||||
*/
|
*/
|
||||||
@@ -1118,9 +1149,9 @@ int qsap_read_channel(s8 *pfile, s8 *pcmd, s8 *presp, u32 *plen, s8 *pvar)
|
|||||||
s32 chan;
|
s32 chan;
|
||||||
u32 len = *plen;
|
u32 len = *plen;
|
||||||
|
|
||||||
if(eSUCCESS == qsap_read_cfg(pfile, pcmd, presp, plen, pvar)) {
|
if(eSUCCESS == qsap_read_cfg(pfile, pcmd, presp, plen, pvar, GET_ENABLED_ONLY)) {
|
||||||
pval = strchr(presp, '=');
|
pval = strchr(presp, '=');
|
||||||
|
|
||||||
if(NULL == pval) {
|
if(NULL == pval) {
|
||||||
LOGE("%s :CHAN absent \n", __func__);
|
LOGE("%s :CHAN absent \n", __func__);
|
||||||
return eERR_CONFIG_PARAM_MISSING;
|
return eERR_CONFIG_PARAM_MISSING;
|
||||||
@@ -1228,6 +1259,37 @@ error:
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void qsap_read_wep_key(s8 *pfile, s8 *pcmd, s8 *presp, u32 *plen, s8 *var)
|
||||||
|
{
|
||||||
|
s8 *pwep;
|
||||||
|
s8 *pkey;
|
||||||
|
|
||||||
|
if(eSUCCESS != qsap_read_cfg(pfile, pcmd, presp, plen, var, GET_COMMENTED_VALUE))
|
||||||
|
return;
|
||||||
|
|
||||||
|
pwep = strchr(presp, '=');
|
||||||
|
if(NULL == pwep)
|
||||||
|
return;
|
||||||
|
pwep++;
|
||||||
|
|
||||||
|
if(pwep[0] == '"') {
|
||||||
|
pkey = pwep;
|
||||||
|
pwep++;
|
||||||
|
|
||||||
|
while(*pwep != '\0') {
|
||||||
|
*pkey = *pwep;
|
||||||
|
pkey++;
|
||||||
|
pwep++;
|
||||||
|
}
|
||||||
|
*pkey--;
|
||||||
|
*pkey = '\0';
|
||||||
|
*plen -= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief
|
* @brief
|
||||||
* Get the configuration information from the softAP configuration
|
* Get the configuration information from the softAP configuration
|
||||||
@@ -1243,10 +1305,11 @@ error:
|
|||||||
* [OUT] The length of the response in the buffer, presp
|
* [OUT] The length of the response in the buffer, presp
|
||||||
* @return void
|
* @return void
|
||||||
**/
|
**/
|
||||||
static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
|
static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
|
||||||
{
|
{
|
||||||
u32 len;
|
u32 len;
|
||||||
int status;
|
int status;
|
||||||
|
s8 * pval;
|
||||||
|
|
||||||
switch(cNum) {
|
switch(cNum) {
|
||||||
case eCMD_ENABLE_SOFTAP:
|
case eCMD_ENABLE_SOFTAP:
|
||||||
@@ -1254,23 +1317,22 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
|
|||||||
*plen = snprintf(presp, *plen, "%s %s=%d", SUCCESS, cmd_list[cNum], status);
|
*plen = snprintf(presp, *plen, "%s %s=%d", SUCCESS, cmd_list[cNum], status);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case eCMD_WPA_PAIRWISE:
|
||||||
|
case eCMD_RSN_PAIRWISE:
|
||||||
|
case eCMD_DEFAULT_KEY:
|
||||||
|
case eCMD_PASSPHRASE:
|
||||||
|
case eCMD_GTK_TIMEOUT:
|
||||||
|
qsap_read_cfg(pconffile, cmd_list[cNum], presp, plen, NULL, GET_COMMENTED_VALUE);
|
||||||
|
break;
|
||||||
|
|
||||||
case eCMD_SSID:
|
case eCMD_SSID:
|
||||||
case eCMD_BSSID:
|
case eCMD_BSSID:
|
||||||
case eCMD_BCN_INTERVAL:
|
case eCMD_BCN_INTERVAL:
|
||||||
case eCMD_DTIM_PERIOD:
|
case eCMD_DTIM_PERIOD:
|
||||||
case eCMD_HW_MODE:
|
case eCMD_HW_MODE:
|
||||||
case eCMD_AUTH_ALGS:
|
case eCMD_AUTH_ALGS:
|
||||||
case eCMD_WEP_KEY0:
|
|
||||||
case eCMD_WEP_KEY1:
|
|
||||||
case eCMD_WEP_KEY2:
|
|
||||||
case eCMD_WEP_KEY3:
|
|
||||||
case eCMD_DEFAULT_KEY:
|
|
||||||
case eCMD_PASSPHRASE:
|
|
||||||
case eCMD_WPA_PAIRWISE:
|
|
||||||
case eCMD_RSN_PAIRWISE:
|
|
||||||
case eCMD_MAC_ACL:
|
case eCMD_MAC_ACL:
|
||||||
case eCMD_WPS_CONFIG_METHOD:
|
case eCMD_WPS_CONFIG_METHOD:
|
||||||
case eCMD_GTK_TIMEOUT:
|
|
||||||
case eCMD_UUID:
|
case eCMD_UUID:
|
||||||
case eCMD_DEVICE_NAME:
|
case eCMD_DEVICE_NAME:
|
||||||
case eCMD_MANUFACTURER:
|
case eCMD_MANUFACTURER:
|
||||||
@@ -1284,7 +1346,14 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
|
|||||||
case eCMD_MODEL_DESC:
|
case eCMD_MODEL_DESC:
|
||||||
case eCMD_MODEL_URL:
|
case eCMD_MODEL_URL:
|
||||||
case eCMD_UPC:
|
case eCMD_UPC:
|
||||||
qsap_read_cfg(pconffile, cmd_list[cNum], presp, plen, NULL);
|
qsap_read_cfg(pconffile, cmd_list[cNum], presp, plen, NULL, GET_ENABLED_ONLY);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case eCMD_WEP_KEY0:
|
||||||
|
case eCMD_WEP_KEY1:
|
||||||
|
case eCMD_WEP_KEY2:
|
||||||
|
case eCMD_WEP_KEY3:
|
||||||
|
qsap_read_wep_key(pconffile, cmd_list[cNum], presp, plen, NULL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case eCMD_CHAN:
|
case eCMD_CHAN:
|
||||||
@@ -1292,15 +1361,15 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case eCMD_FRAG_THRESHOLD:
|
case eCMD_FRAG_THRESHOLD:
|
||||||
qsap_read_cfg(fIni, qsap_str[STR_FRAG_THRESHOLD_IN_INI], presp, plen, cmd_list[eCMD_FRAG_THRESHOLD]);
|
qsap_read_cfg(fIni, qsap_str[STR_FRAG_THRESHOLD_IN_INI], presp, plen, cmd_list[eCMD_FRAG_THRESHOLD], GET_ENABLED_ONLY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case eCMD_REGULATORY_DOMAIN:
|
case eCMD_REGULATORY_DOMAIN:
|
||||||
qsap_read_cfg(fIni, qsap_str[STR_802DOT11D_IN_INI], presp, plen, cmd_list[eCMD_REGULATORY_DOMAIN]);
|
qsap_read_cfg(fIni, qsap_str[STR_802DOT11D_IN_INI], presp, plen, cmd_list[eCMD_REGULATORY_DOMAIN], GET_ENABLED_ONLY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case eCMD_RTS_THRESHOLD:
|
case eCMD_RTS_THRESHOLD:
|
||||||
qsap_read_cfg(fIni, qsap_str[STR_RTS_THRESHOLD_IN_INI], presp, plen, cmd_list[eCMD_RTS_THRESHOLD]);
|
qsap_read_cfg(fIni, qsap_str[STR_RTS_THRESHOLD_IN_INI], presp, plen, cmd_list[eCMD_RTS_THRESHOLD], GET_ENABLED_ONLY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case eCMD_ALLOW_LIST: /* fall through */
|
case eCMD_ALLOW_LIST: /* fall through */
|
||||||
@@ -1327,11 +1396,11 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case eCMD_PROTECTION_FLAG:
|
case eCMD_PROTECTION_FLAG:
|
||||||
qsap_read_cfg(fIni, qsap_str[STR_PROT_FLAG_IN_INI], presp, plen, cmd_list[eCMD_PROTECTION_FLAG]);
|
qsap_read_cfg(fIni, qsap_str[STR_PROT_FLAG_IN_INI], presp, plen, cmd_list[eCMD_PROTECTION_FLAG], GET_ENABLED_ONLY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case eCMD_DATA_RATES:
|
case eCMD_DATA_RATES:
|
||||||
qsap_read_cfg(fIni, qsap_str[STR_DATA_RATE_IN_INI], presp, plen, cmd_list[eCMD_DATA_RATES]);
|
qsap_read_cfg(fIni, qsap_str[STR_DATA_RATE_IN_INI], presp, plen, cmd_list[eCMD_DATA_RATES], GET_ENABLED_ONLY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case eCMD_ASSOC_STA_MACS:
|
case eCMD_ASSOC_STA_MACS:
|
||||||
@@ -1339,7 +1408,7 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case eCMD_TX_POWER:
|
case eCMD_TX_POWER:
|
||||||
qsap_read_cfg(fIni, qsap_str[STR_TX_POWER_IN_INI], presp, plen, cmd_list[eCMD_TX_POWER]);
|
qsap_read_cfg(fIni, qsap_str[STR_TX_POWER_IN_INI], presp, plen, cmd_list[eCMD_TX_POWER], GET_ENABLED_ONLY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case eCMD_SDK_VERSION:
|
case eCMD_SDK_VERSION:
|
||||||
@@ -1347,11 +1416,17 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case eCMD_INTRA_BSS_FORWARD:
|
case eCMD_INTRA_BSS_FORWARD:
|
||||||
qsap_read_cfg(fIni, qsap_str[STR_INTRA_BSS_FORWARD_IN_INI], presp, plen, cmd_list[eCMD_INTRA_BSS_FORWARD]);
|
qsap_read_cfg(fIni, qsap_str[STR_INTRA_BSS_FORWARD_IN_INI], presp, plen, cmd_list[eCMD_INTRA_BSS_FORWARD], GET_ENABLED_ONLY);
|
||||||
|
|
||||||
|
pval = strchr(presp, '=');
|
||||||
|
if ( pval != NULL ) {
|
||||||
|
pval++;
|
||||||
|
*pval = *pval == '0' ? '1' : '0';
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case eCMD_COUNTRY_CODE:
|
case eCMD_COUNTRY_CODE:
|
||||||
qsap_read_cfg(fIni, qsap_str[STR_COUNTRY_CODE_IN_INI], presp, plen, cmd_list[eCMD_COUNTRY_CODE]);
|
qsap_read_cfg(fIni, qsap_str[STR_COUNTRY_CODE_IN_INI], presp, plen, cmd_list[eCMD_COUNTRY_CODE], GET_ENABLED_ONLY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -1435,25 +1510,38 @@ static void qsap_handle_get_request(s8 *pcmd, s8 *presp, u32 *plen)
|
|||||||
|
|
||||||
qsap_get_from_config(cNum, presp, plen);
|
qsap_get_from_config(cNum, presp, plen);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static s16 is_valid_wep_key(s8 *pwep)
|
static s16 is_valid_wep_key(s8 *pwep, s8 *pkey, s16 len)
|
||||||
{
|
{
|
||||||
int weplen;
|
int weplen;
|
||||||
s16 ret = TRUE;
|
s16 ret = TRUE;
|
||||||
|
int ascii = FALSE;
|
||||||
|
|
||||||
|
weplen = strlen(pwep);
|
||||||
|
|
||||||
|
/** Remove the double quotes if any */
|
||||||
|
if((pwep[0] == '"') && (pwep[weplen-1] == '"')) {
|
||||||
|
pwep[weplen-1] = '\0';
|
||||||
|
pwep++;
|
||||||
|
weplen -= 2;
|
||||||
|
}
|
||||||
|
|
||||||
/** The WEP key should be of length 5, 13 or 16 characters
|
/** The WEP key should be of length 5, 13 or 16 characters
|
||||||
* or 10, 26, or 32 digits */
|
* or 10, 26, or 32 digits */
|
||||||
weplen = strlen(pwep);
|
|
||||||
switch(weplen) {
|
switch(weplen) {
|
||||||
case WEP_64_KEY_ASCII:
|
case WEP_64_KEY_ASCII:
|
||||||
case WEP_128_KEY_ASCII:
|
case WEP_128_KEY_ASCII:
|
||||||
case WEP_152_KEY_ASCII:
|
case WEP_152_KEY_ASCII:
|
||||||
|
weplen--;
|
||||||
while(weplen--) {
|
while(weplen--) {
|
||||||
if(0 == isascii(pwep[weplen]))
|
if(0 == isascii(pwep[weplen])) {
|
||||||
|
LOGD("%c not ascii \n", pwep[weplen]);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
ascii = TRUE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WEP_64_KEY_HEX:
|
case WEP_64_KEY_HEX:
|
||||||
@@ -1468,29 +1556,36 @@ static s16 is_valid_wep_key(s8 *pwep)
|
|||||||
default:
|
default:
|
||||||
ret = FALSE;
|
ret = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
snprintf(pkey, len, (ascii == TRUE) ? "\"%s\"" : "%s", pwep);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static s16 wifi_qsap_reset_to_default(void)
|
static s16 wifi_qsap_reset_to_default(s8 *pcfgfile, s8 *pdefault)
|
||||||
{
|
{
|
||||||
FILE *fcfg, *ftmp;
|
FILE *fcfg, *ftmp;
|
||||||
char buf[MAX_CONF_LINE_LEN];
|
char buf[MAX_CONF_LINE_LEN];
|
||||||
int status = eSUCCESS;
|
int status = eSUCCESS;
|
||||||
|
|
||||||
fcfg = fopen(DEFAULT_CONFIG_FILE_PATH, "r");
|
fcfg = fopen(pdefault, "r");
|
||||||
|
|
||||||
if(NULL == fcfg) {
|
if(NULL == fcfg) {
|
||||||
LOGE("%s : unable to open file \n", __func__);
|
LOGE("%s : unable to open file \n", __func__);
|
||||||
return eERR_FILE_OPEN;
|
return eERR_FILE_OPEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
ftmp = fopen(TMP_FILE, "w");
|
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pcfgfile)) {
|
||||||
|
buf[MAX_CONF_LINE_LEN] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
ftmp = fopen(buf, "w+");
|
||||||
if(NULL == ftmp) {
|
if(NULL == ftmp) {
|
||||||
LOGE("%s : unable to open file \n", __func__);
|
LOGE("%s : unable to open file \n", __func__);
|
||||||
fclose(fcfg);
|
fclose(fcfg);
|
||||||
return eERR_FILE_OPEN;
|
return eERR_FILE_OPEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(NULL != fgets(buf, MAX_CONF_LINE_LEN, fcfg)) {
|
while(NULL != fgets(buf, MAX_CONF_LINE_LEN, fcfg)) {
|
||||||
fprintf(ftmp, "%s", buf);
|
fprintf(ftmp, "%s", buf);
|
||||||
}
|
}
|
||||||
@@ -1498,11 +1593,15 @@ static s16 wifi_qsap_reset_to_default(void)
|
|||||||
fclose(fcfg);
|
fclose(fcfg);
|
||||||
fclose(ftmp);
|
fclose(ftmp);
|
||||||
|
|
||||||
if(eERR_UNKNOWN == rename(TMP_FILE, pconffile))
|
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pcfgfile)) {
|
||||||
|
buf[MAX_CONF_LINE_LEN] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
if(eERR_UNKNOWN == rename(buf, pcfgfile))
|
||||||
status = eERR_CONF_FILE;
|
status = eERR_CONF_FILE;
|
||||||
|
|
||||||
/** Remove the temporary file. Dont care the return value */
|
/** Remove the temporary file. Dont care the return value */
|
||||||
unlink(TMP_FILE);
|
unlink(buf);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@@ -1583,7 +1682,7 @@ static int qsap_send_cmd_to_hostapd(s8 *pcmd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
len = RESP_BUF_SIZE;
|
len = RESP_BUF_SIZE;
|
||||||
|
|
||||||
#define HOSTAPD_RECV_TIMEOUT (2)
|
#define HOSTAPD_RECV_TIMEOUT (2)
|
||||||
while(1) {
|
while(1) {
|
||||||
timeout.tv_sec = HOSTAPD_RECV_TIMEOUT;
|
timeout.tv_sec = HOSTAPD_RECV_TIMEOUT;
|
||||||
@@ -1639,28 +1738,25 @@ static void qsap_update_wps_config(s8 *pVal, s8 *presp, u32 *plen)
|
|||||||
{
|
{
|
||||||
u32 tlen = *plen;
|
u32 tlen = *plen;
|
||||||
s32 status;
|
s32 status;
|
||||||
s8 pwps_state[8];
|
s8 pwps_state[MAX_INT_STR+1];
|
||||||
s32 cmd, i;
|
s32 i;
|
||||||
|
|
||||||
/* Enable/disable the following in hostapd.conf
|
/* Enable/disable the following in hostapd.conf
|
||||||
* 1. Change the security mode to WPA-WPA2 Mixed
|
* 1. Update the wps_state
|
||||||
* 2. Update wps_state
|
* 2. Set eap_server=1
|
||||||
* 3. Update config_methods
|
* 3. Update UPnP related variables
|
||||||
* 4. Update UPnP related variables
|
|
||||||
*/
|
*/
|
||||||
status = atoi(pVal);
|
status = atoi(pVal);
|
||||||
|
|
||||||
if(status == ENABLE) {
|
snprintf(pwps_state, MAX_INT_STR, "%d", (status == ENABLE) ? WPS_STATE_ENABLE : WPS_STATE_DISABLE);
|
||||||
snprintf(pwps_state, 8, "%d", WPS_STATE_ENABLE);
|
|
||||||
cmd = SEC_MODE_WPA_WPA2_PSK;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
snprintf(pwps_state, 8, "%d", WPS_STATE_DISABLE);
|
|
||||||
cmd = SEC_MODE_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
qsap_write_cfg(pconffile, cmd_list[eCMD_WPS_STATE], pwps_state, presp, &tlen, HOSTAPD_CONF_FILE);
|
qsap_write_cfg(pconffile, cmd_list[eCMD_WPS_STATE], pwps_state, presp, &tlen, HOSTAPD_CONF_FILE);
|
||||||
|
|
||||||
|
if(eERR_UNKNOWN == qsap_change_cfg(pconffile, cmd_list[eCMD_WPS_STATE], status)) {
|
||||||
|
LOGE("%s: Failed to enable %s\n", __func__, cmd_list[eCMD_WPS_STATE]);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
snprintf(pwps_state, 8, "%d", ENABLE);
|
snprintf(pwps_state, 8, "%d", ENABLE);
|
||||||
|
|
||||||
/** update the eap_server=1 */
|
/** update the eap_server=1 */
|
||||||
@@ -2068,7 +2164,7 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
|
|||||||
qsap_write_cfg(pconffile, cmd_list[cNum], pVal, presp, plen, HOSTAPD_CONF_FILE);
|
qsap_write_cfg(pconffile, cmd_list[cNum], pVal, presp, plen, HOSTAPD_CONF_FILE);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -2102,6 +2198,8 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
|
|||||||
status = wifi_qsap_load_driver();
|
status = wifi_qsap_load_driver();
|
||||||
if(status == eSUCCESS)
|
if(status == eSUCCESS)
|
||||||
status = wifi_qsap_start_softap();
|
status = wifi_qsap_start_softap();
|
||||||
|
if (status != eSUCCESS)
|
||||||
|
wifi_qsap_unload_driver();
|
||||||
}
|
}
|
||||||
*plen = snprintf(presp, *plen, "%s", (status==eSUCCESS) ? SUCCESS : "failure Could not enable softap");
|
*plen = snprintf(presp, *plen, "%s", (status==eSUCCESS) ? SUCCESS : "failure Could not enable softap");
|
||||||
return;
|
return;
|
||||||
@@ -2167,7 +2265,6 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** TODO: Modify the channel number based on the mode */
|
|
||||||
if(status == FALSE)
|
if(status == FALSE)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
@@ -2201,7 +2298,7 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
|
|||||||
ulen = MAX_FILE_PATH_LEN;
|
ulen = MAX_FILE_PATH_LEN;
|
||||||
if(SEC_MODE_WEP != qsap_read_security_mode(pcfg, filename, &ulen)) {
|
if(SEC_MODE_WEP != qsap_read_security_mode(pcfg, filename, &ulen)) {
|
||||||
if(eERR_UNKNOWN == qsap_change_cfg(pcfg, cmd_list[cNum], 0)) {
|
if(eERR_UNKNOWN == qsap_change_cfg(pcfg, cmd_list[cNum], 0)) {
|
||||||
LOGE("%s: CMD_WEP_KEY0 \n", __func__);
|
LOGE("%s: eCMD_DEFAULT_KEY \n", __func__);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2230,10 +2327,10 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
|
|||||||
case eCMD_WEP_KEY1:
|
case eCMD_WEP_KEY1:
|
||||||
case eCMD_WEP_KEY2:
|
case eCMD_WEP_KEY2:
|
||||||
case eCMD_WEP_KEY3:
|
case eCMD_WEP_KEY3:
|
||||||
if(FALSE == is_valid_wep_key(pVal))
|
if(FALSE == is_valid_wep_key(pVal, filename, MAX_FILE_PATH_LEN))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
qsap_write_cfg(pcfg, cmd_list[cNum], pVal, presp, plen, ini);
|
qsap_write_cfg(pcfg, cmd_list[cNum], filename, presp, plen, ini);
|
||||||
|
|
||||||
/** if the security mode is not WEP, update the WEP features, and
|
/** if the security mode is not WEP, update the WEP features, and
|
||||||
do NOT set the WEP security */
|
do NOT set the WEP security */
|
||||||
@@ -2252,8 +2349,11 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
|
|||||||
LOGE("Reset :%ld \n", value);
|
LOGE("Reset :%ld \n", value);
|
||||||
if(SAP_RESET_BSS == value) {
|
if(SAP_RESET_BSS == value) {
|
||||||
status = wifi_qsap_stop_softap();
|
status = wifi_qsap_stop_softap();
|
||||||
if(status == eSUCCESS)
|
if(status == eSUCCESS) {
|
||||||
wifi_qsap_start_softap();
|
status = wifi_qsap_start_softap();
|
||||||
|
if (eSUCCESS != status)
|
||||||
|
wifi_qsap_unload_driver();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(SAP_RESET_DRIVER_BSS == value){
|
else if(SAP_RESET_DRIVER_BSS == value){
|
||||||
status = wifi_qsap_reload_softap();
|
status = wifi_qsap_reload_softap();
|
||||||
@@ -2277,8 +2377,12 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
case eCMD_RESET_TO_DEFAULT:
|
case eCMD_RESET_TO_DEFAULT:
|
||||||
if(eSUCCESS == (status = wifi_qsap_reset_to_default()))
|
if(eSUCCESS == (status = wifi_qsap_reset_to_default(pconffile, DEFAULT_CONFIG_FILE_PATH))) {
|
||||||
status = commit();
|
if(eSUCCESS == (status = wifi_qsap_reset_to_default(fIni, DEFAULT_INI_FILE))) {
|
||||||
|
gIniUpdated = 1;
|
||||||
|
status = commit();
|
||||||
|
}
|
||||||
|
}
|
||||||
*plen = snprintf(presp, *plen, "%s", (status == eSUCCESS) ? SUCCESS : ERR_UNKNOWN);
|
*plen = snprintf(presp, *plen, "%s", (status == eSUCCESS) ? SUCCESS : ERR_UNKNOWN);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -2447,11 +2551,11 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
|
|||||||
if(TRUE != IS_VALID_INTRA_BSS_STATUS(value))
|
if(TRUE != IS_VALID_INTRA_BSS_STATUS(value))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
snprintf(pVal, MAX_INT_STR, "%ld", value);
|
snprintf(pVal, MAX_INT_STR, "%d", value ? 0 : 1);
|
||||||
cNum = STR_INTRA_BSS_FORWARD_IN_INI;
|
cNum = STR_INTRA_BSS_FORWARD_IN_INI;
|
||||||
ini = INI_CONF_FILE;
|
ini = INI_CONF_FILE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case eCMD_COUNTRY_CODE:
|
case eCMD_COUNTRY_CODE:
|
||||||
cNum = STR_COUNTRY_CODE_IN_INI;
|
cNum = STR_COUNTRY_CODE_IN_INI;
|
||||||
ini = INI_CONF_FILE;
|
ini = INI_CONF_FILE;
|
||||||
|
|||||||
@@ -76,19 +76,19 @@ enum error_val {
|
|||||||
#define QSAP_SDK_VERSION "1.0"
|
#define QSAP_SDK_VERSION "1.0"
|
||||||
|
|
||||||
/** Configuration file name */
|
/** Configuration file name */
|
||||||
#define CONFIG_FILE "/system/lib/modules/hostapd.conf"
|
#define CONFIG_FILE "/data/hostapd/hostapd.conf"
|
||||||
|
|
||||||
/** Default configuration file path */
|
/** Default configuration file path */
|
||||||
#define DEFAULT_CONFIG_FILE_PATH "/system/lib/modules/hostapd_default.conf"
|
#define DEFAULT_CONFIG_FILE_PATH "/persist/qcom/softap/hostapd_default.conf"
|
||||||
|
|
||||||
/** Ini file */
|
/** Ini file */
|
||||||
#define INI_FILE "/system/etc/firmware/wlan/qcom_cfg.ini"
|
#define INI_FILE "/system/etc/firmware/wlan/qcom_cfg.ini"
|
||||||
|
|
||||||
/** Temporary file name */
|
/** Default Ini file */
|
||||||
#define TMP_FILE "/system/lib/modules/tmp.qcsoftap.conf"
|
#define DEFAULT_INI_FILE "/persist/qcom/softap/qcom_cfg_default.ini"
|
||||||
|
|
||||||
/** SDK control interface path */
|
/** SDK control interface path */
|
||||||
#define SDK_CTRL_IF "/system/lib/modules/softap_sdk_ctrl"
|
#define SDK_CTRL_IF "/data/hostapd/softap_sdk_ctrl"
|
||||||
|
|
||||||
/** Maximum length of the line in the configuration file */
|
/** Maximum length of the line in the configuration file */
|
||||||
#define MAX_CONF_LINE_LEN (156)
|
#define MAX_CONF_LINE_LEN (156)
|
||||||
@@ -203,6 +203,10 @@ enum error_val {
|
|||||||
#define B_MODE_MAX_DATA_RATE_IDX (4)
|
#define B_MODE_MAX_DATA_RATE_IDX (4)
|
||||||
#define G_ONLY_MODE_MAX_DATA_RATE_IDX (12)
|
#define G_ONLY_MODE_MAX_DATA_RATE_IDX (12)
|
||||||
|
|
||||||
|
/** parameters for read config */
|
||||||
|
#define GET_COMMENTED_VALUE 1
|
||||||
|
#define GET_ENABLED_ONLY 0
|
||||||
|
|
||||||
/** command request index - in the array Cmd_req[] */
|
/** command request index - in the array Cmd_req[] */
|
||||||
enum eCmd_req {
|
enum eCmd_req {
|
||||||
eCMD_GET = 0,
|
eCMD_GET = 0,
|
||||||
|
|||||||
Reference in New Issue
Block a user