X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Ftests%2Ftest_silcnet.c;h=7b1551cebbd5859dba12740319c92f6e98407735;hb=e7b6c157b80152bf9fb9266e6bdd93f9fb0db776;hp=19d90a04a804bfcbd2065ae00547692f049c0c78;hpb=40f8443d8d3a6577336ee66d18e04d9ac4d956bb;p=silc.git diff --git a/lib/silcutil/tests/test_silcnet.c b/lib/silcutil/tests/test_silcnet.c index 19d90a04..7b1551ce 100644 --- a/lib/silcutil/tests/test_silcnet.c +++ b/lib/silcutil/tests/test_silcnet.c @@ -6,13 +6,13 @@ SilcSchedule schedule; typedef struct { SilcFSM fsm; - SilcFSMSemaStruct sema; + SilcFSMEventStruct sema; SilcFSMThreadStruct thread; - SilcNetServer server; + SilcNetListener server; SilcStream client_stream; - SilcNetStatus client_status; + SilcResult client_status; SilcStream server_stream; - SilcNetStatus server_status; + SilcResult server_status; SilcBool success; } *Foo; @@ -23,17 +23,17 @@ SILC_FSM_STATE(test_st_finish); SILC_FSM_STATE(test_st_connect); SILC_FSM_STATE(test_st_connected); -static void test_accept_connection(SilcNetStatus status, SilcStream stream, +static void test_accept_connection(SilcResult status, SilcStream stream, void *context) { Foo f = context; SILC_LOG_DEBUG(("Accepted new connection")); f->client_status = status; f->client_stream = stream; - SILC_FSM_SEMA_POST(&f->sema); + SILC_FSM_EVENT_SIGNAL(&f->sema); } -static void test_connected(SilcNetStatus status, SilcStream stream, +static void test_connected(SilcResult status, SilcStream stream, void *context) { Foo f = context; @@ -50,7 +50,7 @@ SILC_FSM_STATE(test_st_connect) SILC_LOG_DEBUG(("test_st_connect")); SILC_LOG_DEBUG(("Connecting to server")); - silc_fsm_next(fsm, test_st_connected, NULL); + silc_fsm_next(fsm, test_st_connected); SILC_FSM_CALL(silc_net_tcp_connect(NULL, "localhost", 5000, silc_fsm_get_schedule(fsm), test_connected, f)); @@ -64,7 +64,7 @@ SILC_FSM_STATE(test_st_connected) SILC_LOG_DEBUG(("test_st_connected")); - if (f->server_status != SILC_NET_OK) { + if (f->server_status != SILC_OK) { SILC_LOG_DEBUG(("Creating connection failed")); return SILC_FSM_FINISH; } @@ -78,28 +78,59 @@ SILC_FSM_STATE(test_st_connected) SILC_FSM_STATE(test_st_start) { Foo f = fsm_context; + int ports[3]; + SilcUInt16 *ret_ports; + SilcUInt32 port_count; SILC_LOG_DEBUG(("test_st_start")); + SILC_LOG_DEBUG(("Creating network listener to ports 2000, 3000 and 4000")); + ports[0] = 2000; + ports[1] = 3000; + ports[2] = 4000; + f->server = silc_net_tcp_create_listener2(NULL, ports, 3, FALSE, TRUE, TRUE, + silc_fsm_get_schedule(fsm), + test_accept_connection, f); + if (!f->server) { + /** Creating network listener failed */ + SILC_LOG_DEBUG(("Listener creation failed")); + silc_fsm_next(fsm, test_st_finish); + return SILC_FSM_CONTINUE; + } + + ret_ports = silc_net_listener_get_port(f->server, &port_count); + if (!ret_ports) { + SILC_LOG_DEBUG(("Listener does not work")); + silc_fsm_next(fsm, test_st_finish); + return SILC_FSM_CONTINUE; + } + SILC_LOG_DEBUG(("Bound to port %d", ret_ports[0])); + SILC_LOG_DEBUG(("Bound to port %d", ret_ports[1])); + SILC_LOG_DEBUG(("Bound to port %d", ret_ports[2])); + silc_free(ret_ports); + + /* Close this listener and create new one */ + silc_net_close_listener(f->server); + SILC_LOG_DEBUG(("Creating network listener")); - f->server = silc_net_create_server(NULL, 0, 5000, FALSE, + f->server = silc_net_tcp_create_listener(NULL, 0, 5000, TRUE, TRUE, silc_fsm_get_schedule(fsm), test_accept_connection, f); if (!f->server) { /** Creating network listener failed */ SILC_LOG_DEBUG(("Listener creation failed")); - silc_fsm_next(fsm, test_st_finish, NULL); + silc_fsm_next(fsm, test_st_finish); return SILC_FSM_CONTINUE; } /* Create thread to connect to the listener */ silc_fsm_thread_init(&f->thread, fsm, f, NULL, NULL, FALSE); - silc_fsm_start(&f->thread, test_st_connect, NULL); + silc_fsm_start(&f->thread, test_st_connect); /** Start waiting connection */ SILC_LOG_DEBUG(("Start waiting for incoming connections")); - silc_fsm_sema_init(&f->sema, fsm, 0); - silc_fsm_next(fsm, test_st_second, NULL); + silc_fsm_event_init(&f->sema, fsm); + silc_fsm_next(fsm, test_st_second); return SILC_FSM_CONTINUE; } @@ -111,22 +142,22 @@ SILC_FSM_STATE(test_st_second) SILC_LOG_DEBUG(("test_st_second")); - SILC_FSM_SEMA_WAIT(&f->sema); + SILC_FSM_EVENT_WAIT(&f->sema); - if (f->client_status != SILC_NET_OK) { + if (f->client_status != SILC_OK) { /** Accepting new connection failed */ SILC_LOG_DEBUG(("Accepting failed %d", f->client_status)); - silc_fsm_next(fsm, test_st_finish, NULL); + silc_fsm_next(fsm, test_st_finish); return SILC_FSM_CONTINUE; } silc_socket_stream_get_info(f->client_stream, NULL, &host, &ip, &port); SILC_LOG_DEBUG(("Accepted new connection %s, %s:%d", host, ip, port)); - /** Finish */ + /** Wait thread to terminate */ f->success = TRUE; - silc_fsm_next(fsm, test_st_finish, NULL); - return SILC_FSM_CONTINUE; + silc_fsm_next(fsm, test_st_finish); + SILC_FSM_THREAD_WAIT(&f->thread); } SILC_FSM_STATE(test_st_finish) @@ -145,7 +176,7 @@ SILC_FSM_STATE(test_st_finish) } SILC_LOG_DEBUG(("Closing network listener")); - silc_net_close_server(f->server); + silc_net_close_listener(f->server); SILC_LOG_DEBUG(("Finish machine")); return SILC_FSM_FINISH; @@ -168,11 +199,11 @@ int main(int argc, char **argv) if (argc > 1 && !strcmp(argv[1], "-d")) { silc_log_debug(TRUE); silc_log_debug_hexdump(TRUE); - silc_log_set_debug_string("*net*,*stream*"); + silc_log_set_debug_string("*net*,*stream*,*errno*"); } SILC_LOG_DEBUG(("Allocating scheduler")); - schedule = silc_schedule_init(0, NULL); + schedule = silc_schedule_init(0, NULL, NULL); f = silc_calloc(1, sizeof(*f)); if (!f) @@ -182,7 +213,7 @@ int main(int argc, char **argv) fsm = silc_fsm_alloc(f, destructor, NULL, schedule); if (!fsm) goto err; - silc_fsm_start(fsm, test_st_start, NULL); + silc_fsm_start(fsm, test_st_start); f->fsm = fsm; SILC_LOG_DEBUG(("Running scheduler"));