00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _MW_SRVC_IM_H
00022 #define _MW_SRVC_IM_H
00023
00024
00036 #include <glib.h>
00037 #include "mw_common.h"
00038
00039
00040 #ifdef __cplusplus
00041 extern "C" {
00042 #endif
00043
00044
00045
00046 #define mwService_IM 0x00001000
00047
00048
00053 struct mwServiceIm;
00054
00055
00059 struct mwConversation;
00060
00061
00062 enum mwImClientType {
00063 mwImClient_PLAIN = 0x00000001,
00064 mwImClient_NOTESBUDDY = 0x00033453,
00065 mwImClient_PRECONF = 0x00000019,
00066 mwImClient_UNKNOWN = 0xffffffff,
00067 };
00068
00069
00084 enum mwImSendType {
00085 mwImSend_PLAIN,
00086 mwImSend_TYPING,
00087 mwImSend_HTML,
00088 mwImSend_SUBJECT,
00089 mwImSend_MIME,
00090 mwImSend_TIMESTAMP,
00091 };
00092
00093
00094
00096 enum mwConversationState {
00097 mwConversation_CLOSED,
00098 mwConversation_PENDING,
00099 mwConversation_OPEN,
00100 mwConversation_UNKNOWN,
00101 };
00102
00103
00104 #define mwConversation_isState(conv, state) \
00105 (mwConversation_getState(conv) == (state))
00106
00107 #define mwConversation_isClosed(conv) \
00108 mwConversation_isState((conv), mwConversation_CLOSED)
00109
00110 #define mwConversation_isPending(conv) \
00111 mwConversation_isState((conv), mwConversation_PENDING)
00112
00113 #define mwConversation_isOpen(conv) \
00114 mwConversation_isState((conv), mwConversation_OPEN)
00115
00116
00117
00120 struct mwImHandler {
00121
00123 void (*conversation_opened)(struct mwConversation *conv);
00124
00126 void (*conversation_closed)(struct mwConversation *conv, guint32 err);
00127
00129 void (*conversation_recv)(struct mwConversation *conv,
00130 enum mwImSendType type, gconstpointer msg);
00131
00134 void (*place_invite)(struct mwConversation *conv,
00135 const char *message,
00136 const char *title, const char *name);
00137
00139 void (*clear)(struct mwServiceIm *srvc);
00140 };
00141
00142
00143 struct mwServiceIm *mwServiceIm_new(struct mwSession *session,
00144 struct mwImHandler *handler);
00145
00146
00147 struct mwImHandler *mwServiceIm_getHandler(struct mwServiceIm *srvc);
00148
00149
00152 struct mwConversation *mwServiceIm_getConversation(struct mwServiceIm *srvc,
00153 struct mwIdBlock *target);
00154
00155
00157 struct mwConversation *mwServiceIm_findConversation(struct mwServiceIm *srvc,
00158 struct mwIdBlock *target);
00159
00160
00163 gboolean mwServiceIm_supports(struct mwServiceIm *srvc,
00164 enum mwImSendType type);
00165
00166
00174 void mwServiceIm_setClientType(struct mwServiceIm *srvc,
00175 enum mwImClientType type);
00176
00177
00178 enum mwImClientType mwServiceIm_getClientType(struct mwServiceIm *srvc);
00179
00180
00186 void mwConversation_open(struct mwConversation *conv);
00187
00188
00191 void mwConversation_close(struct mwConversation *conv, guint32 err);
00192
00193
00195 gboolean mwConversation_supports(struct mwConversation *conv,
00196 enum mwImSendType type);
00197
00198
00199 enum mwImClientType mwConversation_getClientType(struct mwConversation *conv);
00200
00201
00208 enum mwConversationState mwConversation_getState(struct mwConversation *conv);
00209
00210
00212 int mwConversation_send(struct mwConversation *conv,
00213 enum mwImSendType type, gconstpointer send);
00214
00215
00217 struct mwServiceIm *mwConversation_getService(struct mwConversation *conv);
00218
00219
00222 struct mwLoginInfo *mwConversation_getTargetInfo(struct mwConversation *conv);
00223
00224
00226 struct mwIdBlock *mwConversation_getTarget(struct mwConversation *conv);
00227
00228
00231 void mwConversation_setEncrypted(struct mwConversation *conv,
00232 gboolean useCipher);
00233
00234
00236 gboolean mwConversation_isEncrypted(struct mwConversation *conv);
00237
00238
00245 void mwConversation_setClientData(struct mwConversation *conv,
00246 gpointer data, GDestroyNotify clean);
00247
00248
00254 gpointer mwConversation_getClientData(struct mwConversation *conv);
00255
00256
00263 void mwConversation_removeClientData(struct mwConversation *conv);
00264
00265
00268 void mwConversation_free(struct mwConversation *conv);
00269
00270
00271 #ifdef __cplusplus
00272 }
00273 #endif
00274
00275
00276 #endif