Browse Source

Merge pull request #1833 from uProxy/libonly-v3.1.1

LIB_ONLY improvements
pull/1839/head
Max Lv 7 years ago
committed by GitHub
parent
commit
ee60377b08
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 3 deletions
  1. 18
      src/local.c
  2. 12
      src/shadowsocks.h
  3. 4
      src/udprelay.c

18
src/local.c

@ -1722,7 +1722,7 @@ main(int argc, char **argv)
#else #else
int int
start_ss_local_server(profile_t profile)
_start_ss_local_server(profile_t profile, ss_local_callback callback, void *udata)
{ {
srand(time(NULL)); srand(time(NULL));
@ -1831,6 +1831,10 @@ start_ss_local_server(profile_t profile)
// Init connections // Init connections
cork_dllist_init(&connections); cork_dllist_init(&connections);
if (callback) {
callback(listen_ctx.fd, udp_fd, udata);
}
// Enter the loop // Enter the loop
ev_run(loop, 0); ev_run(loop, 0);
@ -1852,4 +1856,16 @@ start_ss_local_server(profile_t profile)
return 0; return 0;
} }
int
start_ss_local_server(profile_t profile)
{
return _start_ss_local_server(profile, NULL, NULL);
}
int
start_ss_local_server_with_callback(profile_t profile, ss_local_callback callback, void *udata)
{
return _start_ss_local_server(profile, callback, udata);
}
#endif #endif

12
src/shadowsocks.h

@ -64,6 +64,8 @@ typedef struct {
extern "C" { extern "C" {
#endif #endif
typedef void (*ss_local_callback) (int socks_fd, int udp_fd, void *data);
/* /*
* Create and start a shadowsocks local server. * Create and start a shadowsocks local server.
* *
@ -77,6 +79,16 @@ extern "C" {
*/ */
int start_ss_local_server(profile_t profile); int start_ss_local_server(profile_t profile);
/*
* Create and start a shadowsocks local server, specifying a callback.
*
* The callback is invoked when the local server has started successfully. It passes the SOCKS
* server and UDP relay file descriptors, along with any supplied user data.
*
* Returns -1 on failure.
*/
int start_ss_local_server_with_callback(profile_t profile, ss_local_callback callback, void *udata);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

4
src/udprelay.c

@ -1383,8 +1383,8 @@ void
free_udprelay() free_udprelay()
{ {
struct ev_loop *loop = EV_DEFAULT; struct ev_loop *loop = EV_DEFAULT;
while (server_num-- > 0) {
server_ctx_t *server_ctx = server_ctx_list[server_num];
while (server_num > 0) {
server_ctx_t *server_ctx = server_ctx_list[--server_num];
ev_io_stop(loop, &server_ctx->io); ev_io_stop(loop, &server_ctx->io);
close(server_ctx->fd); close(server_ctx->fd);
cache_delete(server_ctx->conn_cache, 0); cache_delete(server_ctx->conn_cache, 0);

Loading…
Cancel
Save