Ticket #1084: ticket1084_conversion-merge.diff
| File ticket1084_conversion-merge.diff, 50.7 KB (added by dgollub, 3 years ago) |
|---|
-
wrapper/opensync-format.i
41 41 return ret; 42 42 } 43 43 44 void invoke(Data *data, const char *config ) {44 void invoke(Data *data, const char *config, Capabilities *caps, Data *archived_data) { 45 45 Error *err = NULL; 46 bool ret = osync_converter_invoke(self, data, config, &err);46 bool ret = osync_converter_invoke(self, data, config, caps, archived_data, &err); 47 47 if (!raise_exception_on_error(err) && !ret) 48 48 wrapper_exception("osync_converter_invoke failed but did not set error code"); 49 49 } … … 222 222 return ret; 223 223 } 224 224 225 void convert(FormatConverterPath *path, Data *data ) {225 void convert(FormatConverterPath *path, Data *data, Capabilities *caps, Data *archived_data) { 226 226 Error *err = NULL; 227 bool ret = osync_format_env_convert(self, path, data, &err);227 bool ret = osync_format_env_convert(self, path, data, caps, archived_data, &err); 228 228 if (!raise_exception_on_error(err) && !ret) 229 229 wrapper_exception("osync_format_env_convert failed but did not set error code"); 230 230 } -
opensync/format/opensync_objformat_private.h
61 61 OSyncFormatMarshalFunc marshal_func; 62 62 OSyncFormatDemarshalFunc demarshal_func; 63 63 OSyncFormatValidateFunc validate_func; 64 OSyncFormatMergeFunc merge_func;65 OSyncFormatDemergeFunc demerge_func;66 64 }; 67 65 68 66 /*@}*/ -
opensync/format/opensync_objformat.c
301 301 return format->validate_func ? TRUE : FALSE; 302 302 } 303 303 304 void osync_objformat_set_merge_func(OSyncObjFormat *format, OSyncFormatMergeFunc merge_func)305 {306 osync_return_if_fail(format);307 format->merge_func = merge_func;308 }309 310 osync_bool osync_objformat_merge(OSyncObjFormat *format,311 char **data, unsigned int *size,312 const char *entire, unsigned int entsize,313 OSyncCapabilities *caps, OSyncError **error)314 {315 osync_assert(format);316 osync_return_val_if_fail(format->merge_func, TRUE);317 return format->merge_func(data, size, entire, entsize, caps, format->user_data, error);318 }319 320 void osync_objformat_set_demerge_func(OSyncObjFormat *format, OSyncFormatDemergeFunc demerge_func)321 {322 osync_return_if_fail(format);323 format->demerge_func = demerge_func;324 }325 326 osync_bool osync_objformat_demerge(OSyncObjFormat *format,327 char **data, unsigned int *size,328 OSyncCapabilities *caps, OSyncError **error)329 {330 osync_assert(format);331 osync_return_val_if_fail(format->demerge_func, TRUE);332 return format->demerge_func(data, size, caps, format->user_data, error);333 }334 335 336 osync_bool osync_objformat_has_merger(OSyncObjFormat *format)337 {338 osync_return_val_if_fail(format, FALSE);339 return (format->demerge_func && format->merge_func) ? TRUE : FALSE;340 }341 -
opensync/format/opensync_objformat.h
44 44 typedef osync_bool (* OSyncFormatDemarshalFunc) (OSyncMarshal *marshal, char **output, unsigned int *outpsize, void *user_data, OSyncError **error); 45 45 typedef osync_bool (* OSyncFormatValidateFunc) (const char *data, unsigned int size, void *user_data, OSyncError **error); 46 46 47 typedef osync_bool (* OSyncFormatMergeFunc) (char **data, unsigned int *size, const char *entire, unsigned int entsize, OSyncCapabilities *caps, void *user_data, OSyncError **error);48 typedef osync_bool (* OSyncFormatDemergeFunc) (char **data, unsigned int *size, OSyncCapabilities *caps, void *user_data, OSyncError **error);49 50 47 /** 51 48 * @brief Creates a new object format 52 49 * @param name the name of the object format … … 225 222 OSYNC_EXPORT void osync_objformat_set_validate_func(OSyncObjFormat *format, OSyncFormatValidateFunc validate_func); 226 223 227 224 /** 228 * @brief Sets the optional merge function for an object format229 *230 * The merge function can be used to merge data for the specific231 * format. This is optional.232 *233 * @param format Pointer to the object format234 * @param merge_func The merge function to use235 */236 OSYNC_EXPORT void osync_objformat_set_merge_func(OSyncObjFormat *format, OSyncFormatMergeFunc merge_func);237 238 /**239 * @brief Sets the optional demerge function for an object format240 *241 * The demerge function can be used to demerge data for the specific242 * format. This is optional.243 *244 * @param format Pointer to the object format245 * @param demerge_func The demerge function to use246 */247 OSYNC_EXPORT void osync_objformat_set_demerge_func(OSyncObjFormat *format, OSyncFormatDemergeFunc demerge_func);248 249 /**250 225 * @brief Prints the specified object 251 226 * 252 227 * Uses the object format's print function if set, otherwise the object's -
opensync/format/opensync_format_env.c
626 626 OSyncFormatConverter *edge = e->data; 627 627 osync_converter_path_add_edge(path_tmp, edge); 628 628 } 629 if (!(osync_format_env_convert(env, path_tmp, current->data, error))) {629 if (!(osync_format_env_convert(env, path_tmp, current->data, NULL, NULL, error))) { 630 630 osync_trace(TRACE_INTERNAL, "osync format env convert on this path failed - skipping the conversion"); 631 631 continue; 632 632 } … … 1012 1012 converter = d->data; 1013 1013 if (osync_converter_matches(converter, new_data) && osync_converter_get_type(converter) == OSYNC_CONVERTER_DECAP) { 1014 1014 /* Run the decap */ 1015 if (!osync_converter_invoke(converter, new_data, NULL, error)) {1015 if (!osync_converter_invoke(converter, new_data, NULL, NULL, NULL, error)) { 1016 1016 osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to decap the change"); 1017 1017 goto error_free_data; 1018 1018 } … … 1045 1045 return FALSE; 1046 1046 } 1047 1047 1048 osync_bool osync_format_env_convert(OSyncFormatEnv *env, OSyncFormatConverterPath *path, OSyncData *data, OSync Error **error)1048 osync_bool osync_format_env_convert(OSyncFormatEnv *env, OSyncFormatConverterPath *path, OSyncData *data, OSyncCapabilities *caps, OSyncData *archived_data, OSyncError **error) 1049 1049 { 1050 1050 OSyncObjFormat *source = NULL; 1051 1051 int length = 0; 1052 1052 char *buffer = NULL; 1053 1053 1054 osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p )", __func__, env, path,data, error);1054 osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p, %p, %p)", __func__, env, path, data, caps, archived_data, error); 1055 1055 osync_assert(data); 1056 1056 osync_assert(env); 1057 1057 osync_assert(path); … … 1082 1082 for (i = 0; i < length; i++) { 1083 1083 OSyncFormatConverter *converter = osync_converter_path_nth_edge(path, i); 1084 1084 1085 if (!osync_converter_invoke(converter, data, osync_converter_path_get_config(path), error)) {1085 if (!osync_converter_invoke(converter, data, osync_converter_path_get_config(path), caps, archived_data, error)) { 1086 1086 osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); 1087 1087 return FALSE; 1088 1088 } -
opensync/format/opensync_format_env.h
187 187 * @param env The conversion environment to use 188 188 * @param path The conversion path to follow 189 189 * @param data The data object to convert 190 * @param caps The capabilities information. optional and can be NULL 191 * @param archived_data The data object which got archived and should be used for merging. optional and can be NULL 190 192 * @param error The error-return location 191 193 * @returns TRUE on success, FALSE otherwise 192 194 * 193 195 */ 194 OSYNC_EXPORT osync_bool osync_format_env_convert(OSyncFormatEnv *env, OSyncFormatConverterPath *path, OSyncData *data, OSyncError **error);196 OSYNC_EXPORT osync_bool osync_format_env_convert(OSyncFormatEnv *env, OSyncFormatConverterPath *path, OSyncData *data, OSyncCapabilities *caps, OSyncData *archived_data, OSyncError **error); 195 197 196 198 /** @brief Find a conversion path between two formats 197 199 * -
opensync/format/opensync_objformat_internals.h
178 178 */ 179 179 osync_bool osync_objformat_must_validate(OSyncObjFormat *format); 180 180 181 /**182 * @brief Merge supplied data in format specific way183 *184 * @param format Pointer to the object format185 * @param data Reference of buffer which stores data to merge186 * @param size Reference of size in bytes of the buffer specified by the data paramter187 * @param entire188 * @param entsize Size in bytes of the base data buffer specified by the entire parameter189 * @param caps The capabilities list which describes what must get merged: entire -> input190 * @param error Pointer to an error struct191 * @returns TRUE if data got merged successfully, otherwise FALSE192 */193 OSYNC_TEST_EXPORT osync_bool osync_objformat_merge(OSyncObjFormat *format,194 char **data, unsigned int *size,195 const char *entire, unsigned int entsize,196 OSyncCapabilities *caps, OSyncError **error);197 198 /**199 * @brief Demerge supplied data in format specific way200 *201 * @param format Pointer to the object format202 * @param data Pointer to the buffer which should get demerged203 * @param size Reference of size in bytes of the buffer specified by the data parameter204 * @param caps The capabilities list which describes what must get demerged205 * @param error Pointer to an error struct206 * @returns TRUE if data got demerged successfully, otherwise FALSE207 */208 OSYNC_TEST_EXPORT osync_bool osync_objformat_demerge(OSyncObjFormat *format,209 char **data, unsigned int *size,210 OSyncCapabilities *caps, OSyncError **error);211 212 /**213 * @brief Check if specific format is able to merge/demerge214 *215 * If merge and demerge function are set for the specific format then merger216 * and demerger get invoked. Merger/Demerge still can be disabled in group217 * configuration, by disabling the merger, or not providing capabilities for218 * the member.219 *220 * @param format Pointer to the object format221 * @returns TRUE if merge and demerge is support for this format, otherwise FALSE222 */223 osync_bool osync_objformat_has_merger(OSyncObjFormat *format);224 225 181 /*@}*/ 226 182 227 183 #endif /* _OPENSYNC_OBJFORMAT_INTERNALS_H_ */ -
opensync/format/opensync_converter.c
169 169 return NULL; 170 170 } 171 171 172 osync_bool osync_converter_invoke(OSyncFormatConverter *converter, OSyncData *data, const char *config, OSync Error **error)172 osync_bool osync_converter_invoke(OSyncFormatConverter *converter, OSyncData *data, const char *config, OSyncCapabilities *caps, OSyncData *archived, OSyncError **error) 173 173 { 174 174 char *input_data = NULL; 175 175 unsigned int input_size = 0; 176 176 char *output_data = NULL; 177 177 unsigned int output_size = 0; 178 char *archived_data = NULL; 179 unsigned int archived_size = 0; 178 180 osync_bool free_input = FALSE; 179 181 180 182 osync_assert(converter); 181 183 osync_assert(data); 182 184 183 osync_trace(TRACE_ENTRY, "%s(%p, %p, % s, %p)", __func__, converter, data, __NULLSTR(config), error);185 osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p, %s, %p)", __func__, converter, data, caps, archived, __NULLSTR(config), error); 184 186 osync_trace(TRACE_INTERNAL, "Converter of type %i, from %p(%s) to %p(%s)", converter->type, converter->source_format, osync_objformat_get_name(converter->source_format), converter->target_format, osync_objformat_get_name(converter->target_format)); 185 187 186 188 if (converter->type != OSYNC_CONVERTER_DETECTOR) { … … 188 190 osync_data_steal_data(data, &input_data, &input_size); 189 191 if (input_data) { 190 192 osync_assert(converter->convert_func); 193 194 if (archived) 195 osync_data_get_data(archived, &archived_data, &archived_size); 191 196 192 197 /* Invoke the converter */ 193 if (!converter->convert_func(input_data, input_size, &output_data, &output_size, &free_input, c onfig, converter->userdata, error))198 if (!converter->convert_func(input_data, input_size, &output_data, &output_size, &free_input, caps, archived_data, archived_size, config, converter->userdata, error)) 194 199 goto error; 195 200 196 201 /* Validate if for this objformat are format-plugin validiation-function is provided */ -
opensync/format/opensync_converter.h
42 42 } OSyncConverterType; 43 43 44 44 typedef osync_bool (* OSyncFormatDetectFunc) (const char *data, int size, void *userdata); 45 typedef osync_bool (* OSyncFormatConvertFunc) (char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error);45 typedef osync_bool (* OSyncFormatConvertFunc) (char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error); 46 46 typedef void * (* OSyncFormatConverterInitializeFunc) (const char *config, OSyncError **error); 47 47 typedef void (* OSyncFormatConverterFinalizeFunc) (void *userdata); 48 48 … … 117 117 * @param converter Pointer to the converter 118 118 * @param data Pointer to OSyncData object which should be detected 119 119 * @param config Format converter configuration 120 * @param caps Pointer to capabilities for merging. optional, can be NULL 121 * @param archived Pointer to archived data, which should get used for merging. optional, can be NULL 120 122 * @param error Pointer to an error struct 121 123 * @returns TRUE on successful conversion, FALSE on error 122 124 */ 123 OSYNC_EXPORT osync_bool osync_converter_invoke(OSyncFormatConverter *converter, OSyncData *data, const char *config, OSync Error **error);125 OSYNC_EXPORT osync_bool osync_converter_invoke(OSyncFormatConverter *converter, OSyncData *data, const char *config, OSyncCapabilities *caps, OSyncData *archived, OSyncError **error); 124 126 125 127 /** 126 128 * @brief Checks if the Format Converter fits the Object Format of OSyncData object -
opensync/engine/opensync_mapping_entry_engine_internals.h
108 108 */ 109 109 void osync_entry_engine_set_dirty(OSyncMappingEntryEngine *engine, osync_bool dirty); 110 110 111 /** @brief Demerge the entry in the OSyncMappingEntryEngine111 /** @brief Archive the entry in the OSyncMappingEntryEngine 112 112 * 113 * The demerge includes storing the "entire" entry in the Archive. The demerging is done 114 * based on the supplied OSyncCapabilities. 113 * This stores the "entire" entry in the Archive. 115 114 * 116 115 * @param engine Pointer to an OSyncMappingEntryEngine 117 116 * @param archive Pointer to the Archive to store the "entire" entry before demerging 118 * @param caps Pointer to Capabilities to use for demerging119 117 * @param error Pointer to error struct, which get set on any error 120 118 * @returns TRUE on successful demerge, FALSE otherwise 121 119 */ 122 osync_bool osync_entry_engine_ demerge(OSyncMappingEntryEngine *engine, OSyncArchive *archive, OSyncCapabilities *caps, OSyncError **error);120 osync_bool osync_entry_engine_archive(OSyncMappingEntryEngine *engine, OSyncArchive *archive, OSyncError **error); 123 121 124 122 /** @brief convert the entry in the OSyncMappingEntryEngine 125 123 * … … 134 132 * @param formatenv Pointer to format environment 135 133 * @param objtype_sink Pointer to Object Type Sink which stores format configurations 136 134 * @param path Reference to OSyncFormatConverterPath to supplied or store the cache conversion path 135 * @param caps Pointer to capabilities of the peer which will retrieve the conversion result. optional, can be NULL 137 136 * @param error Pointer to error struct, which get set on any error 138 137 * @returns TRUE on successful demerge, FALSE otherwise 139 138 */ 140 139 141 osync_bool osync_entry_engine_convert(OSyncMappingEntryEngine *engine, OSyncFormatEnv *formatenv, OSyncObjTypeSink *objtype_sink, OSyncFormatConverterPath **path, OSync Error **error);140 osync_bool osync_entry_engine_convert(OSyncMappingEntryEngine *engine, OSyncFormatEnv *formatenv, OSyncObjTypeSink *objtype_sink, OSyncFormatConverterPath **path, OSyncCapabilities *caps, OSyncError **error); 142 141 143 142 /*@}*/ 144 143 -
opensync/engine/opensync_sink_engine.c
124 124 return osync_client_proxy_get_member(engine->proxy); 125 125 } 126 126 127 osync_bool osync_sink_engine_ demerge(OSyncSinkEngine *engine, OSyncArchive *archive, OSyncError **error)127 osync_bool osync_sink_engine_archive(OSyncSinkEngine *engine, OSyncArchive *archive, OSyncError **error) 128 128 { 129 129 OSyncList *o; 130 130 OSyncMember *member; … … 150 150 if (osync_change_get_changetype(entry_engine->change) == OSYNC_CHANGE_TYPE_DELETED) 151 151 continue; 152 152 153 if (!osync_objformat_has_merger(osync_change_get_objformat(entry_engine->change))) 154 continue; 155 156 if (!osync_entry_engine_demerge(entry_engine, archive, caps, error)) 153 if (!osync_entry_engine_archive(entry_engine, archive, error)) 157 154 goto error; 158 155 159 156 } … … 170 167 OSyncObjTypeSink *objtype_sink; 171 168 const char *objtype; 172 169 OSyncFormatConverterPath *path = NULL; 170 OSyncCapabilities *caps; 173 171 174 172 osync_assert(engine); 175 173 osync_assert(formatenv); … … 177 175 member = osync_client_proxy_get_member(engine->proxy); 178 176 osync_assert(member); 179 177 178 caps = osync_member_get_capabilities(member); 179 180 180 objtype = osync_obj_engine_get_objtype(engine->engine); 181 181 objtype_sink = osync_member_find_objtype_sink(member, objtype); 182 182 osync_assert(objtype_sink); … … 191 191 if (osync_change_get_changetype(entry_engine->change) == OSYNC_CHANGE_TYPE_DELETED) 192 192 continue; 193 193 194 if (!osync_entry_engine_convert(entry_engine, formatenv, objtype_sink, &path, error))194 if (!osync_entry_engine_convert(entry_engine, formatenv, objtype_sink, &path, caps, error)) 195 195 goto error; 196 196 } 197 197 -
opensync/engine/opensync_obj_engine.c
1337 1337 OSyncSinkEngine *sinkengine = p->data; 1338 1338 1339 1339 if (merger_enabled 1340 && !osync_sink_engine_ demerge(sinkengine, engine->archive, error))1340 && !osync_sink_engine_archive(sinkengine, engine->archive, error)) 1341 1341 goto error; 1342 1342 1343 1343 if (converter_enabled -
opensync/engine/opensync_mapping_entry_engine.c
158 158 engine->dirty = dirty; 159 159 } 160 160 161 osync_bool osync_entry_engine_ demerge(OSyncMappingEntryEngine *entry_engine, OSyncArchive *archive, OSyncCapabilities *caps, OSyncError **error)161 osync_bool osync_entry_engine_archive(OSyncMappingEntryEngine *entry_engine, OSyncArchive *archive, OSyncError **error) 162 162 { 163 163 164 164 char *buffer = NULL, *marshalbuf; … … 190 190 goto error_free_marshal; 191 191 } 192 192 193 if (!osync_objformat_demerge(objformat, &buffer, &size, caps, error))194 goto error_free_marshal;195 196 osync_trace(TRACE_SENSITIVE, "Post Demerge:\n%s\n",197 osync_objformat_print(objformat, buffer, size));198 199 193 osync_marshal_unref(marshal); 200 194 201 195 return TRUE; … … 206 200 return FALSE; 207 201 } 208 202 209 osync_bool osync_entry_engine_convert(OSyncMappingEntryEngine *entry_engine, OSyncFormatEnv *formatenv, OSyncObjTypeSink *objtype_sink, OSyncFormatConverterPath **cachedpath, OSync Error **error)203 osync_bool osync_entry_engine_convert(OSyncMappingEntryEngine *entry_engine, OSyncFormatEnv *formatenv, OSyncObjTypeSink *objtype_sink, OSyncFormatConverterPath **cachedpath, OSyncCapabilities *caps, OSyncError **error) 210 204 { 211 205 char *objtype = NULL; 212 206 OSyncList *format_sinks = NULL; … … 245 239 osync_converter_path_set_config(path, osync_objformat_sink_get_config(formatsink)); 246 240 } 247 241 248 if (!osync_format_env_convert(formatenv, path, osync_change_get_data(entry_engine->change), error)) {242 if (!osync_format_env_convert(formatenv, path, osync_change_get_data(entry_engine->change), caps, NULL, error)) { 249 243 goto error_free_path; 250 244 } 251 245 osync_trace(TRACE_INTERNAL, "converted to format %s", osync_objformat_get_name(osync_change_get_objformat(entry_engine->change))); -
opensync/engine/opensync_engine.c
170 170 osync_converter_path_unref(converter_path); 171 171 } 172 172 173 osync_bool osync_engine_load_archived_entry(OSyncEngine *engine, OSyncChange *change, OSyncData **archived_entry, OSyncError **error) 174 { 175 int ret; 176 char *entirebuf; 177 unsigned int entsize; 178 OSyncMarshal *marshal; 179 180 osync_assert(engine); 181 osync_assert(change); 182 osync_assert(archived_entry); 183 184 *archived_entry = NULL; 185 186 /* TODO: Merger save the archive data with the member so we have to load it only for one time*/ 187 ret = osync_archive_load_data(engine->archive, osync_change_get_uid(change), osync_change_get_objtype(change), &entirebuf, &entsize, error); 188 189 if (ret < 0) 190 goto error; 191 else if (ret == 0) 192 goto done; 193 194 marshal = osync_marshal_new(error); 195 if (!marshal) 196 goto error; 197 198 /* Create a dummy marshal object - to later demarshal changes which got 199 * stored in a marshaled/serialized format. 200 */ 201 osync_marshal_write_data(marshal, entirebuf, entsize); 202 203 if (!osync_objformat_demarshal(osync_change_get_objformat(change), marshal, &entirebuf, &entsize, error)) { 204 osync_marshal_unref(marshal); 205 goto error; 206 } 207 208 osync_marshal_unref(marshal); 209 210 done: 211 return TRUE; 212 error: 213 return FALSE; 214 } 215 216 static osync_bool osync_engine_merge_and_convert(OSyncEngine *engine, OSyncClientProxy *proxy, 217 OSyncChange *change, OSyncObjFormat *destformat, OSyncError **error) 218 { 219 OSyncCapabilities *caps; 220 OSyncFormatConverterPath *path = NULL; 221 OSyncObjFormatSink *formatsink = NULL; 222 OSyncData *archived_data = NULL; 223 OSyncMember *member; 224 char *member_objtype = NULL; 225 long long int memberid; 226 OSyncObjTypeSink *objtype_sink = NULL; 227 228 osync_assert(engine); 229 osync_assert(proxy); 230 osync_assert(change); 231 232 if (!destformat) 233 goto done; 234 235 /* Do not convert anything if the chagetype is DELETED. */ 236 if (osync_change_get_changetype(change) == OSYNC_CHANGE_TYPE_DELETED) 237 goto done; 238 239 member = osync_client_proxy_get_member(proxy); 240 memberid = osync_member_get_id(member); 241 member_objtype = osync_strdup_printf("%lli_%s", memberid, osync_change_get_objtype(change)); 242 caps = osync_member_get_capabilities(member); 243 objtype_sink = osync_member_find_objtype_sink(member, osync_change_get_objtype(change)); 244 245 246 osync_trace(TRACE_INTERNAL, "converting to format %s", osync_objformat_get_name(destformat)); 247 248 path = _osync_engine_get_converter_path(engine, member_objtype); 249 if (!path) { 250 path = osync_format_env_find_path_with_detectors(engine->formatenv, osync_change_get_data(change), destformat, NULL, error); 251 _osync_engine_set_converter_path(engine, member_objtype, path); 252 } 253 254 osync_free(member_objtype); 255 256 if (!path) 257 goto error; 258 259 /* Load archived entry if available */ 260 if (!osync_engine_load_archived_entry(engine, change, &archived_data, error)) 261 goto error; 262 263 /* Get the current configured format to honor the plugin configuration! */ 264 formatsink = osync_objtype_sink_find_objformat_sink(objtype_sink, osync_change_get_objformat(change)); 265 if (formatsink) { 266 const char *config = osync_objformat_sink_get_config(formatsink); 267 osync_converter_path_set_config(path, config); 268 } 269 270 if (!osync_format_env_convert(engine->formatenv, path, osync_change_get_data(change), caps, archived_data, error)) 271 goto error; 272 273 osync_data_unref(archived_data); 274 275 done: 276 return TRUE; 277 error: 278 return FALSE; 279 } 280 281 173 282 static void _osync_engine_receive_change(OSyncClientProxy *proxy, void *userdata, OSyncChange *change) 174 283 { 175 284 OSyncEngine *engine = userdata; 176 285 OSyncError *error = NULL; 177 286 osync_bool found = FALSE; 178 287 OSyncMember *member = NULL; 179 long long int memberid = 0;180 288 const char *uid = NULL; 181 289 OSyncChangeType changetype = 0; 182 290 const char *format = NULL; 183 291 const char *objtype = NULL; 184 OSyncObjTypeSink *objtype_sink = NULL;185 char *member_objtype = NULL;186 292 OSyncData *data = NULL; 187 293 OSyncObjFormat *internalFormat = NULL; 188 294 OSyncObjFormat *detected_format = NULL; 295 OSyncObjFormat *destformat = NULL; 189 296 190 297 osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, proxy, userdata, change); 191 298 192 299 member = osync_client_proxy_get_member(proxy); 193 memberid = osync_member_get_id(member); 300 194 301 uid = osync_change_get_uid(change); 195 302 changetype = osync_change_get_changetype(change); 196 303 format = osync_objformat_get_name(osync_change_get_objformat(change)); 197 304 objtype = osync_change_get_objtype(change); 198 305 199 o bjtype_sink = osync_member_find_objtype_sink(member, objtype);306 osync_trace(TRACE_INTERNAL, "Received change %s, changetype %i, format %s, objtype %s from member %lli", uid, changetype, format, objtype, osync_member_get_id(member)); 200 307 201 osync_trace(TRACE_INTERNAL, "Received change %s, changetype %i, format %s, objtype %s from member %lli", uid, changetype, format, objtype, memberid);202 203 308 data = osync_change_get_data(change); 204 309 205 310 /* try to detect encapsulated formats */ … … 214 319 objtype = osync_objformat_get_objtype(detected_format); 215 320 } 216 321 217 member_objtype = osync_strdup_printf("%lli_%s", memberid, objtype); 322 /* Convert the format to the internal format */ 323 if ((internalFormat = _osync_engine_get_internal_format(engine, objtype))) 324 destformat = internalFormat; 325 else 326 destformat = detected_format; 327 218 328 219 /* Convert the format to the internal format */220 internalFormat = _osync_engine_get_internal_format(engine, objtype);221 329 osync_trace(TRACE_INTERNAL, "common format %p for objtype %s", internalFormat, objtype); 222 330 223 331 /* Only convert if the engine is allowed to convert and if an "internal" or detected format is available. 224 The reason that the engine isn't allowed to convert could be backup. dumping the changes. 225 Do not convert anything if the chagetype is DELETED. */ 226 227 /* TODO: Move common format conversion into objengine. Use this conversion only for 228 * encapsulating formats, if required. 229 */ 230 if ((internalFormat || detected_format) && osync_group_get_converter_enabled(engine->group) && (osync_change_get_changetype(change) != OSYNC_CHANGE_TYPE_DELETED)) { 231 OSyncFormatConverterPath *path = NULL; 232 OSyncObjFormatSink *formatsink = NULL; 233 OSyncObjFormat *common_format = internalFormat ? internalFormat : detected_format; 234 osync_trace(TRACE_INTERNAL, "converting to format %s", osync_objformat_get_name(common_format)); 235 236 path = _osync_engine_get_converter_path(engine, member_objtype); 237 if(!path) { 238 path = osync_format_env_find_path_with_detectors(engine->formatenv, osync_change_get_data(change), common_format, NULL, &error); 239 _osync_engine_set_converter_path(engine, member_objtype, path); 240 } 241 242 if (!path) 332 The reason that the engine isn't allowed to convert could be backup. dumping the changes. */ 333 if (osync_group_get_converter_enabled(engine->group)) 334 if (!osync_engine_merge_and_convert(engine, proxy, change, destformat, &error)) 243 335 goto error; 244 336 245 /* Get the current configured format to honor the plugin configuration! */246 formatsink = osync_objtype_sink_find_objformat_sink(objtype_sink, osync_change_get_objformat(change));247 if (formatsink) {248 const char *config = osync_objformat_sink_get_config(formatsink);249 osync_converter_path_set_config(path, config);250 }251 252 if (!osync_format_env_convert(engine->formatenv, path, data, &error)) {253 goto error;254 }255 }256 257 /* TODO: Move this into the objengine. */258 /* Merger - Merge lost information to the change (don't merger anything when changetype is DELETED.) */259 if( osync_group_get_merger_enabled(engine->group) &&260 osync_group_get_converter_enabled(engine->group) &&261 (osync_change_get_changetype(change) != OSYNC_CHANGE_TYPE_DELETED) &&262 /* only use the merger if the objformat has merger registered. */263 osync_objformat_has_merger(osync_change_get_objformat(change)) )264 265 {266 OSyncCapabilities *caps;267 OSyncObjFormat *objformat = osync_change_get_objformat(change);268 char *entirebuf, *buffer;269 unsigned int entsize, size = 0;270 osync_trace(TRACE_INTERNAL, "Merge.");271 272 member = osync_client_proxy_get_member(proxy);273 caps = osync_member_get_capabilities(member);274 275 if(caps) {276 277 /* TODO: Merger save the archive data with the member so we have to load it only for one time*/278 // osync_archive_load_data() is fetching the mappingid by uid in the db279 int ret = osync_archive_load_data(engine->archive, uid, osync_change_get_objtype(change), &entirebuf, &entsize, &error);280 if (ret < 0) {281 goto error;282 }283 284 if (ret > 0) {285 OSyncMarshal *marshal;286 287 marshal = osync_marshal_new(&error);288 if (!marshal)289 goto error;290 291 osync_marshal_write_data(marshal, entirebuf, entsize);292 293 if (!osync_objformat_demarshal(objformat, marshal, &entirebuf, &entsize, &error)) {294 osync_marshal_unref(marshal);295 goto error;296 }297 298 osync_marshal_unref(marshal);299 300 osync_data_get_data(osync_change_get_data(change), &buffer, &size);301 302 ret = osync_objformat_merge(objformat, &buffer, &size, entirebuf, entsize, caps, &error);303 osync_free(entirebuf);304 305 if (ret != TRUE)306 goto error;307 308 osync_trace(TRACE_SENSITIVE, "Merge result:\n%s\n",309 osync_objformat_print(objformat, buffer, size));310 }311 }312 }313 314 337 /* Search for the correct objengine */ 315 338 {OSyncList * o = NULL; 316 339 for (o = engine->object_engines; o; o = o->next) { … … 328 351 goto error; 329 352 } 330 353 331 osync_free(member_objtype);332 333 354 osync_trace(TRACE_EXIT, "%s", __func__); 334 355 return; 335 356 336 357 error: 337 osync_free(member_objtype);338 339 358 osync_engine_set_error(engine, error); 340 359 osync_status_update_member(engine, osync_client_proxy_get_member(proxy), OSYNC_ENGINE_MEMBER_EVENT_ERROR, NULL, error); 341 360 osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(&error)); -
opensync/engine/opensync_sink_engine_internals.h
44 44 void osync_sink_engine_unref(OSyncSinkEngine *engine); 45 45 osync_bool osync_sink_engine_is_connected(OSyncSinkEngine *engine); 46 46 47 /** @brief Demerge all entries of OSyncSinkEngine47 /** @brief Archive all entries of OSyncSinkEngine 48 48 * 49 49 * If the Member/Client of the OSyncSinkEngine doesn't have capabilities 50 50 * this functions is NOOP and just returns with TRUE, without error. 51 51 * 52 * Changes with a current OSyncObjFormat , without merge/demerge get skipped.52 * Changes with a current OSyncObjFormat 53 53 * 54 * @param engine Pointer to an OSyncSinkEngine which should demerge55 * @param archive Pointer to an OSyncArchive to store the dermerged information54 * @param engine Pointer to an OSyncSinkEngine which should archive all entries 55 * @param archive Pointer to an OSyncArchive which is used for storing the entries 56 56 * @param error Pointer to error struct, which get set on any error 57 57 * @returns TRUE on success, FALSE otherwise 58 58 */ 59 osync_bool osync_sink_engine_ demerge(OSyncSinkEngine *engine, OSyncArchive *archive, OSyncError **error);59 osync_bool osync_sink_engine_archive(OSyncSinkEngine *engine, OSyncArchive *archive, OSyncError **error); 60 60 61 61 /** @brief Convert all entries of OSyncSinkEngine to destitination format 62 62 * -
tests/mock-plugin/mock_format.c
76 76 return OSYNC_CONV_DATA_MISMATCH; 77 77 } 78 78 79 static osync_bool conv_mockformat1_to_mockformat2(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)79 static osync_bool conv_mockformat1_to_mockformat2(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 80 80 { 81 81 osync_trace(TRACE_INTERNAL, "Converting file to plain"); 82 82 … … 93 93 return TRUE; 94 94 } 95 95 96 static osync_bool conv_mockformat2_to_mockformat1(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)96 static osync_bool conv_mockformat2_to_mockformat1(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 97 97 { 98 98 osync_trace(TRACE_INTERNAL, "Converting plain to file"); 99 99 -
tests/format-tests/check_conv.c
118 118 } 119 119 END_TEST 120 120 121 osync_bool convert_func(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void* user_data, OSyncError **error)121 osync_bool convert_func(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void* user_data, OSyncError **error) 122 122 { 123 123 *free_input = TRUE; 124 124 *output = g_strdup("test"); … … 1270 1270 } 1271 1271 END_TEST 1272 1272 1273 static osync_bool convert_addtest(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)1273 static osync_bool convert_addtest(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 1274 1274 { 1275 1275 *free_input = TRUE; 1276 1276 *output = g_strdup_printf("%stest", input); … … 1278 1278 return TRUE; 1279 1279 } 1280 1280 1281 static osync_bool convert_remtest(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)1281 static osync_bool convert_remtest(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 1282 1282 { 1283 1283 *free_input = TRUE; 1284 1284 *output = strdup(input); … … 1294 1294 } 1295 1295 } 1296 1296 1297 static osync_bool convert_addtest2(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)1297 static osync_bool convert_addtest2(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 1298 1298 { 1299 1299 *output = g_strdup_printf("%stest2", input); 1300 1300 *outpsize = inpsize + 5; … … 1302 1302 return TRUE; 1303 1303 } 1304 1304 1305 static osync_bool convert_remtest2(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)1305 static osync_bool convert_remtest2(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 1306 1306 { 1307 1307 *free_input = TRUE; 1308 1308 *output = strdup(input); … … 1365 1365 1366 1366 OSyncFormatConverterPath *path = NULL; 1367 1367 path = osync_format_env_find_path_with_detectors(env, data, format3, NULL, &error); 1368 osync_format_env_convert(env, path, data, &error);1368 osync_format_env_convert(env, path, data, NULL, NULL, &error); 1369 1369 fail_unless(error == NULL, NULL); 1370 1370 1371 1371 char *buf; … … 1438 1438 1439 1439 OSyncFormatConverterPath *path = NULL; 1440 1440 path = osync_format_env_find_path_with_detectors(env, data, format3, NULL, &error); 1441 osync_format_env_convert(env, path, data, &error);1441 osync_format_env_convert(env, path, data, NULL, NULL, &error); 1442 1442 fail_unless(error == NULL, NULL); 1443 1443 1444 1444 char *buf; … … 1455 1455 1456 1456 path = NULL; 1457 1457 path = osync_format_env_find_path_with_detectors(env, data, format1, NULL, &error); 1458 osync_format_env_convert(env, path, data, &error);1458 osync_format_env_convert(env, path, data, NULL, NULL, &error); 1459 1459 fail_unless(error == NULL, NULL); 1460 1460 fail_unless(path != NULL, NULL); 1461 1461 … … 1528 1528 1529 1529 OSyncFormatConverterPath *path = NULL; 1530 1530 path = osync_format_env_find_path_with_detectors(env, data, format3, NULL, &error); 1531 osync_format_env_convert(env, path, data, &error);1531 osync_format_env_convert(env, path, data, NULL, NULL, &error); 1532 1532 fail_unless(error == NULL, NULL); 1533 1533 1534 1534 char *buf; … … 1545 1545 1546 1546 path = NULL; 1547 1547 path = osync_format_env_find_path_with_detectors(env, data, format1, NULL, &error); 1548 osync_format_env_convert(env, path, data, &error);1548 osync_format_env_convert(env, path, data, NULL, NULL, &error); 1549 1549 fail_unless(error == NULL, NULL); 1550 1550 fail_unless(path != NULL, NULL); 1551 1551 … … 1676 1676 path = osync_format_env_find_path_with_detectors(env, data, format6, NULL, &error); 1677 1677 fail_unless(path != NULL, NULL); 1678 1678 1679 osync_format_env_convert(env, path, data, &error);1679 osync_format_env_convert(env, path, data, NULL, NULL, &error); 1680 1680 fail_unless(error == NULL, NULL); 1681 1681 1682 1682 char *buf; … … 1693 1693 path = osync_format_env_find_path_with_detectors(env, data, format1, NULL, &error); 1694 1694 fail_unless(path != NULL, NULL); 1695 1695 1696 osync_format_env_convert(env, path, data, &error);1696 osync_format_env_convert(env, path, data, NULL, NULL, &error); 1697 1697 fail_unless(error == NULL, NULL); 1698 1698 1699 1699 osync_data_get_data(data, &buf, &size); … … 1801 1801 path = osync_format_env_find_path_with_detectors(env, data, format4, NULL, &error); 1802 1802 fail_unless(path != NULL, NULL); 1803 1803 1804 osync_format_env_convert(env, path, data, &error);1804 osync_format_env_convert(env, path, data, NULL, NULL, &error); 1805 1805 fail_unless(error == NULL, NULL); 1806 1806 1807 1807 char *buf; … … 1818 1818 path = osync_format_env_find_path_with_detectors(env, data, format1, NULL, &error); 1819 1819 fail_unless(path != NULL, NULL); 1820 1820 1821 osync_format_env_convert(env, path, data, &error);1821 osync_format_env_convert(env, path, data, NULL, NULL, &error); 1822 1822 fail_unless(error == NULL, NULL); 1823 1823 1824 1824 osync_data_get_data(data, &buf, &size); … … 1923 1923 path = osync_format_env_find_path_with_detectors(env, data, format5, NULL, &error); 1924 1924 fail_unless(path != NULL, NULL); 1925 1925 1926 osync_format_env_convert(env, path, data, &error);1926 osync_format_env_convert(env, path, data, NULL, NULL, &error); 1927 1927 fail_unless(error == NULL, NULL); 1928 1928 1929 1929 mark_point(); … … 2030 2030 path = osync_format_env_find_path_formats_with_detectors(env, data, fmtlist, NULL, &error); 2031 2031 fail_unless(path != NULL, NULL); 2032 2032 2033 osync_format_env_convert(env, path, data, &error);2033 osync_format_env_convert(env, path, data, NULL, NULL, &error); 2034 2034 fail_unless(error == NULL, NULL); 2035 2035 2036 2036 mark_point(); … … 2139 2139 path = osync_format_env_find_path_formats_with_detectors(env, data, fmtlist, NULL, &error); 2140 2140 fail_unless(path != NULL, NULL); 2141 2141 2142 osync_format_env_convert(env, path, data, &error);2142 osync_format_env_convert(env, path, data, NULL, NULL, &error); 2143 2143 fail_unless(error == NULL, NULL); 2144 2144 2145 2145 mark_point(); … … 2221 2221 /* FIXME: clarify - this is really intended to fail?! If so deref error. */ 2222 2222 osync_error_unref(&error); 2223 2223 2224 //fail_unless(!osync_format_env_convert(env, path, data, &error), NULL); // path is supposed to be null and this function has an assert on path2224 //fail_unless(!osync_format_env_convert(env, path, data, NULL, NULL, &error), NULL); // path is supposed to be null and this function has an assert on path 2225 2225 } 2226 2226 END_TEST 2227 2227 … … 2296 2296 2297 2297 mark_point(); 2298 2298 2299 osync_format_env_convert(env, path, data, &error);2299 osync_format_env_convert(env, path, data, NULL, NULL, &error); 2300 2300 fail_unless(error == NULL, NULL); 2301 2301 2302 2302 osync_data_get_data(data, &buf, &size); … … 2311 2311 path = osync_format_env_find_path_with_detectors(env, data, format1, NULL, &error); 2312 2312 fail_unless(path != NULL, NULL); 2313 2313 2314 osync_format_env_convert(env, path, data, &error);2314 osync_format_env_convert(env, path, data, NULL, NULL, &error); 2315 2315 fail_unless(error == NULL, NULL); 2316 2316 2317 2317 mark_point(); … … 2332 2332 return FALSE; 2333 2333 } 2334 2334 2335 static osync_bool convert_f1_to_f2(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)2335 static osync_bool convert_f1_to_f2(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 2336 2336 { 2337 2337 fail_unless(!strcmp(input, "F1"), NULL); 2338 2338 … … 2342 2342 return TRUE; 2343 2343 } 2344 2344 2345 static osync_bool convert_f2_to_f1(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)2345 static osync_bool convert_f2_to_f1(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 2346 2346 { 2347 2347 fail_unless(!strcmp(input, "F2"), NULL); 2348 2348 … … 2421 2421 2422 2422 mark_point(); 2423 2423 2424 osync_format_env_convert(env, path, data, &error);2424 osync_format_env_convert(env, path, data, NULL, NULL, &error); 2425 2425 fail_unless(error == NULL, NULL); 2426 2426 2427 2427 osync_data_get_data(data, &buf, &size); … … 2436 2436 path = osync_format_env_find_path_with_detectors(env, data, format1, NULL, &error); 2437 2437 fail_unless(path != NULL, NULL); 2438 2438 2439 osync_format_env_convert(env, path, data, &error);2439 osync_format_env_convert(env, path, data, NULL, NULL, &error); 2440 2440 fail_unless(error == NULL, NULL); 2441 2441 2442 2442 mark_point(); -
tests/format-tests/check_converter.c
5 5 6 6 #include "opensync/format/opensync_converter_internals.h" 7 7 8 osync_bool converter_conv(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)8 osync_bool converter_conv(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 9 9 { 10 10 return TRUE; 11 11 } … … 27 27 g_free(data); 28 28 } 29 29 30 osync_bool conv_format1_to_format2_const(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)30 osync_bool conv_format1_to_format2_const(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 31 31 { 32 32 osync_assert(!strcmp(input, "format1")); 33 33 osync_assert(inpsize == 8); … … 42 42 return TRUE; 43 43 } 44 44 45 osync_bool decap_format1_to_format2_const(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)45 osync_bool decap_format1_to_format2_const(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 46 46 { 47 47 testdata *data = (testdata *)input; 48 48 *output = data->string1; … … 53 53 return TRUE; 54 54 } 55 55 56 osync_bool encap_format1_to_format2_const(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)56 osync_bool encap_format1_to_format2_const(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 57 57 { 58 58 osync_assert(!strcmp(input, "format1")); 59 59 osync_assert(inpsize == 8); … … 68 68 return TRUE; 69 69 } 70 70 71 osync_bool conv_format1_to_format2_dup(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)71 osync_bool conv_format1_to_format2_dup(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 72 72 { 73 73 osync_assert(!strcmp(input, "format1")); 74 74 osync_assert(inpsize == 8); … … 81 81 return TRUE; 82 82 } 83 83 84 osync_bool decap_format1_to_format2_dup(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)84 osync_bool decap_format1_to_format2_dup(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 85 85 { 86 86 osync_assert(!strncmp(input, "SHELL", 5)); 87 87 … … 93 93 return TRUE; 94 94 } 95 95 96 osync_bool encap_format1_to_format2_dup(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)96 osync_bool encap_format1_to_format2_dup(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 97 97 { 98 98 osync_assert(!strcmp(input, "format1")); 99 99 osync_assert(inpsize == 8); … … 319 319 fail_unless(data != NULL, NULL); 320 320 fail_unless(error == NULL, NULL); 321 321 322 fail_unless(osync_converter_invoke(converter, data, NULL, &error) == TRUE, NULL);322 fail_unless(osync_converter_invoke(converter, data, NULL, NULL, NULL, &error) == TRUE, NULL); 323 323 fail_unless(error == NULL, NULL); 324 324 325 325 fail_unless(osync_data_get_objformat(data) == format2, NULL); … … 391 391 fail_unless(data != NULL, NULL); 392 392 fail_unless(error == NULL, NULL); 393 393 394 fail_unless(osync_converter_invoke(converter, data, "test", &error) == TRUE, NULL);394 fail_unless(osync_converter_invoke(converter, data, "test", NULL, NULL, &error) == TRUE, NULL); 395 395 fail_unless(error == NULL, NULL); 396 396 397 397 fail_unless(osync_data_get_objformat(data) == format2, NULL); … … 434 434 fail_unless(data != NULL, NULL); 435 435 fail_unless(error == NULL, NULL); 436 436 437 fail_unless(osync_converter_invoke(converter, data, "test", &error) == TRUE, NULL);437 fail_unless(osync_converter_invoke(converter, data, "test", NULL, NULL, &error) == TRUE, NULL); 438 438 fail_unless(error == NULL, NULL); 439 439 440 440 fail_unless(osync_data_get_objformat(data) == format2, NULL); … … 477 477 fail_unless(data != NULL, NULL); 478 478 fail_unless(error == NULL, NULL); 479 479 480 fail_unless(osync_converter_invoke(converter, data, "test", &error) == TRUE, NULL);480 fail_unless(osync_converter_invoke(converter, data, "test", NULL, NULL, &error) == TRUE, NULL); 481 481 fail_unless(error == NULL, NULL); 482 482 483 483 fail_unless(osync_data_get_objformat(data) == format2, NULL); … … 519 519 fail_unless(data != NULL, NULL); 520 520 fail_unless(error == NULL, NULL); 521 521 522 fail_unless(osync_converter_invoke(converter, data, "test", &error) == TRUE, NULL);522 fail_unless(osync_converter_invoke(converter, data, "test", NULL, NULL, &error) == TRUE, NULL); 523 523 fail_unless(error == NULL, NULL); 524 524 525 525 fail_unless(osync_data_get_objformat(data) == format2, NULL); … … 564 564 fail_unless(data != NULL, NULL); 565 565 fail_unless(error == NULL, NULL); 566 566 567 fail_unless(osync_converter_invoke(converter, data, "test", &error) == TRUE, NULL);567 fail_unless(osync_converter_invoke(converter, data, "test", NULL, NULL, &error) == TRUE, NULL); 568 568 fail_unless(error == NULL, NULL); 569 569 570 570 fail_unless(osync_data_get_objformat(data) == format2, NULL); … … 607 607 fail_unless(data != NULL, NULL); 608 608 fail_unless(error == NULL, NULL); 609 609 610 fail_unless(osync_converter_invoke(converter, data, "test", &error) == TRUE, NULL);610 fail_unless(osync_converter_invoke(converter, data, "test", NULL, NULL, &error) == TRUE, NULL); 611 611 fail_unless(error == NULL, NULL); 612 612 613 613 fail_unless(osync_data_get_objformat(data) == format2, NULL); -
tests/format-tests/check_format_env.c
119 119 } 120 120 END_TEST 121 121 122 osync_bool convert_func(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error)122 osync_bool convert_func(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, OSyncCapabilities *caps, const char *archived_data, unsigned int archived_size, const char *config, void *userdata, OSyncError **error) 123 123 { 124 124 return TRUE; 125 125 } -
opensync.sym
345 345 osync_objformat_set_copy_func 346 346 osync_objformat_set_create_func 347 347 osync_objformat_set_demarshal_func 348 osync_objformat_set_demerge_func349 348 osync_objformat_set_destroy_func 350 349 osync_objformat_set_duplicate_func 351 350 osync_objformat_set_finalize_func 352 351 osync_objformat_set_initialize_func 353 352 osync_objformat_set_marshal_func 354 osync_objformat_set_merge_func355 353 osync_objformat_set_print_func 356 354 osync_objformat_set_revision_func 357 355 osync_objformat_set_validate_func
