⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 http_server.i

📁 cs8900 c51应用
💻 I
字号:
#line 1 "..\http\http_server.c" /0    #error *** WARNING C318 IN LINE 67 OF ..\http\http_server.c: can't open file 'inet/datatypes.h' #error *** WARNING C318 IN LINE 68 OF ..\http\http_server.c: can't open file 'inet/globalvariables.h' #error *** WARNING C318 IN LINE 69 OF ..\http\http_server.c: can't open file 'inet/debug.h' #error *** WARNING C318 IN LINE 70 OF ..\http\http_server.c: can't open file 'inet/system.h' #error *** WARNING C318 IN LINE 71 OF ..\http\http_server.c: can't open file 'inet/tcp_ip.h' #error *** WARNING C318 IN LINE 72 OF ..\http\http_server.c: can't open file 'inet/http/http_server.h'   UINT8 https_enabled = 0;     struct http_server_state https[NO_OF_HTTP_SESSIONS];   INT8 https_init(void) { UINT8 i; INT8 soch;   for( i=0; i<NO_OF_HTTP_SESSIONS; i++) { https[i].state = HTTPS_STATE_FREE; https[i].ownersocket = 0; https[i].fstart = 0; https[i].fpoint = 0; https[i].flen  = 0; https[i].funacked = 0;  soch = 	tcp_getsocket(TCP_TYPE_SERVER, TCP_TOS_NORMAL, TCP_DEF_TOUT, https_eventlistener);  if(soch < 0) { DEBUGOUT("HTTP Server uncapable of getting socket\r\n"); RESET_SYSTEM();  }  https[i].ownersocket = soch;  kick_WD();  soch = tcp_listen(https[i].ownersocket, HTTPS_SERVERPORT);  if(soch < 0) { DEBUGOUT("HTTP Server uncapable of setting socket to listening mode\r\n"); RESET_SYSTEM();  }		   }   https_enabled  = 1;  return(i);	  }     void https_run (void) { UINT8 i; INT16 len; static UINT8 ses = 0;  if( https_enabled == 0) return;    for(i=0; i<NO_OF_HTTP_SESSIONS; i++) { kick_WD();  if(ses >= NO_OF_HTTP_SESSIONS) ses = 0;    if(tcp_getstate(https[ses].ownersocket) < TCP_STATE_LISTENING) { tcp_listen(https[ses].ownersocket, HTTPS_SERVERPORT); ses++; continue;	 }  if(https[ses].state != HTTPS_STATE_ACTIVE) { ses++; continue; }  if(https[ses].funacked != 0) { ses++; continue;		 }  if(https[ses].fstart == 0) { ses++; continue;		 }		    if( https[ses].fpoint >= https[ses].flen) { tcp_close(https[ses].ownersocket); tcp_abort(https[ses].ownersocket); https_deletesession(ses);  ses++;  return;			  }    len = https_loadbuffer(ses, &net_buf[TCP_APP_OFFSET], NETWORK_TX_BUFFER_SIZE - TCP_APP_OFFSET);  if(len<0) return;  len = tcp_send(https[ses].ownersocket, &net_buf[TCP_APP_OFFSET], NETWORK_TX_BUFFER_SIZE - TCP_APP_OFFSET, len);	  if(len<0) { tcp_close(https[ses].ownersocket); https_deletesession(ses);  ses++;  return;			  }  https[ses].funacked = len;     ses++;  return;		   }	     }     INT32 https_eventlistener (INT8 cbhandle, UINT8 event, UINT32 par1, UINT32 par2) reentrant {   INT16 	i; INT16 	session;  if( https_enabled == 0) return(-1);  if(cbhandle < 0) return(-1);	    session = https_searchsession(cbhandle);	  switch( event ) {  case TCP_EVENT_CONREQ:    if(session < 0) return(-1);     session = https_bindsession(cbhandle);  if(session < 0)			  return(-1);   return(1);  case TCP_EVENT_ABORT:  if(session < 0) return(1);  https_deletesession((UINT8)session);		  return(1);  case TCP_EVENT_CONNECTED:  if(session < 0) return(-1);  https_activatesession((UINT8)session);  return(1);  case TCP_EVENT_CLOSE:  if(session < 0) return(-1);  https_deletesession((UINT8)session);		  return(1);		   case TCP_EVENT_ACK:  if(session < 0) return(-1);  https[session].fpoint += https[session].funacked; https[session].funacked = 0;  return(1);  case TCP_EVENT_DATA:    if(session < 0) return(-1);  if(https[session].fstart == 0) { if(par1 <= 3) return(1);    if(RECEIVE_NETWORK_B() != 'G') return(1); if(RECEIVE_NETWORK_B() != 'E') return(1);	 if(RECEIVE_NETWORK_B() != 'T') return(1);			  par1 -= 3;    for(i=0; i<par1; i++) { if(RECEIVE_NETWORK_B() == '/') { i++; break; } }		  par1 -= i;    i = https_calculatehash(par1);	  if(i < 0) {  return(1); }	    i = https_findfile((UINT8)i, (UINT8)session);   return(1);		   }   return(1);   case TCP_EVENT_REGENERATE:  if(session < 0) return(-1);  if(https[session].state != HTTPS_STATE_ACTIVE) return(-1);  i = https_loadbuffer(session, &net_buf[TCP_APP_OFFSET], (UINT16)par1);  if(i<0) return(-1);  tcp_send(https[session].ownersocket, &net_buf[TCP_APP_OFFSET], NETWORK_TX_BUFFER_SIZE - TCP_APP_OFFSET, i);	  return(i);   default: return(-1); }	  }   void https_deletesession (UINT8 ses) { https[ses].state = HTTPS_STATE_FREE; https[ses].fstart = 0; https[ses].fpoint = 0; https[ses].flen  = 0; https[ses].funacked = 0;  }  INT16 https_searchsession (UINT8 soch) { UINT8 i;  for(i=0; i<NO_OF_HTTP_SESSIONS; i++) { if(https[i].ownersocket == soch) return(i);  }  return(-1);  }  INT16 https_bindsession (UINT8 soch) { UINT8 i;  for(i=0; i<NO_OF_HTTP_SESSIONS; i++) { if(https[i].ownersocket == soch) { if(https[i].state == HTTPS_STATE_FREE) { https[i].state = HTTPS_STATE_RESERVED; return(i); }			 }	  }   return(-1);  }  void https_activatesession (UINT8 ses) { https[ses].state = HTTPS_STATE_ACTIVE;  }  INT16 https_calculatehash (UINT32 len) { UINT8 hash=0; UINT8 ch; UINT8 i;     if(len > 60) len = 60;  for( i=0; i<len; i++) { ch = RECEIVE_NETWORK_B();  if( ch ==' ')	  break;  hash *= 37; hash += ch;  }  if(i==len) return(-1);    if(hash == 0)		  {   hash = 0x0B;  }    return( hash );  }  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -