* wificfg: remove the AP WEP mode option The WEP mode does not appear to be implement in the sdk for the AP mode, and defaults to open when WEP is requested which is probably not intended. Remove the WEP option from the wifi config interface. * lwip: enable mdns dns queries. * wificfg: support mDNS on the softAP interface.
135 lines
4.2 KiB
C
135 lines
4.2 KiB
C
/*
|
|
* WiFi configuration via a simple web server.
|
|
*
|
|
* Copyright (C) 2016 OurAirQuality.org
|
|
*
|
|
* Licensed under the Apache License, Version 2.0, January 2004 (the
|
|
* "License"); you may not use this file except in compliance with the
|
|
* License. You may obtain a copy of the License at
|
|
* http://www.apache.org/licenses/
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
|
|
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
* DEALINGS WITH THE SOFTWARE.
|
|
*
|
|
*/
|
|
|
|
#ifndef __WIFICFG_H__
|
|
#define __WIFICFG_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
* Printf format used to initialize a default AP ssid. It is passed the last
|
|
* three bytes of the mac address. This may be NULL to not default the ssid,
|
|
* but the AP network will not run without a ssid.
|
|
*/
|
|
extern char *wificfg_default_ssid;
|
|
|
|
/*
|
|
* A default password for the AP interface. This may be NULL to not default the
|
|
* password, but the AP network will not run without a password. The minimum
|
|
* length is 8 characters.
|
|
*/
|
|
extern char *wificfg_default_password;
|
|
|
|
/*
|
|
* A default hostname printf format string. This may be NULL to not default the
|
|
* hostname.
|
|
*/
|
|
extern char *wificfg_default_hostname;
|
|
|
|
/*
|
|
* The web server parses the http method string in these enums. The ANY method
|
|
* is only use for dispatch. The method enum is passed to the handler functions.
|
|
*/
|
|
typedef enum {
|
|
HTTP_METHOD_GET,
|
|
HTTP_METHOD_POST,
|
|
HTTP_METHOD_HEAD,
|
|
HTTP_METHOD_OTHER,
|
|
HTTP_METHOD_ANY,
|
|
} wificfg_method;
|
|
|
|
/*
|
|
* The web server parses these content-type header values. This is passed to the
|
|
* dispatch function.
|
|
*/
|
|
typedef enum {
|
|
HTTP_CONTENT_TYPE_WWW_FORM_URLENCODED,
|
|
HTTP_CONTENT_TYPE_OTHER
|
|
} wificfg_content_type;
|
|
|
|
/*
|
|
* The function signature for the http server request handler functions.
|
|
*
|
|
* The buffer, with its length, is usable by the handler.
|
|
*/
|
|
typedef int (* wificfg_handler)(int s, wificfg_method method,
|
|
uint32_t content_length,
|
|
wificfg_content_type content_type,
|
|
char *buf, size_t len);
|
|
|
|
typedef struct {
|
|
const char *path;
|
|
wificfg_method method;
|
|
wificfg_handler handler;
|
|
bool secure;
|
|
} wificfg_dispatch;
|
|
|
|
|
|
/*
|
|
* Start the Wifi Configuration http server task. The IP port number
|
|
* and a path dispatch list are needed. The dispatch list can not be
|
|
* stack allocated as it is passed to another task.
|
|
*/
|
|
void wificfg_init(uint32_t port, const wificfg_dispatch *dispatch);
|
|
|
|
/*
|
|
* Support for reading a form name or value from the socket. The name or value
|
|
* is truncated to the buffer length. The number of characters read is limited
|
|
* to the remainder which is updated. The 'valp' flag is set if a value follows.
|
|
*/
|
|
ssize_t wificfg_form_name_value(int s, bool *valp, size_t *rem, char *buf, size_t len);
|
|
|
|
/* Support for form url-encoding decoder. */
|
|
void wificfg_form_url_decode(char *string);
|
|
|
|
/* Support for html-escaping of form values. */
|
|
void wificfg_html_escape(char *string, char *buf, size_t len);
|
|
|
|
/* Support for writing a string in a response. */
|
|
ssize_t wificfg_write_string(int s, const char *str);
|
|
|
|
/* Support for writing a string in a response, with chunk transfer encoding.
|
|
* An optional buffer may be supplied to use to construct a chunk with the
|
|
* header and trailer, reducing the number of write() calls, and the str may be
|
|
* at the start of this buffer.
|
|
*/
|
|
ssize_t wificfg_write_string_chunk(int s, const char *str, char *buf, size_t len);
|
|
|
|
/* Write a chunk transfer encoding end marker. */
|
|
ssize_t wificfg_write_chunk_end(int s);
|
|
|
|
/* Write a html title meta data, using the hostname or AP SSI. */
|
|
int wificfg_write_html_title(int s, char *buf, size_t len, const char *str);
|
|
|
|
/* Callback to notify the wificfg logic that a station connection has been
|
|
* successfully established. It might use this to disable the AP interface after
|
|
* a restart.
|
|
*/
|
|
void wificfg_got_sta_connect(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // __WIFICFG_H__
|