Commit 5bd3df7a authored by Marko Mikulicic's avatar Marko Mikulicic Committed by Cesanta Bot

Fix mg_time on mbed and make DNS work around epoch

PUBLISHED_FROM=c1aeef9dc25baba794b3269b44441c5bafbca5a8
parent 5bbf24bf
...@@ -718,8 +718,12 @@ typedef int cs_dirent_dummy; ...@@ -718,8 +718,12 @@ typedef int cs_dirent_dummy;
#ifndef _WIN32 #ifndef _WIN32
#include <stddef.h> #include <stddef.h>
#if !defined(CS_PLATFORM) || \ /*
(CS_PLATFORM != CS_P_CC3200 && CS_PLATFORM != CS_P_MSP432) * There is no sys/time.h on ARMCC.
*/
#if !(defined(__ARMCC_VERSION) || defined(__ICCARM__)) && \
(!defined(CS_PLATFORM) || \
(CS_PLATFORM != CS_P_CC3200 && CS_PLATFORM != CS_P_MSP432))
#include <sys/time.h> #include <sys/time.h>
#endif #endif
#else #else
...@@ -9142,6 +9146,7 @@ static void mg_resolve_async_eh(struct mg_connection *nc, int ev, void *data) { ...@@ -9142,6 +9146,7 @@ static void mg_resolve_async_eh(struct mg_connection *nc, int ev, void *data) {
time_t now = (time_t) mg_time(); time_t now = (time_t) mg_time();
struct mg_resolve_async_request *req; struct mg_resolve_async_request *req;
struct mg_dns_message *msg; struct mg_dns_message *msg;
int first = 0;
DBG(("ev=%d user_data=%p", ev, nc->user_data)); DBG(("ev=%d user_data=%p", ev, nc->user_data));
...@@ -9153,13 +9158,16 @@ static void mg_resolve_async_eh(struct mg_connection *nc, int ev, void *data) { ...@@ -9153,13 +9158,16 @@ static void mg_resolve_async_eh(struct mg_connection *nc, int ev, void *data) {
switch (ev) { switch (ev) {
case MG_EV_CONNECT: case MG_EV_CONNECT:
/* don't depend on timer not being at epoch for sending out first req */
first = 1;
/* fallthrough */
case MG_EV_POLL: case MG_EV_POLL:
if (req->retries > req->max_retries) { if (req->retries > req->max_retries) {
req->err = MG_RESOLVE_EXCEEDED_RETRY_COUNT; req->err = MG_RESOLVE_EXCEEDED_RETRY_COUNT;
nc->flags |= MG_F_CLOSE_IMMEDIATELY; nc->flags |= MG_F_CLOSE_IMMEDIATELY;
break; break;
} }
if (now - req->last_time >= req->timeout) { if (first || now - req->last_time >= req->timeout) {
mg_send_dns_query(nc, req->name, req->query); mg_send_dns_query(nc, req->name, req->query);
req->last_time = now; req->last_time = now;
req->retries++; req->retries++;
......
...@@ -761,10 +761,55 @@ int _stat(const char *pathname, struct stat *st); ...@@ -761,10 +761,55 @@ int _stat(const char *pathname, struct stat *st);
/* Amalgamated: #include "mbed.h" */ /* Amalgamated: #include "mbed.h" */
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <inttypes.h>
#include <stdint.h>
#include <string.h>
#include <time.h>
#ifndef CS_ENABLE_STDIO #ifndef CS_ENABLE_STDIO
#define CS_ENABLE_STDIO 1 #define CS_ENABLE_STDIO 1
#endif #endif
/*
* mbed can be compiled with the ARM compiler which
* just doesn't come with a gettimeofday shim
* because it's a BSD API and ARM targets embedded
* non-unix platforms.
*/
#if defined(__ARMCC_VERSION) || defined(__ICCARM__)
#define _TIMEVAL_DEFINED
#define gettimeofday _gettimeofday
/* copied from GCC on ARM; for some reason useconds are signed */
typedef long suseconds_t; /* microseconds (signed) */
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* and microseconds */
};
#endif
#if MG_NET_IF == MG_NET_IF_SIMPLELINK
typedef int sock_t;
#define INVALID_SOCKET (-1)
#define to64(x) strtoll(x, NULL, 10)
#define INT64_FMT PRId64
#define INT64_X_FMT PRIx64
#define SIZE_T_FMT "u"
#define SOMAXCONN 8
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 /* MG_NET_IF == MG_NET_IF_SIMPLELINK */
#endif /* CS_PLATFORM == CS_P_MBED */ #endif /* CS_PLATFORM == CS_P_MBED */
#endif /* CS_COMMON_PLATFORMS_PLATFORM_MBED_H_ */ #endif /* CS_COMMON_PLATFORMS_PLATFORM_MBED_H_ */
#ifdef MG_MODULE_LINES #ifdef MG_MODULE_LINES
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment