Merge pull request #71 from mogenson/fix-get-current-time
This commit is contained in:
@@ -106,33 +106,54 @@ static esp_err_t fetch_time_via_proxy(char *out, size_t out_size)
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Event handler that captures the Date response header */
|
||||||
|
typedef struct {
|
||||||
|
char date_val[64];
|
||||||
|
} time_header_ctx_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HTTP event handler that captures the "Date" response header.
|
||||||
|
*
|
||||||
|
* esp_http_client_get_header() only accesses request headers, so response
|
||||||
|
* headers must be captured here during HTTP_EVENT_ON_HEADER events.
|
||||||
|
* The Date value is copied into the time_header_ctx_t provided via user_data.
|
||||||
|
*/
|
||||||
|
static esp_err_t time_http_event_handler(esp_http_client_event_t *evt)
|
||||||
|
{
|
||||||
|
time_header_ctx_t *ctx = evt->user_data;
|
||||||
|
if (evt->event_id == HTTP_EVENT_ON_HEADER) {
|
||||||
|
if (strcasecmp(evt->header_key, "Date") == 0 && ctx) {
|
||||||
|
strncpy(ctx->date_val, evt->header_value, sizeof(ctx->date_val) - 1);
|
||||||
|
ctx->date_val[sizeof(ctx->date_val) - 1] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/* Fetch time via direct HTTPS */
|
/* Fetch time via direct HTTPS */
|
||||||
static esp_err_t fetch_time_direct(char *out, size_t out_size)
|
static esp_err_t fetch_time_direct(char *out, size_t out_size)
|
||||||
{
|
{
|
||||||
|
time_header_ctx_t ctx = {0};
|
||||||
|
|
||||||
esp_http_client_config_t config = {
|
esp_http_client_config_t config = {
|
||||||
.url = "https://api.telegram.org/",
|
.url = "https://api.telegram.org/",
|
||||||
.method = HTTP_METHOD_HEAD,
|
.method = HTTP_METHOD_HEAD,
|
||||||
.timeout_ms = 10000,
|
.timeout_ms = 10000,
|
||||||
.crt_bundle_attach = esp_crt_bundle_attach,
|
.crt_bundle_attach = esp_crt_bundle_attach,
|
||||||
|
.event_handler = time_http_event_handler,
|
||||||
|
.user_data = &ctx,
|
||||||
};
|
};
|
||||||
|
|
||||||
esp_http_client_handle_t client = esp_http_client_init(&config);
|
esp_http_client_handle_t client = esp_http_client_init(&config);
|
||||||
if (!client) return ESP_FAIL;
|
if (!client) return ESP_FAIL;
|
||||||
|
|
||||||
esp_err_t err = esp_http_client_perform(client);
|
esp_err_t err = esp_http_client_perform(client);
|
||||||
if (err != ESP_OK) {
|
|
||||||
esp_http_client_cleanup(client);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get Date header */
|
|
||||||
char *date_ptr = NULL;
|
|
||||||
esp_http_client_get_header(client, "Date", &date_ptr);
|
|
||||||
esp_http_client_cleanup(client);
|
esp_http_client_cleanup(client);
|
||||||
|
|
||||||
if (!date_ptr || date_ptr[0] == '\0') return ESP_ERR_NOT_FOUND;
|
if (err != ESP_OK) return err;
|
||||||
|
if (ctx.date_val[0] == '\0') return ESP_ERR_NOT_FOUND;
|
||||||
|
|
||||||
if (!parse_and_set_time(date_ptr, out, out_size)) return ESP_FAIL;
|
if (!parse_and_set_time(ctx.date_val, out, out_size)) return ESP_FAIL;
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user