[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit

Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/app/goahead/server/page.c b/ap/app/goahead/server/page.c
new file mode 100755
index 0000000..b5d7bf8
--- /dev/null
+++ b/ap/app/goahead/server/page.c
@@ -0,0 +1,219 @@
+#include "wsIntrn.h"
+#include <sys/stat.h> 
+#include <unistd.h>
+#ifdef _USE_WEBUI_ZIP
+#include "unzip.h"
+#define WEB_ZIP_PATH "etc_ro/web.zip"
+#define WEB_ZIP_PATH_HEAD "web/"
+#endif
+
+int websPageOpen(webs_t wp, char_t *lpath, char_t *path, int mode, int perm)
+{
+	a_assert(websValid(wp));
+
+#ifdef WEBS_PAGE_ROM
+	return websRomPageOpen(wp, path, mode, perm);
+#else
+#ifdef _USE_WEBUI_ZIP
+	char *filename = strstr(lpath,WEB_ZIP_PATH_HEAD);
+	if(filename != NULL)
+	{
+		unzFile uzFile = unzOpen(WEB_ZIP_PATH);
+		if(unzLocateFile(uzFile,filename,0) == UNZ_OK
+			&& unzOpenCurrentFile(uzFile) == UNZ_OK)
+		{
+			wp->docfd = uzFile;
+		}
+		else
+		{
+			unzClose(uzFile);
+			wp->docfd = -1;
+		}
+		return wp->docfd;
+	}
+	else
+	{
+		printf("[zpr]erropen %s\n", lpath);
+	}
+#endif
+	//printf("[httpshare]lpath->%s\n",lpath);
+
+	if(strstr(lpath,"/mmc2") != NULL)
+	{
+#if 0  // cov M
+		unsigned long filesize = -1; 
+#else
+        long filesize = -1; 
+#endif
+		struct stat statbuff;	
+		
+		if(stat(lpath, &statbuff) < 0)
+		{	 
+		   return filesize;    
+	    }
+		else
+		{	 
+	 	   filesize = statbuff.st_size;    
+	    }
+		
+		printf("[httpshare]websPageOpen:size->%d\n", filesize);
+
+#if 0	 // cov M	
+		if(filesize<2*1024*1024*1024)
+		{
+			return (wp->docfd = gopen(lpath, mode, perm));
+		}
+		else
+			return -1;
+#else
+		if(filesize > 0 && filesize <= LONG_MAX-1)
+		{
+			return (wp->docfd = gopen(lpath, mode, perm));
+		}
+		else
+			return -1;
+
+#endif
+	}
+
+	return (wp->docfd = gopen(lpath, mode, perm));
+#endif /* WEBS_PAGE_ROM */
+}
+
+void websPageClose(webs_t wp)
+{
+	a_assert(websValid(wp));
+
+#ifdef WEBS_PAGE_ROM
+	websRomPageClose(wp->docfd);
+#else
+#ifdef _USE_WEBUI_ZIP
+	if(wp->docfd > 0 && wp->lpath != NULL && strstr(wp->lpath,WEB_ZIP_PATH_HEAD) != NULL)
+	{
+		unzCloseCurrentFile(wp->docfd);
+		unzClose(wp->docfd);
+		wp->docfd = -1;
+		return;
+	}
+#endif	
+	if (wp->docfd >= 0) {
+		close(wp->docfd);
+		wp->docfd = -1;
+		//printf("[httpsahre]lpath->%s,path->%s\n",wp->lpath,wp->path);
+		if(strstr(wp->path,"/mmc2") != NULL)
+		{
+			zte_del_download_file();		
+		}
+	}
+#endif
+}
+
+int websPageStat(webs_t wp, char_t *lpath, char_t *path, websStatType* sbuf)
+{
+	if(lpath == NULL)
+		return -1;
+#ifdef WEBS_PAGE_ROM
+	return websRomPageStat(path, sbuf);
+#else
+#ifdef _USE_WEBUI_ZIP
+	if(strstr(lpath,WEB_ZIP_PATH_HEAD) != NULL)
+	{
+		unz_file_info file_info = {0};
+		if(unzGetCurrentFileInfo(wp->docfd, &file_info, NULL, 0, NULL, 0, NULL, 0)< 0)
+		{
+			printf("[webzip]errStat %s\n", lpath);
+			return -1;
+		}
+		sbuf->size = file_info.uncompressed_size;
+		sbuf->mtime = file_info.dosDate;
+		sbuf->isDir = websPageIsDirectory(lpath);
+		return 0;
+	}
+#endif
+	gstat_t	s;
+
+	if (gstat(lpath, &s) < 0) {
+		return -1;
+	}
+	sbuf->size = s.st_size;
+	sbuf->mtime = s.st_mtime;
+	sbuf->isDir = s.st_mode & S_IFDIR;
+	return 0;
+#endif
+}
+
+int websPageIsDirectory(char_t *lpath)
+{
+	if(lpath == NULL)
+		return 0;
+#ifdef WEBS_PAGE_ROM
+	websStatType	sbuf;
+
+	if (websRomPageStat(lpath, &sbuf) >= 0) {
+		return(sbuf.isDir);
+	} else {
+		return 0;
+	}
+#else
+#ifdef _USE_WEBUI_ZIP
+	if(strstr(lpath,WEB_ZIP_PATH_HEAD) != NULL)
+	{
+		char *p = lpath;
+		int is_dir = 0;
+		while ((*p) != '\0') {
+			p++;
+		}
+		p--;
+
+		if (((*p) == '/') || ((*p) == '\\')) {
+			is_dir = 1;
+		}
+		return is_dir;
+	}
+#endif
+	gstat_t sbuf;
+
+	if (gstat(lpath, &sbuf) >= 0) {
+		return(sbuf.st_mode & S_IFDIR);
+	} else {
+		return 0;
+	}
+#endif
+}
+
+int websPageReadData(webs_t wp, char *buf, int nBytes)
+{
+	a_assert(websValid(wp));
+#ifdef WEBS_PAGE_ROM
+	return websRomPageReadData(wp, buf, nBytes);
+#else
+#ifdef _USE_WEBUI_ZIP
+	if(wp->lpath != NULL && strstr(wp->lpath,WEB_ZIP_PATH_HEAD) != NULL)
+	{
+		return unzReadCurrentFile(wp->docfd, buf, nBytes);
+	}
+#endif
+	return read(wp->docfd, buf, nBytes);
+#endif
+}
+
+void websPageSeek(webs_t wp, long offset)
+{
+	a_assert(websValid(wp));
+#ifdef WEBS_PAGE_ROM
+	websRomPageSeek(wp, offset, SEEK_CUR);
+#else
+#ifdef _USE_WEBUI_ZIP
+	if(wp->lpath != NULL && strstr(wp->lpath,WEB_ZIP_PATH_HEAD) != NULL)
+	{
+		printf("[webzip]seek %s\n",wp->lpath);
+		return;
+	}
+#endif
+	if(lseek(wp->docfd, offset, SEEK_CUR) < 0)
+	{
+		return;	    
+	}
+#endif
+}
+