From: <svn...@op...> - 2009-03-18 17:31:39
|
Author: bellmich Date: Wed Mar 18 18:31:30 2009 New Revision: 995 URL: http://libsyncml.opensync.org/changeset/995 Log: added multi session safe SAN callback Modified: trunk/libsyncml/objects/sml_ds_server.c trunk/libsyncml/objects/sml_ds_server.h trunk/libsyncml/objects/sml_ds_server_internals.h Modified: trunk/libsyncml/objects/sml_ds_server.c ============================================================================== --- trunk/libsyncml/objects/sml_ds_server.c Wed Mar 18 18:29:06 2009 (r994) +++ trunk/libsyncml/objects/sml_ds_server.c Wed Mar 18 18:31:30 2009 (r995) @@ -277,6 +277,18 @@ smlTrace(TRACE_EXIT, "%s", __func__); } +void smlDsServerSetSanSessionCallback(SmlDsServer *server, SmlDsServerSanSessionCb callback, void *userdata) +{ + smlTrace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, server, callback, userdata); + smlAssert(server); + smlAssert(server->servertype == SML_DS_CLIENT); + + server->sanSessionCallback = callback; + server->sanSessionCallbackUserdata = userdata; + + smlTrace(TRACE_EXIT, "%s", __func__); +} + const char *smlDsServerGetLocation(SmlDsServer *server) { smlAssert(server); @@ -1240,8 +1252,23 @@ server->target = cmd->source; smlLocationRef(server->target); - /* handle the SAN */ - if (server->sanCallback) { + /* handle the SAN */ + if (server->sanSessionCallback) { + SmlErrorType type = server->sanSessionCallback( + server, + session, + cmd->private.alert.type, + server->sanSessionCallbackUserdata); + + SmlStatus *reply = smlCommandNewReply(cmd, type, &error); + if (!reply) + goto error; + + if (!smlSessionSendReply(session, reply, &error)) + goto error; + + smlStatusUnref(reply); + } else if (server->sanCallback) { SmlErrorType type = server->sanCallback(server, cmd->private.alert.type, server->sanCallbackUserdata); SmlStatus *reply = smlCommandNewReply(cmd, type, &error); Modified: trunk/libsyncml/objects/sml_ds_server.h ============================================================================== --- trunk/libsyncml/objects/sml_ds_server.h Wed Mar 18 18:29:06 2009 (r994) +++ trunk/libsyncml/objects/sml_ds_server.h Wed Mar 18 18:31:30 2009 (r995) @@ -38,8 +38,6 @@ SML_DS_EVENT_COMMITEDCHANGES = 1 } SmlDsEvent; -typedef SmlErrorType (* SmlDsServerSanCb) (SmlDsServer *dsserver, SmlAlertType type, void *userdata); - typedef void (* SmlDsSessionConnectCb) (SmlDsSession *dsession, void *userdata); typedef SmlBool (* SmlDsSessionAlertCb) (SmlDsSession *dsession, SmlAlertType type, const char *last, const char *next, void *userdata); typedef void (* SmlDsSessionSyncCb) (SmlDsSession *dsession, unsigned int numchanges, void *userdata); @@ -55,7 +53,6 @@ SmlBool smlDsServerAddSan(SmlDsServer *server, SmlNotification *san, SmlError **error); void smlDsServerReset(SmlDsServer *server); void smlDsServerSetConnectCallback(SmlDsServer *server, SmlDsSessionConnectCb callback, void *userdata); -void smlDsServerSetSanCallback(SmlDsServer *server, SmlDsServerSanCb callback, void *userdata); const char *smlDsServerGetLocation(SmlDsServer *server); const char *smlDsServerGetContentType(SmlDsServer *server); SmlDsSession *smlDsServerSendAlert(SmlDsServer *server, SmlSession *session, SmlAlertType type, const char *last, const char *next, SmlStatusReplyCb callback, void *userdata, SmlError **error); @@ -80,5 +77,15 @@ SmlDsServer *smlDsSessionGetServer(SmlDsSession *dsession); SmlLocation *smlDsSessionGetTarget(SmlDsSession *dsession); +/* multi session safe SAN handling */ + +typedef SmlErrorType (* SmlDsServerSanSessionCb) (SmlDsServer *dsserver, SmlSession *session, SmlAlertType type, void *userdata); +void smlDsServerSetSanSessionCallback(SmlDsServer *server, SmlDsServerSanSessionCb callback, void *userdata); + +/* deprecated SAN handling */ + +typedef SmlErrorType (* SmlDsServerSanCb) (SmlDsServer *dsserver, SmlAlertType type, void *userdata); +void smlDsServerSetSanCallback(SmlDsServer *server, SmlDsServerSanCb callback, void *userdata) LIBSYNCML_DEPRECATED; + #endif //_SML_DS_SERVER_H_ /*@}*/ Modified: trunk/libsyncml/objects/sml_ds_server_internals.h ============================================================================== --- trunk/libsyncml/objects/sml_ds_server_internals.h Wed Mar 18 18:29:06 2009 (r994) +++ trunk/libsyncml/objects/sml_ds_server_internals.h Wed Mar 18 18:31:30 2009 (r995) @@ -104,6 +104,8 @@ SmlDsSessionConnectCb connectCallback; void *connectCallbackUserdata; + SmlDsServerSanSessionCb sanSessionCallback; + void *sanSessionCallbackUserdata; SmlDsServerSanCb sanCallback; void *sanCallbackUserdata; }; |