source: protocols/msn/msn.h @ ffa5b70

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

msn: removed switchboards, implemented SDG message

  • Property mode set to 100644
File size: 6.6 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_MESSAGE_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        "Messaging: 2.0\r\n" \
77        "Message-Type: Text\r\n" \
78        "Content-Length: %zd\r\n" \
79        "Content-Type: text/plain; charset=UTF-8\r\n" \
80        "X-MMS-IM-Format: FN=Segoe%%20UI; EF=; CO=0; CS=0; PF=0\r\n" \
81        "\r\n" \
82        "%s"
83
84#define MSN_TYPING_HEADERS "MIME-Version: 1.0\r\n" \
85        "Content-Type: text/x-msmsgscontrol\r\n" \
86        "TypingUser: %s\r\n" \
87        "\r\n\r\n"
88
89#define MSN_NUDGE_HEADERS "MIME-Version: 1.0\r\n" \
90        "Content-Type: text/x-msnmsgr-datacast\r\n" \
91        "\r\n" \
92        "ID: 1\r\n" \
93        "\r\n"
94
95#define PROFILE_URL "http://members.msn.com/"
96
97typedef enum {
98        MSN_GOT_PROFILE = 1,
99        MSN_GOT_PROFILE_DN = 2,
100        MSN_DONE_ADL = 4,
101        MSN_REAUTHING = 8,
102        MSN_EMAIL_UNVERIFIED = 16,
103} msn_flags_t;
104
105struct msn_data {
106        int fd, inpa;
107        int rxlen;
108        char *rxq;
109
110        int msglen;
111        char *cmd_text;
112
113        struct im_connection *ic;
114
115        msn_flags_t flags;
116
117        int trId;
118        char *tokens[4];
119        char *lock_key, *pp_policy;
120        char *uuid;
121
122        GSList *msgq, *grpq, *soapq;
123
124        const struct msn_away_state *away_state;
125        GSList *groups;
126        char *profile_rid;
127
128        /* Mostly used for sending the ADL command; since MSNP13 the client
129           is responsible for downloading the contact list and then sending
130           it to the MSNP server. */
131        GTree *domaintree;
132        int adl_todo;
133};
134
135struct msn_away_state {
136        char code[4];
137        char name[16];
138};
139
140struct msn_status_code {
141        int number;
142        char *text;
143        int flags;
144};
145
146struct msn_message {
147        char *who;
148        char *text;
149};
150
151struct msn_groupadd {
152        char *who;
153        char *group;
154};
155
156typedef enum {
157        MSN_BUDDY_FL = 1,   /* Warning: FL,AL,BL *must* be 1,2,4. */
158        MSN_BUDDY_AL = 2,
159        MSN_BUDDY_BL = 4,
160        MSN_BUDDY_RL = 8,
161        MSN_BUDDY_PL = 16,
162        MSN_BUDDY_ADL_SYNCED = 256,
163        MSN_BUDDY_FED = 512,
164} msn_buddy_flags_t;
165
166struct msn_buddy_data {
167        char *cid;
168        msn_buddy_flags_t flags;
169};
170
171struct msn_group {
172        char *name;
173        char *id;
174};
175
176/* Bitfield values for msn_status_code.flags */
177#define STATUS_FATAL            1
178#define STATUS_SB_FATAL         2
179
180extern int msn_chat_id;
181extern const struct msn_away_state msn_away_state_list[];
182extern const struct msn_status_code msn_status_code_list[];
183
184/* Keep a list of all the active connections. We need these lists because
185   "connected" callbacks might be called when the connection they belong too
186   is down already (for example, when an impatient user disabled the
187   connection), the callback should check whether it's still listed here
188   before doing *anything* else. */
189extern GSList *msn_connections;
190
191/* ns.c */
192int msn_ns_write(struct im_connection *ic, int fd, const char *fmt, ...) G_GNUC_PRINTF(3, 4);
193gboolean msn_ns_connect(struct im_connection *ic, const char *host, int port);
194void msn_ns_close(struct msn_data *handler);
195void msn_auth_got_passport_token(struct im_connection *ic, const char *token, const char *error);
196void msn_auth_got_contact_list(struct im_connection *ic);
197int msn_ns_finish_login(struct im_connection *ic);
198int msn_ns_sendmessage(struct im_connection *ic, struct bee_user *bu, const char *text);
199void msn_ns_oim_send_queue(struct im_connection *ic, GSList **msgq);
200int msn_ns_command(struct msn_data *md, char **cmd, int num_parts);
201int msn_ns_message(struct msn_data *md, char *msg, int msglen, char **cmd, int num_parts);
202
203/* msn_util.c */
204int msn_buddy_list_add(struct im_connection *ic, msn_buddy_flags_t list, const char *who, const char *realname_,
205                       const char *group);
206int msn_buddy_list_remove(struct im_connection *ic, msn_buddy_flags_t list, const char *who, const char *group);
207void msn_buddy_ask(bee_user_t *bu);
208char **msn_linesplit(char *line);
209int msn_handler(struct msn_data *h);
210void msn_msgq_purge(struct im_connection *ic, GSList **list);
211char *msn_p11_challenge(char *challenge);
212gint msn_domaintree_cmp(gconstpointer a_, gconstpointer b_);
213struct msn_group *msn_group_by_name(struct im_connection *ic, const char *name);
214struct msn_group *msn_group_by_id(struct im_connection *ic, const char *id);
215int msn_ns_set_display_name(struct im_connection *ic, const char *value);
216const char *msn_normalize_handle(const char *handle);
217
218/* tables.c */
219const struct msn_away_state *msn_away_state_by_number(int number);
220const struct msn_away_state *msn_away_state_by_code(char *code);
221const struct msn_away_state *msn_away_state_by_name(char *name);
222const struct msn_status_code *msn_status_by_number(int number);
223
224#endif //_MSN_H
Note: See TracBrowser for help on using the repository browser.