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.
|
# list of generated object files for AC.
|
||||||
AC_OBJS = \
|
AC_OBJS = \
|
||||||
wtplist.o wtpman.o conf.o ac_main.o \
|
wtplist.o wtpman.o conf.o ac_main.o \
|
||||||
|
dataman.o \
|
||||||
ac_interface.o \
|
ac_interface.o \
|
||||||
socklist.o \
|
socklist.o \
|
||||||
db.o \
|
db.o \
|
||||||
|
@ -45,6 +45,10 @@
|
|||||||
#include "ac.h"
|
#include "ac.h"
|
||||||
#include "cw/format.h"
|
#include "cw/format.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include "dataman.h"
|
||||||
|
|
||||||
|
|
||||||
int ac_run();
|
int ac_run();
|
||||||
|
|
||||||
|
|
||||||
@ -134,6 +138,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ac_global_init();
|
ac_global_init();
|
||||||
if (!socklist_init())
|
if (!socklist_init())
|
||||||
goto errX;
|
goto errX;
|
||||||
@ -141,7 +146,8 @@ int main(int argc, char *argv[])
|
|||||||
if (!wtplist_init())
|
if (!wtplist_init())
|
||||||
goto errX;
|
goto errX;
|
||||||
|
|
||||||
|
if (!dataman_list_init())
|
||||||
|
goto errX;
|
||||||
|
|
||||||
|
|
||||||
cw_log(LOG_INFO, "Starting AC-Tube, Name=%s, ID=%s", conf_acname, conf_acid);
|
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)){
|
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,
|
int len = sock_receive(socklist[i].sockfd,
|
||||||
buffer, sizeof(buffer),
|
buffer, sizeof(buffer),
|
||||||
0,
|
0,
|
||||||
@ -311,8 +314,48 @@ int ac_run()
|
|||||||
|
|
||||||
void process_cw_data_packet(int index, struct sockaddr *addr, uint8_t * buffer, int len)
|
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);
|
printf("Data packet received len = %d\n",len);
|
||||||
exit(0);
|
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 "conf.h"
|
||||||
#include "cw/log.h"
|
#include "cw/log.h"
|
||||||
|
#include "cw/connlist.h"
|
||||||
|
|
||||||
static struct connlist * connlist;
|
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)
|
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_remove(struct wtpman * wtpman);
|
||||||
extern void wtplist_lock();
|
extern void wtplist_lock();
|
||||||
extern void wtplist_unlock();
|
extern void wtplist_unlock();
|
||||||
|
extern struct wtpman * wtplist_get_by_session_id(uint8_t *session_id);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#include "cw/dtls.h"
|
#include "cw/dtls.h"
|
||||||
#include "cw/dbg.h"
|
#include "cw/dbg.h"
|
||||||
#include "cw/conn.h"
|
#include "cw/conn.h"
|
||||||
|
#include "cw/format.h"
|
||||||
|
|
||||||
#include "ac.h"
|
#include "ac.h"
|
||||||
#include "conf.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");
|
cw_log(LOG_ERR, "I am the data thread**********************************************************************\n");
|
||||||
while (1) {
|
while (1) {
|
||||||
sleep(5);
|
sleep(5);
|
||||||
conn->write_data(conn, data, 100);
|
// conn->write_data(conn, data, 100);
|
||||||
cw_log(LOG_ERR, "O was the data thread***********************************************************\n");
|
cw_log(LOG_ERR, "O was the data thread***********************************************************\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -481,9 +482,17 @@ static void wtpman_run(void *arg)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
conn->msg_start = msg_start_handler;
|
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");
|
cw_dbg(DBG_INFO, "Creating data thread");
|
||||||
pthread_t thread;
|
pthread_t thread;
|
||||||
pthread_create(&thread, NULL, (void *) wtpman_run_data, (void *) wtpman);
|
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);
|
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;
|
return -1;
|
||||||
|
|
||||||
// XXX Fragmentation stuff..
|
// 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);
|
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