00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _MW_SRVC_FT_H
00023 #define _MW_SRVC_FT_H
00024
00025
00033 #include "mw_common.h"
00034
00035
00036 #ifdef __cplusplus
00037 extern "C" {
00038 #endif
00039
00040
00044 struct mwServiceFileTransfer;
00045
00046
00050 struct mwFileTransfer;
00051
00052
00053 #define mwService_FILE_TRANSFER 0x00000038
00054
00055
00056 enum mwFileTransferState {
00057 mwFileTransfer_NEW,
00058 mwFileTransfer_PENDING,
00059 mwFileTransfer_OPEN,
00060 mwFileTransfer_CANCEL_LOCAL,
00061 mwFileTransfer_CANCEL_REMOTE,
00062 mwFileTransfer_DONE,
00063 mwFileTransfer_ERROR,
00064 mwFileTransfer_UNKNOWN,
00065 };
00066
00067
00068 #define mwFileTransfer_isState(ft, state) \
00069 (mwFileTransfer_getState(ft) == (state))
00070
00071 #define mwFileTransfer_isNew(ft) \
00072 mwFileTransfer_isState((ft), mwFileTransfer_NEW)
00073
00074 #define mwFileTransfer_isPending(ft) \
00075 mwFileTransfer_isState((ft), mwFileTransfer_PENDING)
00076
00077 #define mwFileTransfer_isOpen(ft) \
00078 mwFileTransfer_isState((ft), mwFileTransfer_OPEN)
00079
00080 #define mwFileTransfer_isDone(ft) \
00081 mwFileTransfer_isState((ft), mwFileTransfer_DONE)
00082
00083 #define mwFileTransfer_isCancelLocal(ft) \
00084 mwFileTransfer_isState((ft), mwFileTransfer_CANCEL_LOCAL)
00085
00086 #define mwFileTransfer_isCancelRemote(ft) \
00087 mwFileTransfer_isState((ft), mwFileTransfer_CANCEL_REMOTE)
00088
00089
00090 enum mwFileTranferCode {
00091 mwFileTransfer_SUCCESS = 0x00000000,
00092 mwFileTransfer_REJECTED = 0x08000606,
00093 };
00094
00095
00096 struct mwFileTransferHandler {
00097
00099 void (*ft_offered)(struct mwFileTransfer *ft);
00100
00102 void (*ft_opened)(struct mwFileTransfer *ft);
00103
00107 void (*ft_closed)(struct mwFileTransfer *ft, guint32 code);
00108
00110 void (*ft_recv)(struct mwFileTransfer *ft, struct mwOpaque *data);
00111
00115 void (*ft_ack)(struct mwFileTransfer *ft);
00116
00118 void (*clear)(struct mwServiceFileTransfer *srvc);
00119 };
00120
00121
00122 struct mwServiceFileTransfer *
00123 mwServiceFileTransfer_new(struct mwSession *session,
00124 struct mwFileTransferHandler *handler);
00125
00126
00127 struct mwFileTransferHandler *
00128 mwServiceFileTransfer_getHandler(struct mwServiceFileTransfer *srvc);
00129
00130
00131 const GList *
00132 mwServiceFileTransfer_getTransfers(struct mwServiceFileTransfer *srvc);
00133
00134
00135 struct mwFileTransfer *
00136 mwFileTransfer_new(struct mwServiceFileTransfer *srvc,
00137 const struct mwIdBlock *who, const char *msg,
00138 const char *filename, guint32 filesize);
00139
00140
00143 void
00144 mwFileTransfer_free(struct mwFileTransfer *ft);
00145
00146
00148 enum mwFileTransferState
00149 mwFileTransfer_getState(struct mwFileTransfer *ft);
00150
00151
00152 struct mwServiceFileTransfer *
00153 mwFileTransfer_getService(struct mwFileTransfer *ft);
00154
00155
00157 const struct mwIdBlock *
00158 mwFileTransfer_getUser(struct mwFileTransfer *ft);
00159
00160
00162 const char *
00163 mwFileTransfer_getMessage(struct mwFileTransfer *ft);
00164
00165
00168 const char *
00169 mwFileTransfer_getFileName(struct mwFileTransfer *ft);
00170
00171
00173 guint32 mwFileTransfer_getFileSize(struct mwFileTransfer *ft);
00174
00175
00177 guint32 mwFileTransfer_getRemaining(struct mwFileTransfer *ft);
00178
00179
00181 #define mwFileTransfer_getSent(ft) \
00182 (mwFileTransfer_getFileSize(ft) - mwFileTransfer_getRemaining(ft))
00183
00184
00186 int mwFileTransfer_offer(struct mwFileTransfer *ft);
00187
00188
00190 int mwFileTransfer_accept(struct mwFileTransfer *ft);
00191
00192
00194 #define mwFileTransfer_reject(ft) \
00195 mwFileTransfer_close((ft), mwFileTransfer_REJECTED)
00196
00197
00199 #define mwFileTransfer_cancel(ft) \
00200 mwFileTransfer_close((ft), mwFileTransfer_SUCCESS);
00201
00202
00209 int mwFileTransfer_close(struct mwFileTransfer *ft, guint32 code);
00210
00211
00218 int mwFileTransfer_send(struct mwFileTransfer *ft,
00219 struct mwOpaque *data);
00220
00221
00231 int mwFileTransfer_ack(struct mwFileTransfer *ft);
00232
00233
00234 void mwFileTransfer_setClientData(struct mwFileTransfer *ft,
00235 gpointer data, GDestroyNotify clean);
00236
00237
00238 gpointer mwFileTransfer_getClientData(struct mwFileTransfer *ft);
00239
00240
00241 void mwFileTransfer_removeClientData(struct mwFileTransfer *ft);
00242
00243
00244 #ifdef __cplusplus
00245 }
00246 #endif
00247
00248
00249 #endif