+int rs_conn_add_server(struct rs_connection *conn, struct rs_peer **server, rs_conn_type_t type, const char *host, int port)
+{
+ struct rs_peer *srv;
+
+ if (conn->type == RS_CONN_TYPE_NONE)
+ conn->type = type;
+ else if (conn->type != type)
+ return rs_conn_err_push (conn, RSE_CONN_TYPE_MISMATCH, NULL);
+
+ srv = (struct rs_peer *) malloc (sizeof(struct rs_peer));
+ if (srv)
+ {
+ memset (srv, 0, sizeof(struct rs_peer));
+ srv->conn = conn;
+ srv->addr = _resolv (host, port);
+ srv->timeout = 10;
+ srv->tries = 3;
+ srv->next = conn->peers.next;
+ conn->peers.next = srv;
+ }
+ if (*server)
+ *server = srv;
+ return srv ? RSE_OK : rs_conn_err_push (conn, RSE_NOMEM, NULL);
+}
+
+void rs_server_set_timeout(struct rs_peer *server, int timeout)
+{
+ server->timeout = timeout;
+}
+void rs_server_set_tries(struct rs_peer *server, int tries)
+{
+ server->tries = tries;
+}
+int rs_server_set_secret(struct rs_peer *server, const char *secret)
+{
+ if (server->secret)
+ free (server->secret);
+ server->secret = (char *) malloc (strlen(secret) + 1);
+ if (!server->secret)
+ return rs_conn_err_push (server->conn, RSE_NOMEM, NULL);
+ strcpy (server->secret, secret);
+ return RSE_OK;
+}
+
+int rs_conn_add_listener(struct rs_connection *conn, rs_conn_type_t type, const char *host, int port)