void EndSend( ) //DUMBCRAFT { if( bytespushed == 0 ) { } else { EndTCPWrite( lastconnection ); } }
static ICACHE_FLASH_ATTR void rawnow() { char mypack[128]; int len = FillRaw( mypack ); START_PACK; PushBlob( mypack, len ); EndTCPWrite( curhttp->socket ); curhttp->state = HTTP_WAIT_CLOSE; }
static ICACHE_FLASH_ATTR void echo() { char mydat[128]; int len = URLDecode( mydat, 128, curhttp->pathbuffer+8 ); START_PACK; PushBlob( mydat, len ); EndTCPWrite( curhttp->socket ); curhttp->state = HTTP_WAIT_CLOSE; }
static ICACHE_FLASH_ATTR void huge() { uint8_t i = 0; START_PACK; do { PushByte( 0 ); PushByte( i ); } while( ++i ); //Tricky: this will roll-over to 0, and thus only execute 256 times. EndTCPWrite( curhttp->socket ); }
void ICACHE_FLASH_ATTR WebSocketTickInternal() { switch( curhttp->state_deets ) { case 4: //Has key full HTTP header, etc. wants response. START_PACK; PushString( "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: " ); PushString( curhttp->pathbuffer + (MAX_PATHLEN-WS_RETKEY_SIZEM1) ); PushString( "\r\n\r\n" ); EndTCPWrite( curhttp->socket ); curhttp->state_deets = 5; curhttp->keep_alive = 0; break; case 5: WebSocketTick(); break; } }
void ICACHE_FLASH_ATTR HTTPHandleInternalCallback( ) { uint16_t i, bytestoread; if( curhttp->isdone ) { HTTPClose( ); return; } if( curhttp->is404 ) { START_PACK PushString("HTTP/1.1 404 Not Found\r\nConnection: close\r\n\r\nFile not found."); EndTCPWrite( curhttp->socket ); curhttp->isdone = 1; return; } if( curhttp->isfirst ) { char stto[10]; uint8_t slen = os_strlen( curhttp->pathbuffer ); const char * k; START_PACK; //TODO: Content Length? MIME-Type? PushString("HTTP/1.1 200 Ok\r\n"); if( curhttp->bytesleft < 0xfffffffe ) { PushString("Connection: "ISKEEPALIVE"\r\nContent-Length: "); Uint32To10Str( stto, curhttp->bytesleft ); PushBlob( stto, os_strlen( stto ) ); curhttp->keep_alive = 1; } else { PushString("Connection: close\r\n"); curhttp->keep_alive = 0; } PushString( "\r\nContent-Type: " ); //Content-Type? while( slen && ( curhttp->pathbuffer[--slen] != '.' ) ); k = &curhttp->pathbuffer[slen+1]; if( strcmp( k, "mp3" ) == 0 ) { PushString( "audio/mpeg3" ); } else if( strcmp( k, "gz" ) == 0 ) { PushString( "text/plain\r\nContent-Encoding: gzip\r\nCache-Control: public, max-age=3600" ); } else if( curhttp->bytesleft == 0xfffffffe ) { PushString( "text/plain" ); } else { PushString( "text/html" ); } PushString( "\r\n\r\n" ); EndTCPWrite( curhttp->socket ); curhttp->isfirst = 0; return; } START_PACK for( i = 0; i < 4 && curhttp->bytesleft; i++ ) { int bpt = curhttp->bytesleft; if( bpt > MFS_SECTOR ) bpt = MFS_SECTOR; curhttp->bytesleft = MFSReadSector( generic_ptr, &curhttp->data.filedescriptor ); generic_ptr += bpt; } EndTCPWrite( curhttp->socket ); if( !curhttp->bytesleft ) curhttp->isdone = 1; }