Blame src/mw_srvc_aware.h

Packit Service 37472d
Packit Service 37472d
/*
Packit Service 37472d
  Meanwhile - Unofficial Lotus Sametime Community Client Library
Packit Service 37472d
  Copyright (C) 2004  Christopher (siege) O'Brien
Packit Service 37472d
  
Packit Service 37472d
  This library is free software; you can redistribute it and/or
Packit Service 37472d
  modify it under the terms of the GNU Library General Public
Packit Service 37472d
  License as published by the Free Software Foundation; either
Packit Service 37472d
  version 2 of the License, or (at your option) any later version.
Packit Service 37472d
  
Packit Service 37472d
  This library is distributed in the hope that it will be useful,
Packit Service 37472d
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 37472d
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 37472d
  Library General Public License for more details.
Packit Service 37472d
  
Packit Service 37472d
  You should have received a copy of the GNU Library General Public
Packit Service 37472d
  License along with this library; if not, write to the Free
Packit Service 37472d
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Packit Service 37472d
*/
Packit Service 37472d
Packit Service 37472d
#ifndef _MW_SRVC_AWARE_H
Packit Service 37472d
#define _MW_SRVC_AWARE_H
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** @file mw_srvc_aware.h
Packit Service 37472d
Packit Service 37472d
    The aware service...
Packit Service 37472d
Packit Service 37472d
    @todo remove the whole idea of an instantiated mwAwareList and
Packit Service 37472d
    instead use arbitrary pointers (including NULL) as keys to
Packit Service 37472d
    internally stored lists. This removes the problem of the service
Packit Service 37472d
    free'ing its lists and invalidating mwAwareList references from
Packit Service 37472d
    client code.
Packit Service 37472d
*/
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
#include "mw_common.h"
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
#ifdef __cplusplus
Packit Service 37472d
extern "C" {
Packit Service 37472d
#endif
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** Type identifier for the aware service */
Packit Service 37472d
#define mwService_AWARE  0x00000011
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** @struct mwServiceAware
Packit Service 37472d
Packit Service 37472d
    Instance of an Aware Service. The members of this structure are
Packit Service 37472d
    not made available. Accessing the parts of an aware service should
Packit Service 37472d
    be performed through the appropriate functions. Note that
Packit Service 37472d
    instances of this structure can be safely cast to a mwService.
Packit Service 37472d
*/
Packit Service 37472d
struct mwServiceAware;
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** @struct mwAwareList
Packit Service 37472d
Packit Service 37472d
    Instance of an Aware List. The members of this structure are not
Packit Service 37472d
    made available. Access to the parts of an aware list should be
Packit Service 37472d
    handled through the appropriate functions.
Packit Service 37472d
Packit Service 37472d
    Any references to an aware list are rendered invalid when the
Packit Service 37472d
    parent service is free'd
Packit Service 37472d
*/
Packit Service 37472d
struct mwAwareList;
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** @struct mwAwareAttribute
Packit Service 37472d
Packit Service 37472d
    Key/Opaque pair indicating an identity's attribute.
Packit Service 37472d
 */
Packit Service 37472d
struct mwAwareAttribute;
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** Predefined keys appropriate for a mwAwareAttribute
Packit Service 37472d
 */
Packit Service 37472d
enum mwAwareAttributeKeys {
Packit Service 37472d
  mwAttribute_AV_PREFS_SET   = 0x01, /**< A/V prefs specified, gboolean */
Packit Service 37472d
  mwAttribute_MICROPHONE     = 0x02, /**< has a microphone, gboolean */
Packit Service 37472d
  mwAttribute_SPEAKERS       = 0x03, /**< has speakers, gboolean */
Packit Service 37472d
  mwAttribute_VIDEO_CAMERA   = 0x04, /**< has a video camera, gboolean */
Packit Service 37472d
  mwAttribute_FILE_TRANSFER  = 0x06, /**< supports file transfers, gboolean */
Packit Service 37472d
};
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
typedef void (*mwAwareAttributeHandler)
Packit Service 37472d
     (struct mwServiceAware *srvc,
Packit Service 37472d
      struct mwAwareAttribute *attrib);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
struct mwAwareHandler {
Packit Service 37472d
  mwAwareAttributeHandler on_attrib;
Packit Service 37472d
  void (*clear)(struct mwServiceAware *srvc);
Packit Service 37472d
};
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** Appropriate function type for the on-aware signal
Packit Service 37472d
Packit Service 37472d
    @param list  mwAwareList emiting the signal
Packit Service 37472d
    @param id    awareness status information
Packit Service 37472d
    @param data  user-specified data
Packit Service 37472d
*/
Packit Service 37472d
typedef void (*mwAwareSnapshotHandler)
Packit Service 37472d
     (struct mwAwareList *list,
Packit Service 37472d
      struct mwAwareSnapshot *id);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** Appropriate function type for the on-option signal. The option's
Packit Service 37472d
    value may need to be explicitly loaded in some instances,
Packit Service 37472d
    resulting in this handler being triggered again.
Packit Service 37472d
Packit Service 37472d
    @param list    mwAwareList emiting the signal
Packit Service 37472d
    @param id      awareness the attribute belongs to
Packit Service 37472d
    @param attrib  attribute
Packit Service 37472d
*/
Packit Service 37472d
typedef void (*mwAwareIdAttributeHandler)
Packit Service 37472d
     (struct mwAwareList *list,
Packit Service 37472d
      struct mwAwareIdBlock *id,
Packit Service 37472d
      struct mwAwareAttribute *attrib);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
struct mwAwareListHandler {
Packit Service 37472d
  /** handle aware updates */
Packit Service 37472d
  mwAwareSnapshotHandler on_aware;
Packit Service 37472d
Packit Service 37472d
  /** handle attribute updates */
Packit Service 37472d
  mwAwareIdAttributeHandler on_attrib;
Packit Service 37472d
Packit Service 37472d
  /** optional. Called from mwAwareList_free */
Packit Service 37472d
  void (*clear)(struct mwAwareList *list);
Packit Service 37472d
};
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
struct mwServiceAware *
Packit Service 37472d
mwServiceAware_new(struct mwSession *session,
Packit Service 37472d
		   struct mwAwareHandler *handler);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** Set an attribute value for this session */
Packit Service 37472d
int mwServiceAware_setAttribute(struct mwServiceAware *srvc,
Packit Service 37472d
				guint32 key, struct mwOpaque *opaque);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
int mwServiceAware_setAttributeBoolean(struct mwServiceAware *srvc,
Packit Service 37472d
				       guint32 key, gboolean val);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
int mwServiceAware_setAttributeInteger(struct mwServiceAware *srvc,
Packit Service 37472d
				       guint32 key, guint32 val);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
int mwServiceAware_setAttributeString(struct mwServiceAware *srvc,
Packit Service 37472d
				      guint32 key, const char *str);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** Unset an attribute for this session */
Packit Service 37472d
int mwServiceAware_unsetAttribute(struct mwServiceAware *srvc,
Packit Service 37472d
				  guint32 key);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
guint32 mwAwareAttribute_getKey(const struct mwAwareAttribute *attrib);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
gboolean mwAwareAttribute_asBoolean(const struct mwAwareAttribute *attrib);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
guint32 mwAwareAttribute_asInteger(const struct mwAwareAttribute *attrib);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** Copy of attribute string, must be g_free'd. If the attribute's
Packit Service 37472d
    content cannot be loaded as a string, returns NULL */
Packit Service 37472d
char *mwAwareAttribute_asString(const struct mwAwareAttribute *attrib);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** Direct access to an attribute's underlying opaque */
Packit Service 37472d
const struct mwOpaque *
Packit Service 37472d
mwAwareAttribute_asOpaque(const struct mwAwareAttribute *attrib);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** Allocate and initialize an aware list */
Packit Service 37472d
struct mwAwareList *
Packit Service 37472d
mwAwareList_new(struct mwServiceAware *srvc,
Packit Service 37472d
		struct mwAwareListHandler *handler);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** Clean and free an aware list */
Packit Service 37472d
void mwAwareList_free(struct mwAwareList *list);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
struct mwAwareListHandler *mwAwareList_getHandler(struct mwAwareList *list);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** Add a collection of user IDs to an aware list.
Packit Service 37472d
    @param list     mwAwareList to add user ID to
Packit Service 37472d
    @param id_list  mwAwareIdBlock list of user IDs to add
Packit Service 37472d
    @return         0 for success, non-zero to indicate an error.
Packit Service 37472d
*/
Packit Service 37472d
int mwAwareList_addAware(struct mwAwareList *list, GList *id_list);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** Remove a collection of user IDs from an aware list.
Packit Service 37472d
    @param list     mwAwareList to remove user ID from
Packit Service 37472d
    @param id_list  mwAwareIdBlock list of user IDs to remove
Packit Service 37472d
    @return  0      for success, non-zero to indicate an error.
Packit Service 37472d
*/
Packit Service 37472d
int mwAwareList_removeAware(struct mwAwareList *list, GList *id_list);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
int mwAwareList_removeAllAware(struct mwAwareList *list);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** watch an NULL terminated array of keys */
Packit Service 37472d
int mwAwareList_watchAttributeArray(struct mwAwareList *list,
Packit Service 37472d
				    guint32 *keys);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** watch a NULL terminated list of keys */
Packit Service 37472d
int mwAwareList_watchAttributes(struct mwAwareList *list,
Packit Service 37472d
				guint32 key, ...);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** stop watching a NULL terminated array of keys */
Packit Service 37472d
int mwAwareList_unwatchAttributeArray(struct mwAwareList *list,
Packit Service 37472d
				      guint32 *keys);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** stop watching a NULL terminated list of keys */
Packit Service 37472d
int mwAwareList_unwatchAttributes(struct mwAwareList *list,
Packit Service 37472d
				  guint32 key, ...);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** remove all watched attributes */
Packit Service 37472d
int mwAwareList_unwatchAllAttributes(struct mwAwareList *list);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
guint32 *mwAwareList_getWatchedAttributes(struct mwAwareList *list);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
void mwAwareList_setClientData(struct mwAwareList *list,
Packit Service 37472d
			       gpointer data, GDestroyNotify cleanup);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
void mwAwareList_removeClientData(struct mwAwareList *list);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
gpointer mwAwareList_getClientData(struct mwAwareList *list);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** trigger a got_aware event constructed from the passed user and
Packit Service 37472d
    status information. Useful for adding false users and having the
Packit Service 37472d
    getText function work for them */
Packit Service 37472d
void mwServiceAware_setStatus(struct mwServiceAware *srvc,
Packit Service 37472d
			      struct mwAwareIdBlock *user,
Packit Service 37472d
			      struct mwUserStatus *stat);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** look up the status description for a user */
Packit Service 37472d
const char *mwServiceAware_getText(struct mwServiceAware *srvc,
Packit Service 37472d
				   struct mwAwareIdBlock *user);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** look up the last known copy of an attribute for a user by the
Packit Service 37472d
    attribute's key */
Packit Service 37472d
const struct mwAwareAttribute *
Packit Service 37472d
mwServiceAware_getAttribute(struct mwServiceAware *srvc,
Packit Service 37472d
			    struct mwAwareIdBlock *user,
Packit Service 37472d
			    guint32 key);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
#ifdef __cplusplus
Packit Service 37472d
}
Packit Service 37472d
#endif
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
#endif /* _MW_SRVC_AWARE_H */
Packit Service 37472d