mirror of
https://github.com/darkk/redsocks.git
synced 2025-08-28 12:45: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;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
void redsocks_write_helper_ex(
|
int redsocks_write_helper_ex(
|
||||||
struct bufferevent *buffev, redsocks_client *client,
|
struct bufferevent *buffev, redsocks_client *client,
|
||||||
redsocks_message_maker mkmessage, int state, size_t wm_low, size_t wm_high)
|
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;
|
int len;
|
||||||
struct evbuffer *buff = NULL;
|
struct evbuffer *buff = NULL;
|
||||||
int drop = 1;
|
int drop = 1;
|
||||||
|
|
||||||
if (mkmessage) {
|
if (mkmessage) {
|
||||||
buff = mkmessage(client);
|
buff = mkmessage(p);
|
||||||
if (!buff)
|
if (!buff)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
len = bufferevent_write_buffer(client->relay, buff);
|
len = bufferevent_write_buffer(client->relay, buff);
|
||||||
if (len < 0) {
|
if (len < 0) {
|
||||||
|
if (client)
|
||||||
redsocks_log_errno(client, LOG_ERR, "bufferevent_write_buffer");
|
redsocks_log_errno(client, LOG_ERR, "bufferevent_write_buffer");
|
||||||
|
else
|
||||||
|
log_errno(LOG_ERR, "bufferevent_write_buffer");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (client)
|
||||||
client->state = state;
|
client->state = state;
|
||||||
buffev->wm_read.low = wm_low;
|
buffev->wm_read.low = wm_low;
|
||||||
buffev->wm_read.high = wm_high;
|
buffev->wm_read.high = wm_high;
|
||||||
@ -458,15 +471,17 @@ void redsocks_write_helper_ex(
|
|||||||
fail:
|
fail:
|
||||||
if (buff)
|
if (buff)
|
||||||
evbuffer_free(buff);
|
evbuffer_free(buff);
|
||||||
if (drop)
|
if (drop && client)
|
||||||
redsocks_drop_client(client);
|
redsocks_drop_client(client);
|
||||||
|
return drop ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void redsocks_write_helper(
|
int redsocks_write_helper(
|
||||||
struct bufferevent *buffev, redsocks_client *client,
|
struct bufferevent *buffev, redsocks_client *client,
|
||||||
redsocks_message_maker mkmessage, int state, size_t wm_only)
|
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)
|
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);
|
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)(redsocks_client *client);
|
||||||
|
typedef struct evbuffer* (*redsocks_message_maker_plain)(void *p);
|
||||||
struct evbuffer *mkevbuffer(void *data, size_t len);
|
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,
|
struct bufferevent *buffev, redsocks_client *client,
|
||||||
redsocks_message_maker mkmessage, int state, size_t wm_low, size_t wm_high);
|
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,
|
struct bufferevent *buffev, redsocks_client *client,
|
||||||
redsocks_message_maker mkmessage, int state, size_t wm_only);
|
redsocks_message_maker mkmessage, int state, size_t wm_only);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user