More move to cw_Conn and conn-stuff within on file

This commit is contained in:
2022-08-10 02:10:10 +02:00
parent f8654a0408
commit 9e54e46e45
14 changed files with 176 additions and 111 deletions

View File

@ -74,8 +74,7 @@ CWSRC=\
cw_write_descriptor_subelem.c\
cw_write_radio_element.c\
cw_detect_nat.c\
#cw_read_from.c \
cw_read_from.c \
KTVSRC=\
cw_ktv_add.c\
@ -177,10 +176,8 @@ MISCSRC=\
capwap_strings_result.c\
capwap_strings_state.c\
capwap_strings_vendor.c\
conn_create.c\
conn_create_noq.c\
conn_destroy.c\
conn_init.c\
connlist.c\
conn_prepare_image_data_request.c\
conn_process_packet.c\
@ -192,7 +189,6 @@ MISCSRC=\
conn_send_data_packet.c\
conn_send_msg.c\
conn_send_packet.c\
conn_send_request.c\
dot11.c\
dot11_inline.c\
format.c\
@ -205,8 +201,12 @@ MISCSRC=\
send.c\
strheap.c\
netconn.c\
conn.c
# conn_q_wait_packet.c\
# conn_init.c\
# conn_create.c\
# conn_send_request.c\
DTLSSRC+=\
dtls_bio.c\
@ -267,3 +267,6 @@ dynamic: $(DNAME)
include ../lib.mk
depend:
mkdep -c ${CFLAGS} ${SOURCES}

134
src/cw/conn.c Normal file
View File

@ -0,0 +1,134 @@
#include <string.h>
#include "conn.h"
#include "capwap.h"
#include "cw.h"
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include "log.h"
#include "capwap.h"
#include "conn.h"
#include "sock.h"
#include "msgset.h"
#include "cw.h"
static int write_header(struct cw_ElemHandler * handler, uint8_t * dst, int len)
{
if (handler->vendor)
return len + cw_put_elem_vendor_hdr(dst, handler->vendor, handler->id, len);
return len + cw_put_elem_hdr(dst, handler->id, len);
}
static int header_len(struct cw_ElemHandler * handler)
{
return handler->vendor ? 10 : 4;
}
/**
* Basic initialization of a conn object
* @param conn conn object to initialize
*/
void cw_conn_init(struct cw_Conn * conn)
{
memset(conn,0,sizeof(struct cw_Conn ));
conn->retransmit_interval=CAPWAP_RETRANSMIT_INTERVAL;
conn->max_retransmit=CAPWAP_MAX_RETRANSMIT;
conn->wait_dtls=CAPWAP_WAIT_DTLS;
conn->wait_join=CAPWAP_WAIT_JOIN;
conn->mtu_discovery=1;
// conn->capwap_mode = 0;
conn->strict_capwap=1;
conn->process_packet=conn_process_packet;
conn->process_message=process_message;
conn->write_header = write_header;
conn->header_len = header_len;
}
/**
* Create a conn object
* @param sock a socket
* @param addr the address associated
* @param qsize size of packet queue
* @return A pointer to the created object
* This function creates a conn obnject with queueing functionality
* for asynchronous operation.
* To create a conn object without queue functionallity use #conn_create_noq.
*/
struct cw_Conn * cw_conn_create(int sock, struct sockaddr * addr, int qsize)
{
struct cw_Conn * conn;
conn = malloc(sizeof (struct cw_Conn ));
if (!conn)
return NULL;
cw_conn_init(conn);
conn->sock=sock;
if (addr)
sock_copyaddr(&conn->addr,addr);
conn->fragman = fragman_create();
if (conn->fragman==NULL){
conn_destroy(conn);
return NULL;
}
conn->qsize=qsize;
if (qsize != 0){
if (!(conn->q=malloc( sizeof(uint8_t *) * qsize))){
conn_destroy(conn);
return NULL;
}
conn->qrpos=-1;
if (sem_init(&conn->q_sem,0,0)!=0){
cw_log(LOG_ERR,"Fatal- Can't init semaphore for conn object: %s",strerror(errno));
conn_destroy(conn);
return NULL;
};
conn->recv_packet=conn_q_recv_packet;
conn->recv_packet_peek=conn_q_recv_packet_peek;
}
else{
conn->recv_packet = conn_recv_packet;
conn->recv_packet_peek = conn_recv_packet_peek;
}
conn->send_packet = conn_send_packet;
/* conn->send_data_packet = conn_send_data_packet;*/
conn->last_seqnum_received=-1;
conn->mtu=600;
conn->cur_packet=0;
conn->recv_timeout=1;
conn->seqnum=-1;
conn->write = conn->send_packet;
conn->read = conn->recv_packet;
/* conn->write_data = conn->send_data_packet; */
conn->dtls_mtu = 600;
return conn;
}

View File

@ -256,8 +256,8 @@ typedef struct cw_Conn cw_Conn_t;
struct cw_Conn*conn_create(int sock, struct sockaddr *addr, int qsize);
struct cw_Conn*conn_create_noq(int sock, struct sockaddr *addr);
struct cw_Conn* cw_conn_create(int sock, struct sockaddr *addr, int qsize);
struct cw_Conn* conn_create_noq(int sock, struct sockaddr *addr);
extern int conn_send_cwmsg(struct cw_Conn*conn, struct cwmsg *cwmsg);
@ -310,11 +310,11 @@ struct cwrmsg *conn_wait_for_message(struct cw_Conn*conn, time_t timer);
struct cwrmsg *conn_wait_for_request(struct cw_Conn*conn, int *msglist, time_t timer);
int conn_q_wait_packet(struct cw_Conn* conn, int seconds);
//int conn_q_wait_packet(struct cw_Conn* conn, int seconds);
#define conn_is_error(conn) (conn->dtls_error)
void conn_init(struct cw_Conn*conn);
void cw_conn_init(struct cw_Conn*conn);
extern int cw_read_messages(struct cw_Conn*conn);

View File

@ -35,76 +35,4 @@
/**
* Create a conn object
* @param sock a socket
* @param addr the address associated
* @param qsize size of packet queue
* @return A pointer to the created object
* This function creates a conn obnject with queueing functionality
* for asynchronous operation.
* To create a conn object without queue functionallity use #conn_create_noq.
*/
struct cw_Conn * conn_create(int sock, struct sockaddr * addr, int qsize)
{
struct cw_Conn * conn;
conn = malloc(sizeof (struct cw_Conn ));
if (!conn)
return NULL;
conn_init(conn);
conn->sock=sock;
if (addr)
sock_copyaddr(&conn->addr,addr);
conn->fragman = fragman_create();
if (conn->fragman==NULL){
conn_destroy(conn);
return NULL;
}
conn->qsize=qsize;
if (qsize != 0){
if (!(conn->q=malloc( sizeof(uint8_t *) * qsize))){
conn_destroy(conn);
return NULL;
}
conn->qrpos=-1;
if (sem_init(&conn->q_sem,0,0)!=0){
cw_log(LOG_ERR,"Fatal- Can't init semaphore for conn object: %s",strerror(errno));
conn_destroy(conn);
return NULL;
};
conn->recv_packet=conn_q_recv_packet;
conn->recv_packet_peek=conn_q_recv_packet_peek;
}
else{
conn->recv_packet = conn_recv_packet;
conn->recv_packet_peek = conn_recv_packet_peek;
}
conn->send_packet = conn_send_packet;
/* conn->send_data_packet = conn_send_data_packet;*/
conn->last_seqnum_received=-1;
conn->mtu=600;
conn->cur_packet=0;
conn->recv_timeout=1;
conn->seqnum=-1;
conn->write = conn->send_packet;
conn->read = conn->recv_packet;
/* conn->write_data = conn->send_data_packet; */
conn->dtls_mtu = 600;
return conn;
}

View File

@ -43,7 +43,7 @@ struct cw_Conn * conn_create_noq(int sock, struct sockaddr * addr)
if (!conn)
return NULL;
conn_init(conn);
cw_conn_init(conn);
conn->sock=sock;

View File

@ -132,7 +132,7 @@ static struct cw_StrListElem prefix[] = {
{DBG_DTLS_DETAIL, " DTLS - "},
{DBG_WARN, " Warning - "},
{DBG_MOD, " Mod - "},
{DBG_STATE, " State - "},
{DBG_STATE, " State Machine - "},
{DBG_CFG_SET, " Cfg Set - "},