handles now data channel with cisco ap

FossilOrigin-Name: f85465d7ebbdd15da6c9a24643c5956f52986ab8b703dc2db74a0b6f3607e2bd
This commit is contained in:
7u83@mail.ru 2016-04-10 14:04:58 +00:00
parent 6d9a5a5bcd
commit 1c656d2fd7
6 changed files with 71 additions and 8 deletions

View File

@ -56,6 +56,7 @@ AC_MODULES = mod_cipwap.o
# list of generated object files for AC.
AC_OBJS = \
wtplist.o wtpman.o conf.o ac_main.o \
dataman.o \
ac_interface.o \
socklist.o \
db.o \

View File

@ -45,6 +45,10 @@
#include "ac.h"
#include "cw/format.h"
#include "dataman.h"
int ac_run();
@ -134,6 +138,7 @@ int main(int argc, char *argv[])
ac_global_init();
if (!socklist_init())
goto errX;
@ -141,7 +146,8 @@ int main(int argc, char *argv[])
if (!wtplist_init())
goto errX;
if (!dataman_list_init())
goto errX;
cw_log(LOG_INFO, "Starting AC-Tube, Name=%s, ID=%s", conf_acname, conf_acid);
@ -289,9 +295,6 @@ int ac_run()
if (FD_ISSET(socklist[i].sockfd, &fset)){
// memset(&srcaddr, 0, sizeof(struct sockaddr_storage));
// sockaddrlen = sizeof(struct sockaddr_storage);
int len = sock_receive(socklist[i].sockfd,
buffer, sizeof(buffer),
0,
@ -311,8 +314,48 @@ int ac_run()
void process_cw_data_packet(int index, struct sockaddr *addr, uint8_t * buffer, int len)
{
cw_dbg(DBG_X, "There is a data packet now");
dataman_list_lock();
cw_dbg(DBG_X, "Dataman list locked, now getting");
struct dataman * dm = dataman_list_get(socklist[index].data_sockfd,addr);
cw_dbg(DBG_X, "Dataman list locked, now gotted");
cw_dbg(DBG_INFO,"Packet for dataman %s,%d",sock_addr2str_p(addr),socklist[index].data_sockfd);
if (!dm) {
cw_dbg(DBG_INFO,"No dataman %s,%d",sock_addr2str_p(addr),socklist[index].data_sockfd);
dm = dataman_create(socklist[index].data_sockfd,addr);
if (!dm){
cw_log(LOG_ERR,"Can't create dataman for packet from %s",sock_addr2str_p(addr));
return;
}
dataman_list_add(dm);
dataman_start(dm);
}
dataman_list_unlock();
dataman_add_packet(dm,buffer,len);
return;
exit(0);
printf("Data packet received len = %d\n",len);
exit(0);
struct wtpman *wtpman = wtplist_get(addr);
if (!wtpman){
cw_dbg(DBG_PKT_ERR,"Discarding packet on data channel from %s - No wtpman found.",sock_addr2str(addr));
return;
}
wtpman_addpacket(wtpman, buffer, len);
}

View File

@ -36,7 +36,7 @@
#include "conf.h"
#include "cw/log.h"
#include "cw/connlist.h"
static struct connlist * connlist;
@ -79,6 +79,15 @@ struct wtpman * wtplist_get(const struct sockaddr * addr)
}
struct wtpman * wtplist_get_by_session_id(uint8_t *session_id)
{
struct conn search;
memcpy (search.session_id, session_id,16);
struct conn * conn = connlist_get_by_session_id(connlist,&search);
return conn->data;
}
struct wtpman * wtplist_add(struct wtpman * wtpman)
{

View File

@ -13,6 +13,7 @@ extern struct wtpman * wtplist_add(struct wtpman * wtpman);
extern void wtplist_remove(struct wtpman * wtpman);
extern void wtplist_lock();
extern void wtplist_unlock();
extern struct wtpman * wtplist_get_by_session_id(uint8_t *session_id);
#endif

View File

@ -33,6 +33,7 @@
#include "cw/dtls.h"
#include "cw/dbg.h"
#include "cw/conn.h"
#include "cw/format.h"
#include "ac.h"
#include "conf.h"
@ -438,7 +439,7 @@ void wtpman_run_data(void *wtpman_arg)
cw_log(LOG_ERR, "I am the data thread**********************************************************************\n");
while (1) {
sleep(5);
conn->write_data(conn, data, 100);
// conn->write_data(conn, data, 100);
cw_log(LOG_ERR, "O was the data thread***********************************************************\n");
}
@ -481,9 +482,17 @@ static void wtpman_run(void *arg)
return;
}
conn->msg_start = msg_start_handler;
cw_dbg(DBG_INFO, "WTP from %s has joined with session id: %s",
sock_addr2str_p(&conn->addr),
format_bin2hex(conn->session_id,16));
cw_dbg(DBG_INFO, "Creating data thread");
pthread_t thread;
pthread_create(&thread, NULL, (void *) wtpman_run_data, (void *) wtpman);

View File

@ -86,7 +86,7 @@ int conn_send_data_msg(struct conn * conn, uint8_t *rawmsg,int len)
cw_dbg_pkt(DBG_PKT_OUT,conn,ptr,mtu,(struct sockaddr*)&conn->addr);
if (conn->write_data(conn,ptr,mtu)<0)
// if (conn->write_data(conn,ptr,mtu)<0)
return -1;
// XXX Fragmentation stuff..
@ -108,7 +108,7 @@ int conn_send_data_msg(struct conn * conn, uint8_t *rawmsg,int len)
cw_dbg_pkt(DBG_PKT_OUT,conn,ptr,packetlen,(struct sockaddr*)&conn->addr);
return conn->write_data(conn,ptr,packetlen-0);
// return conn->write_data(conn,ptr,packetlen-0);
}