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;
+}
+
+
+