GnuTLS is now supported on client side.
FossilOrigin-Name: 1cb3d6ca96bf4b9447418b5a3983a3abc8918d60ef745cc2600a353f4a7f559b
This commit is contained in:
		@ -1,4 +1,4 @@
 | 
			
		||||
include ../Config.mak
 | 
			
		||||
 | 
			
		||||
WITH_GNUTLS=1
 | 
			
		||||
WITH_OPENSSL=0
 | 
			
		||||
WITH_OPENSSL=1
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,8 @@
 | 
			
		||||
include ../Config.mak
 | 
			
		||||
 | 
			
		||||
#SSL settings
 | 
			
		||||
SSL_LIBRARY=OPENSSL
 | 
			
		||||
USE_CONTRIB_OPENSSL=1
 | 
			
		||||
#
 | 
			
		||||
SSL_LIBRARY=GNUTLS
 | 
			
		||||
 | 
			
		||||
# C compiler settings
 | 
			
		||||
CC=clang
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CFLAGS += -I/usr/include/libnl3
 | 
			
		||||
@ -17,4 +15,8 @@ LDFLAGS += -L../contrib/libubox/build
 | 
			
		||||
CONF_LIBRARY=UCI
 | 
			
		||||
USE_CONTRIB_UCI=0
 | 
			
		||||
 | 
			
		||||
ifeq ($(USE_CONTRIB_UCI),1)
 | 
			
		||||
CFLAGS+=-I../contrib/uci
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -154,6 +154,7 @@ CFLAGS+=$(GNUTLS_CFLAGS)
 | 
			
		||||
CFLAGS+=-DWITH_GNUTLS
 | 
			
		||||
DTLSOBJS+= dtls_gnutls.o \
 | 
			
		||||
	dtls_gnutls_accept.o \
 | 
			
		||||
	dtls_gnutls_connect.o \
 | 
			
		||||
	dtls_gnutls_bio.o \
 | 
			
		||||
	dtls_gnutls_get_cipher.o
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
@ -57,10 +57,6 @@ struct conn * conn_create(int sock, struct sockaddr * addr, int qsize)
 | 
			
		||||
	if (addr)
 | 
			
		||||
		sock_copyaddr(&conn->addr,addr);
 | 
			
		||||
 | 
			
		||||
//	printf("AF IN: %i\n",addr->sa_family);
 | 
			
		||||
//	char str[200] ;
 | 
			
		||||
//	sock_addrtostr((struct sockaddr*)&conn->addr,str,200);
 | 
			
		||||
//	printf("CONN CREATOR: %s\n",str);
 | 
			
		||||
 | 
			
		||||
	conn->fragman = fragman_create();
 | 
			
		||||
	if (conn->fragman==NULL){
 | 
			
		||||
@ -81,15 +77,18 @@ struct conn * conn_create(int sock, struct sockaddr * addr, int qsize)
 | 
			
		||||
			return NULL;
 | 
			
		||||
		};
 | 
			
		||||
		conn->recv_packet=conn_q_recv_packet;
 | 
			
		||||
		conn->recv_packet_peek=conn_q_recv_packet_peek;
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	else{
 | 
			
		||||
		conn->recv_packet = conn_recv_packet;
 | 
			
		||||
		conn->recv_packet_peek = conn_recv_packet_peek;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	conn->send_packet = conn_send_packet;
 | 
			
		||||
 | 
			
		||||
	conn->last_seqnum_received=-1;
 | 
			
		||||
	conn->mtu=1500;
 | 
			
		||||
 | 
			
		||||
	conn->send_packet = conn_send_packet;
 | 
			
		||||
 | 
			
		||||
	conn->cur_packet=0;
 | 
			
		||||
	conn->recv_timeout=1;
 | 
			
		||||
 | 
			
		||||
@ -69,6 +69,7 @@ struct conn{
 | 
			
		||||
	/* receive and send methods */
 | 
			
		||||
 | 
			
		||||
	int (*recv_packet)(struct conn  *, uint8_t *,int);
 | 
			
		||||
	int (*recv_packet_peek)(struct conn  *, uint8_t *,int);
 | 
			
		||||
	int (*send_packet)(struct conn *, const uint8_t *, int);
 | 
			
		||||
 | 
			
		||||
	int (*read)(struct conn *, uint8_t*, int);
 | 
			
		||||
@ -147,8 +148,8 @@ uint8_t * conn_q_get_packet(struct conn * conn);
 | 
			
		||||
extern int conn_q_recv_packet(struct conn * conn, uint8_t * buffer,int len);
 | 
			
		||||
extern int conn_q_recv_packet_peek(struct conn * conn, uint8_t * buffer,int len);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int conn_recv_packet(struct conn* conn,uint8_t *buf,int len);
 | 
			
		||||
extern int conn_recv_packet_peek(struct conn* conn,uint8_t *buf,int len);
 | 
			
		||||
 | 
			
		||||
extern int conn_send_response(struct conn * conn,struct cwmsg * cwmsg,int seqnum);
 | 
			
		||||
extern struct cwrmsg * conn_get_response(struct conn * conn);
 | 
			
		||||
 | 
			
		||||
@ -44,24 +44,24 @@ struct conn * conn_create_noq(int sock, struct sockaddr * addr)
 | 
			
		||||
	if (addr)
 | 
			
		||||
		sock_copyaddr(&conn->addr,addr);
 | 
			
		||||
 | 
			
		||||
//	printf("AF IN: %i\n",addr->sa_family);
 | 
			
		||||
//	char str[200] ;
 | 
			
		||||
//	sock_addrtostr((struct sockaddr*)&conn->addr,str,200);
 | 
			
		||||
//	printf("CONN CREATOR: %s\n",str);
 | 
			
		||||
 | 
			
		||||
	/* create the CAPWAP framentation manager */
 | 
			
		||||
	conn->fragman = fragman_create();
 | 
			
		||||
	if (conn->fragman==NULL){
 | 
			
		||||
		conn_destroy(conn);
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* set packet recieve and send methods */
 | 
			
		||||
	conn->recv_packet = conn_recv_packet;
 | 
			
		||||
	conn->recv_packet_peek = conn_recv_packet_peek;
 | 
			
		||||
	conn->send_packet = conn_send_packet;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/* misc settings */
 | 
			
		||||
	conn->last_seqnum_received=-1;
 | 
			
		||||
	conn->mtu=1500;
 | 
			
		||||
 | 
			
		||||
	conn->send_packet = conn_send_packet;
 | 
			
		||||
 | 
			
		||||
	conn->cur_packet=0;
 | 
			
		||||
	conn->recv_timeout=1;
 | 
			
		||||
@ -70,7 +70,6 @@ struct conn * conn_create_noq(int sock, struct sockaddr * addr)
 | 
			
		||||
	conn->write = conn->send_packet;
 | 
			
		||||
	conn->read = conn->recv_packet;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	return conn;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -24,10 +24,9 @@
 | 
			
		||||
 | 
			
		||||
#include "conn.h"
 | 
			
		||||
 | 
			
		||||
int conn_recv_packet(struct conn* conn,uint8_t *buf,int len)
 | 
			
		||||
int conn_recv_packet_(struct conn* conn,uint8_t *buf,int len,int flags)
 | 
			
		||||
{
 | 
			
		||||
	int n;
 | 
			
		||||
	int flags=0;
 | 
			
		||||
	while( (n = recv(conn->sock,(char*)buf,len,flags)) < 0 ){
 | 
			
		||||
		if (errno!=EINTR)
 | 
			
		||||
		{
 | 
			
		||||
@ -40,3 +39,17 @@ int conn_recv_packet(struct conn* conn,uint8_t *buf,int len)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* yes, these functions could be better defined as macros in a .h file */
 | 
			
		||||
 | 
			
		||||
int conn_recv_packet(struct conn* conn,uint8_t *buf,int len)
 | 
			
		||||
{
 | 
			
		||||
	return conn_recv_packet_(conn,buf,len,0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int conn_recv_packet_peek(struct conn* conn,uint8_t *buf,int len)
 | 
			
		||||
{
 | 
			
		||||
	int rc = conn_recv_packet_(conn,buf,len,MSG_PEEK);
 | 
			
		||||
	return rc;
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -33,6 +33,11 @@ int dtls_gnutls_init()
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int dtls_gnutls_shutdown(struct conn *conn)
 | 
			
		||||
{
 | 
			
		||||
	/* implement it */
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void dtls_gnutls_data_destroy(struct dtls_gnutls_data *d)
 | 
			
		||||
{
 | 
			
		||||
@ -74,7 +79,7 @@ int dtls_gnutls_read(struct conn * conn, uint8_t *buffer, int len)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct dtls_gnutls_data *dtls_gnutls_data_create(struct conn *conn)
 | 
			
		||||
struct dtls_gnutls_data *dtls_gnutls_data_create(struct conn *conn,int config)
 | 
			
		||||
{
 | 
			
		||||
	struct dtls_gnutls_data *d = malloc(sizeof(struct dtls_gnutls_data));
 | 
			
		||||
	if (!d)
 | 
			
		||||
@ -106,7 +111,7 @@ struct dtls_gnutls_data *dtls_gnutls_data_create(struct conn *conn)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	rc = gnutls_init(&d->session, GNUTLS_SERVER | GNUTLS_DATAGRAM);
 | 
			
		||||
	rc = gnutls_init(&d->session, config); 
 | 
			
		||||
	if (rc < 0) {
 | 
			
		||||
		cw_log(LOG_ERR, "DTLS - Can't init session: %s", gnutls_strerror(rc));
 | 
			
		||||
		dtls_gnutls_data_destroy(d);
 | 
			
		||||
@ -132,10 +137,10 @@ struct dtls_gnutls_data *dtls_gnutls_data_create(struct conn *conn)
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	gnutls_certificate_server_set_request(d->session,GNUTLS_CERT_REQUEST);
 | 
			
		||||
 | 
			
		||||
	gnutls_transport_set_pull_function(d->session, dtls_gnutls_bio_read);
 | 
			
		||||
	gnutls_transport_set_push_function(d->session, dtls_gnutls_bio_write);
 | 
			
		||||
	gnutls_transport_set_pull_timeout_function(d->session, dtls_gnutls_bio_wait);
 | 
			
		||||
 | 
			
		||||
	return d;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -48,7 +48,7 @@ struct dtls_gnutls_data {
 | 
			
		||||
	gnutls_priority_t priority_cache;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct dtls_gnutls_data *dtls_gnutls_data_create(struct conn *conn);
 | 
			
		||||
struct dtls_gnutls_data *dtls_gnutls_data_create(struct conn *conn,int config);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -65,7 +65,7 @@ int dtls_gnutls_accept(struct conn *conn)
 | 
			
		||||
		if (tlen <0 && errno == EAGAIN)
 | 
			
		||||
			continue;
 | 
			
		||||
		if (tlen < 0 ){
 | 
			
		||||
			/* something went wrong, log a message */
 | 
			
		||||
			/* something went wrong, iwe should log a message */
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
@ -78,7 +78,7 @@ int dtls_gnutls_accept(struct conn *conn)
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		dtls_gnutls_bio_read(conn, buffer, sizeof(buffer));
 | 
			
		||||
	//	dtls_gnutls_bio_read(conn, buffer, sizeof(buffer));
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
@ -92,11 +92,11 @@ int dtls_gnutls_accept(struct conn *conn)
 | 
			
		||||
	cw_dbg(DBG_DTLS, "DTLS - Cookie verified! Starting handshake ...");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	d = dtls_gnutls_data_create(conn);
 | 
			
		||||
	d = dtls_gnutls_data_create(conn,GNUTLS_SERVER | GNUTLS_DATAGRAM);
 | 
			
		||||
	if (!d)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	gnutls_transport_set_pull_timeout_function(d->session, dtls_gnutls_bio_wait);
 | 
			
		||||
	gnutls_certificate_server_set_request(d->session,GNUTLS_CERT_REQUEST);
 | 
			
		||||
	gnutls_dtls_prestate_set(d->session, &prestate);
 | 
			
		||||
 | 
			
		||||
	c_timer = cw_timer_start(10);
 | 
			
		||||
 | 
			
		||||
@ -46,13 +46,6 @@ ssize_t dtls_gnutls_bio_write(gnutls_transport_ptr_t b, const void *data, size_t
 | 
			
		||||
	return dtls_bio_write(conn,data,len);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * wait for an incoming packet, used by gnutls to determine if
 | 
			
		||||
 * data is available on "asynchropnous" connections.
 | 
			
		||||
 * 
 | 
			
		||||
 * Attention! This function only works for struct conn objects where
 | 
			
		||||
 * queueing is enabled. Used by AC-Tube. 
 | 
			
		||||
 */
 | 
			
		||||
int dtls_gnutls_bio_wait(gnutls_transport_ptr_t ptr, unsigned int ms)
 | 
			
		||||
{
 | 
			
		||||
	struct conn * conn = (struct conn*)ptr;
 | 
			
		||||
@ -62,7 +55,7 @@ int dtls_gnutls_bio_wait(gnutls_transport_ptr_t ptr, unsigned int ms)
 | 
			
		||||
	uint8_t buffer[5];
 | 
			
		||||
 | 
			
		||||
	do {
 | 
			
		||||
		rc = conn_q_recv_packet_peek(conn,buffer,sizeof(buffer));
 | 
			
		||||
		rc = conn->recv_packet_peek(conn,buffer,sizeof(buffer));
 | 
			
		||||
 | 
			
		||||
	}while(!cw_timer_timeout(timer) && rc==GNUTLS_E_AGAIN);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -5,30 +5,14 @@ ifndef CC
 | 
			
		||||
	CC=gcc
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifdef INCLUDE_DIR
 | 
			
		||||
	XINCLUDE=-I $(INCLUDE_DIR)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifdef LIB_DIR
 | 
			
		||||
	XLIB=-L $(LIB_DIR)
 | 
			
		||||
endif 
 | 
			
		||||
include ../Config.mak
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ifeq ($(USE_CONTRIB_UCI),1)
 | 
			
		||||
CFLAGS+=-I../contrib/uci
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
WITH_UCI=1 
 | 
			
		||||
 | 
			
		||||
CFLAGS+=-DWITH_RMAC_SUPPORT 
 | 
			
		||||
CFLAGS+=-DWITH_IPV6
 | 
			
		||||
CFLAGS+=-DWITH_CW_LOG
 | 
			
		||||
CFLAGS+=-DWITH_CW_LOG_DEBUG
 | 
			
		||||
CFLAGS+=-DWITH_DTLS
 | 
			
		||||
CFLAGS+=-DWITH_UCI
 | 
			
		||||
CFLAGS+=$(XINCLUDE)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ifndef ARCH
 | 
			
		||||
@ -36,32 +20,45 @@ ifndef ARCH
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef CFLAGS
 | 
			
		||||
CFLAGS += -O2 -Wall -g
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
LDFLAGS += -L../../src/capwap/$(ARCH)
 | 
			
		||||
#LDFLAGS += -L/usr/local/lib
 | 
			
		||||
LDFLAGS += -luci
 | 
			
		||||
#LDFLAGS += -L../capwap
 | 
			
		||||
LDFLAGS += $(XLIB)
 | 
			
		||||
 | 
			
		||||
#LDFLAGS += -lpthread
 | 
			
		||||
#LDFLAGS += -lrt
 | 
			
		||||
 | 
			
		||||
LIBS+=-lcapwap
 | 
			
		||||
#LIBS+=-liw
 | 
			
		||||
LIBS+=-lnl-3
 | 
			
		||||
LIBS+=-lnl-genl-3
 | 
			
		||||
LIBS+=$(OPENSSLLIB)
 | 
			
		||||
#LIBS+=-lcrypto
 | 
			
		||||
#LIBS+=-lrt
 | 
			
		||||
ifdef WITH_UCI
 | 
			
		||||
 | 
			
		||||
CONFOBJS = wtp_conf.o
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONF_LIBRARY),UCI)
 | 
			
		||||
CFLAGS+=-DWITH_UCI
 | 
			
		||||
LIBS+=-luci -lubox
 | 
			
		||||
CONFOBJS += conf_uci.o 
 | 
			
		||||
else
 | 
			
		||||
LIBS+=-lconfuse
 | 
			
		||||
CONFOBJS += wtp_conf_confuse.o
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ifeq ($(SSL_LIBRARY),GNUTLS)
 | 
			
		||||
CFLAGS+=-DWITH_GNUTLS
 | 
			
		||||
CFLAGS+=$(GNUTLS_CFLAGS)
 | 
			
		||||
LIBS+=$(GNUTLS_LIBS)
 | 
			
		||||
LDFLAGS+=$(GNUTLS_LDFLAGS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(SSL_LIBRARY),OPENSSL)
 | 
			
		||||
CFLAGS+=-DWITH_OPENSSL
 | 
			
		||||
CFLAGS+=$(OPESSL_CFLAGS)
 | 
			
		||||
LDFLAGS+=$(OPENSSL_LDFLAGS)
 | 
			
		||||
LIBS+=$(OPENSSL_LIBS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#HA_FILES += ../contrib/hostap/src/drivers/driver_nl80211.o
 | 
			
		||||
 | 
			
		||||
HA_INCS += -I$(INCLUDE_DIR)/libnl-tiny
 | 
			
		||||
@ -74,19 +71,11 @@ CFLAGS += $(HA_INCS)
 | 
			
		||||
#CFLAGS += -I../src
 | 
			
		||||
#CFLAGS += -I../src/utils
 | 
			
		||||
CFLAGS += -I../../src
 | 
			
		||||
CFLAGS += -I$(OPENSSLINC)
 | 
			
		||||
 | 
			
		||||
#CFLAGS += -I/usr/local/include
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CONFOBJS = wtp_conf.o
 | 
			
		||||
 | 
			
		||||
ifdef WITH_UCI
 | 
			
		||||
	CONFOBJS += conf_uci.o 
 | 
			
		||||
else
 | 
			
		||||
	CONFOBJS += wtp_conf_confuse.o
 | 
			
		||||
endif 
 | 
			
		||||
 | 
			
		||||
OBJS += wtp_main.o
 | 
			
		||||
 | 
			
		||||
@ -127,8 +116,7 @@ endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
wtp: $(BCHECK) $(OBJS)
 | 
			
		||||
	$(Q)$(CC) $(LDFLAGS) -o wtp $(OBJS) $(LIBS)
 | 
			
		||||
	
 | 
			
		||||
	$(Q)$(CC) $(OBJS) -o wtp $(LDFLAGS) $(LIBS)
 | 
			
		||||
	@$(E) "  LD " $@
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
 | 
			
		||||
@ -60,20 +60,24 @@ static void read_dbg_options(struct uci_context *ctx, struct uci_section *sectio
 | 
			
		||||
 | 
			
		||||
        int i;
 | 
			
		||||
        for (i=0; cw_dbg_cfgstrs[i].name; i++) {
 | 
			
		||||
 | 
			
		||||
		set_dbg_opt(ctx,section,cw_dbg_cfgstrs[i].level,cw_dbg_cfgstrs[i].name);
 | 
			
		||||
 | 
			
		||||
               // if (!strcmp(str,cw_dbg_cfgstrs[i].name))
 | 
			
		||||
                 //       return cw_dbg_cfgstrs[i].level;
 | 
			
		||||
        }
 | 
			
		||||
       // return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void read_timers(struct uci_context *ctx,struct uci_section *section)
 | 
			
		||||
{
 | 
			
		||||
        int i;
 | 
			
		||||
        for (i=0; conf_timer_cfgstrs[i].name; i++) {
 | 
			
		||||
		
 | 
			
		||||
		const char *str = uci_lookup_option_string(ctx,section,conf_timer_cfgstrs[i].name);
 | 
			
		||||
		if ( str ) {
 | 
			
		||||
			*(conf_timer_cfgstrs[i].value)=atol(str);
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
/*	set_dbg_opt(ctx,section,DBG_DTLS,"dtls");
 | 
			
		||||
	set_dbg_opt(ctx,section,DBG_DTLS_DETAIL,"dtls_detail");
 | 
			
		||||
	set_dbg_opt(ctx,section,DBG_DTLS_BIO,"dtls_bio");
 | 
			
		||||
	set_dbg_opt(ctx,section,DBG_DTLS_BIO_DMP,"dtls_bio_dmp");
 | 
			
		||||
*/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int read_config(const char * filename){
 | 
			
		||||
@ -126,6 +130,7 @@ int read_config(const char * filename){
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	read_timers(ctx,section);
 | 
			
		||||
	
 | 
			
		||||
	const char  *str;
 | 
			
		||||
	str = uci_lookup_option_string(ctx,section,"name");
 | 
			
		||||
 | 
			
		||||
@ -61,7 +61,7 @@ static int acprint(void *p,void*d) //,int ctr)
 | 
			
		||||
static int msg_cb(void *priv,struct cwrmsg * cwrmsg)
 | 
			
		||||
{
 | 
			
		||||
	if (cwrmsg->type != CWMSG_DISCOVERY_RESPONSE){
 | 
			
		||||
		cw_log_debug0("Expected discovery response, but received %i",cwrmsg->type);
 | 
			
		||||
		cw_dbg(DBG_ERR,"Expected discovery response, but received %i",cwrmsg->type);
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -115,7 +115,7 @@ static void rand_sleep(int seconds)
 | 
			
		||||
	cw_rand((uint8_t*)&rnd,sizeof(rnd));
 | 
			
		||||
	uint16_t max = 0-1; 
 | 
			
		||||
	int r = (rnd * usecs) / max;
 | 
			
		||||
	cw_log_debug0("Sleeping for %u milliseconds\n",r);
 | 
			
		||||
	cw_dbg(DBG_CW_INFO,"Sleeping for %u milliseconds\n",r);
 | 
			
		||||
	usleep(r*1000);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -146,7 +146,7 @@ static int do_discover_conn(struct conn * conn,struct discovery_info * di)
 | 
			
		||||
#ifdef WITH_CW_LOG_DEBUG
 | 
			
		||||
	char str[100];
 | 
			
		||||
	sock_addrtostr((struct sockaddr*)&conn->addr,str,100);
 | 
			
		||||
	cw_log_debug0("Sending discovery request to %s",str);
 | 
			
		||||
//	cw_log_debug0("Sending discovery request to %s",str);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	int rc;
 | 
			
		||||
@ -158,7 +158,7 @@ static int do_discover_conn(struct conn * conn,struct discovery_info * di)
 | 
			
		||||
				continue;
 | 
			
		||||
			if (errno == EMSGSIZE){
 | 
			
		||||
				conn->mtu-=4;
 | 
			
		||||
				cw_log_debug2("Setting mtu to %i",conn->mtu);
 | 
			
		||||
//				cw_log_debug2("Setting mtu to %i",conn->mtu);
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@ -200,7 +200,7 @@ static int do_discover_conn(struct conn * conn,struct discovery_info * di)
 | 
			
		||||
#ifdef WITH_CW_LOG_DEBUG
 | 
			
		||||
			char str[100];
 | 
			
		||||
			sock_addrtostr((struct sockaddr*)&sa,str,100);
 | 
			
		||||
			cw_log_debug0("Received packet from %s",str);
 | 
			
		||||
//			cw_log_debug0("Received packet from %s",str);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
			struct conn * rconn; 
 | 
			
		||||
@ -279,7 +279,7 @@ ACIPLIST * do_discovery(const char *acaddr)
 | 
			
		||||
		if ( discovery_count >= conf_max_discoveries){
 | 
			
		||||
			sulking_state();
 | 
			
		||||
			discovery_count=0;
 | 
			
		||||
			cw_log_debug0("Entering discovery state");
 | 
			
		||||
	//		cw_log_debug0("Entering discovery state");
 | 
			
		||||
		}
 | 
			
		||||
		discovery_count++;
 | 
			
		||||
 | 
			
		||||
@ -318,7 +318,7 @@ ACIPLIST * do_discovery(const char *acaddr)
 | 
			
		||||
	freeaddrinfo(res0);
 | 
			
		||||
 | 
			
		||||
	if (di.aciplist->count){
 | 
			
		||||
		cw_log_debug2("Discover responses received: %i\n",di.response_count);
 | 
			
		||||
//		cw_log_debug2("Discover responses received: %i\n",di.response_count);
 | 
			
		||||
		return di.aciplist;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,7 @@ void acinfo_log_(int level,const struct ac_info *acinfo,const char * xstr)
 | 
			
		||||
{
 | 
			
		||||
	char str[8192];
 | 
			
		||||
	acinfo_print(str,acinfo);
 | 
			
		||||
	cw_log_debug(level,"%s\n%s",xstr,str);
 | 
			
		||||
//	cw_log_debug(level,"%s\n%s",xstr,str);
 | 
			
		||||
	return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -38,7 +38,7 @@ int join_state(struct conn * conn)
 | 
			
		||||
#ifdef WITH_CW_LOG_DEBUG	
 | 
			
		||||
	char str[64];
 | 
			
		||||
	sock_addrtostr(&conn->addr,str,64);
 | 
			
		||||
	cw_log_debug0("Sending join request to %s",str);
 | 
			
		||||
//	cw_log_debug0("Sending join request to %s",str);
 | 
			
		||||
#endif	
 | 
			
		||||
	printf("Seqnum before = %i\n",conn->seqnum);
 | 
			
		||||
	rc = cwsend_join_request(conn,&ri,wtpinfo);
 | 
			
		||||
@ -46,7 +46,7 @@ int join_state(struct conn * conn)
 | 
			
		||||
 | 
			
		||||
	struct cwrmsg * cwrmsg = conn_get_message(conn);
 | 
			
		||||
 | 
			
		||||
	cw_log_debug0("Received message %i",cwrmsg->seqnum);
 | 
			
		||||
//	cw_log_debug0("Received message %i",cwrmsg->seqnum);
 | 
			
		||||
 | 
			
		||||
	if (cwrmsg->type != CWMSG_JOIN_RESPONSE || cwrmsg->seqnum != conn->seqnum){
 | 
			
		||||
		printf("Wrong message\n");
 | 
			
		||||
@ -91,19 +91,8 @@ int join(struct sockaddr *sa)
 | 
			
		||||
#ifdef WITH_DTLS
 | 
			
		||||
	cw_dbg (DBG_DTLS,"Establishing DTLS session with %s",sock_addr2str(sa)); 
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
	#ifdef WITH_CW_LOG_DEBUG
 | 
			
		||||
	{
 | 
			
		||||
		char str[100];
 | 
			
		||||
		sock_addrtostr(sa,str,100);
 | 
			
		||||
		cw_log_debug0("Establishing DTLS connection to %s",str);
 | 
			
		||||
	}
 | 
			
		||||
	#endif
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
printf("conf_dtls_cipher  %s\n",conf_dtls_cipher);
 | 
			
		||||
 | 
			
		||||
	if (conf_dtls_psk){
 | 
			
		||||
		conn->dtls_psk=conf_dtls_psk;
 | 
			
		||||
		conn->dtls_psk_len=strlen(conn->dtls_psk);
 | 
			
		||||
@ -126,11 +115,14 @@ printf("conf_dtls_cipher  %s\n",conf_dtls_cipher);
 | 
			
		||||
		dtls_shutdown(conn);
 | 
			
		||||
		char str[100];
 | 
			
		||||
		sock_addrtostr(sa,str,100);
 | 
			
		||||
		cw_log(LOG_ERR,"Cant establish DTLS connection to %s",str);
 | 
			
		||||
		cw_log(LOG_ERR,"Can't establish DTLS connection to %s",str);
 | 
			
		||||
		close(sockfd);
 | 
			
		||||
exit(0);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
exit(0);
 | 
			
		||||
 | 
			
		||||
#endif	
 | 
			
		||||
	cw_dbg (DBG_DTLS,"DTLS session established with %s, cipher=%s",sock_addr2str(sa),dtls_get_cipher(conn)); 
 | 
			
		||||
exit(0);
 | 
			
		||||
@ -140,7 +132,7 @@ exit(0);
 | 
			
		||||
	{
 | 
			
		||||
		char str[100];
 | 
			
		||||
		sock_addrtostr(sa,str,100);
 | 
			
		||||
		cw_log_debug0("DTLS connection to %s established",str);
 | 
			
		||||
//		cw_log_debug0("DTLS connection to %s established",str);
 | 
			
		||||
	}
 | 
			
		||||
	#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -40,13 +40,13 @@ struct cwrmsg * send_request(struct conn * conn,struct cwmsg *cwmsg)
 | 
			
		||||
 | 
			
		||||
#ifdef WITH_CW_LOG_DEBUG
 | 
			
		||||
		if (i>0){
 | 
			
		||||
			cw_log_debug1("Retransmitting request, type=%i,seqnum=%i",cwmsg->type,cwmsg->seqnum);
 | 
			
		||||
//			cw_log_debug1("Retransmitting request, type=%i,seqnum=%i",cwmsg->type,cwmsg->seqnum);
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		int rc = conn_send_cwmsg(conn,cwmsg);
 | 
			
		||||
		if (rc<0){
 | 
			
		||||
			cw_log_debug1("Error sending request, type=%i, seqnum %i, %s",cwmsg->type,cwmsg->seqnum,strerror(errno));
 | 
			
		||||
		//	cw_log_debug1("Error sending request, type=%i, seqnum %i, %s",cwmsg->type,cwmsg->seqnum,strerror(errno));
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
		struct cwrmsg * r = get_response(conn,cwmsg->type+1,cwmsg->seqnum);
 | 
			
		||||
@ -74,7 +74,7 @@ int run(struct conn * conn)
 | 
			
		||||
 | 
			
		||||
		//	cwsend_echo_request(conn,&radioinfo);
 | 
			
		||||
 | 
			
		||||
			cw_log_debug1("Sending echo request");
 | 
			
		||||
//			cw_log_debug1("Sending echo request");
 | 
			
		||||
			cwmsg_init_echo_request(&cwmsg,buffer,conn,&radioinfo);
 | 
			
		||||
			struct cwrmsg * rc = send_request(conn,&cwmsg);
 | 
			
		||||
 | 
			
		||||
@ -83,7 +83,7 @@ int run(struct conn * conn)
 | 
			
		||||
			if (rc==0){
 | 
			
		||||
 | 
			
		||||
				dtls_shutdown(conn);	
 | 
			
		||||
				cw_log_debug1("Connection lost, no echo response");
 | 
			
		||||
		//		cw_log_debug1("Connection lost, no echo response");
 | 
			
		||||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
			echo_interval_timer=time(NULL);
 | 
			
		||||
 | 
			
		||||
@ -7,8 +7,8 @@
 | 
			
		||||
 | 
			
		||||
int sulking_state()
 | 
			
		||||
{
 | 
			
		||||
	cw_log_debug0("Entering Sulking state");
 | 
			
		||||
	cw_log_debug0("Sleeping for %i seconds",conf_silent_interval);
 | 
			
		||||
	cw_dbg(DBG_CW_INFO,"Entering Sulking state");
 | 
			
		||||
	cw_dbg(DBG_CW_INFO,"Sleeping for %i seconds",conf_silent_interval);
 | 
			
		||||
	sleep(conf_silent_interval);
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -72,7 +72,13 @@ uint8_t * conf_model_no;
 | 
			
		||||
uint8_t * cont_serial_no;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
LONGSTRS conf_timer_cfgstrs[] = {
 | 
			
		||||
	"max_discovery_interval",&conf_max_discovery_interval,
 | 
			
		||||
	"discovery_interval",&conf_discovery_interval,
 | 
			
		||||
	"max_discoveries",&conf_max_discoveries,
 | 
			
		||||
	"silent_interval",&conf_silent_interval,
 | 
			
		||||
	0,0
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int wtpconf_primary_if()
 | 
			
		||||
@ -173,7 +179,7 @@ int wtpconf_ac_list()
 | 
			
		||||
	conf_ac_list_len=len;
 | 
			
		||||
#ifdef WITH_CW_LOG_DEBUG
 | 
			
		||||
	for (i=0; i<conf_ac_list_len; i++){
 | 
			
		||||
		cw_log_debug0("Using AC: %s\n",conf_ac_list[i]);
 | 
			
		||||
		cw_dbg(DBG_CW_INFO,"Using AC: %s\n",conf_ac_list[i]);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -117,4 +117,15 @@ extern int conf_mtu_discovery;
 | 
			
		||||
extern int conf_mtu;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
	const char *name;
 | 
			
		||||
	long *value;	
 | 
			
		||||
}LONGSTRS;
 | 
			
		||||
extern LONGSTRS conf_timer_cfgstrs[];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -94,13 +94,6 @@ int do_connect(void *priv,void *data)
 | 
			
		||||
 | 
			
		||||
int wtp_main(const char *ad)
 | 
			
		||||
{
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	cw_dbg_opt_level = DBG_DTLS | DBG_CW_INFO | DBG_ALL;
 | 
			
		||||
//	gr();
 | 
			
		||||
//	exit(0);
 | 
			
		||||
 | 
			
		||||
	wtpconf_preinit();
 | 
			
		||||
 | 
			
		||||
	if (!read_config("./wtp_uci.conf")){
 | 
			
		||||
@ -109,7 +102,6 @@ int wtp_main(const char *ad)
 | 
			
		||||
 | 
			
		||||
	cw_dbg_opt_level = conf_dbg_level;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	wtpconf_init();
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
@ -150,9 +142,9 @@ int wtp_main(const char *ad)
 | 
			
		||||
			}
 | 
			
		||||
		}while (!aciplist);		
 | 
			
		||||
 | 
			
		||||
		cw_log_debug0("Entering join state");
 | 
			
		||||
//		cw_log_debug0("Entering join state");
 | 
			
		||||
		if (!aciplist){
 | 
			
		||||
			cw_log_debug0("Don't got any discovery response");
 | 
			
		||||
//			cw_log_debug0("Don't got any discovery response");
 | 
			
		||||
			exit(0);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,16 @@ config 'wtp'
 | 
			
		||||
	# default is gnu
 | 
			
		||||
	option vendor_id
 | 
			
		||||
 | 
			
		||||
	option max_discovery_interval	30
 | 
			
		||||
	option discovery_interval	5
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
config 'dbg'
 | 
			
		||||
	# defbug options 
 | 
			
		||||
	option dtls		0
 | 
			
		||||
	option dtls_detail	0
 | 
			
		||||
	option dtls_bio		0
 | 
			
		||||
	option dtls_bio_dmp	0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	option dbg all, nothing
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user