void ipcam_base_app_broadcast_notice_message(IpcamBaseApp *base_app, IpcamMessage *msg, const gchar *token) { IpcamService *service = IPCAM_SERVICE(base_app); GList *l = g_list_first(ipcam_service_get_publish_names (service)); for (; l; l = g_list_next(l)) { gchar *name = l->data; if (g_strcmp0(name, IPCAM_TIMER_CLIENT_NAME) != 0) { ipcam_base_app_send_message(base_app, msg, name, token, NULL, 0); } } }
static JsonNode *query_network_address(IpcamIAjax *iajax) { const gchar *token = ipcam_base_app_get_config(IPCAM_BASE_APP(iajax), "token"); IpcamRequestMessage *req_msg; IpcamMessage *resp_msg; JsonBuilder *builder; JsonNode *addr_node = NULL; gboolean ret; builder = json_builder_new(); json_builder_begin_object(builder); json_builder_set_member_name(builder, "items"); json_builder_begin_array(builder); json_builder_add_string_value(builder, "address"); json_builder_end_array(builder); json_builder_end_object(builder); req_msg = g_object_new(IPCAM_REQUEST_MESSAGE_TYPE, "action", "get_network", "body", json_builder_get_root(builder), NULL); ipcam_base_app_send_message(IPCAM_BASE_APP(iajax), IPCAM_MESSAGE(req_msg), "iconfig", token, NULL, 5); ret = ipcam_base_app_wait_response(IPCAM_BASE_APP(iajax), ipcam_request_message_get_id(req_msg), 5000, &resp_msg); if (ret) { JsonNode *resp_body; JsonObject *items_obj; g_object_get(G_OBJECT(resp_msg), "body", &resp_body, NULL); items_obj = json_object_get_object_member(json_node_get_object(resp_body), "items"); addr_node = json_node_copy(json_object_get_member(items_obj, "address")); g_object_unref(resp_msg); } g_object_unref(req_msg); g_object_unref(builder); return addr_node; }
static gboolean onvif_invocate_action(IpcamIOnvifDiscovery *ionvif_discovery, const char *action, JsonNode *request, JsonNode **response) { const gchar *token; IpcamRequestMessage *req_msg; IpcamMessage *resp_msg; gboolean ret = FALSE; token = ipcam_base_app_get_config(IPCAM_BASE_APP(ionvif_discovery), "token"); req_msg = g_object_new(IPCAM_REQUEST_MESSAGE_TYPE, "action", action, "body", request, NULL); ipcam_base_app_send_message(IPCAM_BASE_APP(ionvif_discovery), IPCAM_MESSAGE(req_msg), "iconfig", token, NULL, 10); ret = ipcam_base_app_wait_response(IPCAM_BASE_APP(ionvif_discovery), ipcam_request_message_get_id(req_msg), 5000, &resp_msg); if (ret) { JsonNode *resp_body; if (response) { g_object_get(G_OBJECT(resp_msg), "body", &resp_body, NULL); *response = json_node_copy(resp_body); } g_object_unref(resp_msg); } g_object_unref(req_msg); return ret; }
static void ipcam_generic_action_handler_run_impl(IpcamActionHandler *self, IpcamMessage *message) { IpcamGenericActionHandler *handler = IPCAM_GENERIC_ACTION_HANDLER(self); IpcamGenericActionHandlerPrivate *priv = ipcam_generic_action_handler_get_instance_private(handler); IpcamIConfig *iconfig; IpcamMessage *req_msg; IpcamMessage *resp_msg; const gchar *action; JsonNode *req_body; JsonNode *resp_body = NULL; MsgHandlerHashValue *hash_val; gchar *token; gboolean ret = FALSE; g_object_get(G_OBJECT(self), "service", &iconfig, NULL); req_msg = IPCAM_MESSAGE(message); g_object_get(G_OBJECT(req_msg), "action", &action, "body", &req_body, NULL); g_print("%s: action=%s\n", __func__, action); hash_val = g_hash_table_lookup(priv->action_hash, action); if (hash_val) { IpcamMessageHandler *handler = g_object_new(hash_val->g_type, "app", iconfig, NULL); if (handler) { switch (hash_val->method) { case ACT_GET: ret = ipcam_message_handler_do_get(handler, action, req_body, &resp_body); break; case ACT_SET: ret = ipcam_message_handler_do_put(handler, action, req_body, &resp_body); break; case ACT_ADD: ret = ipcam_message_handler_do_post(handler, action, req_body, &resp_body); break; case ACT_DEL: ret = ipcam_message_handler_do_delete(handler, action, req_body, &resp_body); break; default: break; } g_object_unref(handler); } } if (resp_body == NULL) { resp_body = json_node_new(JSON_NODE_OBJECT); json_node_take_object(resp_body, json_object_new()); } resp_msg = (IpcamMessage *)ipcam_request_message_get_response_message(IPCAM_REQUEST_MESSAGE(req_msg), ret ? "0" : "1"); g_object_set(G_OBJECT(resp_msg), "body", resp_body, NULL); g_object_get(G_OBJECT(req_msg), "token", &token, NULL); ipcam_base_app_send_message(IPCAM_BASE_APP(iconfig), resp_msg, "iconfig", token, NULL, 0); g_free((gchar *)action); g_object_unref(resp_msg); g_object_unref(iconfig); g_free(token); }
static void ipcam_itrain_before_start(IpcamBaseService *base_service) { IpcamITrain *itrain = IPCAM_ITRAIN(base_service); IpcamITrainPrivate *priv = ipcam_itrain_get_instance_private(itrain); const gchar *addr = ipcam_base_app_get_config(IPCAM_BASE_APP(itrain), "itrain:address"); const gchar *port = ipcam_base_app_get_config(IPCAM_BASE_APP(itrain), "itrain:port"); const gchar *osd_port = ipcam_base_app_get_config(IPCAM_BASE_APP(itrain), "itrain:osd-port"); JsonBuilder *builder; const gchar *token = ipcam_base_app_get_config(IPCAM_BASE_APP(itrain), "token"); IpcamRequestMessage *req_msg; if (!addr || !port) { g_critical("address and port must be specified.\n"); return; } priv->itrain_server = g_object_new(IPCAM_TYPE_ITRAIN_SERVER, "itrain", itrain, "address", addr, "port", strtoul(port, NULL, 0), "osd-port", strtoul(osd_port, NULL, 0), NULL); ipcam_base_app_register_notice_handler(IPCAM_BASE_APP(itrain), "video_occlusion_event", IPCAM_TYPE_ITRAIN_EVENT_HANDLER); ipcam_base_app_register_notice_handler(IPCAM_BASE_APP(itrain), "set_base_info", IPCAM_TYPE_ITRAIN_EVENT_HANDLER); ipcam_base_app_register_notice_handler(IPCAM_BASE_APP(itrain), "set_szyc", IPCAM_TYPE_ITRAIN_EVENT_HANDLER); /* Request the Base Information */ builder = json_builder_new(); json_builder_begin_object(builder); json_builder_set_member_name(builder, "items"); json_builder_begin_array(builder); json_builder_add_string_value(builder, "device_name"); json_builder_add_string_value(builder, "comment"); json_builder_add_string_value(builder, "location"); json_builder_add_string_value(builder, "hardware"); json_builder_add_string_value(builder, "firmware"); json_builder_add_string_value(builder, "manufacturer"); json_builder_add_string_value(builder, "model"); json_builder_add_string_value(builder, "serial"); json_builder_add_string_value(builder, "device_type"); json_builder_end_array(builder); json_builder_end_object(builder); req_msg = g_object_new(IPCAM_REQUEST_MESSAGE_TYPE, "action", "get_base_info", "body", json_builder_get_root(builder), NULL); ipcam_base_app_send_message(IPCAM_BASE_APP(itrain), IPCAM_MESSAGE(req_msg), "iconfig", token, base_info_message_handler, 60); g_object_unref(req_msg); g_object_unref(builder); /* Request the SZYC Information */ builder = json_builder_new(); json_builder_begin_object(builder); json_builder_set_member_name(builder, "items"); json_builder_begin_array(builder); json_builder_add_string_value(builder, "train_num"); json_builder_add_string_value(builder, "carriage_num"); json_builder_add_string_value(builder, "position_num"); json_builder_end_array(builder); json_builder_end_object(builder); req_msg = g_object_new(IPCAM_REQUEST_MESSAGE_TYPE, "action", "get_szyc", "body", json_builder_get_root(builder), NULL); ipcam_base_app_send_message(IPCAM_BASE_APP(itrain), IPCAM_MESSAGE(req_msg), "iconfig", token, szyc_message_handler, 60); g_object_unref(req_msg); g_object_unref(builder); }