JsonNode* cometd_ping_ls(cometd* h, char *target) { JsonObject *adviceObject = json_object_new(); JsonNode *adviceNode = json_node_new(JSON_NODE_OBJECT); JsonNode *adviceRoot = json_node_init_object(adviceNode, adviceObject); adviceObject = json_node_get_object(adviceRoot); json_object_set_string_member(adviceObject, "folder", "/"); JsonNode* root = json_node_new(JSON_NODE_OBJECT); JsonObject* obj = json_object_new(); gint64 seed = ++(h->conn->msg_id_seed); char* connection_type = cometd_current_transport(h)->name; json_object_set_int_member (obj, COMETD_MSG_ID_FIELD, seed); json_object_set_string_member(obj, COMETD_MSG_CHANNEL_FIELD, target); json_object_set_string_member(obj, "connectionType", connection_type); json_object_set_member(obj, "data", adviceRoot); json_object_set_string_member(obj, "clientId", cometd_conn_client_id(h->conn)); json_node_take_object(root, obj); return(root); }
int cometd_transport_send(const cometd* h, JsonNode* msg) { cometd_transport* t = cometd_current_transport(h); g_return_val_if_fail(t != NULL, ECOMETD_UNKNOWN); return cometd_impl_send_msg_sync(h, msg, t); }
END_TEST START_TEST (test_cometd_process_handshake_success) { cometd_conn* conn = g_instance->conn; JsonNode* n = json_from_fixture("handshake_resp_lp"); fail_unless(cometd_conn_is_state(conn, COMETD_UNINITIALIZED)); fail_unless(cometd_current_transport(g_instance) == NULL); fail_unless(cometd_conn_client_id(conn) == NULL); int code = cometd_process_handshake(g_instance, n); fail_unless(code == COMETD_SUCCESS); fail_unless(cometd_conn_is_state(conn, COMETD_HANDSHAKE_SUCCESS)); fail_if(cometd_current_transport(g_instance) == NULL); fail_if(cometd_conn_client_id(conn) == NULL); json_node_free(n); }
END_TEST START_TEST (test_cometd_process_handshake_no_transport) { cometd_conn* conn = g_instance->conn; JsonNode* n = json_from_fixture("handshake_resp_unsupported_transports"); fail_unless(cometd_conn_is_state(conn, COMETD_UNINITIALIZED)); fail_unless(cometd_current_transport(g_instance) == NULL); fail_unless(cometd_conn_client_id(conn) == NULL); int code = cometd_process_handshake(g_instance, n); fail_unless(code == ECOMETD_NO_TRANSPORT); fail_unless(cometd_conn_is_state(conn, COMETD_UNINITIALIZED)); fail_unless(cometd_current_transport(g_instance) == NULL); fail_unless(cometd_conn_client_id(conn) == NULL); fail_if(cometd_conn_advice(conn) == NULL); json_node_free(n); }
int cometd_impl_handshake(const cometd* h, cometd_callback cb) { int code = COMETD_SUCCESS; JsonNode* handshake = cometd_new_handshake_message(h); code = cometd_impl_send_msg_sync(h, handshake, NULL); if (code == COMETD_SUCCESS && !cometd_current_transport(h)) { code = ECOMETD_NO_TRANSPORT; } json_node_free(handshake); return code; }
JsonNode* cometd_recv(const cometd* h) { JsonNode *payload = NULL; cometd_transport* transport = NULL; transport = cometd_current_transport(h); g_assert(transport != NULL); payload = transport->recv(h); if (payload == NULL) payload = cometd_msg_wrap(cometd_msg_bad_connect_new(h)); return payload; }
JsonNode* cometd_msg_connect_new(const cometd* h) { JsonNode* root = json_node_new(JSON_NODE_OBJECT); JsonObject* obj = json_object_new(); gint64 seed = ++(h->conn->msg_id_seed); char* connection_type = cometd_current_transport(h)->name; json_object_set_int_member (obj, COMETD_MSG_ID_FIELD, seed); json_object_set_string_member(obj, COMETD_MSG_CHANNEL_FIELD, COMETD_CHANNEL_META_CONNECT); json_object_set_string_member(obj, "connectionType", connection_type); json_object_set_string_member(obj, "clientId", cometd_conn_client_id(h->conn)); json_node_take_object(root, obj); return root; }