00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <opensync.h>
00022 #include "opensync_internals.h"
00023
00024 osync_bool osync_anchor_compare(OSyncMember *member, const char *objtype, const char *new_anchor)
00025 {
00026 osync_trace(TRACE_ENTRY, "%s(%p, %s, %s)", __func__, member, objtype, new_anchor);
00027 g_assert(member);
00028
00029 OSyncError *error = NULL;
00030 OSyncDB *db = NULL;
00031 if (!(db = osync_db_open_anchor(member, &error)))
00032 goto error;
00033
00034 osync_bool retval = FALSE;
00035
00036 char *old_anchor = NULL;
00037 osync_db_get_anchor(db, objtype, &old_anchor);
00038
00039 if (old_anchor) {
00040 if (!strcmp(old_anchor, new_anchor)) {
00041 retval = TRUE;
00042 } else {
00043 osync_trace(TRACE_INTERNAL, "Anchor mismatch");
00044 retval = FALSE;
00045 }
00046 } else {
00047 osync_trace(TRACE_INTERNAL, "No previous anchor");
00048 retval = FALSE;
00049 }
00050
00051 osync_db_close_anchor(db);
00052
00053 osync_trace(TRACE_EXIT, "%s: %i", __func__, retval);
00054 return retval;
00055
00056 error:
00057 osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(&error));
00058 osync_error_free(&error);
00059 return FALSE;
00060 }
00061
00062 void osync_anchor_update(OSyncMember *member, const char *objtype, const char *new_anchor)
00063 {
00064 osync_trace(TRACE_ENTRY, "%s(%p, %s, %s)", __func__, member, objtype, new_anchor);
00065 g_assert(member);
00066
00067 OSyncError *error = NULL;
00068 OSyncDB *db = NULL;
00069 if (!(db = osync_db_open_anchor(member, &error)))
00070 goto error;
00071
00072 osync_db_put_anchor(db, objtype, new_anchor);
00073 osync_db_close_anchor(db);
00074
00075 osync_trace(TRACE_EXIT, "%s", __func__);
00076 return;
00077
00078 error:
00079 osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(&error));
00080 osync_error_free(&error);
00081 return;
00082 }
00083
00084 char *osync_anchor_retrieve(OSyncMember *member, const char *objtype)
00085 {
00086 osync_trace(TRACE_ENTRY, "%s(%p, %s)", __func__, member, objtype);
00087 g_assert(member);
00088
00089 OSyncError *error = NULL;
00090 OSyncDB *db = NULL;
00091 if (!(db = osync_db_open_anchor(member, &error)))
00092 goto error;
00093
00094 char *anchor = NULL;
00095 osync_db_get_anchor(db, objtype, &anchor);
00096 osync_db_close_anchor(db);
00097
00098 osync_trace(TRACE_EXIT, "%s: %s", __func__, anchor);
00099 return anchor;
00100
00101 error:
00102 osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(&error));
00103 osync_error_free(&error);
00104 return NULL;
00105 }