mirror of
https://github.com/cesanta/mongoose.git
synced 2024-12-27 15:01:03 +08:00
CC3220 first steps
Achievement unlocked: CC3220 port prints a boot banner. Then locks up. Included in this PR is refactoring to pull out common parts to be shared with CC3200. PUBLISHED_FROM=5fb9d9a00bb9ce7f63dde20bc1876076b76d5257
This commit is contained in:
parent
09e4254718
commit
38e984a008
42
mongoose.c
42
mongoose.c
@ -13302,7 +13302,7 @@ const char *inet_ntop(int af, const void *src, char *dst, socklen_t size) {
|
||||
int res;
|
||||
struct in_addr *in = (struct in_addr *) src;
|
||||
if (af != AF_INET) {
|
||||
errno = EAFNOSUPPORT;
|
||||
errno = ENOTSUP;
|
||||
return NULL;
|
||||
}
|
||||
res = snprintf(dst, size, "%lu.%lu.%lu.%lu", SL_IPV4_BYTE(in->s_addr, 0),
|
||||
@ -13320,7 +13320,7 @@ int inet_pton(int af, const char *src, void *dst) {
|
||||
uint32_t a0, a1, a2, a3;
|
||||
uint8_t *db = (uint8_t *) dst;
|
||||
if (af != AF_INET) {
|
||||
errno = EAFNOSUPPORT;
|
||||
errno = ENOTSUP;
|
||||
return 0;
|
||||
}
|
||||
if (sscanf(src, "%lu.%lu.%lu.%lu", &a0, &a1, &a2, &a3) != 4) {
|
||||
@ -13442,12 +13442,16 @@ int sl_set_ssl_opts(struct mg_connection *nc);
|
||||
|
||||
void mg_set_non_blocking_mode(sock_t sock) {
|
||||
SlSockNonblocking_t opt;
|
||||
#if SL_MAJOR_VERSION_NUM < 2
|
||||
opt.NonblockingEnabled = 1;
|
||||
#else
|
||||
opt.NonBlockingEnabled = 1;
|
||||
#endif
|
||||
sl_SetSockOpt(sock, SL_SOL_SOCKET, SL_SO_NONBLOCKING, &opt, sizeof(opt));
|
||||
}
|
||||
|
||||
static int mg_is_error(int n) {
|
||||
return (n < 0 && n != SL_EALREADY && n != SL_EAGAIN);
|
||||
return (n < 0 && n != SL_ERROR_BSD_EALREADY && n != SL_ERROR_BSD_EAGAIN);
|
||||
}
|
||||
|
||||
void mg_sl_if_connect_tcp(struct mg_connection *nc,
|
||||
@ -13648,7 +13652,7 @@ void mg_mgr_handle_conn(struct mg_connection *nc, int fd_flags, double now) {
|
||||
fd_flags, nc->flags, (int) nc->recv_mbuf.len, (int) nc->send_mbuf.len));
|
||||
|
||||
if (nc->flags & MG_F_CONNECTING) {
|
||||
if (nc->flags & MG_F_UDP || nc->err != SL_EALREADY) {
|
||||
if (nc->flags & MG_F_UDP || nc->err != SL_ERROR_BSD_EALREADY) {
|
||||
mg_if_connect_cb(nc, nc->err);
|
||||
} else {
|
||||
/* In SimpleLink, to get status of non-blocking connect() we need to wait
|
||||
@ -13657,9 +13661,9 @@ void mg_mgr_handle_conn(struct mg_connection *nc, int fd_flags, double now) {
|
||||
if (fd_flags & _MG_F_FD_CAN_WRITE) {
|
||||
nc->err = sl_Connect(nc->sock, &nc->sa.sa, sizeof(nc->sa.sin));
|
||||
DBG(("%p conn res=%d", nc, nc->err));
|
||||
if (nc->err == SL_ESECSNOVERIFY ||
|
||||
if (nc->err == SL_ERROR_BSD_ESECSNOVERIFY ||
|
||||
/* TODO(rojer): Provide API to set the date for verification. */
|
||||
nc->err == SL_ESECDATEERROR) {
|
||||
nc->err == SL_ERROR_BSD_ESECDATEERROR) {
|
||||
nc->err = 0;
|
||||
}
|
||||
if (nc->flags & MG_F_SSL && nc->err == 0) {
|
||||
@ -13733,9 +13737,9 @@ time_t mg_sl_if_poll(struct mg_iface *iface, int timeout_ms) {
|
||||
sock_t max_fd = INVALID_SOCKET;
|
||||
int num_fds, num_ev = 0, num_timers = 0;
|
||||
|
||||
SL_FD_ZERO(&read_set);
|
||||
SL_FD_ZERO(&write_set);
|
||||
SL_FD_ZERO(&err_set);
|
||||
SL_SOCKET_FD_ZERO(&read_set);
|
||||
SL_SOCKET_FD_ZERO(&write_set);
|
||||
SL_SOCKET_FD_ZERO(&err_set);
|
||||
|
||||
/*
|
||||
* Note: it is ok to have connections with sock == INVALID_SOCKET in the list,
|
||||
@ -13751,14 +13755,14 @@ time_t mg_sl_if_poll(struct mg_iface *iface, int timeout_ms) {
|
||||
if (!(nc->flags & MG_F_WANT_WRITE) &&
|
||||
nc->recv_mbuf.len < nc->recv_mbuf_limit &&
|
||||
(!(nc->flags & MG_F_UDP) || nc->listener == NULL)) {
|
||||
SL_FD_SET(nc->sock, &read_set);
|
||||
SL_SOCKET_FD_SET(nc->sock, &read_set);
|
||||
if (max_fd == INVALID_SOCKET || nc->sock > max_fd) max_fd = nc->sock;
|
||||
}
|
||||
|
||||
if (((nc->flags & MG_F_CONNECTING) && !(nc->flags & MG_F_WANT_READ)) ||
|
||||
(nc->send_mbuf.len > 0 && !(nc->flags & MG_F_CONNECTING))) {
|
||||
SL_FD_SET(nc->sock, &write_set);
|
||||
SL_FD_SET(nc->sock, &err_set);
|
||||
SL_SOCKET_FD_SET(nc->sock, &write_set);
|
||||
SL_SOCKET_FD_SET(nc->sock, &err_set);
|
||||
if (max_fd == INVALID_SOCKET || nc->sock > max_fd) max_fd = nc->sock;
|
||||
}
|
||||
}
|
||||
@ -13799,12 +13803,13 @@ time_t mg_sl_if_poll(struct mg_iface *iface, int timeout_ms) {
|
||||
if (nc->sock != INVALID_SOCKET) {
|
||||
if (num_ev > 0) {
|
||||
fd_flags =
|
||||
(SL_FD_ISSET(nc->sock, &read_set) &&
|
||||
(SL_SOCKET_FD_ISSET(nc->sock, &read_set) &&
|
||||
(!(nc->flags & MG_F_UDP) || nc->listener == NULL)
|
||||
? _MG_F_FD_CAN_READ
|
||||
: 0) |
|
||||
(SL_FD_ISSET(nc->sock, &write_set) ? _MG_F_FD_CAN_WRITE : 0) |
|
||||
(SL_FD_ISSET(nc->sock, &err_set) ? _MG_F_FD_ERROR : 0);
|
||||
(SL_SOCKET_FD_ISSET(nc->sock, &write_set) ? _MG_F_FD_CAN_WRITE
|
||||
: 0) |
|
||||
(SL_SOCKET_FD_ISSET(nc->sock, &err_set) ? _MG_F_FD_ERROR : 0);
|
||||
}
|
||||
/* SimpleLink does not report UDP sockets as writable. */
|
||||
if (nc->flags & MG_F_UDP && nc->send_mbuf.len > 0) {
|
||||
@ -14087,13 +14092,14 @@ int sl_set_ssl_opts(struct mg_connection *nc) {
|
||||
}
|
||||
if (ctx->ssl_server_name != NULL) {
|
||||
err = sl_SetSockOpt(nc->sock, SL_SOL_SOCKET,
|
||||
SO_SECURE_DOMAIN_NAME_VERIFICATION,
|
||||
SL_SO_SECURE_DOMAIN_NAME_VERIFICATION,
|
||||
ctx->ssl_server_name, strlen(ctx->ssl_server_name));
|
||||
DBG(("DOMAIN_NAME_VERIFICATION %s -> %d", ctx->ssl_server_name, err));
|
||||
/* Domain name verificationw as added in a NWP service pack, older
|
||||
* versions return SL_ENOPROTOOPT. There isn't much we can do about it,
|
||||
* versions return SL_ERROR_BSD_ENOPROTOOPT. There isn't much we can do
|
||||
* about it,
|
||||
* so we ignore the error. */
|
||||
if (err != 0 && err != SL_ENOPROTOOPT) return err;
|
||||
if (err != 0 && err != SL_ERROR_BSD_ENOPROTOOPT) return err;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
27
mongoose.h
27
mongoose.h
@ -66,8 +66,10 @@
|
||||
|
||||
#if defined(TARGET_IS_MSP432P4XX) || defined(__MSP432P401R__)
|
||||
#define CS_PLATFORM CS_P_MSP432
|
||||
#elif defined(cc3200)
|
||||
#elif defined(cc3200) || defined(TARGET_IS_CC3200)
|
||||
#define CS_PLATFORM CS_P_CC3200
|
||||
#elif defined(cc3220) || defined(TARGET_IS_CC3220)
|
||||
#define CS_PLATFORM CS_P_CC3220
|
||||
#elif defined(__unix__) || defined(__APPLE__)
|
||||
#define CS_PLATFORM CS_P_UNIX
|
||||
#elif defined(WINCE)
|
||||
@ -1103,9 +1105,10 @@ int gettimeofday(struct timeval *tp, void *tzp);
|
||||
#ifndef CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_
|
||||
#define CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_
|
||||
|
||||
#if defined(MG_NET_IF) && MG_NET_IF == MG_NET_IF_SIMPLELINK
|
||||
|
||||
/* If simplelink.h is already included, all bets are off. */
|
||||
#if defined(MG_NET_IF) && MG_NET_IF == MG_NET_IF_SIMPLELINK && \
|
||||
!defined(__SIMPLELINK_H__)
|
||||
#if !defined(__SIMPLELINK_H__)
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
@ -1122,6 +1125,7 @@ int gettimeofday(struct timeval *tp, void *tzp);
|
||||
#if CS_PLATFORM == CS_P_CC3220
|
||||
#include <ti/drivers/net/wifi/porting/user.h>
|
||||
#include <ti/drivers/net/wifi/simplelink.h>
|
||||
#include <ti/drivers/net/wifi/sl_socket.h>
|
||||
#include <ti/drivers/net/wifi/netapp.h>
|
||||
#else
|
||||
/* We want to disable SL_INC_STD_BSD_API_NAMING, so we include user.h ourselves
|
||||
@ -1202,7 +1206,22 @@ int sl_set_ssl_opts(struct mg_connection *nc);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* MG_NET_IF == MG_NET_IF_SIMPLELINK && !defined(__SIMPLELINK_H__) */
|
||||
#endif /* !defined(__SIMPLELINK_H__) */
|
||||
|
||||
/* COmpatibility with older versions of SimpleLink */
|
||||
#if SL_MAJOR_VERSION_NUM < 2
|
||||
#define SL_ERROR_BSD_EAGAIN SL_EAGAIN
|
||||
#define SL_ERROR_BSD_EALREADY SL_EALREADY
|
||||
#define SL_ERROR_BSD_ENOPROTOOPT SL_ENOPROTOOPT
|
||||
#define SL_ERROR_BSD_ESECDATEERROR SL_ESECDATEERROR
|
||||
#define SL_ERROR_BSD_ESECSNOVERIFY SL_ESECSNOVERIFY
|
||||
#define SL_SOCKET_FD_ZERO SL_FD_ZERO
|
||||
#define SL_SOCKET_FD_SET SL_FD_SET
|
||||
#define SL_SOCKET_FD_ISSET SL_FD_ISSET
|
||||
#define SL_SO_SECURE_DOMAIN_NAME_VERIFICATION SO_SECURE_DOMAIN_NAME_VERIFICATION
|
||||
#endif
|
||||
|
||||
#endif /* MG_NET_IF == MG_NET_IF_SIMPLELINK */
|
||||
|
||||
#endif /* CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_ */
|
||||
#ifdef MG_MODULE_LINES
|
||||
|
Loading…
x
Reference in New Issue
Block a user