diff --git a/local.c b/local.c index cd08697a..3eeaf2ac 100755 --- a/local.c +++ b/local.c @@ -33,9 +33,12 @@ #define EWOULDBLOCK EAGAIN #endif +#define MAX_SERVER_NUM 10 + #define min(a,b) (((a)<(b))?(a):(b)) -static char *_server; +static char *_servers[MAX_SERVER_NUM]; +static int _server_num; static char *_remote_port; static int _timeout; @@ -542,7 +545,8 @@ static void accept_cb (EV_P_ ev_io *w, int revents) memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; - int err = getaddrinfo(_server, _remote_port, &hints, &res); + int index = clock() % _server_num; + int err = getaddrinfo(_servers[index], _remote_port, &hints, &res); if (err) { perror("getaddrinfo"); close_and_free_server(EV_A_ server); @@ -593,7 +597,6 @@ static void print_usage() { int main (int argc, char **argv) { - char *server = NULL; char *remote_port = NULL; char *port = NULL; char *key = NULL; @@ -604,11 +607,12 @@ int main (int argc, char **argv) char *f_path = NULL; opterr = 0; + _server_num = 0; while ((c = getopt (argc, argv, "f:s:p:l:k:t:m:")) != -1) { switch (c) { case 's': - server = optarg; + _servers[_server_num++] = strdup(optarg); break; case 'p': remote_port = optarg; @@ -632,7 +636,7 @@ int main (int argc, char **argv) } } - if (server == NULL || remote_port == NULL || + if (_server_num == 0 || remote_port == NULL || port == NULL || key == NULL) { print_usage(); exit(EXIT_FAILURE); @@ -690,7 +694,6 @@ int main (int argc, char **argv) signal(SIGPIPE, SIG_IGN); // init global variables - _server = strdup(server); _remote_port = strdup(remote_port); _timeout = atoi(timeout); _method = TABLE; @@ -700,7 +703,8 @@ int main (int argc, char **argv) } } - LOGD("calculating ciphers %d\n", _method); + LOGD("calculating ciphers\n"); + if (_method == RC4) { enc_key_init(key); } else {