int dtls_handle_read(struct dtls_context_t *ctx) { int fd; session_t session; #define MAX_READ_BUF 2000 static uint8 buf[MAX_READ_BUF]; int len; fd = *(int *)dtls_get_app_data(ctx); if (!fd) return -1; memset(&session, 0, sizeof(session_t)); session.size = sizeof(session.addr); len = recvfrom(fd, buf, MAX_READ_BUF, 0, &session.addr.sa, &session.size); if (len < 0) { perror("recvfrom"); return -1; } else { unsigned char addrbuf[72]; dsrv_print_addr(&session, addrbuf, sizeof(addrbuf)); dsrv_log(LOG_DEBUG, "got %d bytes from %s\n", len, (char *)addrbuf); dump((unsigned char *)&session, sizeof(session_t)); PRINTF("\n"); dump(buf, len); PRINTF("\n"); } return dtls_handle_message(ctx, &session, buf, len); }
void dtls_dsrv_log_addr(log_t level, const char *name, const session_t *addr) { char addrbuf[73]; int len; len = dsrv_print_addr(addr, addrbuf, sizeof(addrbuf)); if (!len) return; dsrv_log(level, "%s: %s\n", name, addrbuf); }