source: protocols/msn/msn.h @ 5a7af1b

Last change on this file since 5a7af1b was 5a7af1b, checked in by Wilmer van der Gaast <wilmer@…>, at 2010-08-15T13:02:52Z

The ADL command doesn't support >150 contacts. Split it up.

  • Property mode set to 100644
File size: 7.5 KB
Line 
1  /********************************************************************\
2  * BitlBee -- An IRC to other IM-networks gateway                     *
3  *                                                                    *
4  * Copyright 2002-2010 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., 59 Temple Place,
23  Suite 330, Boston, MA  02111-1307  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#define SB_KEEPALIVE_MESSAGE "\r\r\rDONT HANG UP ON ME!\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/* Some other version.
47#define MSNP11_PROD_KEY "O4BG@C7BWLYQX?5G"
48#define MSNP11_PROD_ID  "PROD01065C%ZFN6F"
49*/
50
51#define MSNP11_PROD_KEY "ILTXC!4IXB5FB*PX"
52//PK}_A_0N_K%O?A9S"
53#define MSNP11_PROD_ID  "PROD0119GSJUC$18"
54//PROD0114ES4Z%Q5W"
55#define MSNP_VER        "MSNP15"
56#define MSNP_BUILD      "8.5.1288"
57//"8.1.0178"
58
59#define MSN_SB_NEW         -24062002
60
61#define MSN_MESSAGE_HEADERS "MIME-Version: 1.0\r\n" \
62                            "Content-Type: text/plain; charset=UTF-8\r\n" \
63                            "User-Agent: BitlBee " BITLBEE_VERSION "\r\n" \
64                            "X-MMS-IM-Format: FN=MS%20Shell%20Dlg; EF=; CO=0; CS=0; PF=0\r\n" \
65                            "\r\n"
66
67#define MSN_TYPING_HEADERS "MIME-Version: 1.0\r\n" \
68                           "Content-Type: text/x-msmsgscontrol\r\n" \
69                           "TypingUser: %s\r\n" \
70                           "\r\n\r\n"
71
72#define SB_KEEPALIVE_HEADERS "MIME-Version: 1.0\r\n" \
73                             "Content-Type: text/x-ping\r\n" \
74                             "\r\n\r\n"
75
76#define PROFILE_URL "http://members.msn.com/"
77
78struct msn_data
79{
80        struct im_connection *ic;
81       
82        int fd;
83        struct msn_handler_data *handler;
84       
85        int trId;
86        char *tokens[3];
87        char *lock_key;
88       
89        GSList *msgq, *grpq;
90        GSList *switchboards;
91        int sb_failures;
92        time_t first_sb_failure;
93       
94        const struct msn_away_state *away_state;
95        GSList *groups;
96       
97        /* Mostly used for sending the ADL command; since MSNP13 the client
98           is responsible for downloading the contact list and then sending
99           it to the MSNP server. */
100        GTree *domaintree;
101        int adl_todo;
102};
103
104struct msn_switchboard
105{
106        struct im_connection *ic;
107       
108        int fd;
109        gint inp;
110        struct msn_handler_data *handler;
111        gint keepalive;
112       
113        int trId;
114        int ready;
115       
116        int session;
117        char *key;
118       
119        GSList *msgq;
120        char *who;
121        struct groupchat *chat;
122};
123
124struct msn_away_state
125{
126        char code[4];
127        char name[16];
128};
129
130struct msn_status_code
131{
132        int number;
133        char *text;
134        int flags;
135};
136
137struct msn_message
138{
139        char *who;
140        char *text;
141};
142
143struct msn_groupadd
144{
145        char *who;
146        char *group;
147};
148
149struct msn_handler_data
150{
151        int fd;
152        int rxlen;
153        char *rxq;
154       
155        int msglen;
156        char *cmd_text;
157       
158        gpointer data;
159       
160        int (*exec_command) ( gpointer data, char **cmd, int count );
161        int (*exec_message) ( gpointer data, char *msg, int msglen, char **cmd, int count );
162};
163
164typedef enum
165{
166        MSN_BUDDY_FL = 1,   /* Warning: FL,AL,BL *must* be 1,2,4. */
167        MSN_BUDDY_AL = 2,
168        MSN_BUDDY_BL = 4,
169        MSN_BUDDY_RL = 8,
170        MSN_BUDDY_PL = 16,
171        MSN_BUDDY_ADL_SYNCED = 256,
172} msn_buddy_flags_t;
173
174struct msn_buddy_data
175{
176        char *cid;
177        msn_buddy_flags_t flags;
178};
179
180struct msn_group
181{
182        char *name;
183        char *id;
184};
185
186/* Bitfield values for msn_status_code.flags */
187#define STATUS_FATAL            1
188#define STATUS_SB_FATAL         2
189#define STATUS_SB_IM_SPARE      4       /* Make one-to-one conversation switchboard available again, invite failed. */
190#define STATUS_SB_CHAT_SPARE    8       /* Same, but also for groupchats (not used yet). */
191
192extern int msn_chat_id;
193extern const struct msn_away_state msn_away_state_list[];
194extern const struct msn_status_code msn_status_code_list[];
195
196/* Keep a list of all the active connections. We need these lists because
197   "connected" callbacks might be called when the connection they belong too
198   is down already (for example, when an impatient user disabled the
199   connection), the callback should check whether it's still listed here
200   before doing *anything* else. */
201extern GSList *msn_connections;
202extern GSList *msn_switchboards;
203
204/* ns.c */
205gboolean msn_ns_connected( gpointer data, gint source, b_input_condition cond );
206void msn_auth_got_passport_token( struct im_connection *ic, char *token );
207void msn_auth_got_contact_list( struct im_connection *ic );
208
209/* msn_util.c */
210int msn_write( struct im_connection *ic, char *s, int len );
211int msn_logged_in( struct im_connection *ic );
212int msn_buddy_list_add( struct im_connection *ic, msn_buddy_flags_t list, const char *who, const char *realname_, const char *group );
213int msn_buddy_list_remove( struct im_connection *ic, msn_buddy_flags_t list, const char *who, const char *group );
214void msn_buddy_ask( bee_user_t *bu );
215char *msn_findheader( char *text, char *header, int len );
216char **msn_linesplit( char *line );
217int msn_handler( struct msn_handler_data *h );
218void msn_msgq_purge( struct im_connection *ic, GSList **list );
219gboolean msn_set_display_name( struct im_connection *ic, const char *rawname );
220char *msn_p11_challenge( char *challenge );
221gint msn_domaintree_cmp( gconstpointer a_, gconstpointer b_ );
222struct msn_group *msn_group_by_name( struct im_connection *ic, const char *name );
223struct msn_group *msn_group_by_id( struct im_connection *ic, const char *id );
224
225/* tables.c */
226const struct msn_away_state *msn_away_state_by_number( int number );
227const struct msn_away_state *msn_away_state_by_code( char *code );
228const struct msn_away_state *msn_away_state_by_name( char *name );
229const struct msn_status_code *msn_status_by_number( int number );
230
231/* sb.c */
232int msn_sb_write( struct msn_switchboard *sb, char *s, int len );
233struct msn_switchboard *msn_sb_create( struct im_connection *ic, char *host, int port, char *key, int session );
234struct msn_switchboard *msn_sb_by_handle( struct im_connection *ic, char *handle );
235struct msn_switchboard *msn_sb_by_chat( struct groupchat *c );
236struct msn_switchboard *msn_sb_spare( struct im_connection *ic );
237int msn_sb_sendmessage( struct msn_switchboard *sb, char *text );
238struct groupchat *msn_sb_to_chat( struct msn_switchboard *sb );
239void msn_sb_destroy( struct msn_switchboard *sb );
240gboolean msn_sb_connected( gpointer data, gint source, b_input_condition cond );
241int msn_sb_write_msg( struct im_connection *ic, struct msn_message *m );
242void msn_sb_start_keepalives( struct msn_switchboard *sb, gboolean initial );
243void msn_sb_stop_keepalives( struct msn_switchboard *sb );
244
245#endif //_MSN_H
Note: See TracBrowser for help on using the repository browser.