📄 http_server.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 + -