Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
M
mongoose
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
mongoose
Commits
00a23ee3
Commit
00a23ee3
authored
Feb 13, 2016
by
rojer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Good bye osdep.h, you won't be missed
PUBLISHED_FROM=f08a8324dfde5f9e22eee0e5e4dbae0e3d45cb3f
parent
51ad50a6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
419 additions
and
143 deletions
+419
-143
Makefile
examples/ESP8266_RTOS/Makefile
+1
-1
Makefile
examples/ESP8266_RTOS/user/Makefile
+6
-3
esp_libc.c
examples/ESP8266_RTOS/user/esp_libc.c
+6
-1
user_main.c
examples/ESP8266_RTOS/user/user_main.c
+7
-2
mongoose.c
mongoose.c
+28
-22
mongoose.h
mongoose.h
+371
-114
No files found.
examples/ESP8266_RTOS/Makefile
View file @
00a23ee3
...
...
@@ -55,7 +55,7 @@ LINKFLAGS_eagle.app.v6 = \
-u
call_user_start
\
-Wl,-static
\
-Wl,--start-group
\
-lc
irom
\
-lc
\
-lgcc
\
-lhal
\
-lphy
\
...
...
examples/ESP8266_RTOS/user/Makefile
View file @
00a23ee3
...
...
@@ -23,11 +23,14 @@ endif
# makefile at its root level - these are then overridden
# for a subtree within the makefile rooted therein
#
DEFINES
+=
-DMG_DISABLE_DAV
-DMG_DISABLE_SYNC_RESOLVER
-DMG_DISABLE_CGI
\
-DMG_DISABLE_SOCKETPAIR
-DMG_DISABLE_DIRECTORY_LISTING
\
DEFINES
+=
-DMG_LOCALS
\
-DMG_NO_BSD_SOCKETS
\
-DMG_DISABLE_FILESYSTEM
\
-DMG_DISABLE_STDIO
\
-DMG_MAX_HTTP_HEADERS
=
20
-DMG_MAX_HTTP_REQUEST_SIZE
=
1024
\
-DMG_MAX_PATH
=
40
-DMG_MAX_HTTP_SEND_IOBUF
=
1024
\
-DMG_ESP8266
-DRTOS_SDK
-DMG_LWIP
-DRTOS_SDK
-DMG_LWIP
-DLWIP_TIMEVAL_PRIVATE
=
0
\
-DMG_INTERNAL
=
#############################################################
# Recursion Magic - Don't touch this!!
...
...
examples/ESP8266_RTOS/user/esp_libc.c
View file @
00a23ee3
...
...
@@ -16,6 +16,7 @@
#include "esp_common.h"
/* Makes fprintf(stdout) and stderr work. */
/*
_ssize_t _write_r(struct _reent *r, int fd, void *buf, size_t len) {
if (fd == 1 || fd == 2) {
size_t i;
...
...
@@ -26,6 +27,7 @@ _ssize_t _write_r(struct _reent *r, int fd, void *buf, size_t len) {
}
return -1;
}
*/
/*
* You'll need to implement _open_r and friends if you want file operations. See
...
...
@@ -42,7 +44,6 @@ void abort(void) {
}
void
_exit
(
int
status
)
{
printf
(
"_exit(%d)
\n
"
,
status
);
abort
();
}
...
...
@@ -52,3 +53,7 @@ int _gettimeofday_r(struct _reent *r, struct timeval *tp, void *tzp) {
tp
->
tv_usec
=
time
%
1000000
;
return
0
;
}
long
int
random
(
void
)
{
return
os_random
();
}
examples/ESP8266_RTOS/user/user_main.c
View file @
00a23ee3
...
...
@@ -37,6 +37,7 @@ void ev_handler(struct mg_connection *nc, int ev, void *p) {
case
MG_EV_HTTP_REQUEST
:
{
char
addr
[
32
];
struct
http_message
*
hm
=
(
struct
http_message
*
)
p
;
(
void
)
hm
;
mg_sock_addr_to_str
(
&
nc
->
sa
,
addr
,
sizeof
(
addr
),
MG_SOCK_STRINGIFY_IP
|
MG_SOCK_STRINGIFY_PORT
);
LOG
(
LL_INFO
,
...
...
@@ -100,9 +101,13 @@ xTaskHandle s_mg_task_handle;
void
user_init
(
void
)
{
uart_div_modify
(
0
,
UART_CLK_FREQ
/
115200
);
setvbuf
(
stdout
,
NULL
,
_IONBF
,
0
);
setvbuf
(
stderr
,
NULL
,
_IONBF
,
0
);
//
setvbuf(stdout, NULL, _IONBF, 0);
//
setvbuf(stderr, NULL, _IONBF, 0);
xTaskCreate
(
mg_task
,
(
const
signed
char
*
)
"mongoose"
,
MG_TASK_STACK_SIZE
,
NULL
,
MG_TASK_PRIORITY
,
&
s_mg_task_handle
);
}
void
call_user_start
(
void
)
{
user_init
();
}
mongoose.c
View file @
00a23ee3
...
...
@@ -76,8 +76,7 @@ MG_INTERNAL int mg_parse_address(const char *str, union socket_address *sa,
int
*
proto
,
char
*
host
,
size_t
host_len
);
MG_INTERNAL
void
mg_call
(
struct
mg_connection
*
nc
,
mg_event_handler_t
ev_handler
,
int
ev
,
void
*
ev_data
);
MG_INTERNAL
void
mg_forward
(
struct
mg_connection
*
from
,
struct
mg_connection
*
to
);
void
mg_forward
(
struct
mg_connection
*
from
,
struct
mg_connection
*
to
);
MG_INTERNAL
void
mg_add_conn
(
struct
mg_mgr
*
mgr
,
struct
mg_connection
*
c
);
MG_INTERNAL
void
mg_remove_conn
(
struct
mg_connection
*
c
);
MG_INTERNAL
size_t
recv_avail_size
(
struct
mg_connection
*
conn
,
size_t
max
);
...
...
@@ -251,6 +250,7 @@ void cs_base64_encode(const unsigned char *src, int src_len, char *dst) {
#undef BASE64_OUT
#undef BASE64_FLUSH
#ifndef CS_DISABLE_STDIO
#define BASE64_OUT(ch) \
do { \
fprintf(f, "%c", (ch)); \
...
...
@@ -265,6 +265,7 @@ void cs_fprint_base64(FILE *f, const unsigned char *src, int src_len) {
#undef BASE64_OUT
#undef BASE64_FLUSH
#endif
/* !CS_DISABLE_STDIO */
/* Convert one byte of encoded base64 input stream to 6-bit chunk */
static
unsigned
char
from_b64
(
unsigned
char
ch
)
{
...
...
@@ -346,6 +347,7 @@ enum cs_log_level s_cs_log_level =
LL_ERROR
;
#endif
#ifndef CS_DISABLE_STDIO
void
cs_log_printf
(
const
char
*
fmt
,
...)
{
va_list
ap
;
va_start
(
ap
,
fmt
);
...
...
@@ -354,6 +356,7 @@ void cs_log_printf(const char *fmt, ...) {
fputc
(
'\n'
,
stderr
);
fflush
(
stderr
);
}
#endif
/* !CS_DISABLE_STDIO */
void
cs_log_set_level
(
enum
cs_log_level
level
)
{
s_cs_log_level
=
level
;
...
...
@@ -368,7 +371,6 @@ void cs_log_set_level(enum cs_log_level level) {
#ifndef EXCLUDE_COMMON
/* Amalgamated: #include "common/osdep.h" */
/* Amalgamated: #include "common/cs_dirent.h" */
/*
...
...
@@ -1630,7 +1632,7 @@ void cs_hmac_sha1(const unsigned char *key, size_t keylen,
#ifndef EXCLUDE_COMMON
/* Amalgamated: #include "common/
osdep
.h" */
/* Amalgamated: #include "common/
platform
.h" */
/* Amalgamated: #include "common/str_util.h" */
#ifdef _MG_PROVIDE_STRNLEN
...
...
@@ -2038,7 +2040,7 @@ void mg_mgr_init(struct mg_mgr *m, void *user_data) {
WSADATA
data
;
WSAStartup
(
MAKEWORD
(
2
,
2
),
&
data
);
}
#elif
!defined(AVR_LIBC) && !defined(MG_ESP8266
)
#elif
defined(__unix__
)
/* Ignore SIGPIPE signal, so if client cancels the request, it
* won't kill the whole process. */
signal
(
SIGPIPE
,
SIG_IGN
);
...
...
@@ -3984,7 +3986,9 @@ int mg_normalize_uri_path(const struct mg_str *in, struct mg_str *out) {
enum
http_proto_data_type
{
DATA_NONE
,
DATA_FILE
,
DATA_PUT
,
DATA_CGI
};
struct
proto_data_http
{
FILE
*
fp
;
/* Opened file. */
#ifndef MG_DISABLE_FILESYSTEM
FILE
*
fp
;
/* Opened file. */
#endif
int64_t
cl
;
/* Content-Length. How many bytes to send. */
int64_t
sent
;
/* How many bytes have been already sent. */
int64_t
body_len
;
/* How many bytes of chunked body was reassembled. */
...
...
@@ -4521,17 +4525,18 @@ static void ws_handshake(struct mg_connection *nc, const struct mg_str *key) {
static
void
free_http_proto_data
(
struct
mg_connection
*
nc
)
{
struct
proto_data_http
*
dp
=
(
struct
proto_data_http
*
)
nc
->
proto_data
;
if
(
dp
!=
NULL
)
{
if
(
dp
->
fp
!=
NULL
)
{
fclose
(
dp
->
fp
);
}
if
(
dp
->
cgi_nc
!=
NULL
)
{
dp
->
cgi_nc
->
flags
|=
MG_F_CLOSE_IMMEDIATELY
;
}
#ifndef MG_DISABLE_FILESYSTEM
if
(
dp
->
fp
!=
NULL
)
fclose
(
dp
->
fp
);
#endif
#ifndef MG_DISABLE_CGI
if
(
dp
->
cgi_nc
!=
NULL
)
dp
->
cgi_nc
->
flags
|=
MG_F_CLOSE_IMMEDIATELY
;
#endif
MG_FREE
(
dp
);
nc
->
proto_data
=
NULL
;
}
}
#ifndef MG_DISABLE_FILESYSTEM
static
void
transfer_file_data
(
struct
mg_connection
*
nc
)
{
struct
proto_data_http
*
dp
=
(
struct
proto_data_http
*
)
nc
->
proto_data
;
char
buf
[
MG_MAX_HTTP_SEND_IOBUF
];
...
...
@@ -4583,6 +4588,7 @@ static void transfer_file_data(struct mg_connection *nc) {
}
}
}
#endif
/* MG_DISABLE_FILESYSTEM */
/*
* Parse chunked-encoded buffer. Return 0 if the buffer is not encoded, or
...
...
@@ -4689,7 +4695,7 @@ MG_INTERNAL size_t mg_handle_chunked(struct mg_connection *nc,
* If a big structure is declared in a big function, lx106 gcc will make it
* even bigger (round up to 4k, from 700 bytes of actual size).
*/
#ifdef
MG_ESP8266
#ifdef
__xtensa__
static
void
http_handler2
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
,
struct
http_message
*
hm
)
__attribute__
((
noinline
));
...
...
@@ -4700,11 +4706,11 @@ void http_handler(struct mg_connection *nc, int ev, void *ev_data) {
static
void
http_handler2
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
,
struct
http_message
*
hm
)
{
#else
#else
/* !__XTENSA__ */
void
http_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
ev_data
)
{
struct
http_message
shm
;
struct
http_message
*
hm
=
&
shm
;
#endif
#endif
/* __XTENSA__ */
struct
mbuf
*
io
=
&
nc
->
recv_mbuf
;
int
req_len
;
const
int
is_req
=
(
nc
->
listener
!=
NULL
);
...
...
@@ -4725,9 +4731,11 @@ void http_handler(struct mg_connection *nc, int ev, void *ev_data) {
free_http_proto_data
(
nc
);
}
#ifndef MG_DISABLE_FILESYSTEM
if
(
nc
->
proto_data
!=
NULL
)
{
transfer_file_data
(
nc
);
}
#endif
mg_call
(
nc
,
nc
->
handler
,
ev
,
ev_data
);
...
...
@@ -6273,10 +6281,6 @@ static pid_t start_process(const char *interp, const char *cmd, const char *env,
}
to_wchar
(
cmdline
,
wcmd
,
ARRAY_SIZE
(
wcmd
));
#if 0
printf("[%ls] [%ls]\n", full_dir, wcmd);
#endif
if
(
CreateProcessW
(
NULL
,
wcmd
,
NULL
,
NULL
,
TRUE
,
CREATE_NEW_PROCESS_GROUP
,
(
void
*
)
env
,
full_dir
,
&
si
,
&
pi
)
!=
0
)
{
spawn_stdio_thread
(
sock
,
a
[
1
],
push_to_stdin
);
...
...
@@ -7113,7 +7117,7 @@ void mg_sock_addr_to_str(const union socket_address *sa, char *buf, size_t len,
if
(
inet_ntop
(
sa
->
sa
.
sa_family
,
addr
,
start
,
capacity
)
==
NULL
)
{
*
buf
=
'\0'
;
}
#elif defined(_WIN32) || defined(MG_
ESP8266
)
#elif defined(_WIN32) || defined(MG_
LWIP
)
/* Only Windoze Vista (and newer) have inet_ntop() */
strncpy
(
buf
,
inet_ntoa
(
sa
->
sin
.
sin_addr
),
len
);
#else
...
...
@@ -7199,9 +7203,10 @@ int mg_avprintf(char **buf, size_t size, const char *fmt, va_list ap) {
return
len
;
}
#if !defined(
NO_LIBC) && !defined(
MG_DISABLE_HEXDUMP)
#if !defined(MG_DISABLE_HEXDUMP)
void
mg_hexdump_connection
(
struct
mg_connection
*
nc
,
const
char
*
path
,
const
void
*
buf
,
int
num_bytes
,
int
ev
)
{
#if !defined(NO_LIBC) && !defined(MG_DISABLE_STDIO)
FILE
*
fp
=
NULL
;
char
*
hexbuf
,
src
[
60
],
dst
[
60
];
int
buf_size
=
num_bytes
*
5
+
100
;
...
...
@@ -7236,6 +7241,7 @@ void mg_hexdump_connection(struct mg_connection *nc, const char *path,
MG_FREE
(
hexbuf
);
}
if
(
fp
!=
stdin
&&
fp
!=
stdout
)
fclose
(
fp
);
#endif
}
#endif
...
...
@@ -7554,7 +7560,7 @@ static int parse_mqtt(struct mbuf *io, struct mg_mqtt_message *mm) {
var_len
=
2
;
break
;
default:
printf
(
"TODO: UNHANDLED COMMAND %d
\n
"
,
cmd
);
/* Unhandled command */
break
;
}
...
...
mongoose.h
View file @
00a23ee3
...
...
@@ -20,6 +20,9 @@
* license, as set out in <https://www.cesanta.com/license>.
*/
#ifndef _MG_COMMON_H_
#define _MG_COMMON_H_
#define MG_VERSION "6.2"
/* Local tweaks, applied before any of Mongoose's own headers. */
...
...
@@ -30,53 +33,89 @@
#if defined(MG_ENABLE_DEBUG) && !defined(CS_ENABLE_DEBUG)
#define CS_ENABLE_DEBUG
#endif
#if defined(MG_DISABLE_STDIO) && !defined(CS_DISABLE_STDIO)
#define CS_DISABLE_STDIO
#endif
/* All of the below features depend on filesystem access, disable them. */
#ifdef MG_DISABLE_FILESYSTEM
#ifndef MG_DISABLE_DAV
#define MG_DISABLE_DAV
#endif
#ifndef MG_DISABLE_CGI
#define MG_DISABLE_CGI
#endif
#ifndef MG_DISABLE_DIRECTORY_LISTING
#define MG_DISABLE_DIRECTORY_LISTING
#endif
#ifndef MG_DISABLE_DAV
#define MG_DISABLE_DAV
#endif
#endif
/* MG_DISABLE_FILESYSTEM */
#ifdef MG_NO_BSD_SOCKETS
#ifndef MG_DISABLE_SYNC_RESOLVER
#define MG_DISABLE_SYNC_RESOLVER
#endif
#ifndef MG_DISABLE_SOCKETPAIR
#define MG_DISABLE_SOCKETPAIR
#endif
#endif
/* MG_NO_BSD_SOCKETS */
#endif
/* _MG_COMMON_H_ */
#ifndef _CS_PLATFORM_H_
#define _CS_PLATFORM_H_
/*
*
Copyright (c) 2015 Cesanta Software Limited
*
All rights reserved
*
For the "custom" platform, includes and dependencies can be
*
provided through mg_locals.h.
*/
#define CS_P_CUSTOM 0
#define CS_P_UNIX 1
#define CS_P_WINDOWS 2
#define CS_P_ESP_LWIP 3
#define CS_P_CC3200 4
#ifndef OSDEP_HEADER_INCLUDED
#
define OSDEP_HEADER_INCLUDED
/* If not specified explicitly, we guess platform by defines. */
#
ifndef CS_PLATFORM
#if !defined(MG_DISABLE_FILESYSTEM) && defined(AVR_NOFS)
#define MG_DISABLE_FILESYSTEM
#if defined(__unix__) || defined(__APPLE__)
#define CS_PLATFORM CS_P_UNIX
#elif defined(_WIN32)
#define CS_PLATFORM CS_P_WINDOWS
#endif
#undef UNICODE
/* Use ANSI WinAPI functions */
#undef _UNICODE
/* Use multibyte encoding on Windows */
#define _MBCS
/* Use multibyte encoding on Windows */
#define _INTEGRAL_MAX_BITS 64
/* Enable _stati64() on Windows */
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
/* Disable deprecation warning in VS2005+ */
#endif
#undef WIN32_LEAN_AND_MEAN
/* Let windows.h always include winsock2.h */
#undef _XOPEN_SOURCE
#define _XOPEN_SOURCE 600
/* For flockfile() on Linux */
#define __STDC_FORMAT_MACROS
/* <inttypes.h> wants this for C++ */
#define __STDC_LIMIT_MACROS
/* C++ wants that for INT64_MAX */
#ifndef _LARGEFILE_SOURCE
#define _LARGEFILE_SOURCE
/* Enable fseeko() and ftello() functions */
#ifndef CS_PLATFORM
#error "CS_PLATFORM is not specified and we couldn't guess it."
#endif
#define _FILE_OFFSET_BITS 64
/* Enable 64-bit file offsets */
#if !(defined(AVR_LIBC) || defined(PICOTCP))
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>
#include <signal.h>
#endif
#endif
/* !defined(CS_PLATFORM) */
/* Common stuff */
#ifdef __GNUC__
#define NORETURN __attribute__((noreturn))
#define UNUSED __attribute__((unused))
#define NOINLINE __attribute__((noinline))
#define WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
#define NORETURN
#define UNUSED
#define NOINLINE
#define WARN_UNUSED_RESULT
#endif
/* __GNUC__ */
#ifndef BYTE_ORDER
#define LITTLE_ENDIAN 0x41424344
#define BIG_ENDIAN 0x44434241
#define PDP_ENDIAN 0x42414443
/* TODO(lsm): fix for big-endian machines. 'ABCD' is not portable */
/*#define BYTE_ORDER 'ABCD'*/
#define BYTE_ORDER LITTLE_ENDIAN
#ifndef ARRAY_SIZE
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
#endif
#endif
/* _CS_PLATFORM_H_ */
#ifndef _CS_PLATFORM_WINDOWS_H_
#define _CS_PLATFORM_WINDOWS_H_
#if CS_PLATFORM == CS_P_WINDOWS
/*
* MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015)
* MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
...
...
@@ -94,34 +133,15 @@
#pragma warning(disable : 4204)
/* missing c99 support */
#endif
#ifdef PICOTCP
#define time(x) PICO_TIME()
#ifndef SOMAXCONN
#define SOMAXCONN (16)
#endif
#ifdef _POSIX_VERSION
#define signal(...)
#endif
#endif
#include <assert.h>
#include <
ctype
.h>
#include <
limits
.h>
#include <s
tdarg
.h>
#include <
errno
.h>
#include <
fcntl
.h>
#include <s
ignal
.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef va_copy
#ifdef __va_copy
#define va_copy __va_copy
#else
#define va_copy(x, y) (x) = (y)
#endif
#endif
#include <sys/stat.h>
#ifdef _WIN32
#define random() rand()
#ifdef _MSC_VER
#pragma comment(lib, "ws2_32.lib")
/* Linking with winsock library */
...
...
@@ -203,93 +223,321 @@ DIR *opendir(const char *name);
int
closedir
(
DIR
*
dir
);
struct
dirent
*
readdir
(
DIR
*
dir
);
#elif
/* not _WIN32 */
defined(MG_CC3200)
#ifndef va_copy
#ifdef __va_copy
#define va_copy __va_copy
#else
#define va_copy(x, y) (x) = (y)
#endif
#endif
#include <fcntl.h>
#include <unistd.h>
#include <cc3200_libc.h>
#include <cc3200_socket.h>
#endif
/* CS_PLATFORM == CS_P_WINDOWS */
#endif
/* _CS_PLATFORM_WINDOWS_H_ */
#ifndef _CS_PLATFORM_UNIX_H_
#define _CS_PLATFORM_UNIX_H_
#if CS_PLATFORM == CS_P_UNIX
#elif
/* not CC3200 */
defined(MG_LWIP)
#ifndef _XOPEN_SOURCE
#define _XOPEN_SOURCE 600
#endif
#include <lwip/sockets.h>
#include <lwip/netdb.h>
#include <lwip/dns.h>
/* <inttypes.h> wants this for C++ */
#ifndef __STDC_FORMAT_MACROS
#define __STDC_FORMAT_MACROS
#endif
#if defined(MG_ESP8266) && defined(RTOS_SDK)
#i
nclude <esp_libc.h>
#define
random() os_random()
/* C++ wants that for INT64_MAX */
#i
fndef __STDC_LIMIT_MACROS
#define
__STDC_LIMIT_MACROS
#endif
/* TODO(alashkin): check if zero is OK */
#define SOMAXCONN 0
#include <stdlib.h>
/* Enable fseeko() and ftello() functions */
#ifndef _LARGEFILE_SOURCE
#define _LARGEFILE_SOURCE
#endif
#elif
/* not ESP8266 RTOS */
!defined(NO_LIBC) && !defined(NO_BSD_SOCKETS)
/* Enable 64-bit file offsets */
#ifndef _FILE_OFFSET_BITS
#define _FILE_OFFSET_BITS 64
#endif
#include <arpa/inet.h>
#include <assert.h>
#include <ctype.h>
#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
#include <math.h>
#include <netdb.h>
#include <pthread.h>
#include <unistd.h>
#include <arpa/inet.h>
/* For inet_pton() when MG_ENABLE_IPV6 is defined */
#include <netinet/in.h>
#include <pthread.h>
#include <signal.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/select.h>
#endif
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#ifndef LWIP_PROVIDE_ERRNO
#include <errno.h>
typedef
int
sock_t
;
#define INVALID_SOCKET (-1)
#define SIZE_T_FMT "zu"
typedef
struct
stat
cs_stat_t
;
#define DIRSEP '/'
#define to64(x) strtoll(x, NULL, 10)
#define INT64_FMT PRId64
#define INT64_X_FMT PRIx64
#define __cdecl
#ifndef va_copy
#ifdef __va_copy
#define va_copy __va_copy
#else
#define va_copy(x, y) (x) = (y)
#endif
#endif
#ifndef _WIN32
#define closesocket(x) close(x)
#endif
/* CS_PLATFORM == CS_P_UNIX */
#endif
/* _CS_PLATFORM_UNIX_H_ */
#ifndef _CS_PLATFORM_ESP_LWIP_H_
#define _CS_PLATFORM_ESP_LWIP_H_
#if CS_PLATFORM == CS_P_ESP_LWIP
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
#include <stdarg.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/time.h>
#ifndef AVR_LIBC
#ifndef MG_ESP8266
#define closesocket(x) close(x)
#endif
#ifndef __cdecl
#define __cdecl
#include <lwip/err.h>
#include <lwip/ip_addr.h>
#include <lwip/inet.h>
#include <lwip/netdb.h>
#include <lwip/dns.h>
#define LWIP_TIMEVAL_PRIVATE 0
#if LWIP_SOCKET
#include <lwip/sockets.h>
#define SOMAXCONN 10
#else
/* We really need the definitions from sockets.h. */
#undef LWIP_SOCKET
#define LWIP_SOCKET 1
#include <lwip/sockets.h>
#undef LWIP_SOCKET
#define LWIP_SOCKET 0
#endif
typedef
int
sock_t
;
#define INVALID_SOCKET (-1)
#define INT64_FMT PRId64
#define INT64_X_FMT PRIx64
#if defined(ESP8266) || defined(MG_ESP8266) || defined(MG_CC3200)
#define SIZE_T_FMT "u"
#else
#define SIZE_T_FMT "zu"
#endif
typedef
struct
stat
cs_stat_t
;
#define DIRSEP '/'
#define to64(x) strtoll(x, NULL, 10)
#define INT64_FMT PRId64
#define INT64_X_FMT PRIx64
#define __cdecl
#endif
/* CS_PLATFORM == CS_P_ESP_LWIP */
#endif
/* _CS_PLATFORM_ESP_LWIP_H_ */
/*
* Copyright (c) 2014-2016 Cesanta Software Limited
* All rights reserved
*/
#ifndef _CS_PLATFORM_CC3200_H_
#define _CS_PLATFORM_CC3200_H_
#if CS_PLATFORM == CS_P_CC3200
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
#include <stdint.h>
#include <time.h>
#include <simplelink.h>
#define SOMAXCONN 8
/* Undefine a bunch of conflicting symbols so we can use SDK defs verbatim. */
#undef FD_CLR
#undef FD_SET
#undef FD_ZERO
#undef FD_ISSET
#undef FD_SETSIZE
#undef fd_set
#undef EACCES
#undef EBADF
#undef EAGAIN
#undef EWOULDBLOCK
#undef ENOMEM
#undef EFAULT
#undef EINVAL
#undef EDESTADDRREQ
#undef EPROTOTYPE
#undef ENOPROTOOPT
#undef EPROTONOSUPPORT
#undef EOPNOTSUPP
#undef EAFNOSUPPORT
#undef EAFNOSUPPORT
#undef EADDRINUSE
#undef EADDRNOTAVAIL
#undef ENETUNREACH
#undef ENOBUFS
#undef EISCONN
#undef ENOTCONN
#undef ETIMEDOUT
#undef ECONNREFUSED
/* The following comes from $SDK/simplelink/include/socket.h */
/* clang-format off */
#define FD_SETSIZE SL_FD_SETSIZE
#define SOCK_STREAM SL_SOCK_STREAM
#define SOCK_DGRAM SL_SOCK_DGRAM
#define SOCK_RAW SL_SOCK_RAW
#define IPPROTO_TCP SL_IPPROTO_TCP
#define IPPROTO_UDP SL_IPPROTO_UDP
#define IPPROTO_RAW SL_IPPROTO_RAW
#define AF_INET SL_AF_INET
#define AF_INET6 SL_AF_INET6
#define AF_INET6_EUI_48 SL_AF_INET6_EUI_48
#define AF_RF SL_AF_RF
#define AF_PACKET SL_AF_PACKET
#define PF_INET SL_PF_INET
#define PF_INET6 SL_PF_INET6
#define INADDR_ANY SL_INADDR_ANY
#define ERROR SL_SOC_ERROR
#define INEXE SL_INEXE
#define EBADF SL_EBADF
#define ENSOCK SL_ENSOCK
#define EAGAIN SL_EAGAIN
#define EWOULDBLOCK SL_EWOULDBLOCK
#define ENOMEM SL_ENOMEM
#define EACCES SL_EACCES
#define EFAULT SL_EFAULT
#define EINVAL SL_EINVAL
#define EDESTADDRREQ SL_EDESTADDRREQ
#define EPROTOTYPE SL_EPROTOTYPE
#define ENOPROTOOPT SL_ENOPROTOOPT
#define EPROTONOSUPPORT SL_EPROTONOSUPPORT
#define ESOCKTNOSUPPORT SL_ESOCKTNOSUPPORT
#define EOPNOTSUPP SL_EOPNOTSUPP
#define EAFNOSUPPORT SL_EAFNOSUPPORT
#define EADDRINUSE SL_EADDRINUSE
#define EADDRNOTAVAIL SL_EADDRNOTAVAIL
#define ENETUNREACH SL_ENETUNREACH
#define ENOBUFS SL_ENOBUFS
#define EOBUFF SL_EOBUFF
#define EISCONN SL_EISCONN
#define ENOTCONN SL_ENOTCONN
#define ETIMEDOUT SL_ETIMEDOUT
#define ECONNREFUSED SL_ECONNREFUSED
#define SOL_SOCKET SL_SOL_SOCKET
#define IPPROTO_IP SL_IPPROTO_IP
#define SO_KEEPALIVE SL_SO_KEEPALIVE
#define SO_RCVTIMEO SL_SO_RCVTIMEO
#define SO_NONBLOCKING SL_SO_NONBLOCKING
#define IP_MULTICAST_IF SL_IP_MULTICAST_IF
#define IP_MULTICAST_TTL SL_IP_MULTICAST_TTL
#define IP_ADD_MEMBERSHIP SL_IP_ADD_MEMBERSHIP
#define IP_DROP_MEMBERSHIP SL_IP_DROP_MEMBERSHIP
#define socklen_t SlSocklen_t
#define timeval SlTimeval_t
#define sockaddr SlSockAddr_t
#define in6_addr SlIn6Addr_t
#define sockaddr_in6 SlSockAddrIn6_t
#define in_addr SlInAddr_t
#define sockaddr_in SlSockAddrIn_t
#define MSG_DONTWAIT SL_MSG_DONTWAIT
#define FD_SET SL_FD_SET
#define FD_CLR SL_FD_CLR
#define FD_ISSET SL_FD_ISSET
#define FD_ZERO SL_FD_ZERO
#define fd_set SlFdSet_t
#define socket sl_Socket
#define close sl_Close
#define accept sl_Accept
#define bind sl_Bind
#define listen sl_Listen
#define connect sl_Connect
#define select sl_Select
#define setsockopt sl_SetSockOpt
#define getsockopt sl_GetSockOpt
#define recv sl_Recv
#define recvfrom sl_RecvFrom
#define write sl_Write
#define send sl_Send
#define sendto sl_SendTo
/* rojer: gethostbyname() and sl_NetAppDnsGetHostByName are NOT compatible. */
/* #define gethostbyname sl_NetAppDnsGetHostByName */
#define htonl sl_Htonl
#define ntohl sl_Ntohl
#define htons sl_Htons
#define ntohs sl_Ntohs
/* clang-format on */
typedef
int
sock_t
;
#define INVALID_SOCKET (-1)
#define SIZE_T_FMT "u"
typedef
struct
stat
cs_stat_t
;
#define DIRSEP '/'
#endif
/* !AVR_LIBC */
#define to64(x) strtoll(x, NULL, 10)
#define INT64_FMT PRId64
#define INT64_X_FMT PRIx64
#define __cdecl
#ifdef __APPLE__
int64_t
strtoll
(
const
char
*
str
,
char
**
endptr
,
int
base
);
#endif
#endif
/* !_WIN32 */
#define closesocket(x) close(x)
#ifndef ARRAY_SIZE
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
#endif
/* Some functions we implement for Mongoose. */
#ifdef __GNUC__
#define NORETURN __attribute__((noreturn))
#define UNUSED __attribute__((unused))
#define NOINLINE __attribute__((noinline))
#define WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
#define NORETURN
#define UNUSED
#define NOINLINE
#define WARN_UNUSED_RESULT
#endif
const
char
*
inet_ntop
(
int
af
,
const
void
*
src
,
char
*
dst
,
socklen_t
size
);
char
*
inet_ntoa
(
struct
in_addr
in
);
int
inet_pton
(
int
af
,
const
char
*
src
,
void
*
dst
);
#endif
/* OSDEP_HEADER_INCLUDED */
void
cc3200_set_non_blocking_mode
(
int
fd
);
struct
hostent
{
char
*
h_name
;
/* official name of host */
char
**
h_aliases
;
/* alias list */
int
h_addrtype
;
/* host address type */
int
h_length
;
/* length of address */
char
**
h_addr_list
;
/* list of addresses */
};
struct
hostent
*
gethostbyname
(
const
char
*
name
);
struct
timeval
;
int
gettimeofday
(
struct
timeval
*
t
,
void
*
tz
);
long
int
random
(
void
);
#endif
/* CS_PLATFORM == CS_P_CC3200 */
#endif
/* _CS_PLATFORM_CC3200_H_ */
/*
* Copyright (c) 2014-2016 Cesanta Software Limited
* All rights reserved
...
...
@@ -313,6 +561,8 @@ enum cs_log_level {
extern
enum
cs_log_level
s_cs_log_level
;
void
cs_log_set_level
(
enum
cs_log_level
level
);
#ifndef CS_DISABLE_STDIO
void
cs_log_printf
(
const
char
*
fmt
,
...);
#define LOG(l, x) \
...
...
@@ -335,6 +585,13 @@ void cs_log_printf(const char *fmt, ...);
#endif
#else
/* CS_DISABLE_STDIO */
#define LOG(l, x)
#define DBG(x)
#endif
#endif
/* _CS_DBG_H_ */
/*
* Copyright (c) 2014-2016 Cesanta Software Limited
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment