handles now data channel with cisco ap
FossilOrigin-Name: f85465d7ebbdd15da6c9a24643c5956f52986ab8b703dc2db74a0b6f3607e2bd
This commit is contained in:
parent
6d9a5a5bcd
commit
1c656d2fd7
@ -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 \
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user