source: protocols/msn/msn.h @ ff27648

Last change on this file since ff27648 was ff27648, checked in by Wilmer van der Gaast <wilmer@…>, at 2010-08-15T00:05:49Z

Read group info.

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