libsyncml  0.5.4
Typedefs | Enumerations | Functions
SyncML Manager
Low Level API

The public part. More...

Collaboration diagram for SyncML Manager:

Typedefs

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)

Enumerations

enum  SmlManagerEventType {
  SML_MANAGER_CONNECT_DONE, SML_MANAGER_DISCONNECT_DONE, SML_MANAGER_TRANSPORT_ERROR, SML_MANAGER_SESSION_NEW,
  SML_MANAGER_SESSION_FINAL, SML_MANAGER_SESSION_END, SML_MANAGER_SESSION_FLUSH, SML_MANAGER_SESSION_WARNING,
  SML_MANAGER_SESSION_ERROR, SML_MANAGER_SESSION_ESTABLISHED
}

Functions

SmlManagersmlManagerNew (SmlTransport *tsp, SmlError **error)
void smlManagerFree (SmlManager *manager)
SmlBool smlManagerReceive (SmlManager *manager, SmlError **error)
void smlManagerSetEventCallback (SmlManager *manager, SmlManagerEventCb callback, void *userdata)
SmlSessionsmlManagerSessionFind (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)
 Register an object with a session.
void smlManagerRegisterHeaderHandler (SmlManager *manager, SmlHeaderCb callback, SmlStatusReplyCb statuscb, void *userdata)
void smlManagerObjectFree (SmlObject *object)
SmlObjectsmlManagerObjectFind (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)
 Stops the active manager part.
void smlManagerRun (SmlManager *manager)
void smlManagerQuit (SmlManager *manager)
void smlManagerDispatch (SmlManager *manager)
SmlBool smlManagerCheck (SmlManager *manager)
void smlManagerSetLocalMaxMsgSize (SmlManager *manager, unsigned int size)
void smlManagerSetLocalMaxObjSize (SmlManager *manager, unsigned int size)
char * smlManagerGetNewSessionID (SmlManager *manager)

Detailed Description

The public part.

Function Documentation

SmlBool smlManagerObjectRegister ( SmlManager manager,
SmlCommandType  type,
SmlSession session,
SmlLocation location,
SmlLocation source,
const char *  contentType,
SmlCommandCb  callback,
SmlCommandCb  childCallback,
void *  userdata,
SmlError **  error 
)

Register an object with a session.

A object waits at a certain location for incoming commands. So you can for example register a object that listens for Get commands on the /test location.

Note that you cannot deregister an object from a already running session

Parameters
sessionThe session on which to listen
typeThe command type to listen to or SML_COMMAND_TYPE_UNKNOWN to listen for all
sessionIf given, only listens for the commands on the given session. NULL for all
locationThe location where the object listens (This must match the Target of the command). NULL to listen for all targets
sourceThe source of the command we want (This must match the Source of the command). NULL to listen for all sources
callbackThe callback that will receive the incoming commands.
childCallbackThe call that will receive the commands from the child commands. Set to NULL if the expected command has no childs
userdataThe userdata for the callbacks
errorA error struct
Returns
TRUE if successful, FALSE otherwise

Definition at line 926 of file sml_manager.c.

Here is the call graph for this function:

void smlManagerStop ( SmlManager manager)

Stops the active manager part.

The active part of the manager is the automatic dispatching of the SmlSession objects. The session dispatching consists of the status and command dispatching. If the commands and status are no longer dispatched then the session is no longer in an active state.

If this happens the manager should shoulds down the external communication. In fact the manager disconnects all active transport connections.

You must still call smlManagerDispatch until you got all required SML_MANAGER_DISCONNECT_DONE events. After this you can safely call smlManagerFree without getting warnings or errors from the transport layer because of forgotten connections.

Errors especially from the transport layer are ignored because it is not possible to react on these errors. Therefore it is correct to ignore the errors. Actually it is a problem that one or more failed disconnects result in a deadlock if somebody waits correctly for all disconnect events. Additionally it is impossible to signal a user the number of failed disconnect via a clean way.

If a disconnect fails then g_warning is called with an appropriate message. If there is a (G)UI which reconfigures the glib to display warnings and errors to the user then this is the only chance to communicate such errors.

Parameters
managerThe manager

Definition at line 565 of file sml_manager.c.

Here is the call graph for this function: