HelenOS sources

root/uspace/srv/locsrv/locsrv.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


/*
 * Copyright (c) 2011 Jiri Svoboda
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * - Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 * - Redistributions in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in the
 *   documentation and/or other materials provided with the distribution.
 * - The name of the author may not be used to endorse or promote products
 *   derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/** @addtogroup locsrv
 * @{
 */
/** @file HelenOS location service.
 */

#ifndef LOCSRV_H_
#define LOCSRV_H_

#include <ipc/loc.h>
#include <async.h>
#include <fibril_synch.h>
#include <stddef.h>

/** Representation of server (supplier).
 *
 * Each server supplies a set of services.
 *
 */
typedef struct {
        /** Link to servers_list */
        link_t servers;

        /** List of services supplied by this server */
        list_t services;

        /** Session asociated with this server */
        async_sess_t *sess;

        /** Server name */
        char *name;

        /** Fibril mutex for list of services owned by this server */
        fibril_mutex_t services_mutex;
} loc_server_t;

/** Info about registered namespaces
 *
 */
typedef struct {
        /** Link to namespaces_list */
        link_t namespaces;

        /** Unique namespace identifier */
        service_id_t id;

        /** Namespace name */
        char *name;

        /** Reference count */
        size_t refcnt;
} loc_namespace_t;

/** Info about registered service
 *
 */
typedef struct {
        /** Link to global list of services (services_list) */
        link_t services;

        /** Link to server list of services (loc_server_t.services) */
        link_t server_services;

        /** Link to list of services in category (category_t.services) */
        link_t cat_services;

        /** List of category memberships (svc_categ_t) */
        list_t cat_memb;

        /** Unique service identifier */
        service_id_t id;

        /** Service namespace */
        loc_namespace_t *namespace;

        /** Service name */
        char *name;

        /** Supplier of this service */
        loc_server_t *server;
} loc_service_t;

extern fibril_mutex_t services_list_mutex;

extern service_id_t loc_create_id(void);
extern void loc_category_change_event(void);

#endif

/** @}
 */

/* [<][>][^][v][top][bottom][index][help] */
HelenOS homepage, sources at GitHub