source: protocols/msn/msn.h @ c5a1502

Last change on this file since c5a1502 was c5a1502, checked in by dequis <dx@…>, at 2015-03-15T14:41:47Z

msn: remove unsupported commands, OIMs and dead code

  • Property mode set to 100644
File size: 7.3 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 NUDGE_MESSAGE "\r\r\rSHAKE THAT THING\r\r\r"
33#define GROUPCHAT_SWITCHBOARD_MESSAGE "\r\r\rME WANT TALK TO MANY PEOPLE\r\r\r"
34
35#ifdef DEBUG_MSN
36#define debug(text ...) imcb_log(ic, text);
37#else
38#define debug(text ...)
39#endif
40
41/* This should be MSN Messenger 7.0.0813
42#define MSNP11_PROD_KEY "CFHUR$52U_{VIX5T"
43#define MSNP11_PROD_ID  "PROD0101{0RM?UBW"
44*/
45
46#define MSN_NS_HOST "messenger.hotmail.com"
47#define MSN_NS_PORT "1863"
48
49/* Some other version.
50#define MSNP11_PROD_KEY "O4BG@C7BWLYQX?5G"
51#define MSNP11_PROD_ID  "PROD01065C%ZFN6F"
52*/
53
54/* <= BitlBee 3.0.5
55#define MSNP11_PROD_KEY "ILTXC!4IXB5FB*PX"
56#define MSNP11_PROD_ID  "PROD0119GSJUC$18"
57*/
58
59#define MSNP11_PROD_KEY "C1BX{V4W}Q3*10SM"
60#define MSNP11_PROD_ID  "PROD0120PW!CCV9@"
61#define MSNP_VER        "MSNP21"
62#define MSNP_BUILD      "14.0.8117.416"
63
64#define MSN_SB_NEW         -24062002
65
66#define MSN_CAP1        0xC000
67#define MSN_CAP2        0x0000
68
69#define MSN_BASE_HEADERS \
70        "Routing: 1.0\r\n" \
71        "To: 1:%s\r\n" \
72        "From: 1:%s;epid={%s}\r\n" \
73        "\r\n" \
74        "Reliability: 1.0\r\n" \
75        "\r\n"
76
77#define MSN_MESSAGE_HEADERS MSN_BASE_HEADERS \
78        "Messaging: 2.0\r\n" \
79        "Message-Type: Text\r\n" \
80        "Content-Length: %zd\r\n" \
81        "Content-Type: text/plain; charset=UTF-8\r\n" \
82        "X-MMS-IM-Format: FN=Segoe%%20UI; EF=; CO=0; CS=0; PF=0\r\n" \
83        "\r\n" \
84        "%s"
85
86#define MSN_PUT_HEADERS MSN_BASE_HEADERS \
87        "Publication: 1.0\r\n" \
88        "Uri: %s\r\n" \
89        "Content-Type: %s\r\n" \
90        "Content-Length: %zd\r\n" \
91        "\r\n" \
92        "%s"
93
94#define MSN_PUT_USER_BODY \
95        "<user>" \
96        "<s n=\"PE\"><UserTileLocation></UserTileLocation><FriendlyName>%s</FriendlyName><PSM>%s</PSM><DDP></DDP>" \
97        "<Scene></Scene><ASN></ASN><ColorScheme>-3</ColorScheme><BDG></BDG><RUM>%s</RUM><RUL></RUL><RLT>0</RLT>" \
98        "<RID></RID><SUL></SUL><MachineGuid>%s</MachineGuid></s>" \
99        "<s n=\"IM\"><Status>%s</Status><CurrentMedia></CurrentMedia></s>" \
100        "<sep n=\"PD\"><ClientType>1</ClientType><EpName>%s</EpName><Idle>%s</Idle><State>%s</State></sep>" \
101        "<sep n=\"PE\"><VER>BitlBee:" BITLBEE_VERSION "</VER><TYP>1</TYP><Capabilities>%d:%d</Capabilities></sep>" \
102        "<sep n=\"IM\"><Capabilities>%d:%d</Capabilities></sep>" \
103        "</user>"
104
105#define MSN_TYPING_HEADERS "MIME-Version: 1.0\r\n" \
106        "Content-Type: text/x-msmsgscontrol\r\n" \
107        "TypingUser: %s\r\n" \
108        "\r\n\r\n"
109
110#define MSN_NUDGE_HEADERS "MIME-Version: 1.0\r\n" \
111        "Content-Type: text/x-msnmsgr-datacast\r\n" \
112        "\r\n" \
113        "ID: 1\r\n" \
114        "\r\n"
115
116#define PROFILE_URL "http://members.msn.com/"
117
118typedef enum {
119        MSN_GOT_PROFILE = 1,
120        MSN_GOT_PROFILE_DN = 2,
121        MSN_DONE_ADL = 4,
122        MSN_REAUTHING = 8,
123        MSN_EMAIL_UNVERIFIED = 16,
124} msn_flags_t;
125
126struct msn_data {
127        int fd, inpa;
128        int rxlen;
129        char *rxq;
130
131        int msglen;
132        char *cmd_text;
133
134        struct im_connection *ic;
135
136        msn_flags_t flags;
137
138        int trId;
139        char *tokens[4];
140        char *lock_key, *pp_policy;
141        char *uuid;
142
143        GSList *msgq, *grpq, *soapq;
144
145        const struct msn_away_state *away_state;
146        GSList *groups;
147        char *profile_rid;
148
149        /* Mostly used for sending the ADL command; since MSNP13 the client
150           is responsible for downloading the contact list and then sending
151           it to the MSNP server. */
152        GTree *domaintree;
153        int adl_todo;
154};
155
156struct msn_away_state {
157        char code[4];
158        char name[16];
159};
160
161struct msn_status_code {
162        int number;
163        char *text;
164        int flags;
165};
166
167struct msn_message {
168        char *who;
169        char *text;
170};
171
172struct msn_groupadd {
173        char *who;
174        char *group;
175};
176
177typedef enum {
178        MSN_BUDDY_FL = 1,   /* Warning: FL,AL,BL *must* be 1,2,4. */
179        MSN_BUDDY_AL = 2,
180        MSN_BUDDY_BL = 4,
181        MSN_BUDDY_RL = 8,
182        MSN_BUDDY_PL = 16,
183        MSN_BUDDY_ADL_SYNCED = 256,
184        MSN_BUDDY_FED = 512,
185} msn_buddy_flags_t;
186
187struct msn_buddy_data {
188        char *cid;
189        msn_buddy_flags_t flags;
190};
191
192struct msn_group {
193        char *name;
194        char *id;
195};
196
197/* Bitfield values for msn_status_code.flags */
198#define STATUS_FATAL            1
199#define STATUS_SB_FATAL         2
200
201extern int msn_chat_id;
202extern const struct msn_away_state msn_away_state_list[];
203extern const struct msn_status_code msn_status_code_list[];
204
205/* Keep a list of all the active connections. We need these lists because
206   "connected" callbacks might be called when the connection they belong too
207   is down already (for example, when an impatient user disabled the
208   connection), the callback should check whether it's still listed here
209   before doing *anything* else. */
210extern GSList *msn_connections;
211
212/* ns.c */
213int msn_ns_write(struct im_connection *ic, int fd, const char *fmt, ...) G_GNUC_PRINTF(3, 4);
214gboolean msn_ns_connect(struct im_connection *ic, const char *host, int port);
215void msn_ns_close(struct msn_data *handler);
216void msn_auth_got_passport_token(struct im_connection *ic, const char *token, const char *error);
217void msn_auth_got_contact_list(struct im_connection *ic);
218int msn_ns_finish_login(struct im_connection *ic);
219int msn_ns_sendmessage(struct im_connection *ic, struct bee_user *bu, const char *text);
220int msn_ns_command(struct msn_data *md, char **cmd, int num_parts);
221int msn_ns_message(struct msn_data *md, char *msg, int msglen, char **cmd, int num_parts);
222
223/* msn_util.c */
224int msn_buddy_list_add(struct im_connection *ic, msn_buddy_flags_t list, const char *who, const char *realname_,
225                       const char *group);
226int msn_buddy_list_remove(struct im_connection *ic, msn_buddy_flags_t list, const char *who, const char *group);
227void msn_buddy_ask(bee_user_t *bu);
228char **msn_linesplit(char *line);
229int msn_handler(struct msn_data *h);
230char *msn_p11_challenge(char *challenge);
231gint msn_domaintree_cmp(gconstpointer a_, gconstpointer b_);
232struct msn_group *msn_group_by_name(struct im_connection *ic, const char *name);
233struct msn_group *msn_group_by_id(struct im_connection *ic, const char *id);
234int msn_ns_set_display_name(struct im_connection *ic, const char *value);
235const char *msn_normalize_handle(const char *handle);
236
237/* tables.c */
238const struct msn_away_state *msn_away_state_by_number(int number);
239const struct msn_away_state *msn_away_state_by_code(char *code);
240const struct msn_away_state *msn_away_state_by_name(char *name);
241const struct msn_status_code *msn_status_by_number(int number);
242
243#endif //_MSN_H
Note: See TracBrowser for help on using the repository browser.