From: <svn...@op...> - 2009-09-25 14:13:26
|
Author: bellmich Date: Fri Sep 25 16:13:12 2009 New Revision: 1286 URL: http://libsyncml.opensync.org/changeset/1286 Log: added support for the decoding of base64 encoded content sml_data_sync_change_item_get_binary_data Modified: trunk/libsyncml/data_sync_api/sml_data_sync_change_item.c trunk/libsyncml/data_sync_api/sml_data_sync_change_item.h trunk/tests/CMakeLists.txt trunk/tests/check_data_sync_api_change_item.c Modified: trunk/libsyncml/data_sync_api/sml_data_sync_change_item.c ============================================================================== --- trunk/libsyncml/data_sync_api/sml_data_sync_change_item.c Thu Sep 24 19:22:21 2009 (r1285) +++ trunk/libsyncml/data_sync_api/sml_data_sync_change_item.c Fri Sep 25 16:13:12 2009 (r1286) @@ -351,6 +351,42 @@ } /** + * sml_data_sync_change_item_get_binary_data: + * @self: A #SmlDataSyncChangeItem + * @data: A pointer of a #gchar pointer + * @size: A pointer of #gsize + * + * Gets the data property. + * + * Return value: + */ +gboolean +sml_data_sync_change_item_get_binary_data (SmlDataSyncChangeItem *self, + gchar **data, + gsize *size, + GError **error) +{ + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DATA_SYNC_CHANGE_ITEM (self), FALSE, error, SML_ERROR_GENERIC, "There must be a SmlDataSyncChangeItem object."); + sml_return_val_error_if_fail (data, FALSE, error, SML_ERROR_GENERIC, "The data pointer must be present."); + sml_return_val_error_if_fail (*data == NULL, FALSE, error, SML_ERROR_GENERIC, "The data pointer must be empty."); + sml_return_val_error_if_fail (size, FALSE, error, SML_ERROR_GENERIC, "The size pointer must be present."); + sml_return_val_error_if_fail (*size == 0, FALSE, error, SML_ERROR_GENERIC, "The size pointer must be 0."); + + /* check if there is something to convert */ + if (self->priv->data == NULL || + strlen(self->priv->data) == 0) { + *data = NULL; + *size = 0; + return TRUE; + } + *data = g_base64_decode(self->priv->data, size); + sml_return_val_error_if_fail (size != 0, FALSE, error, SML_ERROR_GENERIC, "The base64 decoding failed."); + + return TRUE; +} + +/** * sml_data_sync_change_item_set_binary_data: * @self: A #SmlDataSyncChangeItem * @data: Modified: trunk/libsyncml/data_sync_api/sml_data_sync_change_item.h ============================================================================== --- trunk/libsyncml/data_sync_api/sml_data_sync_change_item.h Thu Sep 24 19:22:21 2009 (r1285) +++ trunk/libsyncml/data_sync_api/sml_data_sync_change_item.h Fri Sep 25 16:13:12 2009 (r1286) @@ -63,6 +63,7 @@ gboolean sml_data_sync_change_item_set_location (SmlDataSyncChangeItem *self, SmlLocation* remote, GError **error); G_CONST_RETURN gchar* sml_data_sync_change_item_get_data (SmlDataSyncChangeItem *self); gboolean sml_data_sync_change_item_set_data (SmlDataSyncChangeItem *self, const gchar *data, gsize size, GError **error); +gboolean sml_data_sync_change_item_get_binary_data (SmlDataSyncChangeItem *self, gchar **data, gsize *size, GError **error); gboolean sml_data_sync_change_item_set_binary_data (SmlDataSyncChangeItem *self, const gchar *data, gsize size, GError **error); G_CONST_RETURN gchar* sml_data_sync_change_item_get_content_type (SmlDataSyncChangeItem *self); SmlChangeType sml_data_sync_change_item_get_action (SmlDataSyncChangeItem *self); Modified: trunk/tests/CMakeLists.txt ============================================================================== --- trunk/tests/CMakeLists.txt Thu Sep 24 19:22:21 2009 (r1285) +++ trunk/tests/CMakeLists.txt Fri Sep 25 16:13:12 2009 (r1286) @@ -104,6 +104,8 @@ SML_ADD_TESTCASE( change_item_get_data_with_limit ) SML_ADD_TESTCASE( change_item_get_data_with_length ) SML_ADD_TESTCASE( change_item_get_data_with_overflow ) + SML_ADD_TESTCASE( change_item_set_binary_data ) + SML_ADD_TESTCASE( change_item_get_binary_data ) SML_ADD_TESTCASE( change_item_set_planned_size ) SML_ADD_TESTCASE( change_item_get_planned_size ) SML_ADD_TESTCASE( change_item_set_content_type ) Modified: trunk/tests/check_data_sync_api_change_item.c ============================================================================== --- trunk/tests/check_data_sync_api_change_item.c Thu Sep 24 19:22:21 2009 (r1285) +++ trunk/tests/check_data_sync_api_change_item.c Fri Sep 25 16:13:12 2009 (r1286) @@ -195,9 +195,10 @@ SmlDataSyncChangeItem *item = sml_data_sync_change_item_new(); sml_fail_unless(item != NULL, NULL); - sml_fail_unless(sml_data_sync_change_item_set_location(item, NULL, &error), "%s", error?error->message:"No GError set."); - sml_fail_unless(error == NULL, NULL); + sml_fail_unless(!sml_data_sync_change_item_set_data(item, NULL, 0, &error), "There must be some data."); + sml_fail_unless(error != NULL, NULL); + g_error_free(error); g_object_unref(item); } END_TEST @@ -293,6 +294,55 @@ g_object_unref(item); } +END_TEST + +START_TEST (change_item_set_binary_data) +{ + setup_testbed(NULL); + + GError *error = NULL; + + SmlDataSyncChangeItem *item = sml_data_sync_change_item_new(); + sml_fail_unless(item != NULL, NULL); + + const gchar* data = "I am an image."; + sml_fail_unless(sml_data_sync_change_item_set_binary_data(item, data, strlen(data), &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(error == NULL, NULL); + + g_object_unref(item); +} +END_TEST + +START_TEST (change_item_get_binary_data) +{ + setup_testbed(NULL); + + GError *error = NULL; + + SmlDataSyncChangeItem *item = sml_data_sync_change_item_new(); + sml_fail_unless(item != NULL, NULL); + + sml_fail_unless(sml_data_sync_change_item_get_data(item) == NULL, NULL); + + const gchar* data = "I am an image."; + const gchar* encoded = "SSBhbSBhbiBpbWFnZS4="; + sml_fail_unless(sml_data_sync_change_item_set_binary_data(item, data, strlen(data), &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(error == NULL, NULL); + + const char* result = sml_data_sync_change_item_get_data(item); + sml_fail_unless(result != NULL, "The data must be present."); + sml_fail_unless(strcmp(result, encoded) == 0, "The encoded data must be '%s' and not '%s'.", encoded, result); + + gchar* binary = NULL; + gsize size = 0; + sml_fail_unless(sml_data_sync_change_item_get_binary_data(item, &binary, &size, &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(binary != NULL, "The binary data must be present."); + sml_fail_unless(size == strlen(data), "The decoded data has a different length then the original."); + sml_fail_unless(strcmp(binary, data) == 0, "The decoced data must be '%s' and not '%s'.", data, binary); + smlSafeCFree(&binary); + + g_object_unref(item); +} END_TEST START_TEST (change_item_set_planned_size) |