Hi Daniel, > src/session.c | 71 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 71 insertions(+), 0 deletions(-) > > diff --git a/src/session.c b/src/session.c > index d681d72..6cfd40a 100644 > --- a/src/session.c > +++ b/src/session.c > @@ -28,6 +28,77 @@ > > #include "connman.h" > > +/* > + * How the session connection management works > + * ------------------------------------------- > + * > + * When a session is created, a sorted list of services (service_list) > + * is added to the session. The services are filtered and stable > + * sorted according following rules: > + * > + * - AllowedBearer (filter and sort) > + * - RoamingPolicy (filter and sort) > + * > + * A stable sorting algorithms maintains the relative order of records > + * with equal keys. If a service is removed or added all sessions > + * service list is updated and refiltered and sorted according the > + * above rules. > + * > + * There are three triggers which lead to evalute the connect > + * algorithm: > + * > + * - Session.Connect() > + * - PeriodicTimer > + * - Offline > + * > + * Connect algorithm: > + * > + * Session.Connect() Offline > + * PeriodicConnect | > + * | Yes +------+-------+ No > + * +------+StayConnected?+------ Do nothing > + * | +--------------+ > + * | > + * | > + * +------+-------+ > + * +-----+EmergencyCall?+-----+ > + * Yes| +--------------+ |No > + * | | > + * Connect to +--------------+ > + * first available +---+AvoidHandover?+---+ > + * Service | +--------------+ | > + * Yes| |No > + * +----------------+ | > + * +---+In service_list +---+ | > + * Yes| |and online? | |No | > + * | +----------------+ | | > + * | | | > + * Take that one Take first in > + * service_list > + * > + * There are two triggers which lead to evalut the disconnect > + * algorithm > + * > + * - Session.Disconnect() > + * - IdleTimeout() > + * > + * Disconnect algorithm: > + * > + * IdleTimeout() > + * Session.Disconnect() > + * | > + * | > + * | > + * +-----------------+ Yes > + * |service not used +-------------+ > + * |by other session?| | > + * +------.----------+ | > + * |No | > + * | | > + * Service.disconnect() Do nothing > + * > + */
this might be better documented in doc/ directory. Don't get me wrong, I love this stuff close to the code, but we might wanna have that also external. Regards Marcel _______________________________________________ connman mailing list [email protected] http://lists.connman.net/listinfo/connman
