source: protocols/msn/msn.h @ b46769d

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

Proper responses to CHL challenges. Clean up bee_users before calling
prpl->logout() since the buddy_data functions would like some structs to
still exist.

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