#include #include #include #include "sync_item.h" #include "sync_group.h" #include "sync_syncml_server_item.h" #define SYNCML_SERVER_PLUGIN "syncml-http-server" #define SYNCML_SERVER_CONFIG \ "" \ "%s" \ "%s" \ "%s" \ "%d" \ "1" \ "0" \ "0" \ "%s" \ "%s" \ "%s" \ "" typedef struct { gchar *user; gchar *pass; guint port; gchar *card_db; gchar *cal_db; gchar *note_db; } SyncSyncMLServerItemData; static void sync_syncml_server_free_data (SyncSyncMLServerItemData *data) { g_free (data->user); g_free (data->pass); g_free (data->card_db); g_free (data->cal_db); g_free (data->note_db); } static OSyncMember * sync_syncml_server_item_get_member (SyncItem *item, SyncGroup *group) { OSyncMember *member; OSyncError *error = NULL; OSyncConfigurationTypes type = NO_CONFIGURATION; member = osync_member_new (sync_group_get_osync_group (group)); if (!osync_member_instance_plugin (member, SYNCML_SERVER_PLUGIN, &error)) { g_warning ("Error instancing syncml server plug-in: %s", osync_error_print (&error)); osync_error_free (&error); return NULL; } if (!osync_member_need_config (member, &type, &error)) { g_warning ("Error reading plug-in config requirements: %s", osync_error_print (&error)); osync_error_free (&error); return NULL; } if (type == NO_CONFIGURATION) { g_warning ( "syncml server plug-in reports no need for " "configuration"); } else { SyncSyncMLServerItemData *data; const gchar *url; gchar *config; data = (SyncSyncMLServerItemData *)sync_item_get_data (item); url = sync_item_get_name (item); config = g_strdup_printf (SYNCML_SERVER_CONFIG, data->user, data->pass, url, data->port, data->card_db, data->cal_db, data->note_db); osync_member_set_config ( member, config, strlen (config)); g_free (config); } return member; } SyncItem * sync_syncml_server_item_new (const gchar *name, const gchar *user, const gchar *pass, guint port, const gchar *card_db, const gchar *cal_db, const gchar *note_db) { SyncItem *item; SyncSyncMLServerItemData *data; item = sync_item_new (name, "", sync_syncml_server_item_get_member); data = g_new0 (SyncSyncMLServerItemData, 1); data->user = g_strdup (user); data->pass = g_strdup (pass); data->port = port; data->card_db = g_strdup (card_db); data->cal_db = g_strdup (cal_db); data->note_db = g_strdup (note_db); sync_item_set_data (item, data); sync_item_set_data_free_func (item, (SyncItemDataFreeFunc)sync_syncml_server_free_data); return item; }