work on dtls
FossilOrigin-Name: 8b02ed99e3287eaa044a4f4c6c8b61ab6f1a14983db99accb43b5be8425befe8
This commit is contained in:
@ -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\
|
||||
|
@ -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)
|
||||
|
||||
|
20
src/cw/conn_q_wait_packet.c
Normal file
20
src/cw/conn_q_wait_packet.c
Normal 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,×pec);
|
||||
timespec.tv_sec+=seconds;
|
||||
|
||||
|
||||
/* wait one second to get a packet */
|
||||
if (sem_timedwait(&conn->q_sem,×pec)==-1){
|
||||
return EAGAIN;
|
||||
};
|
||||
|
||||
return 0;
|
||||
}
|
@ -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 );
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -27,7 +27,7 @@
|
||||
|
||||
#include "log.h"
|
||||
#include "dbg.h"
|
||||
#include "dtls.h"
|
||||
/*#include "dtls.h"*/
|
||||
|
||||
|
||||
/**
|
||||
|
@ -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),
|
||||
|
@ -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"
|
||||
|
@ -24,7 +24,7 @@
|
||||
#include "gnutls/dtls.h"
|
||||
|
||||
|
||||
#include "dtls.h"
|
||||
#include "dtls_common.h"
|
||||
#include "dtls_gnutls.h"
|
||||
|
||||
#include "conn.h"
|
||||
|
@ -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)
|
||||
|
@ -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>
|
||||
|
Reference in New Issue
Block a user