meanwhile 1.1.0
|
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_MESSAGE_H 00022 #define _MW_MESSAGE_H 00023 00024 00025 #include <glib/glist.h> 00026 #include "mw_common.h" 00027 00028 00029 #ifdef __cplusplus 00030 extern "C" { 00031 #endif 00032 00033 00036 #define MW_MESSAGE(msg) (&msg->head) 00037 00038 00040 enum mwMessageType { 00041 mwMessage_HANDSHAKE = 0x0000, 00042 mwMessage_HANDSHAKE_ACK = 0x8000, 00043 mwMessage_LOGIN = 0x0001, 00044 mwMessage_LOGIN_ACK = 0x8001, 00045 mwMessage_LOGIN_REDIRECT = 0x0018, 00046 mwMessage_LOGIN_CONTINUE = 0x0016, 00048 mwMessage_CHANNEL_CREATE = 0x0002, 00049 mwMessage_CHANNEL_DESTROY = 0x0003, 00050 mwMessage_CHANNEL_SEND = 0x0004, 00051 mwMessage_CHANNEL_ACCEPT = 0x0006, 00053 mwMessage_SET_USER_STATUS = 0x0009, 00054 mwMessage_SET_PRIVACY_LIST = 0x000b, 00055 mwMessage_SENSE_SERVICE = 0x0011, 00056 mwMessage_ADMIN = 0x0019, 00057 mwMessage_ANNOUNCE = 0x0022, 00058 }; 00059 00060 00061 enum mwMessageOption { 00062 mwMessageOption_ENCRYPT = 0x4000, 00063 mwMessageOption_HAS_ATTRIBS = 0x8000, 00064 }; 00065 00066 00068 #define MW_MESSAGE_HAS_OPTION(msg, opt) \ 00069 ((msg)->options & (opt)) 00070 00071 00072 struct mwMessage { 00073 guint16 type; 00074 guint16 options; 00075 guint32 channel; 00076 struct mwOpaque attribs; 00077 }; 00078 00079 00080 00082 struct mwMessage *mwMessage_new(enum mwMessageType type); 00083 00084 00086 struct mwMessage *mwMessage_get(struct mwGetBuffer *b); 00087 00088 00089 void mwMessage_put(struct mwPutBuffer *b, struct mwMessage *msg); 00090 00091 00092 void mwMessage_free(struct mwMessage *msg); 00093 00094 00095 /* 8.4 Messages */ 00096 /* 8.4.1 Basic Community Messages */ 00097 /* 8.4.1.1 Handshake */ 00098 00099 struct mwMsgHandshake { 00100 struct mwMessage head; 00101 guint16 major; 00102 guint16 minor; 00103 guint32 srvrcalc_addr; 00104 guint16 login_type; 00105 guint32 loclcalc_addr; 00106 guint16 unknown_a; 00107 guint32 unknown_b; 00108 char *local_host; 00109 }; 00110 00111 00112 /* 8.4.1.2 HandshakeAck */ 00113 00114 struct mwMsgHandshakeAck { 00115 struct mwMessage head; 00116 guint16 major; 00117 guint16 minor; 00118 guint32 srvrcalc_addr; 00119 guint32 magic; 00120 struct mwOpaque data; 00121 }; 00122 00123 00124 /* 8.3.7 Authentication Types */ 00125 00126 enum mwAuthType { 00127 mwAuthType_PLAIN = 0x0000, 00128 mwAuthType_TOKEN = 0x0001, 00129 mwAuthType_ENCRYPT = 0x0002, 00130 mwAuthType_RC2_40 = 0x0002, 00131 mwAuthType_RC2_128 = 0x0004, 00132 }; 00133 00134 00135 /* 8.4.1.3 Login */ 00136 00137 struct mwMsgLogin { 00138 struct mwMessage head; 00139 guint16 login_type; 00140 char *name; 00141 guint16 auth_type; 00142 struct mwOpaque auth_data; 00143 }; 00144 00145 00146 /* 8.4.1.4 LoginAck */ 00147 00148 struct mwMsgLoginAck { 00149 struct mwMessage head; 00150 struct mwLoginInfo login; 00151 struct mwPrivacyInfo privacy; 00152 struct mwUserStatus status; 00153 }; 00154 00155 00156 /* 8.4.1.5 LoginCont */ 00157 00158 struct mwMsgLoginContinue { 00159 struct mwMessage head; 00160 }; 00161 00162 00163 /* 8.4.1.6 AuthPassed */ 00164 00165 struct mwMsgLoginRedirect { 00166 struct mwMessage head; 00167 char *host; 00168 char *server_id; 00169 }; 00170 00171 00172 /* 8.4.1.7 CreateCnl */ 00173 00175 struct mwEncryptOffer { 00176 guint16 mode; 00177 GList *items; 00178 guint16 extra; 00179 gboolean flag; 00180 }; 00181 00182 00183 struct mwMsgChannelCreate { 00184 struct mwMessage head; 00185 guint32 reserved; 00186 guint32 channel; 00187 struct mwIdBlock target; 00188 guint32 service; 00189 guint32 proto_type; 00190 guint32 proto_ver; 00191 guint32 options; 00192 struct mwOpaque addtl; 00193 gboolean creator_flag; 00194 struct mwLoginInfo creator; 00195 struct mwEncryptOffer encrypt; 00196 }; 00197 00198 00199 /* 8.4.1.8 AcceptCnl */ 00200 00202 struct mwEncryptAccept { 00203 guint16 mode; 00204 struct mwEncryptItem *item; 00205 guint16 extra; 00206 gboolean flag; 00207 }; 00208 00209 00210 struct mwMsgChannelAccept { 00211 struct mwMessage head; 00212 guint32 service; 00213 guint32 proto_type; 00214 guint32 proto_ver; 00215 struct mwOpaque addtl; 00216 gboolean acceptor_flag; 00217 struct mwLoginInfo acceptor; 00218 struct mwEncryptAccept encrypt; 00219 }; 00220 00221 00222 /* 8.4.1.9 SendOnCnl */ 00223 00224 struct mwMsgChannelSend { 00225 struct mwMessage head; 00226 00229 guint16 type; 00230 00232 struct mwOpaque data; 00233 }; 00234 00235 00236 /* 8.4.1.10 DestroyCnl */ 00237 00238 struct mwMsgChannelDestroy { 00239 struct mwMessage head; 00240 guint32 reason; 00241 struct mwOpaque data; 00242 }; 00243 00244 00245 /* 8.4.1.11 SetUserStatus */ 00246 00247 struct mwMsgSetUserStatus { 00248 struct mwMessage head; 00249 struct mwUserStatus status; 00250 }; 00251 00252 00253 /* 8.4.1.12 SetPrivacyList */ 00254 00255 struct mwMsgSetPrivacyList { 00256 struct mwMessage head; 00257 struct mwPrivacyInfo privacy; 00258 }; 00259 00260 00261 /* Sense Service */ 00262 00266 struct mwMsgSenseService { 00267 struct mwMessage head; 00268 guint32 service; 00269 }; 00270 00271 00272 /* Admin */ 00273 00275 struct mwMsgAdmin { 00276 struct mwMessage head; 00277 char *text; 00278 }; 00279 00280 00281 /* Announce */ 00282 00284 struct mwMsgAnnounce { 00285 struct mwMessage head; 00286 gboolean sender_present; 00287 struct mwLoginInfo sender; 00288 guint16 unknown_a; 00289 gboolean may_reply; 00290 char *text; 00295 GList *recipients; 00296 }; 00297 00298 00299 #ifdef __cplusplus 00300 } 00301 #endif 00302 00303 00304 #endif /* _MW_MESSAGE_H */ 00305