Code uploaded as per p4 label WLAN_LIBRA_SOFTAP_LAFY_7630_REL10
Change-Id: Ib4973da98606f4cdbea5c6b9621999fbb06c2528
This commit is contained in:
@@ -8,6 +8,18 @@ LOCAL_C_INCLUDES :=
|
||||
|
||||
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 \
|
||||
qsap.c
|
||||
|
||||
|
||||
@@ -58,6 +58,32 @@
|
||||
|
||||
#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 delete_module(const char *name, int);
|
||||
|
||||
@@ -161,15 +187,7 @@ s32 wifi_qsap_load_driver(void)
|
||||
LOGE("Could not turn on the polling...");
|
||||
}
|
||||
|
||||
#define SDIO_IF_DRV "/system/lib/modules/librasdioif.ko"
|
||||
#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 " ");
|
||||
ret = insmod(WIFI_SDIO_IF_DRIVER_MODULE_PATH, WIFI_SDIO_IF_DRIVER_MODULE_ARG, WIFI_SDIO_IF_DRIVER_MODULE_NAME " ");
|
||||
|
||||
if ( ret != 0 ) {
|
||||
LOGE("init_module failed sdioif\n");
|
||||
@@ -178,7 +196,7 @@ s32 wifi_qsap_load_driver(void)
|
||||
|
||||
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 ) {
|
||||
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...");
|
||||
}
|
||||
|
||||
if ( check_driver_loaded(SOFTAP_DRV_TAG " ") ) {
|
||||
if ( rmmod(SOFTAP_DRV_TAG) ) {
|
||||
if ( check_driver_loaded(WIFI_DRIVER_MODULE_NAME " ") ) {
|
||||
if ( rmmod(WIFI_DRIVER_MODULE_NAME) ) {
|
||||
LOGE("Unable to unload the station mode wifi driver...\n");
|
||||
ret = 1;
|
||||
goto end;
|
||||
@@ -212,8 +230,8 @@ s32 wifi_qsap_unload_wifi_sta_driver(void)
|
||||
|
||||
sched_yield();
|
||||
|
||||
if ( check_driver_loaded(SDIO_IF_DRV_TAG " ") ) {
|
||||
if ( rmmod(SDIO_IF_DRV_TAG) ) {
|
||||
if ( check_driver_loaded(WIFI_SDIO_IF_DRIVER_MODULE_NAME " ") ) {
|
||||
if ( rmmod(WIFI_SDIO_IF_DRIVER_MODULE_NAME) ) {
|
||||
LOGE("Unable to unload the station mode librasdioif driver\n");
|
||||
ret = 1;
|
||||
goto end;
|
||||
@@ -236,8 +254,8 @@ s32 wifi_qsap_unload_driver()
|
||||
LOGE("Could not turn on the polling...");
|
||||
}
|
||||
|
||||
if ( check_driver_loaded(SOFTAP_DRV_TAG " ") ) {
|
||||
if ( rmmod(SOFTAP_DRV_TAG) ) {
|
||||
if ( check_driver_loaded(WIFI_DRIVER_MODULE_NAME " ") ) {
|
||||
if ( rmmod(WIFI_DRIVER_MODULE_NAME) ) {
|
||||
LOGE("Unable to unload the libra_softap driver\n");
|
||||
ret = 1;
|
||||
goto end;
|
||||
@@ -246,8 +264,8 @@ s32 wifi_qsap_unload_driver()
|
||||
|
||||
sched_yield();
|
||||
|
||||
if ( check_driver_loaded(SDIO_IF_DRV_TAG " ") ) {
|
||||
if ( rmmod(SDIO_IF_DRV_TAG) ) {
|
||||
if ( check_driver_loaded(WIFI_SDIO_IF_DRIVER_MODULE_NAME " ") ) {
|
||||
if ( rmmod(WIFI_SDIO_IF_DRIVER_MODULE_NAME) ) {
|
||||
LOGE("Unable to unload the librasdioif driver\n");
|
||||
ret = 1;
|
||||
goto end;
|
||||
@@ -334,11 +352,15 @@ s32 commit(void)
|
||||
LOGE("%s: stop bss failed \n", __func__);
|
||||
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
|
||||
return eSUCCESS;
|
||||
#endif
|
||||
@@ -407,6 +429,7 @@ s32 wifi_qsap_reload_softap()
|
||||
sleep(1);
|
||||
|
||||
if (eSUCCESS != wifi_qsap_start_softap()) {
|
||||
wifi_qsap_unload_driver();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -54,7 +54,6 @@
|
||||
#include "cutils/properties.h"
|
||||
#include "cutils/log.h"
|
||||
|
||||
|
||||
#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
|
||||
@@ -175,9 +174,10 @@ char *fIni = INI_FILE;
|
||||
* @param plen [IN-OUT] The length of the buffer is provided as input.
|
||||
* The length of the configuration parameter value, stored
|
||||
* in the 'presp', is provided as the output
|
||||
* @param ignore_comment [IN] if set, read the commented value also
|
||||
* @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;
|
||||
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 */
|
||||
if(buf[0] == '#') {
|
||||
continue;
|
||||
if (ignore_comment) {
|
||||
pline++;
|
||||
}
|
||||
else continue;
|
||||
}
|
||||
|
||||
/** 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;
|
||||
}
|
||||
|
||||
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pfile)) {
|
||||
buf[MAX_CONF_LINE_LEN] = '\0';
|
||||
}
|
||||
|
||||
/** Open a temporary file */
|
||||
ftmp = fopen(TMP_FILE, "w");
|
||||
ftmp = fopen(buf, "w+");
|
||||
if(NULL == ftmp) {
|
||||
LOGE("%s : unable to open tmp file \n", __func__);
|
||||
*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(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 */
|
||||
result = rename(TMP_FILE, pfile);
|
||||
result = rename(buf, pfile);
|
||||
|
||||
*plen = snprintf(presp, *plen, "%s", (result == eERR_UNKNOWN) ? ERR_FEATURE_NOT_ENABLED : SUCCESS);
|
||||
|
||||
/** Remove the temporary file. Dont care the return value */
|
||||
unlink(TMP_FILE);
|
||||
unlink(buf);
|
||||
|
||||
if(result == eERR_UNKNOWN)
|
||||
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;
|
||||
|
||||
/** 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) ) {
|
||||
*plen = temp;
|
||||
@@ -344,7 +355,7 @@ static sec_mode_t qsap_read_security_mode(s8 *pfile, s8 *presp, u32 *plen)
|
||||
/* WEP, is not enabled */
|
||||
|
||||
/** 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) ) {
|
||||
/** WPA is disabled, No security */
|
||||
mode = SEC_MODE_NONE;
|
||||
@@ -362,7 +373,7 @@ static sec_mode_t qsap_read_security_mode(s8 *pfile, s8 *presp, u32 *plen)
|
||||
else {
|
||||
/** Verify if, WPA is disabled */
|
||||
*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) ) {
|
||||
/** WPA is disabled, hence WEP is enabled */
|
||||
mode = SEC_MODE_WEP;
|
||||
@@ -405,8 +416,12 @@ static s32 qsap_change_cfg(s8 *pfile, s8 *pcmd, u32 status)
|
||||
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 */
|
||||
ftmp = fopen(TMP_FILE, "w");
|
||||
ftmp = fopen(buf, "w");
|
||||
if(NULL == ftmp) {
|
||||
LOGE("%s : unable to open tmp file \n", __func__);
|
||||
fclose(fcfg);
|
||||
@@ -440,14 +455,18 @@ static s32 qsap_change_cfg(s8 *pfile, s8 *pcmd, u32 status)
|
||||
fclose(fcfg);
|
||||
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 */
|
||||
if(eERR_UNKNOWN == rename(TMP_FILE, pfile)) {
|
||||
if(eERR_UNKNOWN == rename(buf, pfile)) {
|
||||
LOGE("unable to rename the file \n");
|
||||
return eERR_UNKNOWN;
|
||||
}
|
||||
|
||||
/** Delete the temporary file */
|
||||
unlink(TMP_FILE);
|
||||
unlink(buf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -600,7 +619,7 @@ end:
|
||||
*/
|
||||
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';
|
||||
return strchr(pfile, '=') + 1;
|
||||
}
|
||||
@@ -755,8 +774,12 @@ static void qsap_remove_from_file(s8 *pfile, s8 *pVal, s8 *presp, u32 *plen)
|
||||
return;
|
||||
}
|
||||
|
||||
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pfile)) {
|
||||
buf[MAX_CONF_LINE_LEN] = '\0';
|
||||
}
|
||||
|
||||
/** Open a temporary file */
|
||||
ftmp = fopen(TMP_FILE, "w");
|
||||
ftmp = fopen(buf, "w");
|
||||
|
||||
if(ftmp == NULL) {
|
||||
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(ftmp);
|
||||
|
||||
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pfile)) {
|
||||
buf[MAX_CONF_LINE_LEN] = '\0';
|
||||
}
|
||||
|
||||
/** 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);
|
||||
|
||||
unlink(TMP_FILE);
|
||||
unlink(buf);
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -961,7 +988,7 @@ static int qsap_read_mac_address(s8 *presp, u32 *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__);
|
||||
goto end;
|
||||
}
|
||||
@@ -1007,7 +1034,7 @@ static void qsap_read_wmm(s8 *presp, u32 *plen)
|
||||
u32 tlen = *plen;
|
||||
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);
|
||||
return;
|
||||
}
|
||||
@@ -1030,27 +1057,11 @@ static void qsap_read_wmm(s8 *presp, u32 *plen)
|
||||
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 *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, '=');
|
||||
if(NULL != ptr){
|
||||
ptr++;
|
||||
@@ -1063,6 +1074,26 @@ s8 *qsap_get_config_value(s8 *pfile, s8 *pcmd, s8 *pbuf, u32 *plen)
|
||||
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.
|
||||
*/
|
||||
@@ -1118,7 +1149,7 @@ int qsap_read_channel(s8 *pfile, s8 *pcmd, s8 *presp, u32 *plen, s8 *pvar)
|
||||
s32 chan;
|
||||
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, '=');
|
||||
|
||||
if(NULL == pval) {
|
||||
@@ -1228,6 +1259,37 @@ error:
|
||||
|
||||
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
|
||||
* Get the configuration information from the softAP configuration
|
||||
@@ -1247,6 +1309,7 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
|
||||
{
|
||||
u32 len;
|
||||
int status;
|
||||
s8 * pval;
|
||||
|
||||
switch(cNum) {
|
||||
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);
|
||||
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_BSSID:
|
||||
case eCMD_BCN_INTERVAL:
|
||||
case eCMD_DTIM_PERIOD:
|
||||
case eCMD_HW_MODE:
|
||||
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_WPS_CONFIG_METHOD:
|
||||
case eCMD_GTK_TIMEOUT:
|
||||
case eCMD_UUID:
|
||||
case eCMD_DEVICE_NAME:
|
||||
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_URL:
|
||||
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;
|
||||
|
||||
case eCMD_CHAN:
|
||||
@@ -1292,15 +1361,15 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
|
||||
break;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
case eCMD_ASSOC_STA_MACS:
|
||||
@@ -1339,7 +1408,7 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
|
||||
break;
|
||||
|
||||
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;
|
||||
|
||||
case eCMD_SDK_VERSION:
|
||||
@@ -1347,11 +1416,17 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
|
||||
break;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
default:
|
||||
@@ -1438,22 +1513,35 @@ static void qsap_handle_get_request(s8 *pcmd, s8 *presp, u32 *plen)
|
||||
return;
|
||||
}
|
||||
|
||||
static s16 is_valid_wep_key(s8 *pwep)
|
||||
static s16 is_valid_wep_key(s8 *pwep, s8 *pkey, s16 len)
|
||||
{
|
||||
int weplen;
|
||||
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
|
||||
* or 10, 26, or 32 digits */
|
||||
weplen = strlen(pwep);
|
||||
switch(weplen) {
|
||||
case WEP_64_KEY_ASCII:
|
||||
case WEP_128_KEY_ASCII:
|
||||
case WEP_152_KEY_ASCII:
|
||||
weplen--;
|
||||
while(weplen--) {
|
||||
if(0 == isascii(pwep[weplen]))
|
||||
if(0 == isascii(pwep[weplen])) {
|
||||
LOGD("%c not ascii \n", pwep[weplen]);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
ascii = TRUE;
|
||||
break;
|
||||
|
||||
case WEP_64_KEY_HEX:
|
||||
@@ -1468,23 +1556,30 @@ static s16 is_valid_wep_key(s8 *pwep)
|
||||
default:
|
||||
ret = FALSE;
|
||||
}
|
||||
|
||||
snprintf(pkey, len, (ascii == TRUE) ? "\"%s\"" : "%s", pwep);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static s16 wifi_qsap_reset_to_default(void)
|
||||
static s16 wifi_qsap_reset_to_default(s8 *pcfgfile, s8 *pdefault)
|
||||
{
|
||||
FILE *fcfg, *ftmp;
|
||||
char buf[MAX_CONF_LINE_LEN];
|
||||
int status = eSUCCESS;
|
||||
|
||||
fcfg = fopen(DEFAULT_CONFIG_FILE_PATH, "r");
|
||||
fcfg = fopen(pdefault, "r");
|
||||
|
||||
if(NULL == fcfg) {
|
||||
LOGE("%s : unable to open file \n", __func__);
|
||||
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) {
|
||||
LOGE("%s : unable to open file \n", __func__);
|
||||
fclose(fcfg);
|
||||
@@ -1498,11 +1593,15 @@ static s16 wifi_qsap_reset_to_default(void)
|
||||
fclose(fcfg);
|
||||
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;
|
||||
|
||||
/** Remove the temporary file. Dont care the return value */
|
||||
unlink(TMP_FILE);
|
||||
unlink(buf);
|
||||
|
||||
return status;
|
||||
}
|
||||
@@ -1639,28 +1738,25 @@ static void qsap_update_wps_config(s8 *pVal, s8 *presp, u32 *plen)
|
||||
{
|
||||
u32 tlen = *plen;
|
||||
s32 status;
|
||||
s8 pwps_state[8];
|
||||
s32 cmd, i;
|
||||
s8 pwps_state[MAX_INT_STR+1];
|
||||
s32 i;
|
||||
|
||||
/* Enable/disable the following in hostapd.conf
|
||||
* 1. Change the security mode to WPA-WPA2 Mixed
|
||||
* 2. Update wps_state
|
||||
* 3. Update config_methods
|
||||
* 4. Update UPnP related variables
|
||||
* 1. Update the wps_state
|
||||
* 2. Set eap_server=1
|
||||
* 3. Update UPnP related variables
|
||||
*/
|
||||
status = atoi(pVal);
|
||||
|
||||
if(status == ENABLE) {
|
||||
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;
|
||||
}
|
||||
snprintf(pwps_state, MAX_INT_STR, "%d", (status == ENABLE) ? WPS_STATE_ENABLE : WPS_STATE_DISABLE);
|
||||
|
||||
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);
|
||||
|
||||
/** update the eap_server=1 */
|
||||
@@ -2102,6 +2198,8 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
|
||||
status = wifi_qsap_load_driver();
|
||||
if(status == eSUCCESS)
|
||||
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");
|
||||
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)
|
||||
goto error;
|
||||
|
||||
@@ -2201,7 +2298,7 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
|
||||
ulen = MAX_FILE_PATH_LEN;
|
||||
if(SEC_MODE_WEP != qsap_read_security_mode(pcfg, filename, &ulen)) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -2230,10 +2327,10 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
|
||||
case eCMD_WEP_KEY1:
|
||||
case eCMD_WEP_KEY2:
|
||||
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;
|
||||
|
||||
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
|
||||
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);
|
||||
if(SAP_RESET_BSS == value) {
|
||||
status = wifi_qsap_stop_softap();
|
||||
if(status == eSUCCESS)
|
||||
wifi_qsap_start_softap();
|
||||
if(status == eSUCCESS) {
|
||||
status = wifi_qsap_start_softap();
|
||||
if (eSUCCESS != status)
|
||||
wifi_qsap_unload_driver();
|
||||
}
|
||||
}
|
||||
else if(SAP_RESET_DRIVER_BSS == value){
|
||||
status = wifi_qsap_reload_softap();
|
||||
@@ -2277,8 +2377,12 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
|
||||
return;
|
||||
|
||||
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))) {
|
||||
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);
|
||||
return;
|
||||
|
||||
@@ -2447,7 +2551,7 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
|
||||
if(TRUE != IS_VALID_INTRA_BSS_STATUS(value))
|
||||
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;
|
||||
ini = INI_CONF_FILE;
|
||||
break;
|
||||
|
||||
@@ -76,19 +76,19 @@ enum error_val {
|
||||
#define QSAP_SDK_VERSION "1.0"
|
||||
|
||||
/** Configuration file name */
|
||||
#define CONFIG_FILE "/system/lib/modules/hostapd.conf"
|
||||
#define CONFIG_FILE "/data/hostapd/hostapd.conf"
|
||||
|
||||
/** 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 */
|
||||
#define INI_FILE "/system/etc/firmware/wlan/qcom_cfg.ini"
|
||||
|
||||
/** Temporary file name */
|
||||
#define TMP_FILE "/system/lib/modules/tmp.qcsoftap.conf"
|
||||
/** Default Ini file */
|
||||
#define DEFAULT_INI_FILE "/persist/qcom/softap/qcom_cfg_default.ini"
|
||||
|
||||
/** 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 */
|
||||
#define MAX_CONF_LINE_LEN (156)
|
||||
@@ -203,6 +203,10 @@ enum error_val {
|
||||
#define B_MODE_MAX_DATA_RATE_IDX (4)
|
||||
#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[] */
|
||||
enum eCmd_req {
|
||||
eCMD_GET = 0,
|
||||
|
||||
Reference in New Issue
Block a user