Add `subsession_add_user_fixed_size` API. 50/320550/2
authorMichal Bloch <m.bloch@samsung.com>
Tue, 4 Mar 2025 13:08:27 +0000 (14:08 +0100)
committerMichal Bloch <m.bloch@samsung.com>
Wed, 5 Mar 2025 18:37:22 +0000 (19:37 +0100)
Change-Id: Icbf988469a8ec038e4aa5a6a04ddee34304c24b1

src/library/include/sessiond.h
src/library/src/lib.c
src/library/src/lib.h

index f58c3fa935496c2122c21e70a8469493eb195dd6..8e1b629adfa2440a655b3c4f30d1a8d640c8e399 100644 (file)
@@ -94,7 +94,7 @@ typedef struct subsession_event_info {
 typedef void (*subsession_reply_callback) (int result, void *user_data);
 
 /**
- * @brief Request new subsession to be created.
+ * @brief Request new subsession to be created, with no built-in limit on size.
  * @since_tizen 7.0
  *
  * @param[in] session_uid User ID of the session
@@ -112,6 +112,27 @@ typedef void (*subsession_reply_callback) (int result, void *user_data);
  */
 int subsession_add_user(int session_uid, const subsession_user_t user, subsession_reply_callback cb, void *user_data);
 
+/**
+ * @brief Request new subsession to be created, with a fixed size limit.
+ * @since_tizen 10.0
+ *
+ * @param[in] session_uid User ID of the session
+ * @param[in] user Subsession user name to be created
+ * @param[in] size_limit_kB Size (disk usage) limit of the subsession, in kilobytes. Minimum 220 kB
+ * @param[in] cb Callback to be called when operation completes or error is reported
+ * @param[in] user_data User defined data
+ *
+ * @return 0 on success, otherwise a negative error value
+ * @retval #SUBSESSION_ERROR_NONE Success
+ * @retval #SUBSESSION_ERROR_INVALID_PARAMETER Provided parameter is invalid
+ * @retval #SUBSESSION_ERROR_ALREADY_EXISTS Provided subsession already exists
+ * @retval #SUBSESSION_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #SUBSESSION_ERROR_IO_ERROR I/O or filesystem error
+ * @remarks Use `subsession_get_user_list()` to list currently used session IDs.
+ *  Subsession ID must not start with a dot or have slashes.
+ */
+int subsession_add_user_fixed_size(int session_uid, const subsession_user_t user, uint32_t size_limit_kB, subsession_reply_callback cb, void *user_data);
+
 /**
  * @brief Request existing subsession to be removed.
  * @since_tizen 7.0
index 64ed4ad0bfef64f613e001df0e09ca3ffd585943..d3f37df1c328842f8f5131d3721b83ef67662105 100644 (file)
@@ -640,6 +640,17 @@ EXPORT_API int subsession_add_user(int session_uid, const subsession_user_t user
        return_with_log_error_result_(method_call_async(dbus_method_call.AddUser, g_variant_new("(is)", session_uid, user), cb, user_data))
 }
 
+EXPORT_API int subsession_add_user_fixed_size(int session_uid, const subsession_user_t user, uint32_t size_limit_kB, subsession_reply_callback cb, void *user_data)
+{
+       return_if(
+               session_uid_is_not_valid(session_uid,
+               user_id_is_not_valid(user,
+               session_fixed_size_invalid_size(size_limit_kB)))
+       )
+
+       return_with_log_error_result_(method_call_async(dbus_method_call.AddUserFixedSize, g_variant_new("(isu)", session_uid, user, size_limit_kB), cb, user_data))
+}
+
 EXPORT_API int subsession_remove_user(int session_uid, const subsession_user_t user, subsession_reply_callback cb, void *user_data)
 {
        return_if(
index b09038be9d03c6cfc84e6f6c041b3b173f494646..9cb00babe7f8dfcf3f0ce44b81c8a4e68ca0e83d 100644 (file)
@@ -53,6 +53,11 @@ typedef struct {
 
 #define switch_id_is_not_valid(a, ...) || (a <= 0) __VA_ARGS__
 
+#define client_data_are_null(a, ...) || (a == NULL) __VA_ARGS__
+
+// overhead for an EXT2 filesystem, determined empirically; also checked by daemon
+#define session_fixed_size_invalid_size(a, ...) || (a < 220) __VA_ARGS__
+
 #define int_not_valid_on_switch(a, ...) || (a < 0) __VA_ARGS__
 
 #define client_data_are_null(a, ...) || (a == NULL) __VA_ARGS__