Skip to content

Commit

Permalink
connection: Use common name for different implementations
Browse files Browse the repository at this point in the history
The implementations use a common name now. They never conflict as only
one implementation can be compiled/linked into the library. This make
the connection transparent to the application.
  • Loading branch information
LukasWoodtli committed Jan 9, 2025
1 parent 79384be commit eef69c3
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 54 deletions.
23 changes: 2 additions & 21 deletions examples/client/common/lwm2mclient.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,9 @@ typedef struct {
lwm2m_object_t *securityObjP;
lwm2m_object_t *serverObject;
int sock;
lwm2m_connection_t *connList;
#ifdef WITH_TINYDTLS
lwm2m_dtls_connection_t *connList;
lwm2m_context_t *lwm2mH;
#else
lwm2m_connection_t *connList;
#endif
int addressFamily;
} client_data_t;
Expand Down Expand Up @@ -183,7 +181,7 @@ void handle_value_changed(lwm2m_context_t *lwm2mH, lwm2m_uri_t *uri, const char
void *lwm2m_connect_server(uint16_t secObjInstID, void *userData) {
client_data_t *dataP;
lwm2m_list_t *instance;
lwm2m_dtls_connection_t *newConnP = NULL;
lwm2m_connection_t *newConnP = NULL;
dataP = (client_data_t *)userData;
lwm2m_object_t *securityObj = dataP->securityObjP;

Expand Down Expand Up @@ -255,28 +253,15 @@ void *lwm2m_connect_server(uint16_t secObjInstID, void *userData) {

void lwm2m_close_connection(void *sessionH, void *userData) {
client_data_t *app_data;
#ifdef WITH_TINYDTLS
lwm2m_dtls_connection_t *targetP;
#else
lwm2m_connection_t *targetP;
#endif

app_data = (client_data_t *)userData;
#ifdef WITH_TINYDTLS
targetP = (lwm2m_dtls_connection_t *)sessionH;
#else
targetP = (lwm2m_connection_t *)sessionH;
#endif

if (targetP == app_data->connList) {
app_data->connList = lwm2m_connection_remove_one(targetP);
} else {
#ifdef WITH_TINYDTLS
lwm2m_dtls_connection_t *parentP;
#else
lwm2m_connection_t *parentP;
#endif

lwm2m_connection_free(app_data->connList);
}
}
Expand Down Expand Up @@ -1268,11 +1253,7 @@ int main(int argc, char *argv[]) {
char s[INET6_ADDRSTRLEN];
in_port_t port;

#ifdef WITH_TINYDTLS
lwm2m_dtls_connection_t *connP;
#else
lwm2m_connection_t *connP;
#endif
if (AF_INET == addr.ss_family) {
struct sockaddr_in *saddr = (struct sockaddr_in *)&addr;
inet_ntop(saddr->sin_family, &saddr->sin_addr, s, INET6_ADDRSTRLEN);
Expand Down
48 changes: 24 additions & 24 deletions transport/tinydtls/connection.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
#define COAPS_PORT "5684"
#define URI_LENGTH 256

typedef struct _lwm2m_dtls_connection_t {
struct _lwm2m_dtls_connection_t *next;
typedef struct _lwm2m_connection_t {
struct _lwm2m_connection_t *next;
int sock;
struct sockaddr_in6 addr;
size_t addrLen;
Expand All @@ -37,13 +37,13 @@ typedef struct _lwm2m_dtls_connection_t {
lwm2m_context_t *lwm2mH;
dtls_context_t *dtlsContext;
time_t lastSend; // last time a data was sent to the server (used for NAT timeouts)
} lwm2m_dtls_connection_t;
} lwm2m_connection_t;

dtls_context_t *dtlsContext;

typedef struct _dtls_app_context_ {
lwm2m_context_t *lwm2mH;
lwm2m_dtls_connection_t *connList;
lwm2m_connection_t *connList;
} dtls_app_context_t;

static char *get_opaque_value(size_t *length, int size, lwm2m_data_t *dataP) {
Expand Down Expand Up @@ -121,7 +121,7 @@ char *security_get_secret_key(lwm2m_context_t *lwm2mH, lwm2m_object_t *obj, int
/********************* Security Obj Helpers Ends **********************/

/* Returns the number sent, or -1 for errors */
int send_data(lwm2m_dtls_connection_t *connP, uint8_t *buffer, size_t length) {
int send_data(lwm2m_connection_t *connP, uint8_t *buffer, size_t length) {
int nbSent;
size_t offset;

Expand Down Expand Up @@ -169,7 +169,7 @@ static int get_psk_info(struct dtls_context_t *ctx, const session_t *session, dt
dtls_app_context_t *appContext = (dtls_app_context_t *)ctx->app;

// find connection
lwm2m_dtls_connection_t *cnx = lwm2m_connection_find(appContext->connList, &(session->addr.st), session->size);
lwm2m_connection_t *cnx = lwm2m_connection_find(appContext->connList, &(session->addr.st), session->size);
if (cnx == NULL) {
printf("GET PSK session not found\n");
return dtls_alert_fatal_create(DTLS_ALERT_INTERNAL_ERROR);
Expand Down Expand Up @@ -222,7 +222,7 @@ static int send_to_peer(struct dtls_context_t *ctx, session_t *session, uint8 *d
dtls_app_context_t *appContext = (dtls_app_context_t *)ctx->app;

// find connection
lwm2m_dtls_connection_t *cnx = lwm2m_connection_find(appContext->connList, &(session->addr.st), session->size);
lwm2m_connection_t *cnx = lwm2m_connection_find(appContext->connList, &(session->addr.st), session->size);
if (cnx != NULL) {
// send data to peer

Expand All @@ -241,7 +241,7 @@ static int read_from_peer(struct dtls_context_t *ctx, session_t *session, uint8
dtls_app_context_t *appContext = (dtls_app_context_t *)ctx->app;

// find connection
lwm2m_dtls_connection_t *cnx = lwm2m_connection_find(appContext->connList, &(session->addr.st), session->size);
lwm2m_connection_t *cnx = lwm2m_connection_find(appContext->connList, &(session->addr.st), session->size);
if (cnx != NULL) {
lwm2m_handle_packet(appContext->lwm2mH, (uint8_t *)data, len, (void *)cnx);
return 0;
Expand All @@ -263,7 +263,7 @@ static dtls_handler_t cb = {
// #endif /* DTLS_ECC */
};

dtls_context_t *get_dtls_context(lwm2m_context_t *lwm2mH, lwm2m_dtls_connection_t *connList) {
dtls_context_t *get_dtls_context(lwm2m_context_t *lwm2mH, lwm2m_connection_t *connList) {
static dtls_app_context_t appContext;
appContext.lwm2mH = lwm2mH;
appContext.connList = connList;
Expand Down Expand Up @@ -353,9 +353,9 @@ int lwm2m_create_socket(const char *portStr, int ai_family) {
return s;
}

lwm2m_dtls_connection_t *lwm2m_connection_find(lwm2m_dtls_connection_t *connList, const struct sockaddr_storage *addr,
lwm2m_connection_t *lwm2m_connection_find(lwm2m_connection_t *connList, const struct sockaddr_storage *addr,
size_t addrLen) {
lwm2m_dtls_connection_t *connP;
lwm2m_connection_t *connP;

connP = connList;
while (connP != NULL) {
Expand All @@ -370,13 +370,13 @@ lwm2m_dtls_connection_t *lwm2m_connection_find(lwm2m_dtls_connection_t *connList
return connP;
}

lwm2m_dtls_connection_t *lwm2m_connection_new_incoming(lwm2m_dtls_connection_t *connList, int sock,
lwm2m_connection_t *lwm2m_connection_new_incoming(lwm2m_connection_t *connList, int sock,
const struct sockaddr *addr, size_t addrLen) {
lwm2m_dtls_connection_t *connP;
lwm2m_connection_t *connP;

connP = (lwm2m_dtls_connection_t *)malloc(sizeof(lwm2m_dtls_connection_t));
connP = (lwm2m_connection_t *)malloc(sizeof(lwm2m_connection_t));
if (connP != NULL) {
memset(connP, 0, sizeof(lwm2m_dtls_connection_t));
memset(connP, 0, sizeof(lwm2m_connection_t));
connP->sock = sock;
memcpy(&(connP->addr), addr, addrLen);
connP->addrLen = addrLen;
Expand All @@ -392,7 +392,7 @@ lwm2m_dtls_connection_t *lwm2m_connection_new_incoming(lwm2m_dtls_connection_t *
return connP;
}

lwm2m_dtls_connection_t *lwm2m_connection_create(lwm2m_dtls_connection_t *connList, int sock,
lwm2m_connection_t *lwm2m_connection_create(lwm2m_connection_t *connList, int sock,
lwm2m_object_t *securityObj, int instanceId, lwm2m_context_t *lwm2mH,
int addressFamily) {
struct addrinfo hints;
Expand All @@ -401,7 +401,7 @@ lwm2m_dtls_connection_t *lwm2m_connection_create(lwm2m_dtls_connection_t *connLi
int s;
struct sockaddr *sa;
socklen_t sl;
lwm2m_dtls_connection_t *connP = NULL;
lwm2m_connection_t *connP = NULL;
char uriBuf[URI_LENGTH];
char *uri;
char *host;
Expand Down Expand Up @@ -485,21 +485,21 @@ lwm2m_dtls_connection_t *lwm2m_connection_create(lwm2m_dtls_connection_t *connLi
return connP;
}

lwm2m_dtls_connection_t *lwm2m_connection_remove_one(lwm2m_dtls_connection_t *connList) {
lwm2m_dtls_connection_t *nextP = connList->next;
lwm2m_connection_t *lwm2m_connection_remove_one(lwm2m_connection_t *connList) {
lwm2m_connection_t *nextP = connList->next;
lwm2m_free(connList);
return nextP;
}

void lwm2m_connection_free(lwm2m_dtls_connection_t *connList) {
void lwm2m_connection_free(lwm2m_connection_t *connList) {
dtls_free_context(dtlsContext);
dtlsContext = NULL;
while (connList != NULL) {
connList = lwm2m_connection_remove_one(connList);
}
}

int lwm2m_connection_send(lwm2m_dtls_connection_t *connP, uint8_t *buffer, size_t length) {
int lwm2m_connection_send(lwm2m_connection_t *connP, uint8_t *buffer, size_t length) {
if (connP->dtlsSession == NULL) {
// no security
if (0 >= send_data(connP, buffer, length)) {
Expand All @@ -521,7 +521,7 @@ int lwm2m_connection_send(lwm2m_dtls_connection_t *connP, uint8_t *buffer, size_
return 0;
}

int lwm2m_connection_handle_packet(lwm2m_dtls_connection_t *connP, uint8_t *buffer, size_t length) {
int lwm2m_connection_handle_packet(lwm2m_connection_t *connP, uint8_t *buffer, size_t length) {

if (connP->dtlsSession != NULL) {
// Let liblwm2m respond to the query depending on the context
Expand All @@ -537,7 +537,7 @@ int lwm2m_connection_handle_packet(lwm2m_dtls_connection_t *connP, uint8_t *buff
}
}

int lwm2m_connection_rehandshake(lwm2m_dtls_connection_t *connP, bool sendCloseNotify) {
int lwm2m_connection_rehandshake(lwm2m_connection_t *connP, bool sendCloseNotify) {

// if not a dtls connection we do nothing
if (connP->dtlsSession == NULL) {
Expand All @@ -562,7 +562,7 @@ int lwm2m_connection_rehandshake(lwm2m_dtls_connection_t *connP, bool sendCloseN
}

uint8_t lwm2m_buffer_send(void *sessionH, uint8_t *buffer, size_t length, void *userdata) {
lwm2m_dtls_connection_t *connP = (lwm2m_dtls_connection_t *)sessionH;
lwm2m_connection_t *connP = (lwm2m_connection_t *)sessionH;

if (connP == NULL) {
fprintf(stderr, "#> failed sending %zu bytes, missing connection\r\n", length);
Expand Down
18 changes: 9 additions & 9 deletions transport/tinydtls/include/tinydtls/connection.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,25 +43,25 @@
// after 40sec of inactivity we rehandshake
#define DTLS_NAT_TIMEOUT 40

typedef struct _lwm2m_dtls_connection_t lwm2m_dtls_connection_t;
typedef struct _lwm2m_connection_t lwm2m_connection_t;

int lwm2m_create_socket(const char *portStr, int ai_family);

lwm2m_dtls_connection_t *lwm2m_connection_find(lwm2m_dtls_connection_t *connList, const struct sockaddr_storage *addr,
lwm2m_connection_t *lwm2m_connection_find(lwm2m_connection_t *connList, const struct sockaddr_storage *addr,
size_t addrLen);
lwm2m_dtls_connection_t *lwm2m_connection_new_incoming(lwm2m_dtls_connection_t *connList, int sock,
lwm2m_connection_t *lwm2m_connection_new_incoming(lwm2m_connection_t *connList, int sock,
const struct sockaddr *addr, size_t addrLen);
lwm2m_dtls_connection_t *lwm2m_connection_create(lwm2m_dtls_connection_t *connList, int sock,
lwm2m_connection_t *lwm2m_connection_create(lwm2m_connection_t *connList, int sock,
lwm2m_object_t *securityObj, int instanceId, lwm2m_context_t *lwm2mH,
int addressFamily);
lwm2m_dtls_connection_t *lwm2m_connection_remove_one(lwm2m_dtls_connection_t *connList);
lwm2m_connection_t *lwm2m_connection_remove_one(lwm2m_connection_t *connList);

void lwm2m_connection_free(lwm2m_dtls_connection_t *connList);
void lwm2m_connection_free(lwm2m_connection_t *connList);

int lwm2m_connection_send(lwm2m_dtls_connection_t *connP, uint8_t *buffer, size_t length);
int lwm2m_connection_handle_packet(lwm2m_dtls_connection_t *connP, uint8_t *buffer, size_t length);
int lwm2m_connection_send(lwm2m_connection_t *connP, uint8_t *buffer, size_t length);
int lwm2m_connection_handle_packet(lwm2m_connection_t *connP, uint8_t *buffer, size_t length);

// rehandshake a connection, useful when your NAT timed out and your client has a new IP/PORT
int lwm2m_connection_rehandshake(lwm2m_dtls_connection_t *connP, bool sendCloseNotify);
int lwm2m_connection_rehandshake(lwm2m_connection_t *connP, bool sendCloseNotify);

#endif

0 comments on commit eef69c3

Please sign in to comment.