work on dtls

FossilOrigin-Name: 8b02ed99e3287eaa044a4f4c6c8b61ab6f1a14983db99accb43b5be8425befe8
This commit is contained in:
7u83@mail.ru
2018-04-01 23:39:08 +00:00
parent c038599910
commit fb7331173e
25 changed files with 150 additions and 103 deletions

View File

@ -224,6 +224,7 @@ MISCSRC=\
conn_process_packet.c\
conn_q_add_packet.c\
conn_q_get_packet.c\
conn_q_wait_packet.c\
conn_q_recv_packet.c\
conn_recv_packet.c\
conn_send_data_packet.c\

View File

@ -298,6 +298,7 @@ struct cwrmsg *conn_wait_for_message(struct conn *conn, time_t timer);
struct cwrmsg *conn_wait_for_request(struct conn *conn, int *msglist, time_t timer);
int conn_q_wait_packet(struct conn * conn, int seconds);
#define conn_is_error(conn) (conn->dtls_error)

View File

@ -0,0 +1,20 @@
#include <errno.h>
#include <time.h>
#include "conn.h"
int conn_q_wait_packet(struct conn * conn, int seconds)
{
struct timespec timespec;
clock_gettime(CLOCK_REALTIME,&timespec);
timespec.tv_sec+=seconds;
/* wait one second to get a packet */
if (sem_timedwait(&conn->q_sem,&timespec)==-1){
return EAGAIN;
};
return 0;
}

View File

@ -35,16 +35,24 @@
#include "sock.h"
#include "dbg.h"
static int cmp_by_addr_p ( const void * d1, const void *d2 )
{
struct conn * c1 = * ( void ** ) d1 ;
struct conn * c2 = * ( void ** ) d2 ;
return sock_cmpaddr ( ( struct sockaddr* ) &c1->addr, ( struct sockaddr* ) &c2->addr, 1 );
}
static int cmp_by_addr ( const void * d1, const void *d2 )
{
struct conn * c1 = * ( void ** ) d1 ;
struct conn * c2 = * ( void ** ) d2 ;
return sock_cmpaddr ( ( struct sockaddr* ) &c1->addr, ( struct sockaddr* ) &c2->addr, 1 );
return sock_cmpaddr ( ( struct sockaddr* ) &c1->addr, ( struct sockaddr* ) &c2->addr, 0 );
}
static int cmp_by_session_id ( const void *d1, const void *d2 )
{
struct conn * c1 = *( void ** ) d1;
@ -52,7 +60,13 @@ static int cmp_by_session_id ( const void *d1, const void *d2 )
return memcmp ( c1->session_id, c2->session_id, 16 );
}
struct connlist * connlist_create ( int len )
/**
* @brief Create a connection list
* @param len initial length
* @param cmpports compare ports
* @return the create connection list or NULL if an error has occured.
*/
struct connlist * connlist_create ( int len, int cmpports )
{
struct connlist * cl = malloc ( sizeof ( struct connlist ) );
@ -60,8 +74,12 @@ struct connlist * connlist_create ( int len )
if ( !cl )
return 0;
cl->by_addr = mavl_create_ptr ( cmp_by_addr, NULL );
if (cmpports){
cl->by_addr = mavl_create_ptr ( cmp_by_addr_p, NULL );
}
else{
cl->by_addr = mavl_create_ptr ( cmp_by_addr, NULL );
}
if ( !cl->by_addr ) {
free ( cl );

View File

@ -18,7 +18,7 @@ struct connlist {
};
struct connlist *connlist_create(int len);
struct connlist *connlist_create(int len, int cmpports);
void connlist_lock(struct connlist *cl);
void connlist_unlock(struct connlist *cl);
void conlist_destroy(struct connlist *cl);

View File

@ -32,15 +32,15 @@
#define dtls_shutdown dtls_gnutls_shutdown
#define dtls_get_cipher dtls_gnutls_get_cipher
#define dtls_get_peers_cert dtls_gnutls_get_peers_cert
#endif
#else
#ifdef WITH_OPENSSL
#include "dtls_openssl.h"
#define dtls_init dtls_openssl_init
#define dtls_accept dtls_openssl_accept
#define dtls_connect dtls_openssl_connect
#define dtls_shutdown dtls_openssl_shutdown
#define dtls_get_cipher dtls_openssl_get_cipher
#endif

View File

@ -27,7 +27,7 @@
#include "log.h"
#include "dbg.h"
#include "dtls.h"
/*#include "dtls.h"*/
/**

View File

@ -38,6 +38,7 @@
int dtls_gnutls_accept(struct conn *conn)
{
char sock_buf[SOCK_ADDR_BUFSIZE];
char cookie_buf[SOCK_ADDR_BUFSIZE];
struct dtls_gnutls_data *d;
uint8_t buffer[2048];
int tlen, rc;
@ -48,14 +49,13 @@ int dtls_gnutls_accept(struct conn *conn)
gnutls_key_generate(&cookie_key, GNUTLS_COOKIE_KEY_SIZE);
cw_dbg(DBG_DTLS, "Session cookie for %s generated: %s",
sock_addr2str(&conn->addr,sock_buf), sock_hwaddrtostr((uint8_t *) (&cookie_key),
sizeof(cookie_key),sock_buf,""));
sock_addr2str(&conn->addr,sock_buf),
sock_hwaddrtostr((uint8_t *) (&cookie_key),
sizeof(cookie_key),cookie_buf,""));
memset(&prestate, 0, sizeof(prestate));
tlen = dtls_gnutls_bio_read(conn, buffer, sizeof(buffer));
gnutls_dtls_cookie_send(&cookie_key, &conn->addr, sizeof(conn->addr),

View File

@ -28,7 +28,7 @@
#include <gnutls/gnutls.h>
#include "dtls.h"
#include "dtls_common.h"
#include "dtls_gnutls.h"
#include "capwap.h"
#include "timer.h"

View File

@ -24,7 +24,7 @@
#include "gnutls/dtls.h"
#include "dtls.h"
#include "dtls_common.h"
#include "dtls_gnutls.h"
#include "conn.h"

View File

@ -4,7 +4,8 @@
#include "conn.h"
#include "dtls.h"
/*#include "dtls.h"*/
#include "dtls_common.h"
#include "dtls_gnutls.h"
struct dtls_ssl_cert dtls_gnutls_get_peers_cert(struct conn * conn,unsigned int n)

View File

@ -25,7 +25,7 @@
#include <errno.h>
#include <arpa/inet.h>
#include "dtls_openssl.h"
#include "dtls.h"
#include "dtls_common.h"
#include <openssl/bio.h>