source: protocols/msn/msn.h @ e5854a8

Last change on this file since e5854a8 was e5854a8, checked in by Wilmer van der Gaast <wilmer@…>, at 2010-08-14T14:50:10Z

Show incoming auth. requests (although responding to them currently causes
a disconnect).

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