初步完成连接层的调用框架。
This commit is contained in:
@@ -40,47 +40,68 @@ struct tfe_stream
|
||||
|
||||
struct tfe_conn upstream;
|
||||
struct tfe_conn downstream;
|
||||
void* application_pme;
|
||||
};
|
||||
|
||||
|
||||
enum tfe_stream_action
|
||||
{
|
||||
ACTION_FORWARD_DATA,
|
||||
ACTION_DEFER_DATA,
|
||||
ACTION_DROP_DATA
|
||||
};
|
||||
enum tfe_stream_action_opt
|
||||
{
|
||||
ACTION_OPT_FOWARD_BYTES, //value is size_t, default: forward entire data
|
||||
ACTION_OPT_DEFER_TIME_TV, //value is "struct timeval " which defines in <time.h>, default: time defer is not enabled
|
||||
ACTION_OPT_DEFER_BYTES, //value is size_t, default: defer entire data
|
||||
ACTION_OPT_DROP_BYTES //value is size_t, default: drop entire data
|
||||
};
|
||||
enum tfe_stream_close_reason
|
||||
{
|
||||
REASON_PASSIVE_CLOSED,
|
||||
REASON_ACTIVE_CLOSED,
|
||||
REASON_ERROR
|
||||
};
|
||||
int tfe_stream_action_set_opt(const struct tfe_stream* stream,enum tfe_stream_action_opt type, void* value, size_t size);
|
||||
/*
|
||||
@return 0 if successful, or -1 if an error occurred
|
||||
*/
|
||||
|
||||
int tfe_stream_write(const struct tfe_stream* stream, enum tfe_conn_dir dir, const unsigned char *data, size_t len);
|
||||
|
||||
struct tfe_stream_write_ctx{};
|
||||
//following tfe_stream_write_xx functions are NOT thread safe, MUST be called in the stream process thread.
|
||||
struct tfe_stream_write_ctx* tfe_stream_write_frag_start(const struct tfe_stream* stream, enum tfe_conn_dir dir);
|
||||
/*
|
||||
@return 0 if successful, or -1 if an error occurred
|
||||
*/
|
||||
int tfe_stream_write_frag(struct tfe_stream_write_ctx* w_ctx,const unsigned char *data, size_t size);
|
||||
void tfe_stream_write_frag_end(struct tfe_stream_write_ctx* w_ctx);
|
||||
//Return 1 for identify as its traffic;
|
||||
//Return 0 for unknown traffic;
|
||||
typedef int proto_pend_cb_t(const struct tfe_stream* stream, struct evbuffer *data, void **pme);
|
||||
typedef tfe_stream_action stream_open_cb_t(const struct tfe_stream* stream, unsigned int thread_id, enum tfe_conn_dir dir, const unsigned char *data, size_t len, void **pme);
|
||||
typedef tfe_stream_action stream_data_cb_t(const struct tfe_stream* stream, unsigned int thread_id, enum tfe_conn_dir dir, const unsigned char *data, size_t len, void **pme);
|
||||
typedef void stream_close_cb_t(const struct tfe_stream* stream, unsigned int thread_id, enum tfe_stream_close_reason reason, void **pme);
|
||||
|
||||
enum tfe_proto_action
|
||||
{
|
||||
PROTO_ATCION_FORWARD,
|
||||
PROTO_ACTION_DEFER,
|
||||
PROTO_ACTION_STEAL,
|
||||
PROTO_ACTION_PASSTHROUGH,
|
||||
PROTO_ACTION_CLOSE
|
||||
};
|
||||
enum tfe_proto_action_opt
|
||||
{
|
||||
ACTION_OPT_DEFER_TIME_TV, //value is "struct timeval " which defines in <time.h>, default: time defer is not enabled
|
||||
ACTION_OPT_DEFER_BYTES, //value is size_t, default: defer entire evbufer
|
||||
ACTION_OPT_FOWARD_BYTES, //value is size_t, default: forward entire evbufer
|
||||
ACTION_OPT_CLOSE_DIR //value is enum tfe_conn_dir, default: close both side.
|
||||
};
|
||||
int tfe_proto_action_set_opt(const struct tfe_stream* stream,enum tfe_proto_action_opt type, void* value, size_t size);
|
||||
typedef tfe_proto_action proto_read_cb_t(const struct tfe_stream* stream, struct evbuffer *data, enum tfe_conn_dir dir, void **pme);
|
||||
|
||||
typedef void proto_close_cb_t(const struct tfe_stream* stream, int ev, void **pme);
|
||||
void tfe_stream_detach(const struct tfe_stream* stream);
|
||||
int tfe_stream_preempt(const struct tfe_stream* stream);
|
||||
|
||||
int stream_shutdown(const struct tfe_stream* stream);//close both sides of the stream.
|
||||
int stream_shutdown_dir(const struct tfe_stream* stream, enum tfe_conn_dir dir);
|
||||
//typedef int proto_onwrite_cb_t(struct tfe_stream*, struct evbuffer *data, void **pme);
|
||||
|
||||
struct tfe_proto_module
|
||||
struct tfe_plugin
|
||||
{
|
||||
char symbol[TFE_SYMBOL_MAX];
|
||||
proto_pend_cb_t *on_pend;
|
||||
proto_read_cb_t *on_read;
|
||||
proto_close_cb_t *on_close;
|
||||
enum tfe_app_proto proto;
|
||||
stream_open_cb_t* on_open;
|
||||
stream_data_cb_t* on_data;
|
||||
stream_close_cb_t* on_close;
|
||||
// proto_onwrite_cb_t *onwrite;
|
||||
|
||||
};
|
||||
int tfe_io_write(struct pxy_conn_desc* dest,int dir,struct evbuffer *data);
|
||||
|
||||
int tfe_xxx_proto_init(struct tfe_proto_module*m);
|
||||
int tfe_xxx_proto_init(struct tfe_plugin*m);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user