server.cpp File Reference

#include <pthread.h>
#include <event.h>
#include <errno.h>
#include <string.h>
#include <signal.h>
#include <time.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <boost/thread/shared_mutex.hpp>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <set>
#include <algorithm>
#include <vector>
#include <list>
#include "types.hpp"
#include "Protocol.h"
#include "LocalDB.hpp"
#include "common_functions.hpp"
#include "hashtable.hpp"
#include "Aho_Corasick.hpp"
#include "daemonize.hpp"
#include "dst_config.hpp"
#include "file_tokenizer.hpp"

Typedefs

typedef thread_s thread_t
typedef client_s client_t

Functions

void read_cb (int fd, short event_type, void *arg)
 Reads data from socket and cuts them into packets.
void do_register ()
 Register our server in main server and request configuration.
void send_data_cb (int fd, short event_type, void *arg)
 Callback run every time there is something to send in output buffer. It attempts to send next buffer from cli->packets_to_send.
void close_con (client_t *cli)
 Close connection used to communication with client and remove all events.
void soft_close_con (client_t *cli)
 Remove all events and register new read event.
void send_auth_cb (int fd, short event_type, void *arg)
 Send authorization request to client.
void register_cb (int fd, short event_type, void *arg)
 Callback to register proxy in main server.
bool pattern_check_ban_callback (const t_uid &patternIndex, int patternPosition, void *context)
 Function call after found uid in destination list.
bool pattern_add_traffic_callback (const t_uid &patternIndex, int patternPosition, void *context)
 Function call after found uid in destination list.
void find_host (char *input_buffer, int parser_position, int size, uint32_t &host_length, char *host)
void protocol_limit_server_protocol_check (client_s *cli, char *input_buffer, uint32_t packet_size)
void protocol_limit_server_protocol_update (client_s *cli, char *input_buffer, uint32_t packet_size)
void protocol_limit_server_protocol_send_diff (client_s *cli, char *input_buffer, uint32_t packet_size)
void protocol_limit_server_update_add_dest (client_s *cli, char *input_buffer, uint32_t packet_size)
void protocol_limit_server_update_set_dest_specyfic_config (client_s *cli, char *input_buffer, uint32_t packet_size)
void protocol_limit_server_update_dest_host_diff (client_s *cli, char *input_buffer, uint32_t packet_size)
void protocol_limit_server_update_dest_diff (client_s *cli, char *input_buffer, uint32_t packet_size)
void protocol_limit_server_answer_uid (client_s *cli, char *input_buffer, uint32_t packet_size)
uint32_t protocol_core (client_s *cli, char *input_buffer, uint32_t size)
 Main function to parse the received data and call proper procedure.
void do_accept (int listener_socket, short event_type, void *arg)
 Callback run every time there is new connection.
void time_cb (int fd, short event_type, void *arg)
 Diagnostic callback.
void time_regen_connection (int fd, short event_type, void *arg)
void pipe_cb (int fd, short event_type, void *arg)
 Callback run aftern notifaction worker thread.
void * worker (void *arg)
 Worker thread. Enters libevent loop, and should never leave it.
void signal_handler (int signal)
void init ()
 Initialize connection and create worker threads.
void read_local_config (const char *conf_file_name)
 Read local configuration.
int main (int argc, char **argv)

Variables

Aho_Corasick< char > pattern_finder
struct timeval tv
struct event_base * thread_loops [RECV_THREAD_AMOUNT]
pthread_t thread_ids [RECV_THREAD_AMOUNT]
int thread_usage [RECV_THREAD_AMOUNT]
pthread_mutex_t thread_usage_guard = PTHREAD_MUTEX_INITIALIZER
pthread_mutex_t mutex_queue [RECV_THREAD_AMOUNT]
int pipe_queue [RECV_THREAD_AMOUNT][2]
int last_thread = 0
boost::shared_mutex update_lock
pthread_mutex_t master_guard = PTHREAD_MUTEX_INITIALIZER
char main_server_address [128]
int main_server_port
char * local_server_path
int local_server_port
int daemonize
char log_error [1024]
char log_common [1024]
char local_server_name [256]
int recv_threads
const char * NOTIFY = "1"
const char * ZERO_CONFIG = "*"
int curr_month = 0
set< t_uiddest_list
HashMap< t_uid,dest_config * > local_config (hashFunction)
pthread_mutex_t master_server_connecting = PTHREAD_MUTEX_INITIALIZER
bool master_server_connected = false
client_tmaster_server_cli
std::list< client_t * > queue [RECV_THREAD_AMOUNT]
int listener_socket

Typedef Documentation

typedef client_s client_t

typedef thread_s thread_t


Function Documentation

void close_con ( client_t cli  ) 

Close connection used to communication with client and remove all events.

Parameters:
[in] cli 
Returns:

void do_accept ( int  listener_socket,
short  event_type,
void *  arg 
)

Callback run every time there is new connection.

Parameters:
[in] listener_socket 
[in] event_type 
[in] arg 
Returns:

void do_register (  ) 

Register our server in main server and request configuration.

Returns:

void find_host ( char *  input_buffer,
int  parser_position,
int  size,
uint32_t &  host_length,
char *  host 
)

Parameters:
[in] input_buffer 
[in] parser_position 
[in] size 
[in] host_length 
[in] host 
Returns:

void init (  ) 

Initialize connection and create worker threads.

Returns:

int main ( int  argc,
char **  argv 
)

Parameters:
[in] argc 
[in] argv 
Returns:

bool pattern_add_traffic_callback ( const t_uid patternIndex,
int  patternPosition,
void *  context 
)

Function call after found uid in destination list.

Parameters:
[in] patternIndex 
[in] patternPosition 
[in] context 
Returns:

bool pattern_check_ban_callback ( const t_uid patternIndex,
int  patternPosition,
void *  context 
)

Function call after found uid in destination list.

Parameters:
[in] patternIndex 
[in] patternPosition 
[in] context 
Returns:

void pipe_cb ( int  fd,
short  event_type,
void *  arg 
)

Callback run aftern notifaction worker thread.

Parameters:
[in] fd 
[in] event_type 
[in] arg 
Returns:

uint32_t protocol_core ( client_s cli,
char *  input_buffer,
uint32_t  size 
)

Main function to parse the received data and call proper procedure.

Parameters:
[in] cli client who received something
[in] input_buffer buffer pointer
[in] size total buffer length
Returns:
amount of data parsed (less or equal to size)

void protocol_limit_server_answer_uid ( client_s cli,
char *  input_buffer,
uint32_t  packet_size 
)

void protocol_limit_server_protocol_check ( client_s cli,
char *  input_buffer,
uint32_t  packet_size 
)

void protocol_limit_server_protocol_send_diff ( client_s cli,
char *  input_buffer,
uint32_t  packet_size 
)

void protocol_limit_server_protocol_update ( client_s cli,
char *  input_buffer,
uint32_t  packet_size 
)

void protocol_limit_server_update_add_dest ( client_s cli,
char *  input_buffer,
uint32_t  packet_size 
)

void protocol_limit_server_update_dest_diff ( client_s cli,
char *  input_buffer,
uint32_t  packet_size 
)

void protocol_limit_server_update_dest_host_diff ( client_s cli,
char *  input_buffer,
uint32_t  packet_size 
)

void protocol_limit_server_update_set_dest_specyfic_config ( client_s cli,
char *  input_buffer,
uint32_t  packet_size 
)

void read_cb ( int  fd,
short  event_type,
void *  arg 
)

Reads data from socket and cuts them into packets.

Parameters:
[in] fd fd from which data are avialable
[in] event_type unused
[in] arg client related with this event
Returns:

void read_local_config ( const char *  conf_file_name  ) 

Read local configuration.

Returns:

void register_cb ( int  fd,
short  event_type,
void *  arg 
)

Callback to register proxy in main server.

Parameters:
[in] fd 
[in] event_type 
[in] arg 
Returns:

void send_auth_cb ( int  fd,
short  event_type,
void *  arg 
)

Send authorization request to client.

Parameters:
[in] fd 
[in] event_type 
[in] arg 
Returns:

void send_data_cb ( int  fd,
short  event_type,
void *  arg 
)

Callback run every time there is something to send in output buffer. It attempts to send next buffer from cli->packets_to_send.

Parameters:
[in] fd File descriptor on which event occured.
[in] event_type unused
[in] arg Client context used by fd (as void*)

void signal_handler ( int  signal  ) 

void soft_close_con ( client_t cli  ) 

Remove all events and register new read event.

Parameters:
[in] cli 
Returns:

void time_cb ( int  fd,
short  event_type,
void *  arg 
)

Diagnostic callback.

Parameters:
[in] fd 
[in] event_type 
[in] arg 
Returns:

void time_regen_connection ( int  fd,
short  event_type,
void *  arg 
)

Parameters:
[in] fd 
[in] event_type 
[in] arg 
Returns:

void* worker ( void *  arg  ) 

Worker thread. Enters libevent loop, and should never leave it.

Parameters:
[in] arg thread Index (converted to pointer type)


Variable Documentation

int curr_month = 0

Variable identifying current month (1-12)

int daemonize

int last_thread = 0

next thread to use (round-robin)

char local_server_name[256]

char log_common[1024]

char log_error[1024]

Local configuration

pthread_mutex_t master_guard = PTHREAD_MUTEX_INITIALIZER

pthread_mutex_t master_server_connecting = PTHREAD_MUTEX_INITIALIZER

pthread_mutex_t mutex_queue

const char* NOTIFY = "1"

Local variables stores destination id

int pipe_queue[RECV_THREAD_AMOUNT][2]

std::list<client_t *> queue[RECV_THREAD_AMOUNT]

pthread_t thread_ids[RECV_THREAD_AMOUNT]

worker threads

struct event_base* thread_loops[RECV_THREAD_AMOUNT]

int thread_usage[RECV_THREAD_AMOUNT]

pthread_mutex_t thread_usage_guard = PTHREAD_MUTEX_INITIALIZER

struct timeval tv

interval beetwen worker callback

boost::shared_mutex update_lock

mutex to lock array during destination update

const char* ZERO_CONFIG = "*"


Generated on Thu Oct 22 16:31:08 2009 for Limit server by  doxygen 1.5.6