2015-07-29 07:54:49 +02:00
|
|
|
//Copyright 2015 <>< Charles Lohr Under the MIT/x11 License, NewBSD License or
|
|
|
|
// ColorChord License. You Choose.
|
|
|
|
|
|
|
|
#ifndef _HTTP_H
|
|
|
|
#define _HTTP_H
|
|
|
|
|
|
|
|
#include "mem.h"
|
|
|
|
#include "c_types.h"
|
|
|
|
#include "user_interface.h"
|
|
|
|
#include "ets_sys.h"
|
|
|
|
#include "driver/uart.h"
|
|
|
|
#include "osapi.h"
|
|
|
|
#include "espconn.h"
|
|
|
|
#include "mfs.h"
|
|
|
|
#include "mystuff.h"
|
|
|
|
|
|
|
|
#define HTTP_SERVER_TIMEOUT 500
|
|
|
|
#define HTTP_CONNECTIONS 8
|
|
|
|
#define MAX_PATHLEN 80
|
|
|
|
|
|
|
|
//You must provide:
|
|
|
|
void ICACHE_FLASH_ATTR HTTPCustomStart( );
|
|
|
|
void ICACHE_FLASH_ATTR HTTPCustomCallback( ); //called when we can send more data
|
|
|
|
|
2015-07-30 08:45:02 +02:00
|
|
|
void ICACHE_FLASH_ATTR WebSocketData( int len );
|
2015-07-29 07:54:49 +02:00
|
|
|
void ICACHE_FLASH_ATTR WebSocketTick( );
|
|
|
|
void ICACHE_FLASH_ATTR WebSocketNew();
|
|
|
|
|
|
|
|
extern struct HTTPConnection * curhttp;
|
|
|
|
extern uint8 * curdata;
|
|
|
|
extern uint16 curlen;
|
2015-07-30 08:45:02 +02:00
|
|
|
extern uint8 wsmask[4];
|
|
|
|
extern uint8 wsmaskplace;
|
2015-07-29 07:54:49 +02:00
|
|
|
|
2015-07-30 08:45:02 +02:00
|
|
|
uint8_t WSPOPMASK();
|
|
|
|
#define HTTPPOP (*curdata++)
|
2015-07-29 07:54:49 +02:00
|
|
|
|
|
|
|
#define HTTP_STATE_NONE 0
|
|
|
|
#define HTTP_STATE_WAIT_METHOD 1
|
|
|
|
#define HTTP_STATE_WAIT_PATH 2
|
|
|
|
#define HTTP_STATE_WAIT_PROTO 3
|
|
|
|
|
|
|
|
#define HTTP_STATE_WAIT_FLAG 4
|
|
|
|
#define HTTP_STATE_WAIT_INFLAG 5
|
|
|
|
#define HTTP_STATE_DATA_XFER 7
|
|
|
|
#define HTTP_STATE_DATA_WEBSOCKET 8
|
|
|
|
|
|
|
|
#define HTTP_WAIT_CLOSE 15
|
|
|
|
|
|
|
|
|
|
|
|
struct HTTPConnection
|
|
|
|
{
|
|
|
|
uint8_t state:4;
|
|
|
|
uint8_t state_deets;
|
2015-07-30 08:45:02 +02:00
|
|
|
|
|
|
|
//Provides path, i.e. "/index.html" but, for websockets, the last
|
|
|
|
//32 bytes of the buffer are used for the websockets key.
|
|
|
|
uint8_t pathbuffer[MAX_PATHLEN];
|
2015-07-29 07:54:49 +02:00
|
|
|
uint8_t is_dynamic:1;
|
|
|
|
uint16_t timeout;
|
|
|
|
|
|
|
|
union data_t
|
|
|
|
{
|
|
|
|
struct MFSFileInfo filedescriptor;
|
|
|
|
struct UserData { uint16_t a, b, c; } user;
|
|
|
|
} data;
|
|
|
|
|
|
|
|
void * rcb;
|
2015-07-30 08:45:02 +02:00
|
|
|
void * rcbDat; //For websockets primarily.
|
2015-07-29 07:54:49 +02:00
|
|
|
|
|
|
|
uint32_t bytesleft;
|
|
|
|
uint32_t bytessofar;
|
|
|
|
|
|
|
|
uint8_t is404:1;
|
|
|
|
uint8_t isdone:1;
|
|
|
|
uint8_t isfirst:1;
|
2015-07-30 08:45:02 +02:00
|
|
|
uint8_t keep_alive:1;
|
2015-07-29 07:54:49 +02:00
|
|
|
uint8_t need_resend:1;
|
|
|
|
|
|
|
|
struct espconn * socket;
|
|
|
|
} HTTPConnections[HTTP_CONNECTIONS];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ICACHE_FLASH_ATTR httpserver_connectcb(void *arg);
|
|
|
|
|
|
|
|
void HTTPTick( uint8_t timedtick );
|
|
|
|
//you can call this a LOT if you want fast transfers, but be sure only to call it with a 1 at the update tick rate.
|
|
|
|
|
|
|
|
int ICACHE_FLASH_ATTR URLDecode( char * decodeinto, int maxlen, const char * buf );
|
|
|
|
|
|
|
|
void ICACHE_FLASH_ATTR WebSocketGotData( uint8_t c );
|
|
|
|
void ICACHE_FLASH_ATTR WebSocketTickInternal();
|
|
|
|
|
|
|
|
void ICACHE_FLASH_ATTR WebSocketSend( uint8_t * data, int size );
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|