#include <pthread.h>
#include <sys/types.h>
#include <sys/inotify.h>
+#include <sys/msg.h>
#include "sa_common.h"
#include "sa_types.h"
#include "sa_systemdata.h"
#define NETWORK_CHECK_RETRY_MAX 10
#define EVENT_SIZE (sizeof(struct inotify_event))
#define BUF_LEN (1024 * (EVENT_SIZE + 16))
+static int sa_message_queue_id;
+
+static int __get_sa_msg_queue_id(void)
+{
+ return sa_message_queue_id;
+}
+
+static int __send_message(sa_msgq_buf_s *msg_buf)
+{
+ int msgqid;
+ int msg_size;
+
+ msg_buf->mtype = SA_MESSAGE_QID;
+
+ msg_size = sizeof(sa_msgq_buf_s) - sizeof(msg_buf->mtype);
+
+ msgqid = __get_sa_msg_queue_id();
+
+ if (msgsnd(msgqid, msg_buf, msg_size, 0) == -1) {
+ _E("msgsnd error(%d)", errno);
+ return -1;
+ }
+
+ return 0;
+}
static int __check_config_file(char *filename)
{
static void __release_network_resource(sa_network_s * network)
{
if (network != NULL) {
- if (network->wifi != NULL) {
- if (network->wifi->ssid != NULL)
- free(network->wifi->ssid);
- if (network->wifi->password != NULL)
- free(network->wifi->password);
-
- if (network->wifi->staticInfo != NULL) {
- if (network->wifi->staticInfo->ipAddress != NULL)
- free(network->wifi->staticInfo->ipAddress);
- if (network->wifi->staticInfo->netmask != NULL)
- free(network->wifi->staticInfo->netmask);
- if (network->wifi->staticInfo->defaultGateway != NULL)
- free(network->wifi->staticInfo->defaultGateway);
- if (network->wifi->staticInfo->primaryDnsServer != NULL)
- free(network->wifi->staticInfo->primaryDnsServer);
- if (network->wifi->staticInfo->secondaryDnsServer != NULL)
- free(network->wifi->staticInfo->secondaryDnsServer);
-
- free(network->wifi->staticInfo);
- }
- }
+ if (network->wifi != NULL)
+ free(network->wifi->staticInfo);
if (network->eth != NULL) {
- if (network->eth->staticInfo != NULL) {
- if (network->eth->staticInfo->ipAddress != NULL)
- free(network->eth->staticInfo->ipAddress);
- if (network->eth->staticInfo->netmask != NULL)
- free(network->eth->staticInfo->netmask);
- if (network->eth->staticInfo->defaultGateway != NULL)
- free(network->eth->staticInfo->defaultGateway);
- if (network->eth->staticInfo->primaryDnsServer != NULL)
- free(network->eth->staticInfo->primaryDnsServer);
- if (network->eth->staticInfo->secondaryDnsServer != NULL)
- free(network->eth->staticInfo->secondaryDnsServer);
-
+ if (network->eth->staticInfo != NULL)
free(network->eth->staticInfo);
- }
}
if (network->httpProxyHost != NULL)
}
}
-static void __release_config_resource(sa_config_s *config, sa_network_activate_pararms_s *activateParams)
+static void __release_config_resource(sa_config_s *config)
{
if (config != NULL) {
- if (config->version != NULL)
- free(config->version);
-
if (config->networkData != NULL)
__release_network_resource(config->networkData);
- if (config->systemData != NULL) {
- if (config->systemData->deviceName != NULL)
- free(config->systemData->deviceName);
-
+ if (config->systemData != NULL)
free(config->systemData);
- }
free(config);
}
-
- if (activateParams != NULL)
- __release_network_resource(activateParams->network);
}
static void *__config_event_loop(void *arg)
return NULL;
}
+static void *__event_loop(void *pv)
+{
+ int msgqid = 0;
+ int msg_size = 0;
+ sa_msgq_buf_s msg_buf;
+
+ msgqid = __get_sa_msg_queue_id();
+ if (0 == msgqid) {
+ _D("msgqid is NULL");
+ return;
+ }
+
+ msg_size = sizeof(sa_msgq_buf_s) - sizeof(msg_buf.mtype);
+
+ while (1) {
+ if (msgrcv(msgqid, &msg_buf, msg_size, 0, 0) == -1)
+ _E("msgrcv error(%d)", errno);
+
+ switch (msg_buf.cmd) {
+ case SA_FILE_CHANGE:
+ _D("SA_FILE_CHANGE");
+
+ break;
+ case SA_WIFI_CALLBACK:
+ _D("SA_WIFI_CALLBACK");
+
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ pthread_exit((void *)0);
+ return NULL;
+}
+
+
static sa_error_e __init_event_listener(void)
{
pthread_t p_thread;
- // register file change event
- // Start thread to create in order to receive event
+ sa_message_queue_id = msgget((key_t) SA_MESSAGE_QID, IPC_CREAT | 0666);
+ // Start thread to create in order to receive event
if (pthread_create(&p_thread, NULL, &__config_event_loop, CONFIG_FILE) < 0) {
_E("__init_event_listener create error");
return SA_ERROR_UNKNOWN;
if (__check_config_file(CONFIG_FILE)) {
+ // 0.Initializing thread to receive file change event and network callback
+ if (ret == SA_ERROR_NONE) {
+ __init_event_listener();
+ } else {
+ _E("__init_event_listener error [%d]", ret);
+ }
+
// 1.Get config info from interface
// memory will be allocated from interface layer
ret = sa_systemdata_get_config_info(CONFIG_FILE, config);
}
}
- // 4.Register file change event
- if (ret == SA_ERROR_NONE) {
- // register file change event
- // Start thread to create in order to receive event
- __init_event_listener();
- } else {
- _E("sa_network_activate return error [%d]", ret);
- }
-
- /* 5.Save System Data(device name)
+
+ /* 4.Save System Data(device name)
- TBD
*/
- // 6.free resource
- __release_config_resource(config, activateParams);
+ // 5.free resource
+ __release_config_resource(config);
} else {
/* If the file is not existed, it would be enabled softAP
- TBD