コード例 #1
0
ファイル: base_app.c プロジェクト: dulton/libipcam_base
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);
		}
    }
}
コード例 #2
0
ファイル: network_handler.c プロジェクト: TangCheng/iajax
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;
}
コード例 #3
0
ファイル: discovery-server.c プロジェクト: TangCheng/ionvif
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;
}
コード例 #4
0
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);
}
コード例 #5
0
ファイル: ipcam-itrain.c プロジェクト: TangCheng/itrain
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);
}