source: protocols/msn/msn.h @ 8358691

Last change on this file since 8358691 was 8b01217, checked in by Wilmer van der Gaast <wilmer@…>, at 2010-07-24T23:26:33Z

MSN supports having people in multiple groups and BitlBee does not. When
moving people between groups, make sure they *are* removed from their old
group.

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