2019-07-28 10:31:56 +08:00
|
|
|
#ifndef __SERVICE_MAIN_INCLUDE_H__
|
2015-07-13 16:28:09 +08:00
|
|
|
#define __SERVICE_MAIN_INCLUDE_H__
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
typedef struct SERVICE SERVICE;
|
|
|
|
|
|
|
|
#define MAX_DOMAIN_LEN 256
|
|
|
|
|
|
|
|
struct SERVICE
|
|
|
|
{
|
|
|
|
unsigned short curr_id;
|
|
|
|
ACL_HTABLE *table;
|
|
|
|
ACL_AIO *aio;
|
|
|
|
ACL_ASTREAM *sstream;
|
|
|
|
char listen_addr[256];
|
|
|
|
char dns_addr[256];
|
|
|
|
char dns_ip[32];
|
|
|
|
short dns_port;
|
|
|
|
char type;
|
|
|
|
#define SERVICE_TYPE_UDP 0
|
|
|
|
#define SERVICE_TYPE_TCP 1
|
|
|
|
|
|
|
|
int conn_timeout;
|
|
|
|
int rw_timeout;
|
|
|
|
};
|
|
|
|
|
|
|
|
#define KEY_LEN 64
|
|
|
|
#define MAX_BUF 4096
|
|
|
|
|
|
|
|
typedef struct SERVICE_CTX
|
|
|
|
{
|
|
|
|
ACL_ASTREAM *stream;
|
|
|
|
SERVICE *service;
|
|
|
|
char domain[256];
|
|
|
|
char domain_root[256];
|
|
|
|
char request_buf[MAX_BUF];
|
|
|
|
int request_len;
|
|
|
|
char respond_buf[MAX_BUF];
|
|
|
|
int respond_len;
|
|
|
|
unsigned short id;
|
|
|
|
unsigned short id_original;
|
|
|
|
unsigned short qtype;
|
|
|
|
char type;
|
|
|
|
#define SERVICE_CTX_TCP_REQUEST 0
|
|
|
|
#define SERVICE_CTX_TCP_RESPOND 1
|
|
|
|
#define SERVICE_CTX_UDP_REQUEST 2
|
|
|
|
#define SERVICE_CTX_UDP_RESPOND 3
|
|
|
|
char key[KEY_LEN];
|
|
|
|
|
|
|
|
struct sockaddr_in client_addr;
|
|
|
|
int client_addr_len;
|
|
|
|
} SERVICE_CTX;
|
|
|
|
|
|
|
|
/* in service_main.cpp */
|
|
|
|
void create_key(char *key, size_t size, char type, unsigned short id);
|
|
|
|
SERVICE_CTX *service_ctx_new(SERVICE *service, ACL_ASTREAM *stream,
|
|
|
|
char type, unsigned short id);
|
|
|
|
void service_ctx_free(SERVICE_CTX *ctx);
|
|
|
|
SERVICE_CTX *service_ctx_find(SERVICE *service, char type, unsigned int id);
|
|
|
|
void service_start(SERVICE *service);
|
|
|
|
SERVICE *service_create(const char *local_ip, short local_port,
|
|
|
|
const char *dns_ip, short dns_port);
|
|
|
|
void service_free(SERVICE *service);
|
|
|
|
|
|
|
|
/* in service_tcp.cpp */
|
|
|
|
void service_tcp_main(ACL_ASTREAM *client, SERVICE *service);
|
|
|
|
|
|
|
|
/* in service_udp.cpp */
|
|
|
|
void service_udp_init(SERVICE *service, const char *local_ip, int local_port,
|
|
|
|
const char *remote_ip, int remote_port);
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|