21 #include "data_sync_devinf.h"
22 #include "libsyncml/syncml_internals.h"
23 #include "libsyncml/sml_error_internals.h"
30 smlTrace(TRACE_ENTRY,
"%s (%s)", __func__, VA_STRING(name));
38 smlDevInfPropertySetPropName(prop, name);
39 smlDevInfCTCapAddProperty(ctcap, prop);
41 smlTrace(TRACE_EXIT,
"%s", __func__);
54 smlTrace(TRACE_ENTRY,
"%s (%s ::= %s)", __func__, VA_STRING(name), VA_STRING(value));
63 smlDevInfPropertyAddValEnum(prop, value);
65 smlTrace(TRACE_EXIT,
"%s", __func__);
77 smlTrace(TRACE_ENTRY,
"%s (%s)", __func__, VA_STRING(name));
86 smlDevInfPropParamSetParamName(param, name);
87 smlDevInfPropertyAddPropParam(prop, param);
89 smlTrace(TRACE_EXIT,
"%s", __func__);
96 #define _ADD_PROPERTY_PARAM(text) \
97 param = _add_property_param(prop, text, error); \
100 #define _ADD_CTCAP_PROPERTY_BY_NAME(text) \
101 prop = _add_ctcap_property_by_name(ctcap, text, error); \
104 #define _ADD_CTCAP_PROPERTY_BY_NAME_VALUE(name,value) \
105 if (!_add_ctcap_property_by_name_value(ctcap, name, value, error)) \
108 static SmlBool add_devinf_ctcap(
114 smlTrace(TRACE_ENTRY,
"%s (%s %s)", __func__, VA_STRING(cttype), VA_STRING(verct));
125 if (smlDevInfGetCTCap(devinf, ct) != NULL)
127 smlDevInfFreeContentType(ct);
128 smlTrace(TRACE_EXIT,
"%s - content type already present in devinf", __func__);
131 smlDevInfFreeContentType(ct);
132 smlTrace(TRACE_INTERNAL,
"%s: new content type detected", __func__);
138 if (!strcmp(cttype, SML_ELEMENT_TEXT_VCARD) &&
139 !strcmp(verct,
"2.1"))
141 smlTrace(TRACE_INTERNAL,
"%s: vCard 2.1 detected", __func__);
142 ctcap = smlDevInfNewCTCap(error);
146 smlDevInfCTCapSetCTType(ctcap, SML_ELEMENT_TEXT_VCARD);
147 smlDevInfCTCapSetVerCT(ctcap,
"2.1");
148 _ADD_CTCAP_PROPERTY_BY_NAME(
"ADR")
149 _ADD_PROPERTY_PARAM("TYPE")
150 smlDevInfPropParamAddValEnum(param, "HOME");
151 smlDevInfPropParamAddValEnum(param, "WORK");
152 smlDevInfPropParamAddValEnum(param, "PARCEL");
153 smlDevInfPropParamAddValEnum(param, "POSTAL");
154 smlDevInfPropParamAddValEnum(param, "INTL");
155 smlDevInfPropParamAddValEnum(param, "DOM");
156 _ADD_PROPERTY_PARAM("HOME");
157 _ADD_PROPERTY_PARAM("WORK");
158 _ADD_PROPERTY_PARAM("PARCEL");
159 _ADD_PROPERTY_PARAM("POSTAL");
160 _ADD_PROPERTY_PARAM("INTL");
161 _ADD_PROPERTY_PARAM("DOM");
162 _ADD_CTCAP_PROPERTY_BY_NAME("AGENT")
163 _ADD_CTCAP_PROPERTY_BY_NAME("BDAY")
164 _ADD_CTCAP_PROPERTY_BY_NAME_VALUE("BEGIN","VCARD")
165 _ADD_CTCAP_PROPERTY_BY_NAME_VALUE("END","VCARD")
166 _ADD_CTCAP_PROPERTY_BY_NAME("EMAIL")
167 _ADD_PROPERTY_PARAM("TYPE")
168 smlDevInfPropParamAddValEnum(param, "INTERNET");
169 _ADD_PROPERTY_PARAM("INTERNET");
170 _ADD_CTCAP_PROPERTY_BY_NAME("FN")
171 _ADD_CTCAP_PROPERTY_BY_NAME("GEO")
172 _ADD_CTCAP_PROPERTY_BY_NAME("KEY")
173 _ADD_PROPERTY_PARAM("TYPE")
174 smlDevInfPropParamAddValEnum(param, "X509");
175 smlDevInfPropParamAddValEnum(param, "PGP");
176 _ADD_PROPERTY_PARAM("X509");
177 _ADD_PROPERTY_PARAM("PGP");
178 _ADD_CTCAP_PROPERTY_BY_NAME("LABEL")
179 _ADD_PROPERTY_PARAM("TYPE")
180 smlDevInfPropParamAddValEnum(param, "HOME");
181 smlDevInfPropParamAddValEnum(param, "WORK");
182 smlDevInfPropParamAddValEnum(param, "PARCEL");
183 smlDevInfPropParamAddValEnum(param, "POSTAL");
184 smlDevInfPropParamAddValEnum(param, "INTL");
185 smlDevInfPropParamAddValEnum(param, "DOM");
186 _ADD_PROPERTY_PARAM("HOME");
187 _ADD_PROPERTY_PARAM("WORK");
188 _ADD_PROPERTY_PARAM("PARCEL");
189 _ADD_PROPERTY_PARAM("POSTAL");
190 _ADD_PROPERTY_PARAM("INTL");
191 _ADD_PROPERTY_PARAM("DOM");
192 _ADD_CTCAP_PROPERTY_BY_NAME("LOGO")
193 _ADD_PROPERTY_PARAM("TYPE")
194 smlDevInfPropParamAddValEnum(param, "JPEG");
195 _ADD_PROPERTY_PARAM("JPEG");
196 _ADD_CTCAP_PROPERTY_BY_NAME("MAILER")
197 _ADD_CTCAP_PROPERTY_BY_NAME("N")
198 _ADD_CTCAP_PROPERTY_BY_NAME("NOTE")
199 _ADD_CTCAP_PROPERTY_BY_NAME("ORG")
200 _ADD_CTCAP_PROPERTY_BY_NAME("PHOTO")
201 _ADD_PROPERTY_PARAM("TYPE")
202 smlDevInfPropParamAddValEnum(param, "JPEG");
203 _ADD_PROPERTY_PARAM("JPEG");
204 _ADD_CTCAP_PROPERTY_BY_NAME("REV")
205 _ADD_CTCAP_PROPERTY_BY_NAME("ROLE")
206 _ADD_CTCAP_PROPERTY_BY_NAME("SOUND")
207 _ADD_PROPERTY_PARAM("TYPE")
208 smlDevInfPropParamAddValEnum(param, "AIFF");
209 smlDevInfPropParamAddValEnum(param, "PCM");
210 smlDevInfPropParamAddValEnum(param, "WAVE");
211 _ADD_PROPERTY_PARAM("AIFF");
212 _ADD_PROPERTY_PARAM("PCM");
213 _ADD_PROPERTY_PARAM("WAVE");
214 _ADD_CTCAP_PROPERTY_BY_NAME("TEL")
215 _ADD_PROPERTY_PARAM("TYPE")
216 smlDevInfPropParamAddValEnum(param, "WORK");
217 smlDevInfPropParamAddValEnum(param, "VOICE");
218 smlDevInfPropParamAddValEnum(param, "PREF");
219 smlDevInfPropParamAddValEnum(param, "PAGER");
220 smlDevInfPropParamAddValEnum(param, "MSG");
221 smlDevInfPropParamAddValEnum(param, "MODEM");
222 smlDevInfPropParamAddValEnum(param, "ISDN");
223 smlDevInfPropParamAddValEnum(param, "HOME");
224 smlDevInfPropParamAddValEnum(param, "FAX");
225 smlDevInfPropParamAddValEnum(param, "CELL");
226 smlDevInfPropParamAddValEnum(param, "CAR");
227 smlDevInfPropParamAddValEnum(param, "BBS");
228 _ADD_PROPERTY_PARAM("WORK");
229 _ADD_PROPERTY_PARAM("VOICE");
230 _ADD_PROPERTY_PARAM("PREF");
231 _ADD_PROPERTY_PARAM("PAGER");
232 _ADD_PROPERTY_PARAM("MSG");
233 _ADD_PROPERTY_PARAM("MODEM");
234 _ADD_PROPERTY_PARAM("ISDN");
235 _ADD_PROPERTY_PARAM("HOME");
236 _ADD_PROPERTY_PARAM("FAX");
237 _ADD_PROPERTY_PARAM("CELL");
238 _ADD_PROPERTY_PARAM("CAR");
239 _ADD_PROPERTY_PARAM("BBS");
240 _ADD_CTCAP_PROPERTY_BY_NAME("TITLE")
241 _ADD_CTCAP_PROPERTY_BY_NAME("TZ")
242 _ADD_CTCAP_PROPERTY_BY_NAME("UID")
243 _ADD_CTCAP_PROPERTY_BY_NAME("URL")
244 _ADD_PROPERTY_PARAM("TYPE")
245 smlDevInfPropParamAddValEnum(param, "WORK");
246 smlDevInfPropParamAddValEnum(param, "HOME");
247 _ADD_PROPERTY_PARAM("WORK");
248 _ADD_PROPERTY_PARAM("HOME");
249 _ADD_CTCAP_PROPERTY_BY_NAME_VALUE("VERSION", "2.1")
250 smlDevInfAppendCTCap(devinf, ctcap);
252 else if (!strcmp(cttype, SML_ELEMENT_TEXT_VCARD_30) &&
253 !strcmp(verct, "3.0"))
257 smlTrace(TRACE_INTERNAL,
"%s: vCard 3.0 detected", __func__);
258 ctcap = smlDevInfNewCTCap(error);
262 smlDevInfCTCapSetCTType(ctcap, SML_ELEMENT_TEXT_VCARD_30);
263 smlDevInfCTCapSetVerCT(ctcap,
"3.0");
264 _ADD_CTCAP_PROPERTY_BY_NAME_VALUE(
"BEGIN",
"VCARD")
265 _ADD_CTCAP_PROPERTY_BY_NAME_VALUE("END", "VCARD")
266 _ADD_CTCAP_PROPERTY_BY_NAME_VALUE("VERSION", "3.0")
267 _ADD_CTCAP_PROPERTY_BY_NAME("REV")
268 _ADD_CTCAP_PROPERTY_BY_NAME("N")
269 _ADD_CTCAP_PROPERTY_BY_NAME("TITLE")
270 _ADD_CTCAP_PROPERTY_BY_NAME("CATEGORIES")
271 _ADD_CTCAP_PROPERTY_BY_NAME("CLASS")
272 _ADD_CTCAP_PROPERTY_BY_NAME("ORG")
273 _ADD_CTCAP_PROPERTY_BY_NAME("EMAIL")
274 _ADD_CTCAP_PROPERTY_BY_NAME("URL")
275 _ADD_CTCAP_PROPERTY_BY_NAME("TEL")
276 _ADD_PROPERTY_PARAM("TYPE")
277 smlDevInfPropParamAddValEnum(param, "CELL");
278 smlDevInfPropParamAddValEnum(param, "HOME");
279 smlDevInfPropParamAddValEnum(param, "WORK");
280 smlDevInfPropParamAddValEnum(param, "FAX");
281 smlDevInfPropParamAddValEnum(param, "MODEM");
282 smlDevInfPropParamAddValEnum(param, "VOICE");
283 _ADD_CTCAP_PROPERTY_BY_NAME("ADR")
284 _ADD_PROPERTY_PARAM("TYPE")
285 smlDevInfPropParamAddValEnum(param, "HOME");
286 smlDevInfPropParamAddValEnum(param, "WORK");
287 _ADD_CTCAP_PROPERTY_BY_NAME("BDAY")
288 _ADD_CTCAP_PROPERTY_BY_NAME("NOTE")
289 _ADD_CTCAP_PROPERTY_BY_NAME("PHOTO")
290 _ADD_PROPERTY_PARAM("TYPE")
291 smlDevInfAppendCTCap(devinf, ctcap);
298 else if (!strcmp(cttype, SML_ELEMENT_TEXT_VCAL) &&
299 !strcmp(verct, "1.0"))
301 smlTrace(TRACE_INTERNAL,
"%s: vCalendar 1.0 detected", __func__);
302 ctcap = smlDevInfNewCTCap(error);
306 smlDevInfCTCapSetCTType(ctcap, SML_ELEMENT_TEXT_VCAL);
307 smlDevInfCTCapSetVerCT(ctcap,
"1.0");
308 _ADD_CTCAP_PROPERTY_BY_NAME(
"AALARM")
309 _ADD_CTCAP_PROPERTY_BY_NAME("ATTACH")
310 _ADD_CTCAP_PROPERTY_BY_NAME("ATTENDEE")
311 _ADD_PROPERTY_PARAM("EXCEPT")
312 _ADD_PROPERTY_PARAM("RSVP")
313 _ADD_PROPERTY_PARAM("STATUS")
314 _ADD_PROPERTY_PARAM("ROLE")
315 _ADD_CTCAP_PROPERTY_BY_NAME("BEGIN")
316 smlDevInfPropertyAddValEnum(prop, "VCALENDAR");
317 smlDevInfPropertyAddValEnum(prop, "VEVENT");
318 smlDevInfPropertyAddValEnum(prop, "VTODO");
319 _ADD_CTCAP_PROPERTY_BY_NAME("CATEGORIES")
320 _ADD_CTCAP_PROPERTY_BY_NAME("COMPLETED")
321 _ADD_CTCAP_PROPERTY_BY_NAME("CLASS")
322 smlDevInfPropertyAddValEnum(prop, "PUBLIC");
323 smlDevInfPropertyAddValEnum(prop, "PRIVATE");
324 smlDevInfPropertyAddValEnum(prop, "CONFIDENTIAL");
325 _ADD_CTCAP_PROPERTY_BY_NAME("DALARM")
326 _ADD_CTCAP_PROPERTY_BY_NAME("DAYLIGHT")
327 _ADD_CTCAP_PROPERTY_BY_NAME("DCREATED")
328 _ADD_CTCAP_PROPERTY_BY_NAME("DESCRIPTION")
329 _ADD_CTCAP_PROPERTY_BY_NAME("DTSTART")
330 _ADD_CTCAP_PROPERTY_BY_NAME("DTEND")
331 _ADD_CTCAP_PROPERTY_BY_NAME("DUE")
332 _ADD_CTCAP_PROPERTY_BY_NAME("END")
333 smlDevInfPropertyAddValEnum(prop, "VCALENDAR");
334 smlDevInfPropertyAddValEnum(prop, "VEVENT");
335 smlDevInfPropertyAddValEnum(prop, "VTODO");
336 _ADD_CTCAP_PROPERTY_BY_NAME("EXDATE")
337 _ADD_CTCAP_PROPERTY_BY_NAME("LAST-MODIFIED")
338 _ADD_CTCAP_PROPERTY_BY_NAME("LOCATION")
339 _ADD_CTCAP_PROPERTY_BY_NAME("PRIORITY")
340 _ADD_CTCAP_PROPERTY_BY_NAME("RRULE")
341 _ADD_CTCAP_PROPERTY_BY_NAME("STATUS")
342 _ADD_CTCAP_PROPERTY_BY_NAME("SUMMARY")
343 _ADD_CTCAP_PROPERTY_BY_NAME("UID")
344 _ADD_CTCAP_PROPERTY_BY_NAME_VALUE("VERSION", "1.0")
345 smlDevInfAppendCTCap(devinf, ctcap);
347 else if (!strcmp(cttype, SML_ELEMENT_TEXT_ICAL) &&
348 !strcmp(verct, "2.0"))
353 smlTrace(TRACE_INTERNAL,
"%s: iCalendar (vCalendar 2.0) detected", __func__);
354 ctcap = smlDevInfNewCTCap(error);
358 smlDevInfCTCapSetCTType(ctcap, SML_ELEMENT_TEXT_ICAL);
359 smlDevInfCTCapSetVerCT(ctcap,
"2.0");
360 _ADD_CTCAP_PROPERTY_BY_NAME(
"AALARM")
361 _ADD_CTCAP_PROPERTY_BY_NAME("ATTACH")
362 _ADD_CTCAP_PROPERTY_BY_NAME("ATTENDEE")
363 _ADD_PROPERTY_PARAM("RSVP")
364 _ADD_PROPERTY_PARAM("PARTSTAT")
365 _ADD_PROPERTY_PARAM("ROLE")
366 _ADD_CTCAP_PROPERTY_BY_NAME("BEGIN")
367 smlDevInfPropertyAddValEnum(prop, "VCALENDAR");
368 smlDevInfPropertyAddValEnum(prop, "VEVENT");
369 smlDevInfPropertyAddValEnum(prop, "VTODO");
370 _ADD_CTCAP_PROPERTY_BY_NAME("CATEGORIES")
371 _ADD_CTCAP_PROPERTY_BY_NAME("COMPLETED")
372 _ADD_CTCAP_PROPERTY_BY_NAME("CLASS")
373 smlDevInfPropertyAddValEnum(prop, "PUBLIC");
374 smlDevInfPropertyAddValEnum(prop, "PRIVATE");
375 smlDevInfPropertyAddValEnum(prop, "CONFIDENTIAL");
376 _ADD_CTCAP_PROPERTY_BY_NAME("DALARM")
377 _ADD_CTCAP_PROPERTY_BY_NAME("DAYLIGHT")
378 _ADD_CTCAP_PROPERTY_BY_NAME("DCREATED")
379 _ADD_CTCAP_PROPERTY_BY_NAME("DESCRIPTION")
380 _ADD_CTCAP_PROPERTY_BY_NAME("DTSTART")
381 _ADD_CTCAP_PROPERTY_BY_NAME("DTEND")
382 _ADD_CTCAP_PROPERTY_BY_NAME("DUE")
383 _ADD_CTCAP_PROPERTY_BY_NAME("END")
384 smlDevInfPropertyAddValEnum(prop, "VCALENDAR");
385 smlDevInfPropertyAddValEnum(prop, "VEVENT");
386 smlDevInfPropertyAddValEnum(prop, "VTODO");
387 _ADD_CTCAP_PROPERTY_BY_NAME("EXDATE")
388 _ADD_CTCAP_PROPERTY_BY_NAME("LAST-MODIFIED")
389 _ADD_CTCAP_PROPERTY_BY_NAME("LOCATION")
390 _ADD_CTCAP_PROPERTY_BY_NAME("PRIORITY")
391 _ADD_CTCAP_PROPERTY_BY_NAME("RRULE")
392 _ADD_CTCAP_PROPERTY_BY_NAME("STATUS")
393 _ADD_CTCAP_PROPERTY_BY_NAME("SUMMARY")
394 _ADD_CTCAP_PROPERTY_BY_NAME("UID")
395 _ADD_CTCAP_PROPERTY_BY_NAME_VALUE("VERSION", "2.0")
396 smlDevInfAppendCTCap(devinf, ctcap);
401 smlTrace(TRACE_INTERNAL,
"%s: unknown content type - %s %s", __func__, VA_STRING(cttype), VA_STRING(verct));
402 ctcap = smlDevInfNewCTCap(error);
405 smlDevInfCTCapSetCTType(ctcap, cttype);
406 smlDevInfCTCapSetVerCT(ctcap, verct);
407 smlDevInfAppendCTCap(devinf, ctcap);
410 smlTrace(TRACE_EXIT,
"%s - content type newly added to devinf", __func__);
419 smlTrace(TRACE_ENTRY,
"%s called", __func__);
420 SmlDevInf *devinf = dsObject->remoteDevInf;
425 smlSessionUseNumberOfChanges(session, smlDevInfSupportsNumberOfChanges(devinf));
426 smlSessionUseLargeObjects(session, smlDevInfSupportsLargeObjs(devinf));
430 if (smlDevInfSupportsUTC(devinf))
431 dsObject->onlyLocaltime = FALSE;
433 dsObject->onlyLocaltime = TRUE;
435 smlTrace(TRACE_EXIT,
"%s succeeded", __func__);
440 SmlBool smlDataSyncDevInfAddDatastore(
445 smlTrace(TRACE_ENTRY,
"%s (%p, %p)", __func__, devinf, datastore);
447 smlAssert(datastore);
448 smlAssert(datastore->contentType);
449 smlAssert(datastore->sourceUri);
455 const char *ct = datastore->contentType;
458 if (!strcmp(ct, SML_ELEMENT_TEXT_VCARD))
462 ctype = smlDevInfNewContentType(SML_ELEMENT_TEXT_VCARD_30,
"3.0", error);
465 smlDevInfDataStoreAddRx(ds, ctype);
466 ctype = smlDevInfNewContentType(SML_ELEMENT_TEXT_VCARD_30,
"3.0", error);
469 smlDevInfDataStoreAddTx(ds, ctype);
470 smlDevInfDataStoreSetRxPref(ds, SML_ELEMENT_TEXT_VCARD,
"2.1");
471 smlDevInfDataStoreSetTxPref(ds, SML_ELEMENT_TEXT_VCARD,
"2.1");
472 if (!add_devinf_ctcap(devinf, SML_ELEMENT_TEXT_VCARD,
"2.1", error))
474 if (!add_devinf_ctcap(devinf, SML_ELEMENT_TEXT_VCARD_30,
"3.0", error))
477 else if (!strcmp(ct, SML_ELEMENT_TEXT_VCARD_30))
479 ctype = smlDevInfNewContentType(SML_ELEMENT_TEXT_VCARD_30,
"2.1", error);
482 smlDevInfDataStoreAddRx(ds, ctype);
483 ctype = smlDevInfNewContentType(SML_ELEMENT_TEXT_VCARD_30,
"2.1", error);
486 smlDevInfDataStoreAddTx(ds, ctype);
487 smlDevInfDataStoreSetRxPref(ds, SML_ELEMENT_TEXT_VCARD_30,
"3.0");
488 smlDevInfDataStoreSetTxPref(ds, SML_ELEMENT_TEXT_VCARD_30,
"3.0");
489 if (!add_devinf_ctcap(devinf, SML_ELEMENT_TEXT_VCARD,
"2.1", error))
491 if (!add_devinf_ctcap(devinf, SML_ELEMENT_TEXT_VCARD_30,
"3.0", error))
494 else if (!strcmp(ct, SML_ELEMENT_TEXT_VCAL))
496 ctype = smlDevInfNewContentType(SML_ELEMENT_TEXT_ICAL,
"2.0", error);
499 smlDevInfDataStoreAddRx(ds, ctype);
500 ctype = smlDevInfNewContentType(SML_ELEMENT_TEXT_ICAL,
"2.0", error);
503 smlDevInfDataStoreAddTx(ds, ctype);
504 smlDevInfDataStoreSetRxPref(ds, SML_ELEMENT_TEXT_VCAL,
"1.0");
505 smlDevInfDataStoreSetTxPref(ds, SML_ELEMENT_TEXT_VCAL,
"1.0");
506 if (!add_devinf_ctcap(devinf, SML_ELEMENT_TEXT_VCAL,
"1.0", error))
508 if (!add_devinf_ctcap(devinf, SML_ELEMENT_TEXT_ICAL,
"2.0", error))
511 else if (!strcmp(ct, SML_ELEMENT_TEXT_ICAL))
513 ctype = smlDevInfNewContentType(SML_ELEMENT_TEXT_VCAL,
"1.0", error);
516 smlDevInfDataStoreAddRx(ds, ctype);
517 ctype = smlDevInfNewContentType(SML_ELEMENT_TEXT_VCAL,
"1.0", error);
520 smlDevInfDataStoreAddTx(ds, ctype);
521 smlDevInfDataStoreSetRxPref(ds, SML_ELEMENT_TEXT_ICAL,
"2.0");
522 smlDevInfDataStoreSetTxPref(ds, SML_ELEMENT_TEXT_ICAL,
"2.0");
523 if (!add_devinf_ctcap(devinf, SML_ELEMENT_TEXT_VCAL,
"1.0", error))
525 if (!add_devinf_ctcap(devinf, SML_ELEMENT_TEXT_ICAL,
"2.0", error))
528 else if (!strcmp(ct, SML_ELEMENT_TEXT_PLAIN))
530 smlDevInfDataStoreSetRxPref(ds, SML_ELEMENT_TEXT_PLAIN,
"1.0");
531 smlDevInfDataStoreSetTxPref(ds, SML_ELEMENT_TEXT_PLAIN,
"1.0");
532 if (!add_devinf_ctcap(devinf, SML_ELEMENT_TEXT_PLAIN,
"1.0", error))
537 smlTrace(TRACE_INTERNAL,
"%s - unknown content type detected (%s)",
538 __func__, VA_STRING(ct));
539 smlDevInfDataStoreSetRxPref(ds, ct,
"1.0");
540 smlDevInfDataStoreSetTxPref(ds, ct,
"1.0");
541 if (!add_devinf_ctcap(devinf, ct,
"1.0", error))
546 smlDevInfDataStoreSetSyncCap(ds, SML_DEVINF_SYNCTYPE_TWO_WAY, TRUE);
547 smlDevInfDataStoreSetSyncCap(ds, SML_DEVINF_SYNCTYPE_SLOW_SYNC, TRUE);
550 if (smlDsServerGetServerType(datastore->server) == SML_DS_CLIENT)
552 smlTrace(TRACE_INTERNAL,
"%s: SyncML clients only support SLOW and TWO WAY SYNC", __func__);
554 smlDevInfDataStoreSetSyncCap(ds, SML_DEVINF_SYNCTYPE_SERVER_ALERTED_SYNC, TRUE);
556 smlDevInfAddDataStore(devinf, ds);
557 smlTrace(TRACE_EXIT,
"%s - content type newly added to devinf", __func__);
564 SmlBool smlDataSyncDevInfLoadRemote(
569 smlTrace(TRACE_ENTRY,
"%s(%p, %i, %p)", __func__, dsObject, sendGet, error);
572 smlAssertMsg(dsObject->session,
"an active session is needed to have a remote device");
577 if (dsObject->remoteDevInf)
578 smlDevInfUnref(dsObject->remoteDevInf);
580 dsObject->remoteDevInf = smlDevInfAgentGetSessionDevInf(dsObject->agent, dsObject->session);
581 if (dsObject->remoteDevInf)
583 smlTrace(TRACE_INTERNAL,
"%s: The remote DevInf was received.", __func__);
584 smlDevInfRef(dsObject->remoteDevInf);
585 _update_session_config_from_devinf(dsObject);
587 if (dsObject->writeDevInfCallback) {
588 smlTrace(TRACE_EXIT,
"%s - calling writeDevInfCallback", __func__);
589 return dsObject->writeDevInfCallback(
590 dsObject, dsObject->remoteDevInf,
591 dsObject->writeDevInfUserdata,
594 smlTrace(TRACE_EXIT,
"%s - remote DevInf available", __func__);
598 smlTrace(TRACE_INTERNAL,
"%s: The remote DevInf was not received.", __func__);
600 if (dsObject->readDevInfCallback)
602 smlTrace(TRACE_INTERNAL,
"%s: calling read DevInf callback", __func__);
603 SmlDevInf *devinf = dsObject->readDevInfCallback(
605 smlLocationGetURI(smlSessionGetTarget(dsObject->session)),
606 dsObject->readDevInfUserdata, error);
607 if (!devinf && *error)
610 if (!smlDevInfAgentSetSessionDevInf(
618 dsObject->remoteDevInf = smlDevInfAgentGetSessionDevInf(
625 smlDevInfRef(dsObject->remoteDevInf);
626 _update_session_config_from_devinf(dsObject);
627 smlTrace(TRACE_EXIT,
"%s - cached DevInf", __func__);
643 smlTrace(TRACE_EXIT,
"%s - no remote DevInf available at all", __func__);
651 char *smlDataSyncDevInfGetIdentifier()
653 smlTrace(TRACE_ENTRY,
"%s", __func__);
654 const char *user = g_get_user_name();
655 const char *host = g_get_host_name();
656 char *
id = g_strjoin(
"@", user, host, NULL);
657 smlTrace(TRACE_EXIT,
"%s - %s", __func__, VA_STRING(
id));
666 SmlBool smlDataSyncDevInfInit(
668 SmlDevInfDevTyp type,
675 if (!dsObject->identifier)
676 dsObject->identifier = smlDataSyncDevInfGetIdentifier();
678 if (dsObject->fakeDevice)
680 smlTrace(TRACE_INTERNAL,
"%s: faking devinf", __func__);
681 devinf = smlDevInfNew(dsObject->identifier, SML_DEVINF_DEVTYPE_SMARTPHONE, error);
685 smlDevInfSetManufacturer(devinf, dsObject->fakeManufacturer);
686 smlDevInfSetModel(devinf, dsObject->fakeModel);
687 smlDevInfSetSoftwareVersion(devinf, dsObject->fakeSoftwareVersion);
689 smlTrace(TRACE_INTERNAL,
"%s: not faking devinf", __func__);
690 devinf = smlDevInfNew(dsObject->identifier, type, error);
694 smlDevInfSetSoftwareVersion(devinf, dsObject->fakeSoftwareVersion);
697 smlDevInfSetSupportsNumberOfChanges(devinf, TRUE);
698 smlDevInfSetSupportsLargeObjs(devinf, TRUE);
699 if (!dsObject->onlyLocaltime)
700 smlDevInfSetSupportsUTC(devinf, TRUE);
701 smlAssert(dsObject->maxMsgSize);
702 smlAssert(dsObject->maxObjSize);
704 dsObject->localDevInf = devinf;
706 dsObject->agent = smlDevInfAgentNew(dsObject->localDevInf, error);
707 if (!dsObject->agent)
709 smlDevInfRef(dsObject->localDevInf);
711 if (!smlDevInfAgentRegister(dsObject->agent, dsObject->manager, error))
717 smlDevInfUnref(devinf);
719 smlDevInfAgentFree(dsObject->agent);
720 dsObject->localDevInf = NULL;
721 dsObject->agent = NULL;
725 SmlBool smlDataSyncManageDevInf(
730 smlTrace(TRACE_ENTRY,
"%s(%p, %i, %p)", __func__, dsObject, sendGet, error);
732 smlAssertMsg(dsObject->session,
"an active session is needed to manage device informations");
737 if (dsObject->writeDevInfCallback)
740 smlTrace(TRACE_INTERNAL,
"%s: calling write DevInf callback", __func__);
741 if (!dsObject->writeDevInfCallback(
742 dsObject, dsObject->localDevInf,
743 dsObject->writeDevInfUserdata, error))
748 if (smlDataSyncDevInfLoadRemote(dsObject, sendGet, error) &&
749 dsObject->remoteDevInf &&
750 dsObject->handleRemoteDevInfCallback &&
751 !dsObject->handleRemoteDevInfCallback(
753 dsObject->remoteDevInf,
754 dsObject->handleRemoteDevInfUserdata,
771 if (dsObject->remoteDevInf &&
772 !smlDevInfSupportsUTC(dsObject->remoteDevInf))
775 "%s: enforcing localtime because of remote DevInf",
777 dsObject->onlyLocaltime = TRUE;
781 smlTrace(TRACE_EXIT,
"%s - TRUE", __func__);