亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c

?? 嵌入式Linux系統用的web server,開源代碼,非常好用
?? C
字號:
/*
 * main.c -- Main program for the GoAhead WebServer (NetWareversion)
 *
 * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
 *
 * See the file "license.txt" for usage and redistribution license requirements
 *
 * $Id: main.c,v 1.3 2002/01/24 21:57:47 bporter Exp $
 */

/******************************** Description *********************************/

/*
 * Main program for for the GoAhead WebServer. This is a demonstration
 * main program to initialize and configure the web server.
 */

/********************************* Includes ***********************************/

#include "../uemf.h"
#include "../wsIntrn.h"
#include <signal.h>
#include <sys/types.h>

#ifdef WEBS_SSL_SUPPORT
#include "../websSSL.h"
#endif

#ifdef USER_MANAGEMENT_SUPPORT
#include "../um.h"
void  formDefineUserMgmt(void);
#endif


/*********************************** Locals ***********************************/
/*
 * Change configuration here
 */

static char_t     *rootWeb = T("web");       /* Root web directory */
static char_t     *password = T("");            /* Security password */
static int        port = 80;                 /* Server port */
static int        retries = 5;               /* Server port retries */
static int        finished;                  /* Finished flag */

/*********************************** Defines **********************************/
/*
 * Debug defines for testing only (Should be removed for final compile)
 */

#ifdef debug
   #define P( x ) printf( "\rWEBS: %d\n\r", x )
   #define Ps( x, s ) printf( "\rWEBS: %d [%s]\n\r", x, s )
#else
   #define P( x ) 
   #define Ps( x, s ) 
#endif

NETDB_DEFINE_CONTEXT ;
NETINET_DEFINE_CONTEXT ;

/****************************** Forward Declarations **************************/

static void NLMcleanup( void ) ;
static int  initWebs();
static int  aspTest(int eid, webs_t wp, int argc, char_t **argv);
static void formTest(webs_t wp, char_t *path, char_t *query);
static int  websHomePageHandler(webs_t wp, char_t *urlPrefix, char_t *webDir,
            int arg, char_t *url, char_t *path, char_t *query);
extern void defaultErrorHandler(int etype, char_t *msg);
extern void defaultTraceHandler(int level, char_t *buf);

#ifdef B_STATS
static void printMemStats(int handle, char_t *fmt, ...);
static void memLeaks();
#endif

void SigTermSignalHandler( int sigtype );
void NLMcleanup( void );

/*********************************** Code *************************************/
/*
 * Main 
 */

int main(int argc, char** argv)
{
/*
 *	Hook the unload routine in
 */
   signal( SIGTERM, SigTermSignalHandler ) ;

/*
 * Initialize the memory allocator. Allow use of malloc and start 
 * with a 60K heap.  For each page request approx 8KB is allocated.
 * 60KB allows for several concurrent page requests.  If more space
 * is required, malloc will be used for the overflow.
 */
   bopen(NULL, (60 * 1024), B_USE_MALLOC);

   P( 1 ) ;

/*
 *	Switch to LONG name-space. If LONG is not loaded, WEBS will default
 *	to 8.3
 */
   SetCurrentNameSpace( 4 ) ;

/*
 * Initialize the web server
 */
   if (initWebs() < 0) {
      return -1;
   }

#ifdef WEBS_SSL_SUPPORT
   websSSLOpen();
#endif

   P( 20 ) ;

/*
 * Basic event loop. SocketReady returns true when a socket is ready for
 * service. SocketSelect will block until an event occurs. SocketProcess
 * will actually do the servicing.
 */
   while (!finished) {
      if (socketReady(-1) || socketSelect(-1, 1000)) {
         socketProcess(-1);
         ThreadSwitch() ;
      }
      websCgiCleanup();
      emfSchedProcess();
   }

   NLMcleanup() ;

   return 0;
}

/******************************************************************************/
/*
 * Initialize the web server.
 */

static int initWebs()
{
   struct hostent *hp;
   struct in_addr intaddr;
   char   host[128], dir[128], webdir[128];
   char   *cp;
   char_t wbuf[128];
   char_t *ipaddr;

   P( 2 ) ;
/*
 * Initialize the socket subsystem
 */
   socketOpen();

   P( 3 ) ;

#ifdef USER_MANAGEMENT_SUPPORT
/*
 * Initialize the User Management database
 */
   umOpen();
   umRestore(T("umconfig.txt"));
#endif

/*
 * Define the local Ip address, host name, default home page and the 
 * root web directory.
 */
   if (gethostname(host, sizeof(host)) < 0) {
      error(E_L, E_LOG, T("Can't get hostname"));
      return -1;
   }
   
   P( 4 ) ;
   
   if ((hp = gethostbyname(host)) == NULL) {
      error(E_L, E_LOG, T("Can't get host address"));
      return -1;
   }

   P( 5 ) ;

   memcpy((char *) &intaddr, (char *) hp->h_addr_list[0],
      (size_t) hp->h_length);


/*
 * Set ../web as the root web. Modify this to suit your needs
 */
   getcwd(dir, sizeof(dir)); 
   Ps( 6, dir ) ;
   if ((cp = strrchr(dir, '/'))) 
      cp ++ ;
   else
      cp = dir ;

   Ps( 6, cp ) ;
   sprintf(webdir, "%s/%s", cp, rootWeb);

   Ps( 6, webdir ) ;

/*
 * Configure the web server options before opening the web server
 */
   websSetDefaultDir(webdir);
   ipaddr = inet_ntoa(intaddr);
   ascToUni(wbuf, ipaddr, gstrlen(ipaddr) + 1);
   websSetIpaddr(wbuf);
   ascToUni(wbuf, host, gstrlen(host) + 1);
   websSetHost(wbuf);

   P( 7 ) ;

/*
 * Configure the web server options before opening the web server
 */
   websSetDefaultPage(T("default.asp"));
   websSetPassword(password);

   P( 8 ) ;

/* 
 * Open the web server on the given port. If that port is taken, try
 * the next sequential port for up to "retries" attempts.
 */
   websOpenServer(port, retries);

   P( 9 ) ;

/*
 *	First create the URL handlers. Note: handlers are called in sorted order
 *	with the longest path handler examined first. Here we define the security 
 *	handler, forms handler and the default web page handler.
 */
   websUrlHandlerDefine(T(""), NULL, 0, websSecurityHandler, 
      WEBS_HANDLER_FIRST);
   websUrlHandlerDefine(T("/goform"), NULL, 0, websFormHandler, 0);
   websUrlHandlerDefine(T("/cgi-bin"), NULL, 0, websCgiHandler, 0);
   websUrlHandlerDefine(T(""), NULL, 0, websDefaultHandler, 
      WEBS_HANDLER_LAST);

   P( 10 ) ;

/*
 * Now define two test procedures. Replace these with your application
 * relevant ASP script procedures and form functions.
 */
   websAspDefine(T("aspTest"), aspTest);
   websFormDefine(T("formTest"), formTest);

   P( 11 ) ;

/*
 * Create the Form handlers for the User Management pages
 */
#ifdef USER_MANAGEMENT_SUPPORT
   formDefineUserMgmt();
#endif

/*
 * Create a handler for the default home page
 */
   websUrlHandlerDefine(T("/"), NULL, 0, websHomePageHandler, 0);

   P( 12 ) ;

   return 0;
}

/******************************************************************************/
/*
 * Cleanup routine (prevents duplicate code)
 */

void NLMcleanup( void )
{
   P( 23 ) ;

#ifdef WEBS_SSL_SUPPORT
   websSSLClose();
#endif

#ifdef USER_MANAGEMENT_SUPPORT
   umClose();
#endif

/*
 * Close the socket module, report memory leaks and close the memory allocator
 */
   websCloseServer();
   
   P( 24 ) ;

   socketClose();
#ifdef B_STATS
   memLeaks();
#endif
   P( 25 ) ;

   bclose();

   P( 26 ) ;
}

/******************************************************************************/
/*
 *	Routine to handle the UNLOAD command gracefully
 *	Note:	sigtype is not used
 */

#pragma off(unreferenced)
void SigTermSignalHandler( int sigtype )
#pragma on(unreferenced)
{
   finished ++ ;
   NLMcleanup() ;
}

/******************************************************************************/
/*
 * Test Javascript binding for ASP. This will be invoked when "aspTest" is
 * embedded in an ASP page. See web/asp.asp for usage. Set browser to 
 * "localhost/asp.asp" to test.
 */

static int aspTest(int eid, webs_t wp, int argc, char_t **argv)
{
   char_t   *name, *address;

   if (ejArgs(argc, argv, T("%s %s"), &name, &address) < 2) {
      websError(wp, 400, T("Insufficient args\n"));
      return -1;
   }
   return websWrite(wp, T("Name: %s, Address %s"), name, address);
}

/******************************************************************************/
/*
 * Test form for posted data (in-memory CGI). This will be called when the
 * form in web/forms.asp is invoked. Set browser to "localhost/forms.asp" to test.
 */

static void formTest(webs_t wp, char_t *path, char_t *query)
{
   char_t   *name, *address;

   name = websGetVar(wp, T("name"), T("Joe Smith")); 
   address = websGetVar(wp, T("address"), T("1212 Milky Way Ave.")); 

   websHeader(wp);
   websWrite(wp, T("<body><h2>Name: %s, Address: %s</h2>\n"), name, address);
   websFooter(wp);
   websDone(wp, 200);
}

/******************************************************************************/
/*
 * Home page handler
 */

static int websHomePageHandler(webs_t wp, char_t *urlPrefix, char_t *webDir,
   int arg, char_t *url, char_t *path, char_t *query)
{
/*
 * If the empty or "/" URL is invoked, redirect default URLs to the home page
 */
   if (*url == '\0' || gstrcmp(url, T("/")) == 0) {
      websRedirect(wp, T("home.asp"));
      return 1;
   }
   return 0;
}

/******************************************************************************/
/*
 * Default error handler.  The developer should insert code to handle
 * error messages in the desired manner.
 */

void defaultErrorHandler(int etype, char_t *msg)
{
#if 0
   write(1, msg, gstrlen(msg));
#endif
}

/******************************************************************************/
/*
 * Trace log. Customize this function to log trace output
 */

void defaultTraceHandler(int level, char_t *buf)
{
/*
 * The following code would write all trace regardless of level
 * to stdout.
 */
#if 0
   if (buf) {
      write(1, buf, gstrlen(buf));
   }
#endif
}

/******************************************************************************/
/*
 * Returns a pointer to an allocated qualified unique temporary file name.
 * This filename must eventually be deleted with bfree();
 */

char_t *websGetCgiCommName()
{
   char_t   *pname;

   pname = bstrdup(B_L, tmpnam( NULL ) );
   return pname;
}



/******************************************************************************/
/*
 * Launch the CGI process and return a handle to it.
 */

int websLaunchCgiProc(char_t *cgiPath, char_t **argp, char_t **envp,
                 char_t *stdIn, char_t *stdOut)
{
   int   pid, fdin, fdout, hstdin, hstdout, rc;

   fdin = fdout = -1; 
   if ((fdin = open(stdIn, O_RDWR | O_CREAT, 0666)) < 0 ||
      (fdout = open(stdOut, O_RDWR | O_CREAT, 0666)) < 0 )
      goto DONE;

/*	COMMENTED BLOCK 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩色在线观看| 欧美大度的电影原声| 国产精品夜夜嗨| 91福利社在线观看| 国产白丝网站精品污在线入口| 美女一区二区视频| 伦理电影国产精品| 久久99深爱久久99精品| 久久电影网站中文字幕| 国产精品白丝av| 99久久久国产精品免费蜜臀| 色婷婷久久一区二区三区麻豆| 色婷婷av一区二区三区gif| 欧美日韩久久一区| 日韩视频免费观看高清在线视频| 久久久精品一品道一区| 国产精品久久久久久久久久久免费看 | 99视频精品全部免费在线| 99国产精品久| 欧美人与性动xxxx| 精品久久久网站| 国产精品久久久久久久久免费桃花| 亚洲色图在线播放| 亚洲成人高清在线| 国产一区二区精品久久| 99久久久久久99| 欧美一二三在线| 国产精品美女www爽爽爽| 亚洲3atv精品一区二区三区| 国产麻豆成人精品| 欧美在线色视频| 国产日韩欧美精品在线| 亚洲国产精品久久人人爱| 精品一区二区三区av| 91精品福利在线| 日本一区二区三级电影在线观看| 亚洲一区av在线| 国产91露脸合集magnet| 欧美久久婷婷综合色| 国产精品免费观看视频| 青青青伊人色综合久久| 91国产视频在线观看| 国产日韩精品一区二区三区 | 精品一区二区三区久久久| hitomi一区二区三区精品| 91精品国产乱码| 亚洲综合免费观看高清完整版在线 | 美女被吸乳得到大胸91| 91毛片在线观看| 国产亚洲欧美中文| 午夜精品久久久久久久| 91一区二区在线| 久久看人人爽人人| 另类成人小视频在线| 精品视频123区在线观看| 中文字幕永久在线不卡| 国内精品国产成人国产三级粉色 | 国产精品视频线看| 久久精品国产网站| 欧美三级三级三级爽爽爽| 亚洲欧美在线另类| 国产成a人亚洲精品| 久久这里只有精品6| 麻豆极品一区二区三区| 欧美一区二区三区在线观看视频| 亚洲综合在线免费观看| 97超碰欧美中文字幕| 国产精品免费视频观看| 成人综合激情网| 国产亚洲制服色| 国产v日产∨综合v精品视频| 欧美大片免费久久精品三p| 日韩精品视频网| 日韩午夜在线观看视频| 久久成人免费日本黄色| 91精品国产综合久久久久| 日韩高清不卡一区二区三区| 欧美色图第一页| 日韩综合在线视频| 日韩午夜激情视频| 国产精品中文字幕日韩精品 | 亚洲国产日韩综合久久精品| 在线看日韩精品电影| 亚洲18女电影在线观看| 欧美一区二区三区在线视频| 久久99国产乱子伦精品免费| 久久久久久久性| 91视频国产观看| 亚洲福中文字幕伊人影院| 51精品视频一区二区三区| 精品一区二区三区在线播放视频| 2024国产精品| 91蜜桃在线观看| 婷婷成人综合网| 久久综合九色综合97婷婷| 成人国产亚洲欧美成人综合网| 亚洲欧美激情一区二区| 欧美精品在线观看播放| 国产真实乱子伦精品视频| 综合久久国产九一剧情麻豆| 欧美高清性hdvideosex| 粉嫩av亚洲一区二区图片| 亚洲激情第一区| 久久国产欧美日韩精品| 久久久综合精品| 欧美日韩一级大片网址| 国产精品一二一区| 亚洲一二三区视频在线观看| 亚洲精品一区二区三区精华液| av网站一区二区三区| 美女诱惑一区二区| 亚洲精品欧美激情| 国产亚洲欧美一区在线观看| 欧美日韩精品专区| 国产成人免费在线观看不卡| 天天综合色天天综合色h| 国产精品毛片久久久久久久| 欧美一区2区视频在线观看| 国产精品一区二区x88av| 亚洲成a人片综合在线| 欧美激情一区二区三区不卡| 91精品欧美综合在线观看最新| av爱爱亚洲一区| 国产精品综合网| 麻豆精品一二三| 婷婷久久综合九色综合伊人色| 亚洲欧洲成人精品av97| 国产欧美精品日韩区二区麻豆天美| 欧美日韩精品系列| 色综合久久综合| 成人亚洲精品久久久久软件| 老司机精品视频在线| 亚洲成在人线免费| 一区二区国产视频| 亚洲欧洲三级电影| 中文字幕乱码亚洲精品一区| 日韩精品一区二区三区在线观看| 欧美三片在线视频观看| 欧美视频一区二区三区在线观看| av成人免费在线观看| 高清不卡一区二区| 国产精品一级二级三级| 国产精一区二区三区| 国产成人午夜片在线观看高清观看| 日韩极品在线观看| 偷窥国产亚洲免费视频| 亚洲午夜激情网站| 午夜精品久久久久影视| 亚洲成人自拍偷拍| 午夜精品一区二区三区电影天堂 | 国产一区二区免费看| 国内成+人亚洲+欧美+综合在线| 婷婷亚洲久悠悠色悠在线播放 | 久久精品无码一区二区三区| 欧美哺乳videos| 久久久久久日产精品| 久久视频一区二区| 中文字幕国产精品一区二区| 亚洲色图第一区| 一区二区三区久久久| 亚洲高清不卡在线| 精品一区二区在线视频| 国产精品一区免费视频| 成人av网址在线观看| 色综合天天在线| 欧美人牲a欧美精品| 欧美一区二区免费视频| 精品剧情v国产在线观看在线| 国产亚洲va综合人人澡精品| 亚洲天堂精品视频| 丝袜美腿亚洲综合| 国产激情精品久久久第一区二区 | 国产三区在线成人av| 亚洲欧美综合在线精品| 五月婷婷激情综合网| 精品亚洲免费视频| 色综合久久99| 欧美电影免费观看高清完整版在| 国产欧美精品一区二区色综合| 亚洲精品中文字幕在线观看| 日韩国产欧美三级| 成人av网在线| 欧美一区二区啪啪| 亚洲欧美日韩一区| 老司机一区二区| 在线观看三级视频欧美| 国产亚洲一本大道中文在线| 亚洲国产精品综合小说图片区| 国产综合色精品一区二区三区| 色婷婷综合久久久中文字幕| 精品欧美乱码久久久久久1区2区| 1区2区3区国产精品| 日韩电影免费一区| av在线这里只有精品| 91精品国产综合久久小美女| 亚洲欧洲成人精品av97| 久久成人久久爱| 欧美三片在线视频观看| 中文字幕一区二区三区四区不卡 | 日本欧美一区二区|