| 161 | | void obex_libsyncml_send_san() |
|---|
| 162 | | { |
|---|
| 163 | | SmlError *error = NULL; |
|---|
| 164 | | |
|---|
| 165 | | /* actually we only test server alerted syncs (SyncML 1.1) */ |
|---|
| 166 | | SmlNotification *san = smlNotificationNew(SML_SAN_VERSION_11, SML_SAN_UIMODE_USER, SML_SAN_INITIATOR_SERVER, 65535, source, target, SML_MIMETYPE_XML, &error); |
|---|
| 167 | | fail_unless(san != NULL, NULL); |
|---|
| 168 | | fail_unless(error == NULL, NULL); |
|---|
| 169 | | smlNotificationSetManager(san, libsyncml_manager); |
|---|
| 170 | | |
|---|
| 171 | | if (locVcard) |
|---|
| 172 | | { |
|---|
| 173 | | SmlLocation *loc1 = smlLocationNew(locVcard, NULL, &error); |
|---|
| 174 | | fail_unless(loc1 != NULL, NULL); |
|---|
| 175 | | fail_unless(error == NULL, NULL); |
|---|
| 176 | | libsyncml_tracker->ds[0] = smlDsServerNew(SML_ELEMENT_TEXT_VCARD, loc1, &error); |
|---|
| 177 | | smlDsServerSetConnectCallback(libsyncml_tracker->ds[0], _recv_init_alert, libsyncml_tracker); |
|---|
| 178 | | smlDsServerRegister(libsyncml_tracker->ds[0], libsyncml_manager, &error); |
|---|
| 179 | | smlLocationUnref(loc1); |
|---|
| 180 | | fail_unless(smlDsServerAddSan(libsyncml_tracker->ds[0], san, &error), NULL); |
|---|
| 181 | | fail_unless(error == NULL, NULL); |
|---|
| 182 | | } |
|---|
| 183 | | |
|---|
| 184 | | if (locVcal) |
|---|
| 185 | | { |
|---|
| 186 | | SmlLocation *loc2 = smlLocationNew(locVcal, NULL, &error); |
|---|
| 187 | | fail_unless(loc2 != NULL, NULL); |
|---|
| 188 | | fail_unless(error == NULL, NULL); |
|---|
| 189 | | libsyncml_tracker->ds[1] = smlDsServerNew(SML_ELEMENT_TEXT_VCAL, loc2, &error); |
|---|
| 190 | | smlDsServerSetConnectCallback(libsyncml_tracker->ds[1], _recv_init_alert, libsyncml_tracker); |
|---|
| 191 | | smlDsServerRegister(libsyncml_tracker->ds[1], libsyncml_manager, &error); |
|---|
| 192 | | smlLocationUnref(loc2); |
|---|
| 193 | | fail_unless(smlDsServerAddSan(libsyncml_tracker->ds[1], san, &error), NULL); |
|---|
| 194 | | fail_unless(error == NULL, NULL); |
|---|
| 195 | | } |
|---|
| 196 | | |
|---|
| 197 | | fail_unless(smlNotificationSend(san, libsyncml_tsp, &error), NULL); |
|---|
| 198 | | fail_unless(error == NULL, NULL); |
|---|
| 199 | | |
|---|
| 200 | | /* num_session < 1 guarantees that the all events of the manager are dispatched */ |
|---|
| 201 | | while (mobile_state != TEST_MOBILE_STATE_WAIT_FOR_ALERT || num_sessions < 1) { |
|---|
| 202 | | smlManagerDispatch(libsyncml_manager); |
|---|
| 203 | | usleep(100); |
|---|
| 204 | | fail_unless(eventError == NULL, smlErrorPrint(&eventError)); |
|---|
| 205 | | } |
|---|
| 206 | | |
|---|
| 207 | | fail_unless(libsyncml_tracker != NULL, NULL); |
|---|
| 208 | | libsyncml_state = TEST_LIBSYNCML_STATE_WAIT_FOR_ALERT; |
|---|
| | 142 | static void _alert_reply(SmlSession *dsession, SmlStatus *status, void *userdata) |
|---|
| | 143 | { |
|---|
| | 144 | smlTrace(TRACE_ENTRY, "%s()", __func__); |
|---|
| | 145 | |
|---|
| | 146 | fail_unless(status != NULL, NULL); |
|---|
| | 147 | |
|---|
| | 148 | if (GPOINTER_TO_INT(userdata) == 1) { |
|---|
| | 149 | fail_unless(smlStatusGetClass(status) == SML_ERRORCLASS_SUCCESS, NULL); |
|---|
| | 150 | } else { |
|---|
| | 151 | fail_unless(smlStatusGetClass(status) == SML_ERRORCLASS_FATAL, NULL); |
|---|
| | 152 | } |
|---|
| | 153 | |
|---|
| | 154 | smlTrace(TRACE_EXIT, "%s", __func__); |
|---|
| 246 | | SmlDevInfAgent *libsyncml_agent = NULL; |
|---|
| 247 | | void obex_libsyncml_send_alert() |
|---|
| 248 | | { |
|---|
| 249 | | SmlError *error = NULL; |
|---|
| 250 | | |
|---|
| 251 | | while(libsyncml_state != TEST_LIBSYNCML_STATE_RECEIVED_DATASTORE_SESSION || num_sessions < 2) |
|---|
| 252 | | { |
|---|
| 253 | | smlManagerDispatch(libsyncml_manager); |
|---|
| 254 | | usleep(100); |
|---|
| 255 | | fail_unless(eventError == NULL, smlErrorPrint(&eventError)); |
|---|
| 256 | | } |
|---|
| 257 | | |
|---|
| 258 | | if (locVcard) |
|---|
| 259 | | { |
|---|
| 260 | | libsyncml_state = TEST_LIBSYNCML_STATE_WAIT_FOR_ALERT; |
|---|
| 261 | | smlDsSessionGetAlert(libsyncml_tracker->dssessions[0], _recv_alert, GINT_TO_POINTER(1)); |
|---|
| 262 | | while(libsyncml_state != TEST_LIBSYNCML_STATE_RECEIVED_ALERT) |
|---|
| 263 | | { |
|---|
| 264 | | smlManagerDispatch(libsyncml_manager); |
|---|
| 265 | | usleep(100); |
|---|
| 266 | | fail_unless(eventError == NULL, smlErrorPrint(&eventError)); |
|---|
| 267 | | } |
|---|
| 268 | | smlDsSessionSendAlert(libsyncml_tracker->dssessions[0], SML_ALERT_SLOW_SYNC, "last", "12345", _alert_reply, GINT_TO_POINTER(1), &error); |
|---|
| 269 | | } |
|---|
| 270 | | |
|---|
| 271 | | if (locVcal) |
|---|
| 272 | | { |
|---|
| 273 | | libsyncml_state = TEST_LIBSYNCML_STATE_WAIT_FOR_ALERT; |
|---|
| 274 | | smlDsSessionGetAlert(libsyncml_tracker->dssessions[1], _recv_alert, GINT_TO_POINTER(1)); |
|---|
| 275 | | while(libsyncml_state != TEST_LIBSYNCML_STATE_RECEIVED_ALERT) |
|---|
| 276 | | { |
|---|
| 277 | | smlManagerDispatch(libsyncml_manager); |
|---|
| 278 | | usleep(100); |
|---|
| 279 | | fail_unless(eventError == NULL, smlErrorPrint(&eventError)); |
|---|
| 280 | | } |
|---|
| 281 | | smlDsSessionSendAlert(libsyncml_tracker->dssessions[1], SML_ALERT_SLOW_SYNC, "last", "12345", _alert_reply, GINT_TO_POINTER(1), &error); |
|---|
| 282 | | } |
|---|
| 283 | | |
|---|
| 284 | | SmlDevInf *devinf = smlDevInfNew("LibSyncmML", SML_DEVINF_DEVTYPE_WORKSTATION, &error); |
|---|
| 285 | | smlDevInfSetSupportsNumberOfChanges(devinf, TRUE); |
|---|
| 286 | | smlDevInfSetSupportsLargeObjs(devinf, TRUE); |
|---|
| 287 | | smlDevInfSetSupportsUTC(devinf, TRUE); |
|---|
| 288 | | libsyncml_agent = smlDevInfAgentNew(devinf, &error); |
|---|
| 289 | | smlDevInfAgentRegister(libsyncml_agent, libsyncml_manager, &error); |
|---|
| 290 | | fail_unless(smlDevInfAgentRequestDevInf(libsyncml_agent, libsyncml_tracker->session, &error), NULL); |
|---|
| 291 | | |
|---|
| 292 | | fail_unless(libsyncml_tracker->session != NULL, NULL); |
|---|
| 293 | | fail_unless(smlSessionFlush(libsyncml_tracker->session, TRUE, &error), NULL); |
|---|
| 294 | | |
|---|
| 295 | | libsyncml_state = TEST_LIBSYNCML_STATE_WAIT_FOR_SYNC; |
|---|
| 296 | | |
|---|
| 297 | | while(mobile_state == TEST_MOBILE_STATE_WAIT_FOR_ALERT) |
|---|
| 298 | | { |
|---|
| 299 | | smlManagerDispatch(libsyncml_manager); |
|---|
| 300 | | usleep(100); |
|---|
| 301 | | fail_unless(eventError == NULL, smlErrorPrint(&eventError)); |
|---|
| 302 | | } |
|---|
| 303 | | } |
|---|
| 304 | | |
|---|
| 335 | | static void _sync_reply(SmlSession *dsession, SmlStatus *status, void *userdata) |
|---|
| 336 | | { |
|---|
| 337 | | smlTrace(TRACE_ENTRY, "%s()", __func__); |
|---|
| 338 | | |
|---|
| 339 | | fail_unless(status != NULL, NULL); |
|---|
| 340 | | |
|---|
| 341 | | if (GPOINTER_TO_INT(userdata) == 1) { |
|---|
| 342 | | fail_unless(smlStatusGetClass(status) == SML_ERRORCLASS_SUCCESS, NULL); |
|---|
| 343 | | } else { |
|---|
| 344 | | fail_unless(smlStatusGetClass(status) == SML_ERRORCLASS_FATAL, NULL); |
|---|
| 345 | | } |
|---|
| 346 | | |
|---|
| 347 | | smlTrace(TRACE_EXIT, "%s", __func__); |
|---|
| 348 | | } |
|---|
| 349 | | |
|---|
| 350 | | static void _add_reply(SmlDsSession *session, SmlStatus *status, const char *newuid, void *userdata) |
|---|
| 351 | | { |
|---|
| 352 | | smlTrace(TRACE_ENTRY, "%s(%p, %p, %s, %p)", __func__, session, status, newuid, userdata); |
|---|
| 353 | | |
|---|
| 354 | | fail_unless(status != NULL, NULL); |
|---|
| 355 | | fail_unless(smlStatusGetClass(status) == SML_ERRORCLASS_SUCCESS, NULL); |
|---|
| 356 | | fail_unless(GPOINTER_TO_INT(userdata) == 1 || GPOINTER_TO_INT(userdata) == 2, NULL); |
|---|
| 357 | | |
|---|
| 358 | | if (GPOINTER_TO_INT(userdata) == 1) |
|---|
| 359 | | fail_unless(!strcmp(newuid, "newuid"), NULL); |
|---|
| 360 | | else |
|---|
| 361 | | fail_unless(newuid == NULL, NULL); |
|---|
| 362 | | |
|---|
| 363 | | smlTrace(TRACE_EXIT, "%s", __func__); |
|---|
| | 234 | static void _recv_init_alert(SmlDsSession *dsession, void *userdata) |
|---|
| | 235 | { |
|---|
| | 236 | smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, dsession, userdata); |
|---|
| | 237 | managerTracker *tracker = userdata; |
|---|
| | 238 | |
|---|
| | 239 | fail_unless(tracker == libsyncml_tracker, "wrong tracker in userdata"); |
|---|
| | 240 | |
|---|
| | 241 | printf("received init alert for %s\n", smlDsServerGetContentType(smlDsSessionGetServer(dsession))); |
|---|
| | 242 | |
|---|
| | 243 | // store the DsSession |
|---|
| | 244 | if (tracker->ds[0] == smlDsSessionGetServer(dsession)) |
|---|
| | 245 | tracker->dssessions[0] = dsession; |
|---|
| | 246 | else if (tracker->ds[1] == smlDsSessionGetServer(dsession)) |
|---|
| | 247 | tracker->dssessions[1] = dsession; |
|---|
| | 248 | dsSessionList = g_list_append(dsSessionList, dsession); |
|---|
| | 249 | |
|---|
| | 250 | // register the callbacks to handle alerts from client |
|---|
| | 251 | smlDsSessionGetAlert(dsession, _recv_alert, dsession); |
|---|
| | 252 | smlDsSessionGetSync(dsession, _recv_sync, GINT_TO_POINTER(1)); |
|---|
| | 253 | smlDsSessionGetChanges(dsession, _recv_changes, GINT_TO_POINTER(1)); |
|---|
| | 254 | |
|---|
| | 255 | // set the correct state |
|---|
| | 256 | if ( tracker->dssessions[0] && |
|---|
| | 257 | (locList[2] == NULL || tracker->dssessions[1])) |
|---|
| | 258 | { |
|---|
| | 259 | libsyncml_state = TEST_LIBSYNCML_STATE_RECEIVED_DATASTORE_SESSION; |
|---|
| | 260 | } |
|---|
| | 261 | |
|---|
| | 262 | smlDsSessionRef(dsession); |
|---|
| | 263 | |
|---|
| | 264 | smlTrace(TRACE_EXIT, "%s", __func__); |
|---|
| | 265 | } |
|---|
| | 266 | |
|---|
| | 267 | void obex_libsyncml_send_san() |
|---|
| | 268 | { |
|---|
| | 269 | SmlError *error = NULL; |
|---|
| | 270 | |
|---|
| | 271 | /* actually we only test server alerted syncs (SyncML 1.1) */ |
|---|
| | 272 | SmlNotification *san = smlNotificationNew(SML_SAN_VERSION_11, SML_SAN_UIMODE_USER, SML_SAN_INITIATOR_SERVER, 65535, source, target, SML_MIMETYPE_XML, &error); |
|---|
| | 273 | fail_unless(san != NULL, NULL); |
|---|
| | 274 | fail_unless(error == NULL, NULL); |
|---|
| | 275 | smlNotificationSetManager(san, libsyncml_manager); |
|---|
| | 276 | |
|---|
| | 277 | int i = 0; |
|---|
| | 278 | for (i = 0; locList[2*i] != NULL; i++) |
|---|
| | 279 | { |
|---|
| | 280 | SmlLocation *loc = smlLocationNew(locList[2*i], NULL, &error); |
|---|
| | 281 | fail_unless(loc != NULL, NULL); |
|---|
| | 282 | fail_unless(error == NULL, NULL); |
|---|
| | 283 | libsyncml_tracker->ds[i] = smlDsServerNew(locList[2*i+1], loc, &error); |
|---|
| | 284 | smlDsServerSetConnectCallback(libsyncml_tracker->ds[i], _recv_init_alert, libsyncml_tracker); |
|---|
| | 285 | smlDsServerRegister(libsyncml_tracker->ds[i], libsyncml_manager, &error); |
|---|
| | 286 | smlLocationUnref(loc); |
|---|
| | 287 | fail_unless(smlDsServerAddSan(libsyncml_tracker->ds[i], san, &error), NULL); |
|---|
| | 288 | fail_unless(error == NULL, NULL); |
|---|
| | 289 | } |
|---|
| | 290 | |
|---|
| | 291 | fail_unless(smlNotificationSend(san, libsyncml_tsp, &error), NULL); |
|---|
| | 292 | fail_unless(error == NULL, NULL); |
|---|
| | 293 | |
|---|
| | 294 | /* num_session < 1 guarantees that the all events of the manager are dispatched */ |
|---|
| | 295 | while (mobile_state != TEST_MOBILE_STATE_WAIT_FOR_ALERT || num_sessions < 1) { |
|---|
| | 296 | smlManagerDispatch(libsyncml_manager); |
|---|
| | 297 | usleep(100); |
|---|
| | 298 | fail_unless(eventError == NULL, smlErrorPrint(&eventError)); |
|---|
| | 299 | } |
|---|
| | 300 | |
|---|
| | 301 | fail_unless(libsyncml_tracker != NULL, NULL); |
|---|
| | 302 | libsyncml_state = TEST_LIBSYNCML_STATE_WAIT_FOR_ALERT; |
|---|
| | 303 | } |
|---|
| | 304 | |
|---|
| | 305 | void obex_libsyncml_send_alert() |
|---|
| | 306 | { |
|---|
| | 307 | SmlError *error = NULL; |
|---|
| | 308 | |
|---|
| | 309 | while(( |
|---|
| | 310 | libsyncml_state != TEST_LIBSYNCML_STATE_RECEIVED_DATASTORE_SESSION && |
|---|
| | 311 | libsyncml_state != TEST_LIBSYNCML_STATE_RECEIVED_ALERT |
|---|
| | 312 | ) || num_sessions < 2) |
|---|
| | 313 | { |
|---|
| | 314 | smlManagerDispatch(libsyncml_manager); |
|---|
| | 315 | usleep(100); |
|---|
| | 316 | fail_unless(eventError == NULL, smlErrorPrint(&eventError)); |
|---|
| | 317 | } |
|---|
| | 318 | |
|---|
| | 319 | while(libsyncml_state != TEST_LIBSYNCML_STATE_RECEIVED_ALERT) |
|---|
| | 320 | { |
|---|
| | 321 | smlManagerDispatch(libsyncml_manager); |
|---|
| | 322 | usleep(100); |
|---|
| | 323 | fail_unless(eventError == NULL, smlErrorPrint(&eventError)); |
|---|
| | 324 | } |
|---|
| | 325 | |
|---|
| | 326 | SmlDevInf *devinf = smlDevInfNew("LibSyncmML", SML_DEVINF_DEVTYPE_WORKSTATION, &error); |
|---|
| | 327 | smlDevInfSetSupportsNumberOfChanges(devinf, TRUE); |
|---|
| | 328 | smlDevInfSetSupportsLargeObjs(devinf, TRUE); |
|---|
| | 329 | smlDevInfSetSupportsUTC(devinf, TRUE); |
|---|
| | 330 | libsyncml_agent = smlDevInfAgentNew(devinf, &error); |
|---|
| | 331 | smlDevInfAgentRegister(libsyncml_agent, libsyncml_manager, &error); |
|---|
| | 332 | fail_unless(smlDevInfAgentRequestDevInf(libsyncml_agent, libsyncml_tracker->session, &error), NULL); |
|---|
| | 333 | |
|---|
| | 334 | fail_unless(libsyncml_tracker->session != NULL, NULL); |
|---|
| | 335 | fail_unless(smlSessionFlush(libsyncml_tracker->session, TRUE, &error), NULL); |
|---|
| | 336 | |
|---|
| | 337 | libsyncml_state = TEST_LIBSYNCML_STATE_WAIT_FOR_SYNC; |
|---|
| | 338 | |
|---|
| | 339 | while(mobile_state == TEST_MOBILE_STATE_WAIT_FOR_ALERT) |
|---|
| | 340 | { |
|---|
| | 341 | smlManagerDispatch(libsyncml_manager); |
|---|
| | 342 | usleep(100); |
|---|
| | 343 | fail_unless(eventError == NULL, smlErrorPrint(&eventError)); |
|---|
| | 344 | } |
|---|