source: protocols/msn/msn.h @ ca7de3a

Last change on this file since ca7de3a was ca7de3a, checked in by Wilmer van der Gaast <wilmer@…>, at 2010-08-12T22:13:26Z

Successful login (including contact list sync). \o/

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