Blame src/mw_srvc_dir.h

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