From: <svn...@op...> - 2009-09-30 15:21:34
|
Author: bellmich Date: Wed Sep 30 17:21:21 2009 New Revision: 1293 URL: http://libsyncml.opensync.org/changeset/1293 Log: added support for flushing after a configured number of change commands Modified: trunk/libsyncml/sml_session.c trunk/libsyncml/sml_session_internals.h Modified: trunk/libsyncml/sml_session.c ============================================================================== --- trunk/libsyncml/sml_session.c Wed Sep 30 13:27:21 2009 (r1292) +++ trunk/libsyncml/sml_session.c Wed Sep 30 17:21:21 2009 (r1293) @@ -177,6 +177,7 @@ session->lastMessageID++; session->hasCommand = FALSE; + session->msgChanges = 0; smlTrace(TRACE_EXIT, "%s", __func__); return TRUE; @@ -293,6 +294,24 @@ CHECK_ERROR_REF SmlPendingStatus *pending = NULL; gboolean fragmented = FALSE; + + /* If the user specified a maximum number of changes per message + * then this is the place to flush the message. + */ + + if (smlCommandGetType(cmd) == SML_COMMAND_TYPE_ADD || + smlCommandGetType(cmd) == SML_COMMAND_TYPE_REPLACE || + smlCommandGetType(cmd) == SML_COMMAND_TYPE_DELETE) + session->msgChanges++; + + if (0 < session->localMaxMsgChanges && + session->localMaxMsgChanges < session->msgChanges) + { + smlTrace(TRACE_INTERNAL, "%s: maximum number of changes per message exceeded", __func__); + if (!_smlSessionFlushInternal(session, FALSE, error)) { + goto error; + } + } if (parent && !session->hasCommand) { GList *c = NULL; @@ -587,7 +606,7 @@ if (addToCommandStack) session->commandStack = g_list_append(session->commandStack, cmd); session->hasCommand = TRUE; - + smlTrace(TRACE_EXIT, "%s", __func__); return SML_ASSEMBLER_RESULT_OK; error: @@ -2047,6 +2066,8 @@ session->reportedEnd = FALSE; session->sessionType = sessionType; session->lastCommandID = 0; + session->localMaxMsgChanges = 0; + session->msgChanges = 0; if (sessionType == SML_SESSION_TYPE_CLIENT) session->sending = TRUE; Modified: trunk/libsyncml/sml_session_internals.h ============================================================================== --- trunk/libsyncml/sml_session_internals.h Wed Sep 30 13:27:21 2009 (r1292) +++ trunk/libsyncml/sml_session_internals.h Wed Sep 30 17:21:21 2009 (r1293) @@ -57,6 +57,8 @@ gsize localMaxMsgSize; gsize localMaxObjSize; gsize localMaxMsgChanges; + + gsize msgChanges; GList *pendingReplies; |