mirror of https://github.com/jeelabs/esp-link.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
3.9 KiB
125 lines
3.9 KiB
|
|
|
|
/*
|
|
* ----------------------------------------------------------------------------
|
|
* "THE BEER-WARE LICENSE" (Revision 42):
|
|
* Jeroen Domburg <jeroen@spritesmods.com> wrote this file. As long as you retain
|
|
* this notice you can do whatever you want with this stuff. If we meet some day,
|
|
* and you think this stuff is worth it, you can buy me a beer in return.
|
|
* ----------------------------------------------------------------------------
|
|
*/
|
|
|
|
|
|
#include <esp8266.h>
|
|
#include "httpd.h"
|
|
#include "io.h"
|
|
#include "httpdespfs.h"
|
|
#include "cgi.h"
|
|
#include "cgiwifi.h"
|
|
#include "cgiflash.h"
|
|
#include "stdout.h"
|
|
#include "auth.h"
|
|
#include "espfs.h"
|
|
#include "captdns.h"
|
|
#include "webpages-espfs.h"
|
|
|
|
//The example can print out the heap use every 3 seconds. You can use this to catch memory leaks.
|
|
//#define SHOW_HEAP_USE
|
|
|
|
//The example can act as a captive portal, that is, if someone connects their phone to the access
|
|
//point, it will automatically
|
|
#define CAPTIVE_PORTAL
|
|
|
|
//Function that tells the authentication system what users/passwords live on the system.
|
|
//This is disabled in the default build; if you want to try it, enable the authBasic line in
|
|
//the builtInUrls below.
|
|
int myPassFn(HttpdConnData *connData, int no, char *user, int userLen, char *pass, int passLen) {
|
|
if (no==0) {
|
|
os_strcpy(user, "admin");
|
|
os_strcpy(pass, "s3cr3t");
|
|
return 1;
|
|
//Add more users this way. Check against incrementing no for each user added.
|
|
// } else if (no==1) {
|
|
// os_strcpy(user, "user1");
|
|
// os_strcpy(pass, "something");
|
|
// return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*
|
|
This is the main url->function dispatching data struct.
|
|
In short, it's a struct with various URLs plus their handlers. The handlers can
|
|
be 'standard' CGI functions you wrote, or 'special' CGIs requiring an argument.
|
|
They can also be auth-functions. An asterisk will match any url starting with
|
|
everything before the asterisks; "*" matches everything. The list will be
|
|
handled top-down, so make sure to put more specific rules above the more
|
|
general ones. Authorization things (like authBasic) act as a 'barrier' and
|
|
should be placed above the URLs they protect.
|
|
*/
|
|
HttpdBuiltInUrl builtInUrls[]={
|
|
#ifdef CAPTIVE_PORTAL
|
|
{"*", cgiCheckHostname, "esp8266.local"},
|
|
#endif
|
|
{"/", cgiRedirect, "/index.tpl"},
|
|
{"/flash.bin", cgiReadFlash, NULL},
|
|
{"/led.tpl", cgiEspFsTemplate, tplLed},
|
|
{"/index.tpl", cgiEspFsTemplate, tplCounter},
|
|
{"/led.cgi", cgiLed, NULL},
|
|
{"/updateweb.cgi", cgiUploadEspfs, NULL},
|
|
|
|
//Routines to make the /wifi URL and everything beneath it work.
|
|
|
|
//Enable the line below to protect the WiFi configuration with an username/password combo.
|
|
// {"/wifi/*", authBasic, myPassFn},
|
|
|
|
{"/wifi", cgiRedirect, "/wifi/wifi.tpl"},
|
|
{"/wifi/", cgiRedirect, "/wifi/wifi.tpl"},
|
|
{"/wifi/wifiscan.cgi", cgiWiFiScan, NULL},
|
|
{"/wifi/wifi.tpl", cgiEspFsTemplate, tplWlan},
|
|
{"/wifi/connect.cgi", cgiWiFiConnect, NULL},
|
|
{"/wifi/connstatus.cgi", cgiWiFiConnStatus, NULL},
|
|
{"/wifi/setmode.cgi", cgiWiFiSetMode, NULL},
|
|
|
|
{"*", cgiEspFsHook, NULL}, //Catch-all cgi function for the filesystem
|
|
{NULL, NULL, NULL}
|
|
};
|
|
|
|
|
|
#ifdef SHOW_HEAP_USE
|
|
static ETSTimer prHeapTimer;
|
|
|
|
static void ICACHE_FLASH_ATTR prHeapTimerCb(void *arg) {
|
|
os_printf("Heap: %ld\n", (unsigned long)system_get_free_heap_size());
|
|
}
|
|
#endif
|
|
|
|
//Main routine. Initialize stdout, the I/O, filesystem and the webserver and we're done.
|
|
void user_init(void) {
|
|
stdoutInit();
|
|
ioInit();
|
|
|
|
#ifdef CAPTIVE_PORTAL
|
|
captdnsInit();
|
|
#endif
|
|
|
|
// 0x40200000 is the base address for spi flash memory mapping, ESPFS_POS is the position
|
|
// where image is written in flash that is defined in Makefile.
|
|
#ifdef ESPFS_POS
|
|
espFsInit((void*)(0x40200000 + ESPFS_POS));
|
|
#else
|
|
espFsInit((void*)(webpages_espfs_start));
|
|
#endif
|
|
httpdInit(builtInUrls, 80);
|
|
#ifdef SHOW_HEAP_USE
|
|
os_timer_disarm(&prHeapTimer);
|
|
os_timer_setfn(&prHeapTimer, prHeapTimerCb, NULL);
|
|
os_timer_arm(&prHeapTimer, 3000, 1);
|
|
#endif
|
|
os_printf("\nReady\n");
|
|
}
|
|
|
|
void user_rf_pre_init() {
|
|
//Not needed, but some SDK versions want this defined.
|
|
}
|
|
|