Blame src/mw_srvc_dir.h.fix-glib-headers

Packit ee6627
/*
Packit ee6627
  Meanwhile - Unofficial Lotus Sametime Community Client Library
Packit ee6627
  Copyright (C) 2004  Christopher (siege) O'Brien
Packit ee6627
  
Packit ee6627
  This library is free software; you can redistribute it and/or
Packit ee6627
  modify it under the terms of the GNU Library General Public
Packit ee6627
  License as published by the Free Software Foundation; either
Packit ee6627
  version 2 of the License, or (at your option) any later version.
Packit ee6627
  
Packit ee6627
  This library is distributed in the hope that it will be useful,
Packit ee6627
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit ee6627
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit ee6627
  Library General Public License for more details.
Packit ee6627
  
Packit ee6627
  You should have received a copy of the GNU Library General Public
Packit ee6627
  License along with this library; if not, write to the Free
Packit ee6627
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Packit ee6627
*/
Packit ee6627
Packit ee6627
#ifndef _MW_SRVC_DIR_H
Packit ee6627
#define _MW_SERV_DIR_H
Packit ee6627
Packit ee6627
Packit ee6627
#include <glib.h>
Packit ee6627
#include <glib/glist.h>
Packit ee6627
Packit ee6627
Packit ee6627
#ifdef __cplusplus
Packit ee6627
extern "C" {
Packit ee6627
#endif
Packit ee6627
Packit ee6627
Packit ee6627
struct mwSession;
Packit ee6627
Packit ee6627
Packit ee6627
#define SERVICE_DIRECTORY  0x0000001a
Packit ee6627
Packit ee6627
Packit ee6627
/** @struct mwServiceDirectory
Packit ee6627
Packit ee6627
    the directory service. */
Packit ee6627
struct mwServiceDirectory;
Packit ee6627
Packit ee6627
Packit ee6627
/** @struct mwAddressBook
Packit ee6627
Packit ee6627
    server-side collection of users and groups. Open a directory
Packit ee6627
    based on an address book to search or list its contents */
Packit ee6627
struct mwAddressBook;
Packit ee6627
Packit ee6627
Packit ee6627
/** @struct mwDirectory
Packit ee6627
Packit ee6627
    searchable directory, based off of an address book */
Packit ee6627
struct mwDirectory;
Packit ee6627
Packit ee6627
Packit ee6627
enum mwDirectoryState {
Packit ee6627
  mwDirectory_NEW,      /**< directory is created, but not open */
Packit ee6627
  mwDirectory_PENDING,  /**< directory has in the process of opening */
Packit ee6627
  mwDirectory_OPEN,     /**< directory is open */
Packit ee6627
  mwDirectory_ERROR,    /**< error opening or using directory */
Packit ee6627
  mwDirectory_UNKNOWN,  /**< error determining directory state */
Packit ee6627
};
Packit ee6627
Packit ee6627
Packit ee6627
/** return value of directory searches that fail */
Packit ee6627
#define DIR_SEARCH_ERROR  0x00000000
Packit ee6627
Packit ee6627
Packit ee6627
#define MW_DIRECTORY_IS_STATE(dir, state) \
Packit ee6627
  (mwDirectory_getState(dir) == (state))
Packit ee6627
Packit ee6627
#define MW_DIRECTORY_IS_NEW(dir) \
Packit ee6627
  MW_DIRECTORY_IS_STATE((dir), mwDirectory_NEW)
Packit ee6627
Packit ee6627
#define MW_DIRECTORY_IS_PENDING(dir) \
Packit ee6627
  MW_DIRECTORY_IS_STATE((dir), mwDirectory_PENDING)
Packit ee6627
Packit ee6627
#define MW_DIRECTORY_IS_OPEN(dir) \
Packit ee6627
  MW_DIRECTORY_IS_STATE((dir), mwDirectory_OPEN)
Packit ee6627
Packit ee6627
Packit ee6627
enum mwDirectoryMemberType {
Packit ee6627
  mwDirectoryMember_USER   = 0x0000,
Packit ee6627
  mwDirectoryMember_GROUP  = 0x0001,
Packit ee6627
};
Packit ee6627
Packit ee6627
Packit ee6627
struct mwDirectoryMember {
Packit ee6627
  guint16 type;      /**< @see mwDirectoryMemberType */
Packit ee6627
  char *id;          /**< proper ID for member */
Packit ee6627
  char *long_name;   /**< full name of member (USER type only) */
Packit ee6627
  char *short_name;  /**< short name of member */
Packit ee6627
  guint16 foo;       /**< unknown */
Packit ee6627
};
Packit ee6627
Packit ee6627
Packit ee6627
/** Appropriate function signature for handling directory search results */
Packit ee6627
typedef void (*mwSearchHandler)
Packit ee6627
     (struct mwDirectory *dir,
Packit ee6627
      guint32 code, guint32 offset, GList *members);
Packit ee6627
Packit ee6627
Packit ee6627
/** handles asynchronous events for a directory service instance */
Packit ee6627
struct mwDirectoryHandler {
Packit ee6627
Packit ee6627
  /** handle receipt of the address book list from the service.
Packit ee6627
      Initially triggered by mwServiceDirectory_refreshAddressBooks
Packit ee6627
      and at service startup */
Packit ee6627
  void (*on_book_list)(struct mwServiceDirectory *srvc, GList *books);
Packit ee6627
Packit ee6627
  /** triggered when a directory has been successfully opened */
Packit ee6627
  void (*dir_opened)(struct mwDirectory *dir);
Packit ee6627
Packit ee6627
  /** triggered when a directory has been closed */
Packit ee6627
  void (*dir_closed)(struct mwDirectory *dir, guint32 reason);
Packit ee6627
Packit ee6627
  /** optional. called from mwService_free */
Packit ee6627
  void (*clear)(struct mwServiceDirectory *srvc);
Packit ee6627
};
Packit ee6627
Packit ee6627
Packit ee6627
/** Allocate a new directory service instance for use with session */
Packit ee6627
struct mwServiceDirectory *
Packit ee6627
mwServiceDirectory_new(struct mwSession *session,
Packit ee6627
		       struct mwDirectoryHandler *handler);
Packit ee6627
Packit ee6627
Packit ee6627
/** the handler associated with the service at its creation */
Packit ee6627
struct mwDirectoryHandler *
Packit ee6627
mwServiceDirectory_getHandler(struct mwServiceDirectory *srvc);
Packit ee6627
Packit ee6627
Packit ee6627
/** most recent list of address books available in service */
Packit ee6627
GList *mwServiceDirectory_getAddressBooks(struct mwServiceDirectory *srvc);
Packit ee6627
Packit ee6627
Packit ee6627
/** submit a request to obtain an updated list of address books from
Packit ee6627
    service */
Packit ee6627
int mwServiceDirectory_refreshAddressBooks(struct mwServiceDirectory *srvc);
Packit ee6627
Packit ee6627
Packit ee6627
/** list of directories in the service */
Packit ee6627
GList *mwServiceDirectory_getDirectories(struct mwServiceDirectory *srvc);
Packit ee6627
Packit ee6627
Packit ee6627
/** list of directories associated with address book. Note that the
Packit ee6627
    returned GList will need to be free'd after use */
Packit ee6627
GList *mwAddressBook_getDirectories(struct mwAddressBook *book);
Packit ee6627
Packit ee6627
Packit ee6627
/** the name of the address book */
Packit ee6627
const char *mwAddressBook_getName(struct mwAddressBook *book);
Packit ee6627
Packit ee6627
Packit ee6627
/** allocate a new directory based off the given address book */
Packit ee6627
struct mwDirectory *mwDirectory_new(struct mwAddressBook *book);
Packit ee6627
Packit ee6627
Packit ee6627
enum mwDirectoryState mwDirectory_getState(struct mwDirectory *dir);
Packit ee6627
Packit ee6627
Packit ee6627
/** set client data. If there is an existing clear function, it will
Packit ee6627
    not be called */
Packit ee6627
void mwDirectory_setClientData(struct mwDirectory *dir,
Packit ee6627
			       gpointer data, GDestroyNotify clear);
Packit ee6627
Packit ee6627
Packit ee6627
/** reference associated client data */
Packit ee6627
gpointer mwDirectory_getClientData(struct mwDirectory *dir);
Packit ee6627
Packit ee6627
Packit ee6627
/** remove and cleanup user data */
Packit ee6627
void mwDirectory_removeClientData(struct mwDirectory *dir);
Packit ee6627
Packit ee6627
Packit ee6627
/** reference owning service */
Packit ee6627
struct mwServiceDirectory *mwDirectory_getService(struct mwDirectory *dir);
Packit ee6627
Packit ee6627
Packit ee6627
/** reference owning address book */
Packit ee6627
struct mwAddressBook *mwDirectory_getAddressBook(struct mwDirectory *dir);
Packit ee6627
Packit ee6627
Packit ee6627
/** initialize a directory. */
Packit ee6627
int mwDirectory_open(struct mwDirectory *dir, mwSearchHandler cb);
Packit ee6627
Packit ee6627
Packit ee6627
/** continue a search into its next results */
Packit ee6627
int mwDirectory_next(struct mwDirectory *dir);
Packit ee6627
Packit ee6627
Packit ee6627
/** continue a search into its previous results */
Packit ee6627
int mwDirectory_previous(struct mwDirectory *dir);
Packit ee6627
Packit ee6627
Packit ee6627
/** initiate a search on an open directory */
Packit ee6627
int mwDirectory_search(struct mwDirectory *dir, const char *query);
Packit ee6627
Packit ee6627
Packit ee6627
/** close and free the directory, and unassociate it with its owning
Packit ee6627
    address book and service */
Packit ee6627
int mwDirectory_destroy(struct mwDirectory *dir);
Packit ee6627
Packit ee6627
Packit ee6627
#ifdef __cplusplus
Packit ee6627
}
Packit ee6627
#endif
Packit ee6627
Packit ee6627
Packit ee6627
#endif /* _MW_SRVC_DIR_H */