mirror of
https://github.com/darkk/redsocks.git
synced 2025-08-28 04:35:30 +00:00
This cleanup commit introduces ex-plain function!
This commit is contained in:
parent
9c8f21a986
commit
45cab3de31
25
redsocks.c
25
redsocks.c
@ -429,26 +429,39 @@ fail:
|
||||
return retval;
|
||||
}
|
||||
|
||||
void redsocks_write_helper_ex(
|
||||
int redsocks_write_helper_ex(
|
||||
struct bufferevent *buffev, redsocks_client *client,
|
||||
redsocks_message_maker mkmessage, int state, size_t wm_low, size_t wm_high)
|
||||
{
|
||||
assert(client);
|
||||
return redsocks_write_helper_ex_plain(buffev, client, (redsocks_message_maker_plain)mkmessage,
|
||||
client, state, wm_low, wm_high);
|
||||
}
|
||||
|
||||
int redsocks_write_helper_ex_plain(
|
||||
struct bufferevent *buffev, redsocks_client *client,
|
||||
redsocks_message_maker_plain mkmessage, void *p, int state, size_t wm_low, size_t wm_high)
|
||||
{
|
||||
int len;
|
||||
struct evbuffer *buff = NULL;
|
||||
int drop = 1;
|
||||
|
||||
if (mkmessage) {
|
||||
buff = mkmessage(client);
|
||||
buff = mkmessage(p);
|
||||
if (!buff)
|
||||
goto fail;
|
||||
|
||||
len = bufferevent_write_buffer(client->relay, buff);
|
||||
if (len < 0) {
|
||||
if (client)
|
||||
redsocks_log_errno(client, LOG_ERR, "bufferevent_write_buffer");
|
||||
else
|
||||
log_errno(LOG_ERR, "bufferevent_write_buffer");
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
if (client)
|
||||
client->state = state;
|
||||
buffev->wm_read.low = wm_low;
|
||||
buffev->wm_read.high = wm_high;
|
||||
@ -458,15 +471,17 @@ void redsocks_write_helper_ex(
|
||||
fail:
|
||||
if (buff)
|
||||
evbuffer_free(buff);
|
||||
if (drop)
|
||||
if (drop && client)
|
||||
redsocks_drop_client(client);
|
||||
return drop ? -1 : 0;
|
||||
}
|
||||
|
||||
void redsocks_write_helper(
|
||||
int redsocks_write_helper(
|
||||
struct bufferevent *buffev, redsocks_client *client,
|
||||
redsocks_message_maker mkmessage, int state, size_t wm_only)
|
||||
{
|
||||
redsocks_write_helper_ex(buffev, client, mkmessage, state, wm_only, wm_only);
|
||||
assert(client);
|
||||
return redsocks_write_helper_ex(buffev, client, mkmessage, state, wm_only, wm_only);
|
||||
}
|
||||
|
||||
static void redsocks_relay_connected(struct bufferevent *buffev, void *_arg)
|
||||
|
@ -70,11 +70,16 @@ int sizes_greater_equal(size_t a, size_t b);
|
||||
int redsocks_read_expected(redsocks_client *client, struct evbuffer *input, void *data, size_comparator comparator, size_t expected);
|
||||
|
||||
typedef struct evbuffer* (*redsocks_message_maker)(redsocks_client *client);
|
||||
typedef struct evbuffer* (*redsocks_message_maker_plain)(void *p);
|
||||
struct evbuffer *mkevbuffer(void *data, size_t len);
|
||||
void redsocks_write_helper_ex(
|
||||
/* Yahoo! This code is ex-plain! :-D */
|
||||
int redsocks_write_helper_ex_plain(
|
||||
struct bufferevent *buffev, redsocks_client *client,
|
||||
redsocks_message_maker_plain mkmessage, void *p, int state, size_t wm_low, size_t wm_high);
|
||||
int redsocks_write_helper_ex(
|
||||
struct bufferevent *buffev, redsocks_client *client,
|
||||
redsocks_message_maker mkmessage, int state, size_t wm_low, size_t wm_high);
|
||||
void redsocks_write_helper(
|
||||
int redsocks_write_helper(
|
||||
struct bufferevent *buffev, redsocks_client *client,
|
||||
redsocks_message_maker mkmessage, int state, size_t wm_only);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user