SilcFSMThreadStruct thread;
SilcNetListener server;
SilcStream client_stream;
- SilcNetStatus client_status;
+ SilcResult client_status;
SilcStream server_stream;
- SilcNetStatus server_status;
+ SilcResult server_status;
SilcBool success;
} *Foo;
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_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;
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"));
- SILC_FSM_FINISH;
+ return SILC_FSM_FINISH;
}
silc_socket_stream_get_info(f->server_stream, NULL, &host, &ip, &port);
SILC_LOG_DEBUG(("Connected to server %s, %s:%d", host, ip, port));
- SILC_FSM_FINISH;
+ return SILC_FSM_FINISH;
}
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_tcp_create_listener(NULL, 0, 5000, TRUE, TRUE,
silc_fsm_get_schedule(fsm),
/** Creating network listener failed */
SILC_LOG_DEBUG(("Listener creation failed"));
silc_fsm_next(fsm, test_st_finish);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
}
/* Create thread to connect to the listener */
SILC_LOG_DEBUG(("Start waiting for incoming connections"));
silc_fsm_event_init(&f->sema, fsm);
silc_fsm_next(fsm, test_st_second);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
}
SILC_FSM_STATE(test_st_second)
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);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
}
silc_socket_stream_get_info(f->client_stream, NULL, &host, &ip, &port);
silc_net_close_listener(f->server);
SILC_LOG_DEBUG(("Finish machine"));
- SILC_FSM_FINISH;
+ return SILC_FSM_FINISH;
}
static void destructor(SilcFSM fsm, void *fsm_context,
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)