meanwhile 1.0.2
mw_session.h
Go to the documentation of this file.
00001 
00002 /*
00003   Meanwhile - Unofficial Lotus Sametime Community Client Library
00004   Copyright (C) 2004  Christopher (siege) O'Brien
00005   
00006   This library is free software; you can redistribute it and/or
00007   modify it under the terms of the GNU Library General Public
00008   License as published by the Free Software Foundation; either
00009   version 2 of the License, or (at your option) any later version.
00010   
00011   This library is distributed in the hope that it will be useful,
00012   but WITHOUT ANY WARRANTY; without even the implied warranty of
00013   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014   Library General Public License for more details.
00015   
00016   You should have received a copy of the GNU Library General Public
00017   License along with this library; if not, write to the Free
00018   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019 */
00020 
00021 #ifndef _MW_SESSION_H
00022 #define _MW_SESSION_H
00023 
00024 
00047 #include "mw_common.h"
00048 
00049 
00050 #ifdef __cplusplus
00051 extern "C" {
00052 #endif
00053 
00054 
00055 struct mwChannelSet;
00056 struct mwCipher;
00057 struct mwMessage;
00058 struct mwService;
00059 
00060 
00062 #define MW_PROTOCOL_VERSION_MAJOR  0x001e
00063 
00064 
00066 #define MW_PROTOCOL_VERSION_MINOR  0x001d
00067 
00068 
00073 
00075 #define mwSession_AUTH_USER_ID      "session.auth.user"
00076 
00078 #define mwSession_AUTH_PASSWORD     "session.auth.password"
00079 
00081 #define mwSession_AUTH_TOKEN        "session.auth.token"
00082 
00084 #define mwSession_CLIENT_HOST       "client.host"
00085 
00087 #define mwSession_CLIENT_IP         "client.ip"
00088 
00090 #define mwSession_CLIENT_VER_MAJOR  "client.version.major"
00091 
00093 #define mwSession_CLIENT_VER_MINOR  "client.version.minor"
00094 
00096 #define mwSession_CLIENT_TYPE_ID    "client.id"
00097 
00099 #define mwSession_SERVER_VER_MAJOR  "server.version.major"
00100 
00102 #define mwSession_SERVER_VER_MINOR  "server.version.minor"
00103 
00107 enum mwSessionState {
00108   mwSession_STARTING,      
00109   mwSession_HANDSHAKE,     
00110   mwSession_HANDSHAKE_ACK, 
00111   mwSession_LOGIN,         
00112   mwSession_LOGIN_REDIR,   
00113   mwSession_LOGIN_ACK,     
00114   mwSession_STARTED,       
00115   mwSession_STOPPING,      
00116   mwSession_STOPPED,       
00117   mwSession_UNKNOWN,       
00118   mwSession_LOGIN_CONT,    
00119 };
00120 
00121 
00122 #define mwSession_isState(session, state) \
00123   (mwSession_getState((session)) == (state))
00124 
00125 #define mwSession_isStarting(s) \
00126   (mwSession_isState((s), mwSession_STARTING)  || \
00127    mwSession_isState((s), mwSession_HANDSHAKE) || \
00128    mwSession_isState((s), mwSession_HANDSHAKE_ACK) || \
00129    mwSession_isState((s), mwSession_LOGIN) || \
00130    mwSession_isState((s), mwSession_LOGIN_ACK) || \
00131    mwSession_isState((s), mwSession_LOGIN_REDIR) || \
00132    mwSession_isState((s), mwSession_LOGIN_CONT))
00133 
00134 #define mwSession_isStarted(s) \
00135   (mwSession_isState((s), mwSession_STARTED))
00136 
00137 #define mwSession_isStopping(s) \
00138   (mwSession_isState((s), mwSession_STOPPING))
00139 
00140 #define mwSession_isStopped(s) \
00141   (mwSession_isState((s), mwSession_STOPPED))
00142 
00143 
00147 struct mwSession;
00148 
00149 
00154 struct mwSessionHandler {
00155   
00158   int (*io_write)(struct mwSession *, const guchar *buf, gsize len);
00159   
00161   void (*io_close)(struct mwSession *);
00162 
00164   void (*clear)(struct mwSession *);
00165 
00173   void (*on_stateChange)(struct mwSession *s,
00174                          enum mwSessionState state, gpointer info);
00175 
00180   void (*on_setPrivacyInfo)(struct mwSession *);
00181 
00185   void (*on_setUserStatus)(struct mwSession *);
00186 
00188   void (*on_admin)(struct mwSession *, const char *text);
00189 
00191   void (*on_announce)(struct mwSession *, struct mwLoginInfo *from,
00192                       gboolean may_reply, const char *text);
00193 
00194 };
00195 
00196 
00198 struct mwSession *mwSession_new(struct mwSessionHandler *);
00199 
00200 
00203 void mwSession_free(struct mwSession *);
00204 
00205 
00207 struct mwSessionHandler *mwSession_getHandler(struct mwSession *);
00208 
00209 
00212 void mwSession_start(struct mwSession *);
00213 
00214 
00217 void mwSession_stop(struct mwSession *, guint32 reason);
00218 
00219 
00222 void mwSession_recv(struct mwSession *, const guchar *, gsize);
00223 
00224 
00229 int mwSession_send(struct mwSession *s, struct mwMessage *msg);
00230 
00231 
00233 int mwSession_sendKeepalive(struct mwSession *s);
00234 
00235 
00238 int mwSession_forceLogin(struct mwSession *s);
00239 
00240 
00251 int mwSession_sendAnnounce(struct mwSession *s, gboolean may_reply,
00252                            const char *text, const GList *recipients);
00253 
00254 
00257 int mwSession_setPrivacyInfo(struct mwSession *, struct mwPrivacyInfo *);
00258 
00259 
00261 struct mwPrivacyInfo *mwSession_getPrivacyInfo(struct mwSession *);
00262 
00263 
00265 struct mwLoginInfo *mwSession_getLoginInfo(struct mwSession *);
00266 
00267 
00270 int mwSession_setUserStatus(struct mwSession *, struct mwUserStatus *);
00271 
00272 
00273 struct mwUserStatus *mwSession_getUserStatus(struct mwSession *);
00274 
00275 
00277 enum mwSessionState mwSession_getState(struct mwSession *);
00278 
00279 
00292 gpointer mwSession_getStateInfo(struct mwSession *);
00293 
00294 
00295 struct mwChannelSet *mwSession_getChannels(struct mwSession *);
00296 
00297 
00305 gboolean mwSession_addService(struct mwSession *, struct mwService *);
00306 
00307 
00309 struct mwService *mwSession_getService(struct mwSession *, guint32 type);
00310 
00311 
00315 struct mwService *mwSession_removeService(struct mwSession *, guint32 type);
00316 
00317 
00320 GList *mwSession_getServices(struct mwSession *);
00321 
00322 
00335 void mwSession_senseService(struct mwSession *s, guint32 type);
00336 
00337 
00339 gboolean mwSession_addCipher(struct mwSession *, struct mwCipher *);
00340 
00341 
00343 struct mwCipher *mwSession_getCipher(struct mwSession *, guint16 type);
00344 
00345 
00347 struct mwCipher *mwSession_removeCipher(struct mwSession *, guint16 type);
00348 
00349 
00352 GList *mwSession_getCiphers(struct mwSession *);
00353 
00354 
00358 void mwSession_setProperty(struct mwSession *, const char *key,
00359                            gpointer val, GDestroyNotify clear);
00360 
00361 
00363 gpointer mwSession_getProperty(struct mwSession *, const char *key);
00364 
00365 
00368 void mwSession_removeProperty(struct mwSession *, const char *key);
00369 
00370 
00379 void mwSession_setClientData(struct mwSession *session,
00380                              gpointer data, GDestroyNotify clear);
00381 
00382 
00383 gpointer mwSession_getClientData(struct mwSession *session);
00384 
00385 
00388 void mwSession_removeClientData(struct mwSession *session);
00389 
00390 
00391 #ifdef __cplusplus
00392 }
00393 #endif
00394 
00395 
00396 #endif /* _MW_SESSION_H */
00397