Beispiel #1
0
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;
}
Beispiel #2
0
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);
}
Beispiel #3
0
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);
}
Beispiel #4
0
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;
}