source: protocols/msn/msn.h @ a733669

Last change on this file since a733669 was a733669, checked in by dequis <dx@…>, at 2015-05-13T07:43:24Z

msn: Remove nudges

  • Property mode set to 100644
File size: 7.7 KB
Line 
1/********************************************************************\
2  * BitlBee -- An IRC to other IM-networks gateway                     *
3  *                                                                    *
4  * Copyright 2002-2012 Wilmer van der Gaast and others                *
5  \********************************************************************/
6
7/* MSN module                                                           */
8
9/*
10  This program is free software; you can redistribute it and/or modify
11  it under the terms of the GNU General Public License as published by
12  the Free Software Foundation; either version 2 of the License, or
13  (at your option) any later version.
14
15  This program is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  GNU General Public License for more details.
19
20  You should have received a copy of the GNU General Public License with
21  the Debian GNU/Linux distribution in /usr/share/common-licenses/GPL;
22  if not, write to the Free Software Foundation, Inc., 51 Franklin St.,
23  Fifth Floor, Boston, MA  02110-1301  USA
24*/
25
26#ifndef _MSN_H
27#define _MSN_H
28
29/* Some hackish magicstrings to make special-purpose messages/switchboards.
30 */
31#define TYPING_NOTIFICATION_MESSAGE "\r\r\rBEWARE, ME R TYPINK MESSAGE!!!!\r\r\r"
32#define GROUPCHAT_SWITCHBOARD_MESSAGE "\r\r\rME WANT TALK TO MANY PEOPLE\r\r\r"
33
34#ifdef DEBUG_MSN
35#define debug(text ...) imcb_log(ic, text);
36#else
37#define debug(text ...)
38#endif
39
40/* This should be MSN Messenger 7.0.0813
41#define MSNP11_PROD_KEY "CFHUR$52U_{VIX5T"
42#define MSNP11_PROD_ID  "PROD0101{0RM?UBW"
43*/
44
45#define MSN_NS_HOST "messenger.hotmail.com"
46#define MSN_NS_PORT "1863"
47
48/* Some other version.
49#define MSNP11_PROD_KEY "O4BG@C7BWLYQX?5G"
50#define MSNP11_PROD_ID  "PROD01065C%ZFN6F"
51*/
52
53/* <= BitlBee 3.0.5
54#define MSNP11_PROD_KEY "ILTXC!4IXB5FB*PX"
55#define MSNP11_PROD_ID  "PROD0119GSJUC$18"
56*/
57
58#define MSNP11_PROD_KEY "C1BX{V4W}Q3*10SM"
59#define MSNP11_PROD_ID  "PROD0120PW!CCV9@"
60#define MSNP_VER        "MSNP21"
61#define MSNP_BUILD      "14.0.8117.416"
62
63#define MSN_SB_NEW         -24062002
64
65#define MSN_CAP1        0xC000
66#define MSN_CAP2        0x0000
67
68#define MSN_BASE_HEADERS \
69        "Routing: 1.0\r\n" \
70        "To: 1:%s\r\n" \
71        "From: 1:%s;epid={%s}\r\n" \
72        "\r\n" \
73        "Reliability: 1.0\r\n" \
74        "\r\n"
75
76#define MSN_MESSAGE_HEADERS MSN_BASE_HEADERS \
77        "Messaging: 2.0\r\n" \
78        "Message-Type: Text\r\n" \
79        "Content-Length: %zd\r\n" \
80        "Content-Type: text/plain; charset=UTF-8\r\n" \
81        "X-MMS-IM-Format: FN=Segoe%%20UI; EF=; CO=0; CS=0; PF=0\r\n" \
82        "\r\n" \
83        "%s"
84
85#define MSN_PUT_HEADERS MSN_BASE_HEADERS \
86        "Publication: 1.0\r\n" \
87        "Uri: %s\r\n" \
88        "Content-Type: %s\r\n" \
89        "Content-Length: %zd\r\n" \
90        "\r\n" \
91        "%s"
92
93#define MSN_PUT_USER_BODY \
94        "<user>" \
95        "<s n=\"PE\"><UserTileLocation></UserTileLocation><FriendlyName>%s</FriendlyName><PSM>%s</PSM><DDP></DDP>" \
96        "<Scene></Scene><ASN></ASN><ColorScheme>-3</ColorScheme><BDG></BDG><RUM>%s</RUM><RUL></RUL><RLT>0</RLT>" \
97        "<RID></RID><SUL></SUL><MachineGuid>%s</MachineGuid></s>" \
98        "<s n=\"IM\"><Status>%s</Status><CurrentMedia></CurrentMedia></s>" \
99        "<sep n=\"PD\"><ClientType>1</ClientType><EpName>%s</EpName><Idle>%s</Idle><State>%s</State></sep>" \
100        "<sep n=\"PE\"><VER>BitlBee:" BITLBEE_VERSION "</VER><TYP>1</TYP><Capabilities>%d:%d</Capabilities></sep>" \
101        "<sep n=\"IM\"><Capabilities>%d:%d</Capabilities></sep>" \
102        "</user>"
103
104#define MSN_TYPING_HEADERS "MIME-Version: 1.0\r\n" \
105        "Content-Type: text/x-msmsgscontrol\r\n" \
106        "TypingUser: %s\r\n" \
107        "\r\n\r\n"
108
109#define PROFILE_URL "http://members.msn.com/"
110
111typedef enum {
112        MSN_GOT_PROFILE = 1,
113        MSN_GOT_PROFILE_DN = 2,
114        MSN_DONE_ADL = 4,
115        MSN_REAUTHING = 8,
116        MSN_EMAIL_UNVERIFIED = 16,
117} msn_flags_t;
118
119struct msn_gw {
120        char *last_host;
121        int port;
122        gboolean ssl;
123
124        char *session_id;
125
126        GByteArray *in;
127        GByteArray *out;
128
129        int poll_timeout;
130
131        b_event_handler callback;
132
133        struct im_connection *ic;
134        struct msn_data *md;
135
136        gboolean open;
137        gboolean waiting;
138        gboolean polling;
139};
140
141struct msn_data {
142        int fd, inpa;
143        int rxlen;
144        char *rxq;
145
146        int msglen;
147        char *cmd_text;
148
149        struct im_connection *ic;
150
151        msn_flags_t flags;
152
153        int trId;
154        char *tokens[4];
155        char *lock_key, *pp_policy;
156        char *uuid;
157
158        GSList *msgq, *grpq, *soapq;
159
160        const struct msn_away_state *away_state;
161        GSList *groups;
162        char *profile_rid;
163
164        /* Mostly used for sending the ADL command; since MSNP13 the client
165           is responsible for downloading the contact list and then sending
166           it to the MSNP server. */
167        GTree *domaintree;
168        int adl_todo;
169
170        gboolean is_http;
171        struct msn_gw *gw;
172};
173
174struct msn_away_state {
175        char code[4];
176        char name[16];
177};
178
179struct msn_status_code {
180        int number;
181        char *text;
182        int flags;
183};
184
185struct msn_message {
186        char *who;
187        char *text;
188};
189
190struct msn_groupadd {
191        char *who;
192        char *group;
193};
194
195typedef enum {
196        MSN_BUDDY_FL = 1,   /* Warning: FL,AL,BL *must* be 1,2,4. */
197        MSN_BUDDY_AL = 2,
198        MSN_BUDDY_BL = 4,
199        MSN_BUDDY_RL = 8,
200        MSN_BUDDY_PL = 16,
201        MSN_BUDDY_ADL_SYNCED = 256,
202        MSN_BUDDY_FED = 512,
203} msn_buddy_flags_t;
204
205struct msn_buddy_data {
206        char *cid;
207        msn_buddy_flags_t flags;
208};
209
210struct msn_group {
211        char *name;
212        char *id;
213};
214
215/* Bitfield values for msn_status_code.flags */
216#define STATUS_FATAL            1
217#define STATUS_SB_FATAL         2
218
219extern int msn_chat_id;
220extern const struct msn_away_state msn_away_state_list[];
221extern const struct msn_status_code msn_status_code_list[];
222
223/* Keep a list of all the active connections. We need these lists because
224   "connected" callbacks might be called when the connection they belong too
225   is down already (for example, when an impatient user disabled the
226   connection), the callback should check whether it's still listed here
227   before doing *anything* else. */
228extern GSList *msn_connections;
229
230/* ns.c */
231int msn_ns_write(struct im_connection *ic, int fd, const char *fmt, ...) G_GNUC_PRINTF(3, 4);
232gboolean msn_ns_connect(struct im_connection *ic, const char *host, int port);
233void msn_ns_close(struct msn_data *handler);
234void msn_auth_got_passport_token(struct im_connection *ic, const char *token, const char *error);
235void msn_auth_got_contact_list(struct im_connection *ic);
236int msn_ns_finish_login(struct im_connection *ic);
237int msn_ns_sendmessage(struct im_connection *ic, struct bee_user *bu, const char *text);
238int msn_ns_command(struct msn_data *md, char **cmd, int num_parts);
239int msn_ns_message(struct msn_data *md, char *msg, int msglen, char **cmd, int num_parts);
240
241/* msn_util.c */
242int msn_buddy_list_add(struct im_connection *ic, msn_buddy_flags_t list, const char *who, const char *realname_,
243                       const char *group);
244int msn_buddy_list_remove(struct im_connection *ic, msn_buddy_flags_t list, const char *who, const char *group);
245void msn_buddy_ask(bee_user_t *bu);
246void msn_queue_feed(struct msn_data *h, char *bytes, int st);
247int msn_handler(struct msn_data *h);
248char *msn_p11_challenge(char *challenge);
249gint msn_domaintree_cmp(gconstpointer a_, gconstpointer b_);
250struct msn_group *msn_group_by_name(struct im_connection *ic, const char *name);
251struct msn_group *msn_group_by_id(struct im_connection *ic, const char *id);
252int msn_ns_set_display_name(struct im_connection *ic, const char *value);
253const char *msn_normalize_handle(const char *handle);
254
255/* tables.c */
256const struct msn_away_state *msn_away_state_by_number(int number);
257const struct msn_away_state *msn_away_state_by_code(char *code);
258const struct msn_away_state *msn_away_state_by_name(char *name);
259const struct msn_status_code *msn_status_by_number(int number);
260
261/* gw.c */
262struct msn_gw *msn_gw_new(struct im_connection *ic);
263void msn_gw_free(struct msn_gw *gw);
264void msn_gw_open(struct msn_gw *gw);
265ssize_t msn_gw_read(struct msn_gw *gw, char **buf);
266void msn_gw_write(struct msn_gw *gw, char *buf, size_t len);
267
268#endif //_MSN_H
Note: See TracBrowser for help on using the repository browser.