From: <svn...@op...> - 2009-07-02 15:00:44
|
Author: bellmich Date: Thu Jul 2 17:00:38 2009 New Revision: 1144 URL: http://libsyncml.opensync.org/changeset/1144 Log: migrated sml_manager from SmlError to GError Modified: trunk/libsyncml/sml_manager.c trunk/libsyncml/sml_manager.h trunk/libsyncml/sml_manager_internals.h trunk/libsyncml/sml_parse.h trunk/libsyncml/sml_queue_internals.h trunk/libsyncml/sml_session.h trunk/libsyncml/sml_session_internals.h trunk/libsyncml/sml_transport.h trunk/libsyncml/sml_transport_internals.h Modified: trunk/libsyncml/sml_manager.c ============================================================================== --- trunk/libsyncml/sml_manager.c Thu Jul 2 16:06:31 2009 (r1143) +++ trunk/libsyncml/sml_manager.c Thu Jul 2 17:00:38 2009 (r1144) @@ -32,22 +32,17 @@ typedef struct managerSession { SmlLink *link; SmlSession *session; - unsigned int finalLock; + guint finalLock; SmlTransport *transport; GList *objects; } managerSession; -managerSession *_smlManagerGetManagerSession(SmlManager *manager, SmlSession *session); +managerSession* _smlManagerGetManagerSession (SmlManager *manager, SmlSession *session); +SmlObject* smlManagerObjectFindInternal (SmlManager *manager, SmlSession *session, SmlCommandType type, SmlLocation *target, SmlLocation *source, const gchar* contentType); -SmlObject *smlManagerObjectFindInternal( - SmlManager *manager, - SmlSession *session, - SmlCommandType type, - SmlLocation *target, - SmlLocation *source, - const char* contentType); - -static managerSession *_manager_session_find(SmlManager *manager, SmlSession *session) +static managerSession* +_manager_session_find (SmlManager *manager, + SmlSession *session) { smlAssert(session); smlAssert(manager); @@ -61,7 +56,8 @@ return NULL; } -static void _manager_session_free(managerSession *sess) +static void +_manager_session_free (managerSession *sess) { smlAssert(sess); @@ -79,14 +75,16 @@ smlSafeFree((gpointer *)&sess); } -static gboolean _manager_prepare_internal(GSource *source, gint *timeout_) +static gboolean +_manager_prepare_internal (GSource *source, gint *timeout_) { smlTrace(TRACE_INTERNAL, "%s(%p, %p)", __func__, source, timeout_); *timeout_ = 1; return FALSE; } -static gboolean _manager_check_internal(GSource *source) +static gboolean +_manager_check_internal (GSource *source) { SmlManager *manager = *((SmlManager **)(source + 1)); GList *s = NULL; @@ -98,7 +96,10 @@ return FALSE; } -static gboolean _manager_dispatch_internal(GSource *source, GSourceFunc callback, gpointer user_data) +static gboolean +_manager_dispatch_internal (GSource *source, + GSourceFunc callback, + gpointer user_data) { smlTrace(TRACE_INTERNAL, "%s(%p, %p, %p)", __func__, source, callback, user_data); int max = 100; @@ -126,52 +127,58 @@ return TRUE; } -static void _smlManagerSendEvent(SmlManager *manager, SmlManagerEventType type, SmlSession *session, SmlCommand *command, SmlCommand *parent, SmlError *error) +static void +_smlManagerSendEvent (SmlManager *manager, + SmlManagerEventType type, + SmlSession *session, + SmlCommand *command, + SmlCommand *parent, + const GError *error) { smlTrace(TRACE_ENTRY, "%s(%p, %i, %p, %p, %p, %p)", __func__, manager, type, session, command, parent, error); - SmlError *lerr = NULL; + GError *lerr = NULL; SmlManagerEvent *event = smlTryMalloc0(sizeof(SmlManagerEvent), &lerr); - if (event) { - event->type = type; - - if (session) { - event->session = session; - smlSessionRef(session); - } else { - event->session = NULL; - } - - if (command) { - event->command = command; - smlCommandRef(command); - } else { - event->command = NULL; - } - - if (parent) { - event->parent = parent; - smlCommandRef(parent); - } else { - event->parent = NULL; - } - - if (error) { - event->error = error; - smlErrorRef(&error); - } + if (!event) { + g_error("%s", lerr->message); + smlTrace(TRACE_EXIT_ERROR, "%s - %s", __func__, lerr->message); + g_error_free(lerr); + return; + } + + event->type = type; - smlQueueSend(manager->userEventQueue, event); + if (session) { + event->session = session; + smlSessionRef(session); } else { - /* error handling is not possible here :( */ - g_error("%s", smlErrorPrint(&lerr)); - smlErrorDeref(&lerr); + event->session = NULL; } + if (command) { + event->command = command; + smlCommandRef(command); + } else { + event->command = NULL; + } + + if (parent) { + event->parent = parent; + smlCommandRef(parent); + } else { + event->parent = NULL; + } + + if (error) + event->error = g_error_copy(error); + + smlQueueSend(manager->userEventQueue, event); + smlTrace(TRACE_EXIT, "%s", __func__); } -void _smlManagerEventFree(SmlManagerEvent *event) +void +_smlManagerEventFree (SmlManagerEvent *event) { smlTrace(TRACE_ENTRY, "%s(%p)", __func__, event); smlAssert(event); @@ -186,7 +193,7 @@ smlCommandUnref(event->parent); if (event->error) - smlErrorDeref(&(event->error)); + g_error_free(event->error); smlSafeFree((gpointer *)&event); @@ -195,7 +202,13 @@ /* If we return FALSE in this function, the current request will get * aborted */ -static SmlBool _smlManagerDataHandler(SmlTransport *tsp, SmlLink *link_, SmlTransportEventType type, SmlTransportData *data, SmlError *error, void *userdata) +static gboolean +_smlManagerDataHandler (SmlTransport *tsp, + SmlLink *link_, + SmlTransportEventType type, + SmlTransportData *data, + const GError *error, + void *userdata) { smlTrace(TRACE_ENTRY, "%s(%p, %p, %i, %p, %p, %p)", __func__, tsp, link_, type, data, error, userdata); smlAssert(userdata); @@ -204,7 +217,7 @@ SmlHeader *header = NULL; SmlCred *cred = NULL; SmlSession *session = NULL; - SmlError *locerror = NULL; + GError *locerror = NULL; switch (type) { case SML_TRANSPORT_EVENT_CONNECT_DONE: @@ -219,19 +232,19 @@ parser = smlParserNew(data->type, 0, &locerror); if (!parser) - goto session_error; + goto error; /* add manager to parser for OMA DS 1.2 SAN handling */ smlParserSetManager(parser, manager); /* start to parse the data */ if (!smlParserStart(parser, data->data, data->size, &locerror)) - goto error_free_parser; + goto error; /* Get the header of the message*/ header = NULL; cred = NULL; if (!smlParserGetHeader(parser, &header, &cred, &locerror)) - goto error_free_parser; + goto error; /* Find the session if available otherwise register it as new */ session = smlManagerSessionFind(manager, header->sessionID); @@ -254,11 +267,11 @@ sessionType = SML_SESSION_TYPE_SERVER; break; default: - smlErrorSet(&locerror, + g_set_error(&locerror, SML_ERROR, SML_ERROR_NOT_IMPLEMENTED, "New session was unexpectedly received for transport %d.", smlTransportGetType(tsp)); - goto error_free_header; + goto error; break; } if (!(session = smlSessionNew( @@ -266,24 +279,24 @@ header->version, header->protocol, header->source, header->target, header->sessionID, 1, &locerror))) - goto error_free_header; + goto error; if (link_) { char *responseURI = smlTransportGetResponseURI(link_, session, &locerror); if (!responseURI && locerror) - goto error_free_header; + goto error; if (responseURI) { if (!smlSessionSetResponseURI(session, responseURI, &locerror)) { smlSafeCFree(&responseURI); - goto error_free_header; + goto error; } smlSafeCFree(&responseURI); } } if (!smlManagerSessionAdd(manager, session, link_, &locerror)) - goto error_free_header; + goto error; smlSessionUnref(session); } else { /* SECURITY: let's check ResponseURI if supported @@ -292,7 +305,7 @@ if (link_) { char *responseUri = smlTransportGetResponseURI(link_, session, &locerror); if (!responseUri && locerror) { - goto error_free_header; + goto error; } if (responseUri) smlSafeCFree(&responseUri); @@ -327,11 +340,11 @@ /* Now check if the header is valid etc */ if (!smlSessionReceiveHeader(session, header, &locerror)) - goto error_free_header; + goto error; /* Then check if we are allowed to authenticate */ if (!smlManagerDispatchHeader(manager, session, header, cred, &locerror)) - goto error_free_header; + goto error; smlHeaderFree(header); if (cred) @@ -339,7 +352,7 @@ /* Now let the session handle the commands etc */ if (!smlSessionReceiveBody(session, parser, &locerror)) - goto error_free_parser; + goto error; /* Free the parser */ smlParserFree(parser); @@ -350,24 +363,23 @@ break; case SML_TRANSPORT_EVENT_ERROR: /* Pass the error through */ - smlErrorDuplicate(&locerror, &error); - goto transport_error; + _smlManagerSendEvent(manager, SML_MANAGER_TRANSPORT_ERROR, NULL, NULL, NULL, error); + smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, error->message); + return FALSE; break; } smlTrace(TRACE_EXIT, "%s", __func__); return TRUE; - -error_free_header: +error: if (header) smlHeaderFree(header); if (cred) smlCredUnref(cred); -error_free_parser: - smlParserFree(parser); + if (parser) + smlParserFree(parser); if (session) smlSessionUnlock(session); -session_error: if (session == NULL && link_ && type == SML_TRANSPORT_EVENT_DATA) { /* If there is no session and a link then this means * that there is a failing server connection. @@ -375,26 +387,22 @@ * the session has no chance to signal a clean * disconnect to the link. */ - SmlError *herror = NULL; + GError *herror = NULL; if (!smlTransportDisconnect(manager->transport, link_, &herror)) { smlTrace(TRACE_ERROR, "%s: Disconnect on error failed. %s", - smlErrorPrint(&herror)); - smlErrorDeref(&herror); + herror->message); + g_error_free(herror); } } _smlManagerSendEvent(manager, SML_MANAGER_SESSION_ERROR, session, NULL, NULL, locerror); - smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, smlErrorPrint(&locerror)); - smlErrorDeref(&locerror); - return FALSE; - -transport_error: - _smlManagerSendEvent(manager, SML_MANAGER_TRANSPORT_ERROR, NULL, NULL, NULL, locerror); - smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, smlErrorPrint(&locerror)); - smlErrorDeref(&locerror); + smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, locerror->message); + g_error_free(locerror); return FALSE; } -SmlManager *smlManagerNew(SmlTransport *tsp, SmlError **error) +SmlManager* +smlManagerNew (SmlTransport *tsp, + GError **error) { smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, tsp, error); smlAssert(tsp); @@ -412,19 +420,20 @@ manager->userEventQueue = smlQueueNew(error); if (!manager->userEventQueue) - goto error_free_manager; + goto error; smlTrace(TRACE_EXIT, "%s", __func__); return manager; -error_free_manager: - smlSafeFree((gpointer *)&manager); error: - smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, smlErrorPrint(error)); + if (manager) + smlSafeFree((gpointer *)&manager); + smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, (*error)->message); return NULL; } -void smlManagerFree(SmlManager *manager) +void +smlManagerFree (SmlManager *manager) { smlTrace(TRACE_ENTRY, "%s(%p)", __func__, manager); smlAssert(manager); @@ -472,7 +481,10 @@ smlTrace(TRACE_EXIT, "%s", __func__); } -void smlManagerSetEventCallback(SmlManager *manager, SmlManagerEventCb callback, void *userdata) +void +smlManagerSetEventCallback (SmlManager *manager, + SmlManagerEventCb callback, + void *userdata) { smlAssert(manager); smlAssert(callback); @@ -481,7 +493,9 @@ manager->eventCallbackUserdata = userdata; } -SmlBool smlManagerStart(SmlManager *manager, SmlError **error) +gboolean +smlManagerStart (SmlManager *manager, + GError **error) { smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, manager, error); smlAssert(manager); @@ -489,7 +503,7 @@ manager->context = g_main_context_new(); if (!manager->context) { - smlErrorSet(error, SML_ERROR_GENERIC, + g_set_error(error, SML_ERROR, SML_ERROR_GENERIC, "Cannot create new main context."); goto error; } @@ -524,7 +538,7 @@ } if (manager->functions) smlSafeFree((gpointer *)&(manager->functions)); - smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, smlErrorPrint(error)); + smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, (*error)->message); return FALSE; } @@ -562,7 +576,8 @@ * @param manager The manager * */ -void smlManagerStop(SmlManager *manager) +void +smlManagerStop (SmlManager *manager) { smlTrace(TRACE_ENTRY, "%s(%p)", __func__, manager); smlAssert(manager); @@ -601,14 +616,14 @@ * or * 2.2. this is an active server connection */ - SmlError *error = NULL; + GError *error = NULL; if (manager->transport->connected && (!sess->link || sess->link->link_data) && !smlTransportDisconnect(manager->transport, sess->link, &error)) { g_warning("Errors from the transport layer " \ "cannot be handled while freeing the manager. %s", - smlErrorPrint(&error)); - smlErrorDeref(&error); + error->message); + g_error_free(error); } sessionItem = g_list_next(sessionItem); @@ -618,7 +633,8 @@ } -void smlManagerRun(SmlManager *manager) +void +smlManagerRun (SmlManager *manager) { smlTrace(TRACE_ENTRY, "%s(%p)", __func__, manager); smlAssert(manager); @@ -630,7 +646,8 @@ smlTrace(TRACE_EXIT, "%s", __func__); } -void smlManagerQuit(SmlManager *manager) +void +smlManagerQuit (SmlManager *manager) { smlTrace(TRACE_ENTRY, "%s(%p)", __func__, manager); smlAssert(manager); @@ -642,7 +659,9 @@ smlTrace(TRACE_EXIT, "%s", __func__); } -SmlSession *smlManagerSessionFind(SmlManager *manager, const char *sessionID) +SmlSession* +smlManagerSessionFind (SmlManager *manager, + const gchar *sessionID) { smlTrace(TRACE_ENTRY, "%s(%p, %s)", __func__, manager, VA_STRING(sessionID)); GList *s = NULL; @@ -658,7 +677,8 @@ return NULL; } -void smlManagerDispatch(SmlManager *manager) +void +smlManagerDispatch (SmlManager *manager) { smlTrace(TRACE_ENTRY, "%s(%p)", __func__, manager); smlAssert(manager); @@ -692,16 +712,24 @@ smlTrace(TRACE_EXIT, "%s", __func__); } -SmlBool smlManagerCheck(SmlManager *manager) +gboolean +smlManagerCheck (SmlManager *manager) { return smlQueueCheck(manager->userEventQueue); } -static void _event_callback(SmlSession *session, SmlSessionEventType type, SmlCommand *command, SmlCommand *parent, SmlStatus *reply, SmlError *error, void *userdata) +static void +_event_callback (SmlSession *session, + SmlSessionEventType type, + SmlCommand *command, + SmlCommand *parent, + SmlStatus *reply, + const GError *error, + void *userdata) { smlTrace(TRACE_ENTRY, "%s(%p, %i, %p, %p, %p, %p, %p)", __func__, session, type, command, parent, reply, error, userdata); SmlManager *manager = userdata; - SmlError *locerror = NULL; + GError *locerror = NULL; switch (type) { case SML_SESSION_EVENT_ESTABLISHED: @@ -747,37 +775,41 @@ break; case SML_SESSION_EVENT_ERROR: /* Pass the error through */ - smlErrorDuplicate(&locerror, &error); - _smlManagerSendEvent(manager, SML_MANAGER_SESSION_ERROR, session, NULL, NULL, locerror); - goto error; + _smlManagerSendEvent(manager, SML_MANAGER_SESSION_ERROR, session, NULL, NULL, error); break; } smlTrace(TRACE_EXIT, "%s", __func__); return; - error: - smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, smlErrorPrint(&locerror)); - smlErrorDeref(&locerror); + smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, locerror->message); + g_error_free(locerror); } -static void _data_send_callback(SmlSession *session, SmlTransportData *data, void *userdata) +static void +_data_send_callback (SmlSession *session, + SmlTransportData *data, + void *userdata) { smlTrace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, session, data, userdata); managerSession *sess = userdata; /* The transport layer is able to signal the error via an event. */ - SmlError *error = NULL; + GError *error = NULL; if (!smlTransportSend(sess->transport, sess->link, data, &error)) { - smlTrace(TRACE_ERROR, "%s - %s", __func__, smlErrorPrint(&error)); - smlErrorDeref(&error); + smlTrace(TRACE_ERROR, "%s - %s", __func__, error->message); + g_error_free(error); } smlTrace(TRACE_EXIT, "%s", __func__); } -SmlBool smlManagerSessionAdd(SmlManager *manager, SmlSession *session, SmlLink *link_, SmlError **error) +gboolean +smlManagerSessionAdd (SmlManager *manager, + SmlSession *session, + SmlLink *link_, + GError **error) { smlTrace(TRACE_ENTRY, "%s(%p, %p, %p, %p)", __func__, manager, session, link_, error); CHECK_ERROR_REF @@ -789,7 +821,7 @@ smlTrace(TRACE_INTERNAL, "Checking if session ID %s already exists", smlSessionGetSessionID(session)); if (smlManagerSessionFind(manager, smlSessionGetSessionID(session))) { - smlErrorSet(error, SML_ERROR_GENERIC, "Session ID already exists"); + g_set_error(error, SML_ERROR, SML_ERROR_GENERIC, "Session ID already exists"); goto error; } } else { @@ -840,14 +872,15 @@ smlTrace(TRACE_EXIT, "%s", __func__); return TRUE; - error: smlSessionUnref(session); - smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, smlErrorPrint(error)); + smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, (*error)->message); return FALSE; } -managerSession *_smlManagerGetManagerSession(SmlManager *manager, SmlSession *session) +managerSession* +_smlManagerGetManagerSession (SmlManager *manager, + SmlSession *session) { smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, manager, session); @@ -864,7 +897,9 @@ return NULL; } -void smlManagerSessionRemove(SmlManager *manager, SmlSession *session) +void +smlManagerSessionRemove (SmlManager *manager, + SmlSession *session) { smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, manager, session); @@ -878,7 +913,9 @@ } } -void smlManagerSessionFinalLockRef(SmlManager *manager, SmlSession *session) +void +smlManagerSessionFinalLockRef (SmlManager *manager, + SmlSession *session) { smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, manager, session); @@ -891,7 +928,9 @@ } } -void smlManagerSessionFinalLockUnref(SmlManager *manager, SmlSession *session) +void +smlManagerSessionFinalLockUnref (SmlManager *manager, + SmlSession *session) { smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, manager, session); @@ -923,7 +962,16 @@ * @return TRUE if successful, FALSE otherwise * */ -SmlBool smlManagerObjectRegister(SmlManager *manager, SmlCommandType type, SmlSession *session, SmlLocation *location, SmlLocation *source, const char *contentType, SmlCommandCb callback, SmlCommandCb childCallback, void *userdata, SmlError **error) +gboolean +smlManagerObjectRegister (SmlManager *manager, + SmlCommandType type, + SmlSession *session, + SmlLocation *location, + SmlLocation *source, + const gchar *contentType, + SmlCommandCb callback, + SmlCommandCb childCallback, + void *userdata, GError **error) { smlTrace(TRACE_ENTRY, "%s(%p, %i, %p, %p, %p, %s, %p, %p, %p, %p)", __func__, manager, type, session, location, source, VA_STRING(contentType), callback, childCallback, userdata, error); smlAssert(manager); @@ -973,8 +1021,8 @@ if (session) { managerSession *sess = _manager_session_find(manager, session); if (!sess) { - smlErrorSet(error, SML_ERROR_GENERIC, "Session not found"); - goto error_free_object; + g_set_error(error, SML_ERROR, SML_ERROR_GENERIC, "Session not found"); + goto error; } sess->objects = g_list_append(sess->objects, object); @@ -1007,15 +1055,18 @@ smlTrace(TRACE_EXIT, "%s", __func__); return TRUE; - -error_free_object: - smlManagerObjectFree(object); error: - smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, smlErrorPrint(error)); + if (object) + smlManagerObjectFree(object); + smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, (*error)->message); return FALSE; } -void smlManagerObjectDeregister(SmlManager *manager, SmlCommandType type, SmlLocation *location, SmlLocation *source) +void +smlManagerObjectDeregister (SmlManager *manager, + SmlCommandType type, + SmlLocation *location, + SmlLocation *source) { smlTrace(TRACE_ENTRY, "%s(%p, %i, %p, %p)", __func__, manager, type, location, source); smlAssert(manager); @@ -1043,7 +1094,8 @@ smlTrace(TRACE_EXIT, "%s", __func__); } -void smlManagerObjectFree(SmlObject *object) +void +smlManagerObjectFree (SmlObject *object) { smlTrace(TRACE_ENTRY, "%s(%p)", __func__, object); smlAssert(object); @@ -1062,7 +1114,10 @@ smlTrace(TRACE_EXIT, "%s", __func__); } -SmlObject *smlManagerObjectFind(SmlManager *manager, SmlSession *session, SmlCommand *cmd) +SmlObject* +smlManagerObjectFind (SmlManager *manager, + SmlSession *session, + SmlCommand *cmd) { smlTrace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, manager, session, cmd); smlAssert(manager); @@ -1078,13 +1133,13 @@ return object; } -SmlObject *smlManagerObjectFindInternal( - SmlManager *manager, - SmlSession *session, - SmlCommandType type, - SmlLocation *target, - SmlLocation *source, - const char* contentType) +SmlObject* +smlManagerObjectFindInternal(SmlManager *manager, + SmlSession *session, + SmlCommandType type, + SmlLocation *target, + SmlLocation *source, + const gchar* contentType) { smlTrace(TRACE_ENTRY, "%s(%p, %p, %d, %p, %p)", __func__, manager, session, type, target, source); @@ -1150,7 +1205,8 @@ return NULL; } -SmlTransport *smlManagerGetTransport(SmlManager *manager) +SmlTransport* +smlManagerGetTransport (SmlManager *manager) { smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, manager); smlAssert(manager); @@ -1161,7 +1217,12 @@ return tsp; } -SmlBool smlManagerDispatchHeader(SmlManager *manager, SmlSession *session, SmlHeader *header, SmlCred *cred, SmlError **error) +gboolean +smlManagerDispatchHeader (SmlManager *manager, + SmlSession *session, + SmlHeader *header, + SmlCred *cred, + GError **error) { smlTrace(TRACE_ENTRY, "%s(%p, %p, %p, %p, %p)", __func__, manager, session, header, cred, error); smlAssert(manager); @@ -1209,13 +1270,17 @@ smlTrace(TRACE_EXIT, "%s", __func__); return TRUE; - error: - smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, smlErrorPrint(error)); + smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, (*error)->message); return FALSE; } -SmlBool smlManagerDispatchChildCommand(SmlManager *manager, SmlSession *session, SmlCommand *parent, SmlCommand *cmd, SmlError **error) +gboolean +smlManagerDispatchChildCommand (SmlManager *manager, + SmlSession *session, + SmlCommand *parent, + SmlCommand *cmd, + GError **error) { smlTrace(TRACE_ENTRY, "%s(%p, %p, %p, %p, %p)", __func__, manager, session, parent, cmd, error); smlAssert(manager); @@ -1228,7 +1293,7 @@ if (object) { //Check if a handler for this object at this path has been installed. if (!object->childCallback) { - smlErrorSet(error, SML_ERROR_GENERIC, "No handler for the child was installed"); + g_set_error(error, SML_ERROR, SML_ERROR_GENERIC, "No handler for the child was installed"); goto error; } @@ -1245,20 +1310,23 @@ smlStatusUnref(reply); - smlErrorSet(error, SML_ERROR_GENERIC, "Unable to find child command handler"); + g_set_error(error, SML_ERROR, SML_ERROR_GENERIC, "Unable to find child command handler"); goto error; } smlTrace(TRACE_EXIT, "%s", __func__); return TRUE; - error: - smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, smlErrorPrint(error)); + smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, (*error)->message); return FALSE; } -SmlBool smlManagerDispatchCommand(SmlManager *manager, SmlSession *session, SmlCommand *cmd, SmlError **error) +gboolean +smlManagerDispatchCommand (SmlManager *manager, + SmlSession *session, + SmlCommand *cmd, + GError **error) { smlTrace(TRACE_ENTRY, "%s(%p, %p, %p, %p)", __func__, manager, session, cmd, error); smlAssert(manager); @@ -1271,7 +1339,7 @@ if (object) { //Check if a handler for this object at this path has been installed. if (!object->commandCallback) { - smlErrorSet(error, SML_ERROR_GENERIC, "No handler for the child was installed"); + g_set_error(error, SML_ERROR, SML_ERROR_GENERIC, "No handler for the child was installed"); goto error; } @@ -1279,29 +1347,40 @@ } else { const char *type = smlCommandTypeToString(cmd->type, error); /* If the type is unknown then this can be part of the error. */ - smlErrorDeref(error); + if (*error) { + g_error_free(*error); + *error = NULL; + } const char *srcuri = NULL; if (cmd->source) srcuri = sml_location_get_uri(cmd->source); const char *dsturi = NULL; if (cmd->target) dsturi = sml_location_get_uri(cmd->target); - smlErrorSet(error, SML_ERROR_NOT_FOUND, "Unable to find command handler (%s: %s -> %s)", (type) ? type : "UNKNOWN", VA_STRING(srcuri), VA_STRING(dsturi)); + g_set_error(error, SML_ERROR, SML_ERROR_NOT_FOUND, "Unable to find command handler (%s: %s -> %s)", (type) ? type : "UNKNOWN", VA_STRING(srcuri), VA_STRING(dsturi)); - SmlError *locerror = NULL; + GError *locerror = NULL; SmlStatus *reply = smlCommandNewReply(cmd, SML_ERROR_NOT_FOUND, &locerror); if (!reply) { - smlErrorSet(error, SML_ERROR_NOT_FOUND, "%s %s", - smlErrorPrint(error), - smlErrorPrint(&locerror)); + GError *herr = *error; + *error = NULL; + g_set_error(error, SML_ERROR, SML_ERROR_NOT_FOUND, "%s %s", + herr->message, + locerror->message); + g_error_free(herr); + g_error_free(locerror); goto error; } if (!smlSessionSendReply(session, reply, &locerror)) { + GError *herr = *error; + *error = NULL; smlStatusUnref(reply); - smlErrorSet(error, SML_ERROR_NOT_FOUND, "%s %s", - smlErrorPrint(error), - smlErrorPrint(&locerror)); + g_set_error(error, SML_ERROR, SML_ERROR_NOT_FOUND, "%s %s", + herr->message, + locerror->message); + g_error_free(herr); + g_error_free(locerror); goto error; } @@ -1312,13 +1391,16 @@ smlTrace(TRACE_EXIT, "%s", __func__); return TRUE; - error: - smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, smlErrorPrint(error)); + smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, (*error)->message); return FALSE; } -void smlManagerRegisterHeaderHandler(SmlManager *manager, SmlHeaderCb callback, SmlStatusReplyCb statuscb, void *userdata) +void +smlManagerRegisterHeaderHandler (SmlManager *manager, + SmlHeaderCb callback, + SmlStatusReplyCb statuscb, + void *userdata) { smlAssert(manager); @@ -1327,19 +1409,24 @@ manager->headerCallbackUserdata = userdata; } -void smlManagerSetLocalMaxMsgSize(SmlManager *manager, unsigned int size) +void +smlManagerSetLocalMaxMsgSize (SmlManager *manager, + gsize size) { smlAssert(manager); manager->localMaxMsgSize = size; } -void smlManagerSetLocalMaxObjSize(SmlManager *manager, unsigned int size) +void +smlManagerSetLocalMaxObjSize (SmlManager *manager, + gsize size) { smlAssert(manager); manager->localMaxObjSize = size; } -char *smlManagerGetNewSessionID(SmlManager *manager) +gchar* +smlManagerGetNewSessionID (SmlManager *manager) { smlTrace(TRACE_ENTRY, "%s(%p)", __func__, manager); smlAssertMsg(manager, "The manager is required to avoid duplicated session IDs."); @@ -1359,10 +1446,10 @@ return sessionString; } -SmlLink *smlManagerSessionGetLink( - SmlManager *manager, - SmlSession *session, - SmlError **error) +SmlLink* +smlManagerSessionGetLink(SmlManager *manager, + SmlSession *session, + GError **error) { smlTrace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, manager, session, error); CHECK_ERROR_REF @@ -1370,8 +1457,8 @@ managerSession *_msession = _manager_session_find(manager, session); if (!_msession) { - smlErrorSet(error, SML_ERROR_GENERIC, - "The session %d is not registered at the manager.", + g_set_error(error, SML_ERROR, SML_ERROR_GENERIC, + "The session %s is not registered at the manager.", smlSessionGetSessionID(session)); goto error; } @@ -1382,7 +1469,7 @@ smlTrace(TRACE_EXIT, "%s - %p", __func__, _msession->link); return _msession->link; error: - smlTrace(TRACE_EXIT_ERROR, "%s - %s", __func__, smlErrorPrint(error)); + smlTrace(TRACE_EXIT_ERROR, "%s - %s", __func__, (*error)->message); return NULL; } Modified: trunk/libsyncml/sml_manager.h ============================================================================== --- trunk/libsyncml/sml_manager.h Thu Jul 2 16:06:31 2009 (r1143) +++ trunk/libsyncml/sml_manager.h Thu Jul 2 17:00:38 2009 (r1144) @@ -1,7 +1,7 @@ /* * libsyncml - A syncml protocol implementation * Copyright (C) 2005 Armin Bauer <arm...@op...> - * Copyright (C) 2007-2008 Michael Bell <mic...@op...> + * Copyright (C) 2007-2009 Michael Bell <mic...@op...> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -43,41 +43,41 @@ SML_MANAGER_SESSION_ESTABLISHED } SmlManagerEventType; -typedef void (* SmlManagerEventCb) (SmlManager *manager, SmlManagerEventType type, SmlSession *session, SmlError *error, void *userdata); -typedef void (* SmlCommandCb) (SmlSession *session, SmlCommand *cmd, void *userdata); -typedef void (* SmlHeaderCb) (SmlSession *session, SmlHeader *header, SmlCred *cred, void *userdata); -typedef void (* SmlStatusReplyCb) (SmlSession *session, SmlStatus *status, void *userdata); - -SmlManager *smlManagerNew(SmlTransport *tsp, SmlError **error); -void smlManagerFree(SmlManager *manager); -SmlBool smlManagerReceive(SmlManager *manager, SmlError **error); - -void smlManagerSetEventCallback(SmlManager *manager, SmlManagerEventCb callback, void *userdata); -SmlSession *smlManagerSessionFind(SmlManager *manager, const char *sessionID); -SmlBool smlManagerSessionAdd(SmlManager *manager, SmlSession *session, SmlLink *link, SmlError **error); -void smlManagerSessionRemove(SmlManager *manager, SmlSession *session); - -SmlBool smlManagerObjectRegister(SmlManager *manager, SmlCommandType type, SmlSession *session, SmlLocation *location, SmlLocation *source, const char *contentType, SmlCommandCb callback, SmlCommandCb childCallback, void *userdata, SmlError **error); -void smlManagerRegisterHeaderHandler(SmlManager *manager, SmlHeaderCb callback, SmlStatusReplyCb statuscb, void *userdata); - -void smlManagerObjectFree(SmlObject *object); -SmlObject *smlManagerObjectFind(SmlManager *manager, SmlSession *session, SmlCommand *cmd); -SmlBool smlManagerDispatchChildCommand(SmlManager *manager, SmlSession *session, SmlCommand *parent, SmlCommand *cmd, SmlError **error); -SmlBool smlManagerDispatchHeader(SmlManager *manager, SmlSession *session, SmlHeader *header, SmlCred *cred, SmlError **error); -SmlBool smlManagerDispatchCommand(SmlManager *manager, SmlSession *session, SmlCommand *cmd, SmlError **error); - -SmlBool smlManagerStart(SmlManager *manager, SmlError **error); -void smlManagerStop(SmlManager *manager); -void smlManagerRun(SmlManager *manager); -void smlManagerQuit(SmlManager *manager); +typedef void (* SmlManagerEventCb) (SmlManager *manager, SmlManagerEventType type, SmlSession *session, GError *error, void *userdata); +typedef void (* SmlCommandCb) (SmlSession *session, SmlCommand *cmd, void *userdata); +typedef void (* SmlHeaderCb) (SmlSession *session, SmlHeader *header, SmlCred *cred, void *userdata); +typedef void (* SmlStatusReplyCb) (SmlSession *session, SmlStatus *status, void *userdata); + +SmlManager* smlManagerNew (SmlTransport *tsp, GError **error); +void smlManagerFree (SmlManager *manager); +gboolean smlManagerReceive (SmlManager *manager, GError **error); + +void smlManagerSetEventCallback (SmlManager *manager, SmlManagerEventCb callback, void *userdata); +SmlSession* smlManagerSessionFind (SmlManager *manager, const gchar *sessionID); +gboolean smlManagerSessionAdd (SmlManager *manager, SmlSession *session, SmlLink *link, GError **error); +void smlManagerSessionRemove (SmlManager *manager, SmlSession *session); + +gboolean smlManagerObjectRegister (SmlManager *manager, SmlCommandType type, SmlSession *session, SmlLocation *location, SmlLocation *source, const gchar *contentType, SmlCommandCb callback, SmlCommandCb childCallback, void *userdata, GError **error); +void smlManagerRegisterHeaderHandler (SmlManager *manager, SmlHeaderCb callback, SmlStatusReplyCb statuscb, void *userdata); + +void smlManagerObjectFree (SmlObject *object); +SmlObject* smlManagerObjectFind (SmlManager *manager, SmlSession *session, SmlCommand *cmd); +gboolean smlManagerDispatchChildCommand (SmlManager *manager, SmlSession *session, SmlCommand *parent, SmlCommand *cmd, GError **error); +gboolean smlManagerDispatchHeader (SmlManager *manager, SmlSession *session, SmlHeader *header, SmlCred *cred, GError **error); +gboolean smlManagerDispatchCommand (SmlManager *manager, SmlSession *session, SmlCommand *cmd, GError **error); + +gboolean smlManagerStart (SmlManager *manager, GError **error); +void smlManagerStop (SmlManager *manager); +void smlManagerRun (SmlManager *manager); +void smlManagerQuit (SmlManager *manager); -void smlManagerDispatch(SmlManager *manager); -SmlBool smlManagerCheck(SmlManager *manager); +void smlManagerDispatch (SmlManager *manager); +gboolean smlManagerCheck (SmlManager *manager); -void smlManagerSetLocalMaxMsgSize(SmlManager *manager, unsigned int size); -void smlManagerSetLocalMaxObjSize(SmlManager *manager, unsigned int size); +void smlManagerSetLocalMaxMsgSize (SmlManager *manager, gsize size); +void smlManagerSetLocalMaxObjSize (SmlManager *manager, gsize size); -char *smlManagerGetNewSessionID(SmlManager *manager); +gchar* smlManagerGetNewSessionID (SmlManager *manager); #endif //_SML_MANAGER_H Modified: trunk/libsyncml/sml_manager_internals.h ============================================================================== --- trunk/libsyncml/sml_manager_internals.h Thu Jul 2 16:06:31 2009 (r1143) +++ trunk/libsyncml/sml_manager_internals.h Thu Jul 2 17:00:38 2009 (r1144) @@ -1,7 +1,7 @@ /* * libsyncml - A syncml protocol implementation * Copyright (C) 2005 Armin Bauer <arm...@op...> - * Copyright (C) 2008 Michael Bell <mic...@op...> + * Copyright (C) 2008-2009 Michael Bell <mic...@op...> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -56,8 +56,8 @@ SmlQueue *userEventQueue; - unsigned int localMaxMsgSize; - unsigned int localMaxObjSize; + gsize localMaxMsgSize; + gsize localMaxObjSize; }; typedef struct SmlManagerEvent { @@ -65,7 +65,7 @@ SmlSession *session; SmlCommand *command; SmlCommand *parent; - SmlError *error; + GError *error; } SmlManagerEvent; struct SmlObject { @@ -75,16 +75,13 @@ SmlCommandCb commandCallback; SmlCommandCb childCallback; void *commandCallbackUserdata; - char *contentType; + gchar *contentType; }; -void smlManagerSessionFinalLockRef(SmlManager *manager, SmlSession *session); -void smlManagerSessionFinalLockUnref(SmlManager *manager, SmlSession *session); +void smlManagerSessionFinalLockRef (SmlManager *manager, SmlSession *session); +void smlManagerSessionFinalLockUnref (SmlManager *manager, SmlSession *session); -SmlLink *smlManagerSessionGetLink( - SmlManager *manager, - SmlSession *session, - SmlError **error); +SmlLink* smlManagerSessionGetLink (SmlManager *manager, SmlSession *session, GError **error); #endif //_SML_MANAGER_INTERNALS_H Modified: trunk/libsyncml/sml_parse.h ============================================================================== --- trunk/libsyncml/sml_parse.h Thu Jul 2 16:06:31 2009 (r1143) +++ trunk/libsyncml/sml_parse.h Thu Jul 2 17:00:38 2009 (r1144) @@ -89,10 +89,10 @@ SML_ASSEMBLER_RESULT_MISMATCH =2 } SmlAssemblerResult; -SmlParser *smlParserNew(SmlMimeType type, unsigned int limit, SmlError **error); +SmlParser *smlParserNew(SmlMimeType type, unsigned int limit, GError **error); void smlParserFree(SmlParser *parser); -SmlBool smlParserStart(SmlParser *parser, const char *data, unsigned int size, SmlError **error); -SmlBool smlParserGetHeader(SmlParser *parser, SmlHeader **header, SmlCred **cred, SmlError **error); +SmlBool smlParserStart(SmlParser *parser, const char *data, unsigned int size, GError **error); +SmlBool smlParserGetHeader(SmlParser *parser, SmlHeader **header, SmlCred **cred, GError **error); SmlParserResult smlParserGetCommand(SmlParser *parser, SmlCommand **cmd, SmlError **error); SmlBool smlParserGetStatus(SmlParser *parser, SmlStatus **status, SmlError **error); SmlBool smlParserEnd(SmlParser *parser, SmlBool *final, SmlBool *end, SmlError **error); Modified: trunk/libsyncml/sml_queue_internals.h ============================================================================== --- trunk/libsyncml/sml_queue_internals.h Thu Jul 2 16:06:31 2009 (r1143) +++ trunk/libsyncml/sml_queue_internals.h Thu Jul 2 17:00:38 2009 (r1144) @@ -51,7 +51,7 @@ GMutex *mutex; } SmlQueue; -SmlQueue *smlQueueNew(SmlError **error); +SmlQueue *smlQueueNew(GError **error); void smlQueueFree(SmlQueue *queue); void smlQueueFlush(SmlQueue *queue); void smlQueueSetHandler(SmlQueue *queue, SmlQueueHandler handler, void *userdata); Modified: trunk/libsyncml/sml_session.h ============================================================================== --- trunk/libsyncml/sml_session.h Thu Jul 2 16:06:31 2009 (r1143) +++ trunk/libsyncml/sml_session.h Thu Jul 2 17:00:38 2009 (r1144) @@ -40,11 +40,11 @@ SML_SESSION_EVENT_ESTABLISHED } SmlSessionEventType; -typedef void (* SmlSessionEventCallback) (SmlSession *session, SmlSessionEventType type, SmlCommand *command, SmlCommand *parent, SmlStatus *reply, SmlError *error, void *userdata); +typedef void (* SmlSessionEventCallback) (SmlSession *session, SmlSessionEventType type, SmlCommand *command, SmlCommand *parent, SmlStatus *reply, const GError *error, void *userdata); typedef void (* SmlSessionDataCallback) (SmlSession *session, SmlTransportData *data, void *userdata); /* Session Management */ -SmlSession *smlSessionNew(SmlSessionType sessionType, SmlMimeType mimetype, SmlProtocolVersion version, SmlProtocolType protocol, SmlLocation *target, SmlLocation *source, const char *sessionID, unsigned int messageID, SmlError **error); +SmlSession *smlSessionNew(SmlSessionType sessionType, SmlMimeType mimetype, SmlProtocolVersion version, SmlProtocolType protocol, SmlLocation *target, SmlLocation *source, const char *sessionID, unsigned int messageID, GError **error); SmlSession *smlSessionRef(SmlSession *session); void smlSessionUnref(SmlSession *session); void smlSessionSetEventCallback(SmlSession *session, SmlSessionEventCallback callback, void *userdata); @@ -80,14 +80,14 @@ void smlSessionRegisterCred(SmlSession *session, SmlCred *cred); /* Session Data input */ -SmlBool smlSessionReceiveHeader(SmlSession *session, SmlHeader *header, SmlError **error); -SmlBool smlSessionReceiveBody(SmlSession *session, SmlParser *parser, SmlError **error); +SmlBool smlSessionReceiveHeader(SmlSession *session, SmlHeader *header, GError **error); +SmlBool smlSessionReceiveBody(SmlSession *session, SmlParser *parser, GError **error); /* Session Command input */ SmlBool smlSessionSendCommand(SmlSession *session, SmlCommand *cmd, SmlCommand *parent, SmlStatusReplyCb callback, void *userdata, SmlError **error); SmlBool smlSessionStartCommand(SmlSession *session, SmlCommand *cmd, SmlCommand *parent, SmlStatusReplyCb callback, void *userdata, SmlError **error); SmlBool smlSessionEndCommand(SmlSession *session, SmlCommand *parent, SmlError **error); -SmlBool smlSessionSendReply(SmlSession *session, SmlStatus *status, SmlError **error); +SmlBool smlSessionSendReply(SmlSession *session, SmlStatus *status, GError **error); SmlBool smlSessionCheck(SmlSession *session); void smlSessionDispatch(SmlSession *session); Modified: trunk/libsyncml/sml_session_internals.h ============================================================================== --- trunk/libsyncml/sml_session_internals.h Thu Jul 2 16:06:31 2009 (r1143) +++ trunk/libsyncml/sml_session_internals.h Thu Jul 2 17:00:38 2009 (r1144) @@ -111,6 +111,6 @@ SmlBool smlSessionSetResponseURI( SmlSession *session, const char *responseURI, - SmlError **error); + GError **error); #endif //_SML_SESSION_INTERNALS_H_ Modified: trunk/libsyncml/sml_transport.h ============================================================================== --- trunk/libsyncml/sml_transport.h Thu Jul 2 16:06:31 2009 (r1143) +++ trunk/libsyncml/sml_transport.h Thu Jul 2 17:00:38 2009 (r1144) @@ -38,7 +38,7 @@ SML_TRANSPORT_CONNECTION_TYPE_USB = 5 } SmlTransportConnectionType; -typedef SmlBool (* SmlTransportEventCb) (SmlTransport *tsp, SmlLink *link, SmlTransportEventType type, SmlTransportData *data, SmlError *error, void *userdata); +typedef gboolean (* SmlTransportEventCb) (SmlTransport *tsp, SmlLink *link, SmlTransportEventType type, SmlTransportData *data, const GError *error, void *userdata); SmlTransport *smlTransportNew(SmlTransportType type, SmlError **error); void smlTransportFree(SmlTransport *tsp); @@ -50,8 +50,8 @@ void smlTransportSetEventCallback(SmlTransport *tsp, SmlTransportEventCb callback, void *userdata); SmlBool smlTransportFinalize(SmlTransport *tsp, SmlError **error); SmlBool smlTransportConnect(SmlTransport *tsp, SmlError **error); -SmlBool smlTransportDisconnect(SmlTransport *tsp, SmlLink *link, SmlError **error); -SmlBool smlTransportSend(SmlTransport *tsp, SmlLink *link, SmlTransportData *data, SmlError **error); +SmlBool smlTransportDisconnect(SmlTransport *tsp, SmlLink *link, GError **error); +SmlBool smlTransportSend(SmlTransport *tsp, SmlLink *link, SmlTransportData *data, GError **error); SmlTransportData *smlTransportDataNew(char *data, unsigned long size, SmlMimeType mimetype, SmlBool ownsData, SmlError **error); SmlTransportData *smlTransportDataRef(SmlTransportData *data); void smlTransportDataDeref(SmlTransportData *data); Modified: trunk/libsyncml/sml_transport_internals.h ============================================================================== --- trunk/libsyncml/sml_transport_internals.h Thu Jul 2 16:06:31 2009 (r1143) +++ trunk/libsyncml/sml_transport_internals.h Thu Jul 2 17:00:38 2009 (r1144) @@ -135,7 +135,7 @@ void smlTransportWorkerHandler(void *message, void *userdata); SmlBool smlTransportReceiveEvent(SmlTransport *tsp, SmlLink *link, SmlTransportEventType type, SmlTransportData *data, SmlError *error); -SmlBool smlTransportSetResponseURI(SmlTransport *tsp, const char *uri, SmlError **error); -char *smlTransportGetResponseURI(SmlLink *link, SmlSession *session, SmlError **error); +SmlBool smlTransportSetResponseURI(SmlTransport *tsp, const char *uri, GError **error); +char *smlTransportGetResponseURI(SmlLink *link, SmlSession *session, GError **error); #endif //_SML_TRANSPORT_INTERNALS_H_ |