END_TEST START_TEST(test_cometd_should_handshake) { cometd_conn_set_state(g_instance->conn, COMETD_HANDSHAKE_SUCCESS); fail_if(cometd_should_handshake(g_instance)); cometd_conn_set_state(g_instance->conn, COMETD_CONNECTED); fail_if(cometd_should_handshake(g_instance)); cometd_conn_set_state(g_instance->conn, COMETD_UNCONNECTED); cometd_advice* advice = cometd_advice_new(); advice->reconnect = COMETD_RECONNECT_HANDSHAKE; cometd_conn_take_advice(g_instance->conn, advice); fail_unless(cometd_should_handshake(g_instance)); cometd_conn_take_advice(g_instance->conn, NULL); }
int cometd_handshake(const cometd* h, cometd_callback cb) { cometd_loop* loop = h->loop; cometd_conn* conn = h->conn; int code = ECOMETD_UNKNOWN; long backoff = 0; guint attempt; for (attempt = 1; cometd_should_handshake(h); ++attempt) { cometd_loop_wait(loop, backoff); code = cometd_impl_handshake(h, cb); backoff = cometd_get_backoff(h, attempt); if (backoff == -1) break; } return code; }