ASR_BASE
Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/kernel/realtek-wl/src/Users/utility/webs.c b/package/kernel/realtek-wl/src/Users/utility/webs.c
new file mode 100644
index 0000000..bcc165a
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/utility/webs.c
@@ -0,0 +1,128 @@
+/*
+ */
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <sys/stat.h>
+#include "rtk_arch.h"
+
+static int isDaemon=0;
+static char *pidfile=(TOP_CONFIG_DIR "/run/webs.pid");
+#define REINIT_WEB_FILE (WIFI_WPS_TMP_DIR "/reinit_web")
+
+void get_wifi_script_dir(char *path, size_t size)
+{
+ FILE *fp;
+ char *pstr;
+ struct stat statbuf;
+ int len = 0;
+
+ fp = fopen(WIFI_CONFIG_ROOT_DIR "/wifi_script_dir", "r");
+ if (fp) {
+ pstr = fgets(path, size, fp);
+ fclose(fp);
+ if (pstr) {
+ len = strlen(path);
+ if ((len > 0) && ('\n' == path[len-1])) {
+ --len;
+ path[len] = '\0';
+ }
+ if (stat(path, &statbuf) == -1) { // dir not exist
+ len = 0;
+ }
+ }
+ }
+ if (0 == len) {
+ strncpy(path, WIFI_SCRIPT_DIR, size);
+ }
+}
+
+void sigHandler_autoconf(int signo)
+{
+ char tmpbuf[256]={0};
+ struct stat status;
+ int reinit=1;
+
+printf("<<Got Sig and Will Check Do init.sh:%d>>\n",signo);
+ if (stat(REINIT_WEB_FILE, &status) == 0) { // file existed
+ unlink(REINIT_WEB_FILE);
+ reinit = 0;
+ }
+ if (reinit) { // re-init system
+ printf("<<Got Sig and Do init.sh>>\n");
+#ifdef CONFIG_NEW_SCRIPT
+ get_wifi_script_dir(tmpbuf, sizeof(tmpbuf));
+ strncat(tmpbuf, "/../my_test.sh wps_restart", sizeof(tmpbuf)-strlen(tmpbuf)-1);
+#else
+ get_wifi_script_dir(tmpbuf, sizeof(tmpbuf));
+ strncat(tmpbuf, "/init.sh", sizeof(tmpbuf)-strlen(tmpbuf)-1);
+#endif
+ system(tmpbuf);
+ }
+}
+void init_signals(void)
+{
+ struct sigaction sa;
+
+ sa.sa_flags = SA_NODEFER;
+
+ sigemptyset(&sa.sa_mask);
+
+ sa.sa_handler = sigHandler_autoconf;
+
+ sigaction(SIGUSR1, &sa, NULL);
+ //sigaction(SIGTERM, &sa, NULL);
+}
+int main(int argc, char *argv[])
+{
+ int i;
+ char line[20];
+ FILE *fp;
+
+ if( argc==2 && (!strcmp(argv[1], "version")) )
+ {
+ printf("version : %s\n",DAEMON_VERSION);
+ return 0;
+ }
+
+ for(i=1; i<argc; i++)
+ {
+ if(argv[i][0]!='-')
+ {
+ fprintf(stderr, "%s: Unknown option\n", argv[i]);
+ }
+ else switch(argv[i][1])
+ {
+ case 'x':
+ isDaemon = 1;
+ break;
+ default:
+ fprintf(stderr, "%s: Unknown option\n", argv[i]);
+ }
+ }
+ if(isDaemon==1){
+ if (daemon(0, 1) == -1) {
+ perror("webs fork error");
+ return 0;
+ }
+ }
+ init_signals();
+ setsid();
+ sprintf(line, "%d\n", getpid());
+ if ((fp = fopen(pidfile, "w")) == NULL) {
+ printf("open file error:%s\n",pidfile);
+ return -1;
+ }
+ fwrite(line, strlen(line), 1, fp);
+ fclose(fp);
+
+ for (;;) {
+ sleep(5);
+ }
+ return 0;
+}
+
+
+