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

Packit ee6627
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_CONF_H
Packit ee6627
#define _MW_SRVC_CONF_H
Packit ee6627
Packit ee6627
Packit ee6627
#include <glib/glist.h>
Packit ee6627
#include "mw_common.h"
Packit ee6627
Packit ee6627
Packit ee6627
#ifdef __cplusplus
Packit ee6627
extern "C" {
Packit ee6627
#endif
Packit ee6627
Packit ee6627
Packit ee6627
/** Type identifier for the conference service */
Packit ee6627
#define mwService_CONFERENCE  0x80000010
Packit ee6627
Packit ee6627
Packit ee6627
enum mwConferenceState {
Packit ee6627
  mwConference_NEW,      /**< new outgoing conference */
Packit ee6627
  mwConference_PENDING,  /**< outgoing conference pending creation */
Packit ee6627
  mwConference_INVITED,  /**< invited to incoming conference */
Packit ee6627
  mwConference_OPEN,     /**< conference open and active */
Packit ee6627
  mwConference_CLOSING,  /**< conference is closing */
Packit ee6627
  mwConference_ERROR,    /**< conference is closing due to error */
Packit ee6627
  mwConference_UNKNOWN,  /**< unable to determine conference state */
Packit ee6627
};
Packit ee6627
Packit ee6627
Packit ee6627
/** @struct mwServiceConference
Packit ee6627
    Instance of the multi-user conference service */
Packit ee6627
struct mwServiceConference;
Packit ee6627
Packit ee6627
Packit ee6627
/** @struct mwConference
Packit ee6627
    A multi-user chat */
Packit ee6627
struct mwConference;
Packit ee6627
Packit ee6627
Packit ee6627
/** Handler structure used to provide callbacks for an instance of the
Packit ee6627
    conferencing service */
Packit ee6627
struct mwConferenceHandler {
Packit ee6627
Packit ee6627
  /** triggered when we receive a conference invitation. Call
Packit ee6627
      mwConference_accept to accept the invitation and join the
Packit ee6627
      conference, or mwConference_close to reject the invitation.
Packit ee6627
Packit ee6627
      @param conf     the newly created conference
Packit ee6627
      @param inviter  the indentity of the user who sent the invitation
Packit ee6627
      @param invite   the invitation text
Packit ee6627
   */
Packit ee6627
  void (*on_invited)(struct mwConference *conf,
Packit ee6627
		     struct mwLoginInfo *inviter, const char *invite);
Packit ee6627
Packit ee6627
  /** triggered when we enter the conference. Provides the initial
Packit ee6627
      conference membership list as a GList of mwLoginInfo structures
Packit ee6627
Packit ee6627
      @param conf     the conference just joined
Packit ee6627
      @param members  mwLoginInfo list of existing conference members
Packit ee6627
  */
Packit ee6627
  void (*conf_opened)(struct mwConference *conf, GList *members);
Packit ee6627
Packit ee6627
  /** triggered when a conference is closed. This is typically when
Packit ee6627
      we've left it */
Packit ee6627
  void (*conf_closed)(struct mwConference *, guint32 reason);
Packit ee6627
Packit ee6627
  /** triggered when someone joins the conference */
Packit ee6627
  void (*on_peer_joined)(struct mwConference *, struct mwLoginInfo *);
Packit ee6627
Packit ee6627
  /** triggered when someone leaves the conference */
Packit ee6627
  void (*on_peer_parted)(struct mwConference *, struct mwLoginInfo *);
Packit ee6627
Packit ee6627
  /** triggered when someone says something */
Packit ee6627
  void (*on_text)(struct mwConference *conf,
Packit ee6627
		  struct mwLoginInfo *who, const char *what);
Packit ee6627
Packit ee6627
  /** typing notification */
Packit ee6627
  void (*on_typing)(struct mwConference *conf,
Packit ee6627
		    struct mwLoginInfo *who, gboolean typing);
Packit ee6627
Packit ee6627
  /** optional. called from mwService_free */
Packit ee6627
  void (*clear)(struct mwServiceConference *srvc);
Packit ee6627
};
Packit ee6627
Packit ee6627
Packit ee6627
/** Allocate a new conferencing service, attaching the given handler
Packit ee6627
    @param sess     owning session
Packit ee6627
    @param handler  handler providing call-back functions for the service
Packit ee6627
 */
Packit ee6627
struct mwServiceConference *
Packit ee6627
mwServiceConference_new(struct mwSession *sess,
Packit ee6627
			struct mwConferenceHandler *handler);
Packit ee6627
Packit ee6627
Packit ee6627
/** @returns the conference handler for the service */
Packit ee6627
struct mwConferenceHandler *
Packit ee6627
mwServiceConference_getHandler(struct mwServiceConference *srvc);
Packit ee6627
Packit ee6627
Packit ee6627
/** a mwConference list of the conferences in this service. The GList
Packit ee6627
    will need to be destroyed with g_list_free after use */
Packit ee6627
GList *mwServiceConference_getConferences(struct mwServiceConference *srvc);
Packit ee6627
Packit ee6627
Packit ee6627
/** Allocate a new conference, in state NEW with the given title.
Packit ee6627
    @see mwConference_create */
Packit ee6627
struct mwConference *mwConference_new(struct mwServiceConference *srvc,
Packit ee6627
				      const char *title);
Packit ee6627
Packit ee6627
Packit ee6627
/** @returns the owning service of a conference */
Packit ee6627
struct mwServiceConference *mwConference_getService(struct mwConference *conf);
Packit ee6627
Packit ee6627
Packit ee6627
/** @returns unique conference name */
Packit ee6627
const char *mwConference_getName(struct mwConference *conf);
Packit ee6627
Packit ee6627
Packit ee6627
/** @returns conference title */
Packit ee6627
const char *mwConference_getTitle(struct mwConference *conf);
Packit ee6627
Packit ee6627
Packit ee6627
/** a mwIdBlock list of the members of the conference. The GList will
Packit ee6627
    need to be free'd after use */
Packit ee6627
GList *mwConference_getMembers(struct mwConference *conf);
Packit ee6627
Packit ee6627
Packit ee6627
/** Initiate a conference. Conference must be in state NEW. If no name
Packit ee6627
    or title for the conference has been set, they will be
Packit ee6627
    generated. Conference will be placed into state PENDING. */
Packit ee6627
int mwConference_open(struct mwConference *conf);
Packit ee6627
Packit ee6627
Packit ee6627
/** Leave and close an existing conference, or reject an invitation.
Packit ee6627
    Triggers mwServiceConfHandler::conf_closed and free's the
Packit ee6627
    conference.
Packit ee6627
 */
Packit ee6627
int mwConference_destroy(struct mwConference *conf,
Packit ee6627
			 guint32 reason, const char *text);
Packit ee6627
Packit ee6627
Packit ee6627
#define mwConference_reject(c,r,t) \
Packit ee6627
  mwConference_destroy((c),(r),(t))
Packit ee6627
Packit ee6627
Packit ee6627
/** accept a conference invitation. Conference must be in the state
Packit ee6627
    INVITED. */
Packit ee6627
int mwConference_accept(struct mwConference *conf);
Packit ee6627
Packit ee6627
Packit ee6627
/** invite another user to an ACTIVE conference
Packit ee6627
    @param conf  conference
Packit ee6627
    @param who   user to invite
Packit ee6627
    @param text  invitation message
Packit ee6627
 */
Packit ee6627
int mwConference_invite(struct mwConference *conf,
Packit ee6627
			struct mwIdBlock *who, const char *text);
Packit ee6627
Packit ee6627
Packit ee6627
/** send a text message over an open conference */
Packit ee6627
int mwConference_sendText(struct mwConference *conf, const char *text);
Packit ee6627
Packit ee6627
Packit ee6627
/** send typing notification over an open conference */
Packit ee6627
int mwConference_sendTyping(struct mwConference *conf, gboolean typing);
Packit ee6627
Packit ee6627
Packit ee6627
/** associate arbitrary client data and an optional cleanup function
Packit ee6627
    with a conference. If there is already client data with a clear
Packit ee6627
    function, it will not be called. */
Packit ee6627
void mwConference_setClientData(struct mwConference *conf,
Packit ee6627
				gpointer data, GDestroyNotify clear);
Packit ee6627
Packit ee6627
Packit ee6627
/** reference associated client data */
Packit ee6627
gpointer mwConference_getClientData(struct mwConference *conf);
Packit ee6627
Packit ee6627
Packit ee6627
/** remove associated client data if any, and call the cleanup
Packit ee6627
    function on the data as necessary */
Packit ee6627
void mwConference_removeClientData(struct mwConference *conf);
Packit ee6627
Packit ee6627
Packit ee6627
#ifdef __cplusplus
Packit ee6627
}
Packit ee6627
#endif
Packit ee6627
				    
Packit ee6627
Packit ee6627
#endif /* _MW_SRVC_CONF_H */
Packit ee6627