mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-12-19 06:41:42 +08:00
1. Add libssc.a, simple serial console lib. 2. Add libspiffs.a, SPI file system. 3. Add libwps.a to support WPS. 4. Add libespconn.a, Espressif connection lib. 5. Add libespnow.a to support Espressif ESP-NOW. 6. Add libmesh.a, Espressif mesh. 7. Add libnopoll.a, websocket. 8. Add make_lib.sh in "third_party" folder. 9. Add modem-sleep & light-sleep supported. 10. Update libcirom.a to support float IO. 11. Update gen_misc.sh & gen_misc.bat. 12. Update header files, add comments in doxygen style. 13. Update libsmartconfig.a to version 2.5.2. 14. Update libssl.a. 15. Updates driver (PWM/UART/GPIO/SPI/Hardware timer). 16. Update open source codes of third_party. 17. Modify "ld" files, "dram0 len" should be 0x18000 in RTOS SDK. 18. Remove header files in extra_include, which are already in compile folder. 19. Other APIs sync from non-OS SDK, more details in documentation "20B-ESP8266__RTOS_SDK_API Reference". 20. Other optimization to make the SDK more stable.
387 lines
8.8 KiB
C
387 lines
8.8 KiB
C
/*
|
|
* LibNoPoll: A websocket library
|
|
* Copyright (C) 2013 Advanced Software Production Line, S.L.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public License
|
|
* as published by the Free Software Foundation; either version 2.1
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this program; if not, write to the Free
|
|
* Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
* 02111-1307 USA
|
|
*
|
|
* You may find a copy of the license under this software is released
|
|
* at COPYING file. This is LGPL software: you are welcome to develop
|
|
* proprietary applications using this library without any royalty or
|
|
* fee but returning back any change, improvement or addition in the
|
|
* form of source code, project image, documentation patches, etc.
|
|
*
|
|
* For commercial support on build Websocket enabled solutions
|
|
* contact us:
|
|
*
|
|
* Postal address:
|
|
* Advanced Software Production Line, S.L.
|
|
* Edificio Alius A, Oficina 102,
|
|
* C/ Antonio Suarez Nº 10,
|
|
* Alcalá de Henares 28802 Madrid
|
|
* Spain
|
|
*
|
|
* Email address:
|
|
* info@aspl.es - http://www.aspl.es/nopoll
|
|
*/
|
|
#ifndef __NOPOLL_PRIVATE_H__
|
|
#define __NOPOLL_PRIVATE_H__
|
|
|
|
#include "ssl/ssl_compat-1.0.h"
|
|
#include <nopoll_handlers.h>
|
|
|
|
typedef struct _noPollCertificate {
|
|
|
|
char * serverName;
|
|
char * certificateFile;
|
|
char * privateKey;
|
|
char * optionalChainFile;
|
|
|
|
} noPollCertificate;
|
|
|
|
struct _noPollCtx {
|
|
/**
|
|
* @internal Controls logs output..
|
|
*/
|
|
/* context reference counting */
|
|
int refs;
|
|
|
|
/* console log */
|
|
nopoll_bool not_executed;
|
|
nopoll_bool debug_enabled;
|
|
|
|
/* colored log */
|
|
nopoll_bool not_executed_color;
|
|
nopoll_bool debug_color_enabled;
|
|
|
|
nopoll_bool keep_looping;
|
|
|
|
/**
|
|
* @internal noPollConn connection timeout.
|
|
*/
|
|
long conn_connect_std_timeout;
|
|
|
|
/**
|
|
* @internal Default listener connection backlog
|
|
*/
|
|
int backlog;
|
|
|
|
/**
|
|
* @internal Currently selected io engine on this context.
|
|
*/
|
|
noPollIoEngine * io_engine;
|
|
|
|
/**
|
|
* @internal Connection array list and its length.
|
|
*/
|
|
int conn_id;
|
|
noPollConn ** conn_list;
|
|
int conn_length;
|
|
/**
|
|
* @internal Number of connections registered on this context.
|
|
*/
|
|
int conn_num;
|
|
|
|
/**
|
|
* @internal Reference to defined on accept handling.
|
|
*/
|
|
noPollActionHandler on_accept;
|
|
noPollPtr on_accept_data;
|
|
|
|
/**
|
|
* @internal Reference to defined on ready handling.
|
|
*/
|
|
noPollActionHandler on_ready;
|
|
noPollPtr on_ready_data;
|
|
|
|
/**
|
|
* @internal Reference to defined on open handling.
|
|
*/
|
|
noPollActionHandler on_open;
|
|
noPollPtr on_open_data;
|
|
|
|
/**
|
|
* @internal Reference to the defined on message handling.
|
|
*/
|
|
noPollOnMessageHandler on_msg;
|
|
noPollPtr on_msg_data;
|
|
|
|
/**
|
|
* @internal Basic fake support for protocol version, by
|
|
* default: 13, due to RFC6455 standard
|
|
*/
|
|
int protocol_version;
|
|
|
|
/**
|
|
* @internal Certificates added..
|
|
*/
|
|
noPollCertificate * certificates;
|
|
int certificates_length;
|
|
|
|
/* mutex */
|
|
noPollPtr ref_mutex;
|
|
|
|
/* log handling */
|
|
noPollLogHandler log_handler;
|
|
noPollPtr log_user_data;
|
|
|
|
/* context creator */
|
|
noPollSslContextCreator context_creator;
|
|
noPollPtr context_creator_data;
|
|
|
|
/* SSL postcheck */
|
|
noPollSslPostCheck post_ssl_check;
|
|
noPollPtr post_ssl_check_data;
|
|
};
|
|
|
|
struct _noPollConn {
|
|
/**
|
|
* @internal Connection id.
|
|
*/
|
|
int id;
|
|
|
|
/**
|
|
* @internal The context associated to this connection.
|
|
*/
|
|
noPollCtx * ctx;
|
|
|
|
/**
|
|
* @internal This is the actual socket handler associated to
|
|
* the noPollConn object.
|
|
*/
|
|
NOPOLL_SOCKET session;
|
|
/**
|
|
* @internal Flag to signal this connection has finished its
|
|
* handshake.
|
|
*/
|
|
nopoll_bool handshake_ok;
|
|
|
|
/**
|
|
* @internal Current connection receive function.
|
|
*/
|
|
noPollRead receive;
|
|
|
|
/**
|
|
* @internal Current connection receive function.
|
|
*/
|
|
noPollRead sends;
|
|
|
|
/**
|
|
* @internal The connection role.
|
|
*/
|
|
noPollRole role;
|
|
|
|
/**
|
|
* @internal Conection host ip location (connecting or listening).
|
|
*/
|
|
char * host;
|
|
|
|
/**
|
|
* @internal Connection port location (connecting or
|
|
* listening).
|
|
*/
|
|
char * port;
|
|
|
|
/**
|
|
* @internal Host name requested on the connection.
|
|
*/
|
|
char * host_name;
|
|
/**
|
|
* @internal Origin requested on the connection.
|
|
*/
|
|
char * origin;
|
|
|
|
/**
|
|
* @internal reference to the get url.
|
|
*/
|
|
char * get_url;
|
|
|
|
/**
|
|
* @internal Reference to protocols requested to be opened on
|
|
* this connection.
|
|
*/
|
|
char * protocols;
|
|
/* @internal reference to the protocol that was replied by the server */
|
|
char * accepted_protocol;
|
|
|
|
/* close status and reason */
|
|
int peer_close_status;
|
|
char * peer_close_reason;
|
|
|
|
/**
|
|
* @internal Reference to the defined on message handling.
|
|
*/
|
|
noPollOnMessageHandler on_msg;
|
|
noPollPtr on_msg_data;
|
|
|
|
/**
|
|
* @internal Reference to defined on ready handling.
|
|
*/
|
|
noPollActionHandler on_ready;
|
|
noPollPtr on_ready_data;
|
|
|
|
/**
|
|
* @internal Reference to the defined on close handling.
|
|
*/
|
|
noPollOnCloseHandler on_close;
|
|
noPollPtr on_close_data;
|
|
|
|
/* reference to the handshake */
|
|
noPollHandShake * handshake;
|
|
|
|
/* reference to a buffer with pending content */
|
|
char * pending_line;
|
|
|
|
/**
|
|
* @internal connection reference counting.
|
|
*/
|
|
int refs;
|
|
|
|
/**
|
|
* @internal References to pending content to be read
|
|
*/
|
|
noPollMsg * pending_msg;
|
|
long int pending_diff;
|
|
long int pending_desp;
|
|
|
|
/**
|
|
* @internal Flag to handle TLS support upon connection
|
|
* reception.
|
|
*/
|
|
nopoll_bool tls_on;
|
|
/**
|
|
* @internal Flag that indicates that the provided session
|
|
* must call to accept the TLS session before proceeding.
|
|
*/
|
|
nopoll_bool pending_ssl_accept;
|
|
|
|
/* SSL support */
|
|
SSL_CTX * ssl_ctx;
|
|
SSL * ssl;
|
|
|
|
/* certificates */
|
|
char * certificate;
|
|
char * private_key;
|
|
char * chain_certificate;
|
|
|
|
/* pending buffer */
|
|
char pending_buf[100];
|
|
int pending_buf_bytes;
|
|
|
|
/**
|
|
* @internal Support for an user defined pointer.
|
|
*/
|
|
noPollPtr hook;
|
|
|
|
/**
|
|
* @internal Mutex
|
|
*/
|
|
noPollPtr ref_mutex;
|
|
|
|
/**
|
|
* @internal Variable to track pending bytes from previous
|
|
* read that must be completed.
|
|
*/
|
|
noPollMsg * previous_msg;
|
|
/* allows to track if previous message was a fragment to flag
|
|
* next message, even having FIN enabled as a fragment. */
|
|
nopoll_bool previous_was_fragment;
|
|
|
|
char * pending_write;
|
|
int pending_write_bytes;
|
|
|
|
/**
|
|
* @internal Internal reference to the connection options.
|
|
*/
|
|
noPollConnOpts * opts;
|
|
|
|
/**
|
|
* @internal Reference to the listener in the case this is a
|
|
* connection that was created due to a listener running.
|
|
*/
|
|
noPollConn * listener;
|
|
};
|
|
|
|
struct _noPollIoEngine {
|
|
noPollPtr io_object;
|
|
noPollCtx * ctx;
|
|
noPollIoMechCreate create;
|
|
noPollIoMechDestroy destroy;
|
|
noPollIoMechClear clear;
|
|
noPollIoMechWait wait;
|
|
noPollIoMechAddTo addto;
|
|
noPollIoMechIsSet isset;
|
|
};
|
|
|
|
struct _noPollMsg {
|
|
nopoll_bool has_fin;
|
|
short op_code;
|
|
nopoll_bool is_masked;
|
|
|
|
noPollPtr payload;
|
|
long int payload_size;
|
|
|
|
int refs;
|
|
noPollPtr ref_mutex;
|
|
|
|
char mask[4];
|
|
int remain_bytes;
|
|
|
|
nopoll_bool is_fragment;
|
|
int unmask_desp;
|
|
};
|
|
|
|
struct _noPollHandshake {
|
|
/**
|
|
* @internal Reference to the to the GET url HTTP/1.1 header
|
|
* part.
|
|
*/
|
|
nopoll_bool upgrade_websocket;
|
|
nopoll_bool connection_upgrade;
|
|
nopoll_bool received_101;
|
|
char * websocket_key;
|
|
char * websocket_version;
|
|
char * websocket_accept;
|
|
char * expected_accept;
|
|
|
|
/* reference to cookie header */
|
|
char * cookie;
|
|
};
|
|
|
|
struct _noPollConnOpts {
|
|
/* If the connection options object should be reused across calls */
|
|
nopoll_bool reuse;
|
|
|
|
/* mutex */
|
|
noPollPtr mutex;
|
|
int refs;
|
|
|
|
/* What ssl protocol should be used */
|
|
noPollSslProtocol ssl_protocol;
|
|
|
|
/* SSL options */
|
|
char * certificate;
|
|
char * private_key;
|
|
char * chain_certificate;
|
|
char * ca_certificate;
|
|
|
|
nopoll_bool disable_ssl_verify;
|
|
|
|
/* cookie support */
|
|
char * cookie;
|
|
};
|
|
|
|
#endif
|