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

Last change on this file since 5fecede was 2528cda, checked in by Wilmer van der Gaast <wilmer@…>, at 2010-08-08T15:34:49Z

Merging msn-offline branch. A tiny bit of MSNP13, and it works for the first
minute of the session (after that the MSN server finds out the rest of
BitlBee still speaks MSNP8).

  • Property mode set to 100644
File size: 6.7 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 *passport_token;
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};
92
93struct msn_switchboard
94{
95        struct im_connection *ic;
96       
97        int fd;
98        gint inp;
99        struct msn_handler_data *handler;
100        gint keepalive;
101       
102        int trId;
103        int ready;
104       
105        int session;
106        char *key;
107       
108        GSList *msgq;
109        char *who;
110        struct groupchat *chat;
111};
112
113struct msn_away_state
114{
115        char code[4];
116        char name[16];
117};
118
119struct msn_status_code
120{
121        int number;
122        char *text;
123        int flags;
124};
125
126struct msn_message
127{
128        char *who;
129        char *text;
130};
131
132struct msn_groupadd
133{
134        char *who;
135        char *group;
136};
137
138struct msn_handler_data
139{
140        int fd;
141        int rxlen;
142        char *rxq;
143       
144        int msglen;
145        char *cmd_text;
146       
147        gpointer data;
148       
149        int (*exec_command) ( gpointer data, char **cmd, int count );
150        int (*exec_message) ( gpointer data, char *msg, int msglen, char **cmd, int count );
151};
152
153/* Bitfield values for msn_status_code.flags */
154#define STATUS_FATAL            1
155#define STATUS_SB_FATAL         2
156#define STATUS_SB_IM_SPARE      4       /* Make one-to-one conversation switchboard available again, invite failed. */
157#define STATUS_SB_CHAT_SPARE    8       /* Same, but also for groupchats (not used yet). */
158
159extern int msn_chat_id;
160extern const struct msn_away_state msn_away_state_list[];
161extern const struct msn_status_code msn_status_code_list[];
162
163/* Keep a list of all the active connections. We need these lists because
164   "connected" callbacks might be called when the connection they belong too
165   is down already (for example, when an impatient user disabled the
166   connection), the callback should check whether it's still listed here
167   before doing *anything* else. */
168extern GSList *msn_connections;
169extern GSList *msn_switchboards;
170
171/* ns.c */
172gboolean msn_ns_connected( gpointer data, gint source, b_input_condition cond );
173
174/* msn_util.c */
175int msn_write( struct im_connection *ic, char *s, int len );
176int msn_logged_in( struct im_connection *ic );
177int msn_buddy_list_add( struct im_connection *ic, const char *list, const char *who, const char *realname_, const char *group );
178int msn_buddy_list_remove( struct im_connection *ic, char *list, const char *who, const char *group );
179void msn_buddy_ask( struct im_connection *ic, char *handle, char *realname );
180char *msn_findheader( char *text, char *header, int len );
181char **msn_linesplit( char *line );
182int msn_handler( struct msn_handler_data *h );
183char *msn_http_encode( const char *input );
184void msn_msgq_purge( struct im_connection *ic, GSList **list );
185gboolean msn_set_display_name( struct im_connection *ic, const char *rawname );
186char *msn_p11_challenge( char *challenge );
187
188/* tables.c */
189const struct msn_away_state *msn_away_state_by_number( int number );
190const struct msn_away_state *msn_away_state_by_code( char *code );
191const struct msn_away_state *msn_away_state_by_name( char *name );
192const struct msn_status_code *msn_status_by_number( int number );
193
194/* sb.c */
195int msn_sb_write( struct msn_switchboard *sb, char *s, int len );
196struct msn_switchboard *msn_sb_create( struct im_connection *ic, char *host, int port, char *key, int session );
197struct msn_switchboard *msn_sb_by_handle( struct im_connection *ic, char *handle );
198struct msn_switchboard *msn_sb_by_chat( struct groupchat *c );
199struct msn_switchboard *msn_sb_spare( struct im_connection *ic );
200int msn_sb_sendmessage( struct msn_switchboard *sb, char *text );
201struct groupchat *msn_sb_to_chat( struct msn_switchboard *sb );
202void msn_sb_destroy( struct msn_switchboard *sb );
203gboolean msn_sb_connected( gpointer data, gint source, b_input_condition cond );
204int msn_sb_write_msg( struct im_connection *ic, struct msn_message *m );
205void msn_sb_start_keepalives( struct msn_switchboard *sb, gboolean initial );
206void msn_sb_stop_keepalives( struct msn_switchboard *sb );
207
208/* invitation.c */
209void msn_ftp_transfer_request( struct im_connection *ic, file_transfer_t *ft, char *who );
210
211#endif //_MSN_H
Note: See TracBrowser for help on using the repository browser.