Blame src/mw_srvc_dir.h

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_DIR_H
Packit Service 37472d
#define _MW_SERV_DIR_H
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
#include <glib.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
struct mwSession;
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
#define SERVICE_DIRECTORY  0x0000001a
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** @struct mwServiceDirectory
Packit Service 37472d
Packit Service 37472d
    the directory service. */
Packit Service 37472d
struct mwServiceDirectory;
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** @struct mwAddressBook
Packit Service 37472d
Packit Service 37472d
    server-side collection of users and groups. Open a directory
Packit Service 37472d
    based on an address book to search or list its contents */
Packit Service 37472d
struct mwAddressBook;
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** @struct mwDirectory
Packit Service 37472d
Packit Service 37472d
    searchable directory, based off of an address book */
Packit Service 37472d
struct mwDirectory;
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
enum mwDirectoryState {
Packit Service 37472d
  mwDirectory_NEW,      /**< directory is created, but not open */
Packit Service 37472d
  mwDirectory_PENDING,  /**< directory has in the process of opening */
Packit Service 37472d
  mwDirectory_OPEN,     /**< directory is open */
Packit Service 37472d
  mwDirectory_ERROR,    /**< error opening or using directory */
Packit Service 37472d
  mwDirectory_UNKNOWN,  /**< error determining directory state */
Packit Service 37472d
};
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** return value of directory searches that fail */
Packit Service 37472d
#define DIR_SEARCH_ERROR  0x00000000
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
#define MW_DIRECTORY_IS_STATE(dir, state) \
Packit Service 37472d
  (mwDirectory_getState(dir) == (state))
Packit Service 37472d
Packit Service 37472d
#define MW_DIRECTORY_IS_NEW(dir) \
Packit Service 37472d
  MW_DIRECTORY_IS_STATE((dir), mwDirectory_NEW)
Packit Service 37472d
Packit Service 37472d
#define MW_DIRECTORY_IS_PENDING(dir) \
Packit Service 37472d
  MW_DIRECTORY_IS_STATE((dir), mwDirectory_PENDING)
Packit Service 37472d
Packit Service 37472d
#define MW_DIRECTORY_IS_OPEN(dir) \
Packit Service 37472d
  MW_DIRECTORY_IS_STATE((dir), mwDirectory_OPEN)
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
enum mwDirectoryMemberType {
Packit Service 37472d
  mwDirectoryMember_USER   = 0x0000,
Packit Service 37472d
  mwDirectoryMember_GROUP  = 0x0001,
Packit Service 37472d
};
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
struct mwDirectoryMember {
Packit Service 37472d
  guint16 type;      /**< @see mwDirectoryMemberType */
Packit Service 37472d
  char *id;          /**< proper ID for member */
Packit Service 37472d
  char *long_name;   /**< full name of member (USER type only) */
Packit Service 37472d
  char *short_name;  /**< short name of member */
Packit Service 37472d
  guint16 foo;       /**< unknown */
Packit Service 37472d
};
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** Appropriate function signature for handling directory search results */
Packit Service 37472d
typedef void (*mwSearchHandler)
Packit Service 37472d
     (struct mwDirectory *dir,
Packit Service 37472d
      guint32 code, guint32 offset, GList *members);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** handles asynchronous events for a directory service instance */
Packit Service 37472d
struct mwDirectoryHandler {
Packit Service 37472d
Packit Service 37472d
  /** handle receipt of the address book list from the service.
Packit Service 37472d
      Initially triggered by mwServiceDirectory_refreshAddressBooks
Packit Service 37472d
      and at service startup */
Packit Service 37472d
  void (*on_book_list)(struct mwServiceDirectory *srvc, GList *books);
Packit Service 37472d
Packit Service 37472d
  /** triggered when a directory has been successfully opened */
Packit Service 37472d
  void (*dir_opened)(struct mwDirectory *dir);
Packit Service 37472d
Packit Service 37472d
  /** triggered when a directory has been closed */
Packit Service 37472d
  void (*dir_closed)(struct mwDirectory *dir, guint32 reason);
Packit Service 37472d
Packit Service 37472d
  /** optional. called from mwService_free */
Packit Service 37472d
  void (*clear)(struct mwServiceDirectory *srvc);
Packit Service 37472d
};
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** Allocate a new directory service instance for use with session */
Packit Service 37472d
struct mwServiceDirectory *
Packit Service 37472d
mwServiceDirectory_new(struct mwSession *session,
Packit Service 37472d
		       struct mwDirectoryHandler *handler);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** the handler associated with the service at its creation */
Packit Service 37472d
struct mwDirectoryHandler *
Packit Service 37472d
mwServiceDirectory_getHandler(struct mwServiceDirectory *srvc);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** most recent list of address books available in service */
Packit Service 37472d
GList *mwServiceDirectory_getAddressBooks(struct mwServiceDirectory *srvc);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** submit a request to obtain an updated list of address books from
Packit Service 37472d
    service */
Packit Service 37472d
int mwServiceDirectory_refreshAddressBooks(struct mwServiceDirectory *srvc);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** list of directories in the service */
Packit Service 37472d
GList *mwServiceDirectory_getDirectories(struct mwServiceDirectory *srvc);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** list of directories associated with address book. Note that the
Packit Service 37472d
    returned GList will need to be free'd after use */
Packit Service 37472d
GList *mwAddressBook_getDirectories(struct mwAddressBook *book);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** the name of the address book */
Packit Service 37472d
const char *mwAddressBook_getName(struct mwAddressBook *book);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** allocate a new directory based off the given address book */
Packit Service 37472d
struct mwDirectory *mwDirectory_new(struct mwAddressBook *book);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
enum mwDirectoryState mwDirectory_getState(struct mwDirectory *dir);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** set client data. If there is an existing clear function, it will
Packit Service 37472d
    not be called */
Packit Service 37472d
void mwDirectory_setClientData(struct mwDirectory *dir,
Packit Service 37472d
			       gpointer data, GDestroyNotify clear);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** reference associated client data */
Packit Service 37472d
gpointer mwDirectory_getClientData(struct mwDirectory *dir);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** remove and cleanup user data */
Packit Service 37472d
void mwDirectory_removeClientData(struct mwDirectory *dir);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** reference owning service */
Packit Service 37472d
struct mwServiceDirectory *mwDirectory_getService(struct mwDirectory *dir);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** reference owning address book */
Packit Service 37472d
struct mwAddressBook *mwDirectory_getAddressBook(struct mwDirectory *dir);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** initialize a directory. */
Packit Service 37472d
int mwDirectory_open(struct mwDirectory *dir, mwSearchHandler cb);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** continue a search into its next results */
Packit Service 37472d
int mwDirectory_next(struct mwDirectory *dir);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** continue a search into its previous results */
Packit Service 37472d
int mwDirectory_previous(struct mwDirectory *dir);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** initiate a search on an open directory */
Packit Service 37472d
int mwDirectory_search(struct mwDirectory *dir, const char *query);
Packit Service 37472d
Packit Service 37472d
Packit Service 37472d
/** close and free the directory, and unassociate it with its owning
Packit Service 37472d
    address book and service */
Packit Service 37472d
int mwDirectory_destroy(struct mwDirectory *dir);
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_DIR_H */