int cometd_process_connect(const cometd* h, JsonNode* msg) { cometd_advice* advice; cometd_conn* conn = h->conn; // If we are trying to disconnect cleanly then we should not // reset the connected/connecting status on response. if (cometd_conn_is_state(conn, COMETD_DISCONNECTING | COMETD_DISCONNECTED)) return COMETD_SUCCESS; // Always set advice if it is offered and reuse old advice if new advice DNE advice = cometd_msg_advice(msg); if (advice) cometd_conn_take_advice(conn, advice); if (!cometd_msg_is_successful(msg)) { cometd_conn_set_state(conn, COMETD_UNCONNECTED); cometd_handle_advice(h, advice); } else cometd_conn_set_state(conn, COMETD_CONNECTED); return COMETD_SUCCESS; }
END_TEST START_TEST (test_cometd_msg_advice_null) { JsonNode* n = json_from_fixture("advice_reconnect_null"); cometd_advice* advice = cometd_msg_advice(n); fail_unless(advice == NULL); json_node_free(n); }
END_TEST START_TEST (test_cometd_msg_advice_retry) { JsonNode* n = json_from_fixture("advice_reconnect_retry"); cometd_advice* advice = cometd_msg_advice(n); ck_assert_int_eq(COMETD_RECONNECT_RETRY, advice->reconnect); ck_assert_int_eq(100, advice->interval); cometd_advice_destroy(advice); json_node_free(n); }
int cometd_process_handshake(const cometd* h, JsonNode* msg) { cometd_conn* conn = h->conn; cometd_config* config = h->config; cometd_transport* t = cometd_transport_negotiate(config->transports, msg); int code = COMETD_SUCCESS; if (t) { gchar* client_id = cometd_msg_client_id(msg); cometd_conn_set_transport(conn, t); cometd_conn_set_client_id(conn, client_id); cometd_conn_set_state(conn, COMETD_HANDSHAKE_SUCCESS); g_free(client_id); } else { code = ECOMETD_NO_TRANSPORT; } cometd_conn_take_advice(conn, cometd_msg_advice(msg)); return code; }