bruno
1 year ago
commit
959ef0f953
8 changed files with 224 additions and 0 deletions
@ -0,0 +1,24 @@
|
||||
|
||||
CC=gcc
|
||||
|
||||
DIR_OBJ=obj/
|
||||
DIR_SRC=src/
|
||||
|
||||
CFLAGS= -Wall
|
||||
LIBS= -levent
|
||||
|
||||
OBJ = \
|
||||
obj/main.o \ |
||||
obj/http.o \ |
||||
obj/fp.o \ |
||||
obj/net.o |
||||
|
||||
kdect_ms: $(OBJ) |
||||
$(CC) -o $@ $^ $(LIBS)
|
||||
|
||||
$(DIR_OBJ)%.o: $(DIR_SRC)%.c |
||||
$(CC) -c -o $@ $< $(CFLAGS)
|
||||
|
||||
clean: |
||||
rm $(DIR_OBJ)*.o
|
||||
|
@ -0,0 +1,29 @@
|
||||
#include "main.h" |
||||
|
||||
|
||||
struct s_kdect_fp *get_kdect_fp_bev( struct s_kdect_fp **kdect_fp, struct bufferevent *bev ){ |
||||
|
||||
|
||||
} |
||||
|
||||
int remove_kdect_fp_bev(struct s_kdect_fp **kdect_fp, struct bufferevent *bev){ |
||||
|
||||
} |
||||
|
||||
|
||||
int add_kdect_fp(struct s_kdect_fp **kdect_fp, struct s_kdect_fp *next){ |
||||
|
||||
} |
||||
|
||||
void free_kdect_fp( struct s_kdect_fp **kdect_fp ){ |
||||
|
||||
} |
||||
|
||||
|
||||
void free_handset( struct s_kdect_handset **handset ){ |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,16 @@
|
||||
#include "main.h" |
||||
|
||||
|
||||
int main(int argc, char **argv){ |
||||
|
||||
signal( SIGPIPE, SIG_IGN ); |
||||
|
||||
struct s_kdect_ms *message_server; |
||||
|
||||
message_server = (struct s_kdect_ms *) calloc(1, sizeof(struct s_kdect_ms)); |
||||
init_net_server( message_server ); |
||||
|
||||
|
||||
return 0; |
||||
} |
||||
|
@ -0,0 +1,64 @@
|
||||
|
||||
#ifndef MAIN_H |
||||
#define MAIN_H |
||||
|
||||
|
||||
#include <sys/types.h> |
||||
#include <sys/socket.h> |
||||
#include <netinet/in.h> |
||||
#include <signal.h> |
||||
#include <stdlib.h> |
||||
#include <string.h> |
||||
#include <event.h> |
||||
#include <event2/listener.h> |
||||
#include <event2/bufferevent_ssl.h> |
||||
|
||||
|
||||
struct s_net_server { |
||||
char ip[16]; |
||||
unsigned short int port; |
||||
struct sockaddr_in sock_addr; |
||||
struct evconnlistener *listener; |
||||
struct event_base *evbase; |
||||
}; |
||||
|
||||
struct s_net_fp { |
||||
char ip[16]; |
||||
unsigned short int port; |
||||
struct sockaddr_in sock_addr; |
||||
struct event_base *evbase; |
||||
struct bufferevent *bev; |
||||
}; |
||||
|
||||
/* estação base */ |
||||
struct s_kdect_fp { |
||||
struct s_net_fp net; |
||||
struct s_kdect_handset *handset; |
||||
struct s_fp *next; |
||||
}; |
||||
|
||||
/* telefones */ |
||||
struct s_kdect_handset { |
||||
char *name; |
||||
unsigned short int status; |
||||
unsigned int timestamp; |
||||
struct s_handset *next;
|
||||
}; |
||||
|
||||
|
||||
struct s_kdect_ms { |
||||
struct s_net_server net; |
||||
struct s_kdect_fp *kdect_fp; |
||||
|
||||
}; |
||||
|
||||
void accept_in(struct evconnlistener *listener, int sock, struct sockaddr *sa, int sa_len, void *arg); |
||||
int init_net_server( struct s_kdect_ms *message_server); |
||||
int add_kdect_fp(struct s_kdect_fp **kdect_fp, struct s_kdect_fp *); |
||||
|
||||
void free_kdect_fp( struct s_kdect_fp **kdect_fp ); |
||||
|
||||
struct s_kdect_fp *get_kdect_fp_bev( struct s_kdect_fp **kdect_fp, struct bufferevent *bev ); |
||||
void free_handset( struct s_kdect_handset **handset ); |
||||
int remove_kdect_fp_bev(struct s_kdect_fp **kdect_fp, struct bufferevent *bev); |
||||
#endif |
@ -0,0 +1,86 @@
|
||||
#include "main.h" |
||||
|
||||
|
||||
|
||||
void read_in (struct bufferevent *bev, void *arg){ |
||||
struct s_kdect_ms *message_server = (struct s_kdect_ms *) arg; |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
void descriptor_in(struct bufferevent *bev, short error, void *param){ |
||||
struct s_kdect_ms *message_server = (struct s_kdect_ms *) param; |
||||
|
||||
if(error & BEV_EVENT_CONNECTED){ /* SSL conectado */ |
||||
return; |
||||
} |
||||
else if (error & (BEV_EVENT_ERROR|BEV_EVENT_EOF)){ |
||||
struct s_kdect_fp *kdect_fp = get_kdect_fp_bev(&message_server->kdect_fp, bev); |
||||
if(kdect_fp){ |
||||
//conclude_kdect_fp(client); unlock thread
|
||||
remove_kdect_fp_bev(&message_server->kdect_fp, bev); |
||||
} |
||||
} |
||||
else { |
||||
struct s_kdect_fp *kdect_fp = get_kdect_fp_bev(&message_server->kdect_fp, bev); |
||||
if(kdect_fp){ |
||||
//conclude_kdect_fp(client); unlock thread
|
||||
remove_kdect_fp_bev(&message_server->kdect_fp, bev); |
||||
} |
||||
} |
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
void accept_in(struct evconnlistener *listener, int sock, struct sockaddr *sa, int sa_len, void *arg){ |
||||
|
||||
struct s_kdect_ms *message_server = (struct s_kdect_ms *) arg; |
||||
struct s_kdect_fp *kdect_fp = NULL; |
||||
|
||||
kdect_fp = calloc(1, sizeof(struct s_net_fp)); |
||||
if( !kdect_fp ){ |
||||
exit(-1); |
||||
} |
||||
|
||||
kdect_fp->net.evbase = evconnlistener_get_base(message_server->net.listener); |
||||
kdect_fp->net.bev = bufferevent_socket_new(kdect_fp->net.evbase, sock, BEV_OPT_CLOSE_ON_FREE); |
||||
|
||||
if(!kdect_fp->net.bev){ |
||||
free_kdect_fp(&kdect_fp); |
||||
return; |
||||
} |
||||
|
||||
bufferevent_set_max_single_read(kdect_fp->net.bev, EV_SSIZE_MAX); |
||||
add_kdect_fp(&message_server->kdect_fp, kdect_fp); |
||||
bufferevent_setcb(kdect_fp->net.bev, read_in, NULL, descriptor_in, (void *)message_server); |
||||
bufferevent_setwatermark(kdect_fp->net.bev, EV_READ, 0, 0); |
||||
bufferevent_enable(kdect_fp->net.bev, EV_READ); |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
int init_net_server( struct s_kdect_ms *message_server){ |
||||
|
||||
|
||||
memset( &message_server->net.sock_addr, 0, sizeof(message_server->net.sock_addr)); |
||||
message_server->net.sock_addr.sin_family = AF_INET; |
||||
message_server->net.sock_addr.sin_port = htons(20000); |
||||
message_server->net.sock_addr.sin_addr.s_addr = INADDR_ANY; |
||||
|
||||
message_server->net.evbase = event_base_new(); |
||||
if( !message_server->net.evbase ){ |
||||
exit(-1); |
||||
} |
||||
|
||||
message_server->net.listener = evconnlistener_new_bind( |
||||
message_server->net.evbase, accept_in, (void *)message_server,
|
||||
LEV_OPT_CLOSE_ON_FREE | LEV_OPT_REUSEABLE, 10, |
||||
(struct sockaddr *)&(message_server->net.sock_addr), sizeof( message_server->net.sock_addr )); |
||||
|
||||
event_base_loop( message_server->net.evbase, EVLOOP_NO_EXIT_ON_EMPTY ); |
||||
|
||||
} |
||||
|
Loading…
Reference in new issue