source: protocols/msn/msn.h @ 578d627

Last change on this file since 578d627 was 3b9390b, checked in by Wilmer van der Gaast <wilmer@…>, at 2005-12-18T10:39:13Z

When trying to talk to MSN people who are offline, the switchboard gets reset to a spare correctly.
This fixes a problem with messages to MSN people not arriving sometimes.

  • Property mode set to 100644
File size: 5.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/* Some hackish magicstrings to make special-purpose messages/switchboards.
27 */
28#define TYPING_NOTIFICATION_MESSAGE "\r\r\rBEWARE, ME R TYPINK MESSAGE!!!!\r\r\r"
29#define GROUPCHAT_SWITCHBOARD_MESSAGE "\r\r\rME WANT TALK TO MANY PEOPLE\r\r\r"
30
31#ifdef _WIN32
32#define debug
33#else
34#define debug( text... ) irc_usermsg( IRC, text );
35#undef debug
36#define debug( text... )
37#endif
38
39#define QRY_NAME "msmsgs@msnmsgr.com"
40#define QRY_CODE "Q1P7W2E4J9R8U3S5"
41
42#define MSN_SB_NEW         -24062002
43
44#define MSN_MESSAGE_HEADERS "MIME-Version: 1.0\r\n" \
45                            "Content-Type: text/plain; charset=UTF-8\r\n" \
46                            "User-Agent: BitlBee " BITLBEE_VERSION "\r\n" \
47                            "X-MMS-IM-Format: FN=MS%20Shell%20Dlg; EF=; CO=0; CS=0; PF=0\r\n" \
48                            "\r\n"
49
50#define MSN_TYPING_HEADERS "MIME-Version: 1.0\r\n" \
51                           "Content-Type: text/x-msmsgscontrol\r\n" \
52                           "TypingUser: %s\r\n" \
53                           "\r\n\r\n"
54
55#define PROFILE_URL "http://members.msn.com/"
56
57struct msn_data
58{
59        struct gaim_connection *gc;
60       
61        int fd;
62        struct msn_handler_data *handler;
63       
64        int trId;
65       
66        GSList *msgq;
67        GSList *switchboards;
68        int buddycount;
69        struct msn_away_state *away_state;
70};
71
72struct msn_switchboard
73{
74        struct gaim_connection *gc;
75       
76        int fd;
77        gint inp;
78        struct msn_handler_data *handler;
79       
80        int trId;
81        int ready;
82       
83        int session;
84        char *key;
85       
86        GSList *msgq;
87        char *who;
88        struct conversation *chat;
89};
90
91struct msn_away_state
92{
93        int number;
94        char code[4];
95        char name[16];
96};
97
98struct msn_status_code
99{
100        int number;
101        char *text;
102        int flags;
103};
104
105struct msn_message
106{
107        char *who;
108        char *text;
109};
110
111struct msn_handler_data
112{
113        int fd;
114        int rxlen;
115        char *rxq;
116       
117        int msglen;
118        char *cmd_text;
119       
120        gpointer data;
121       
122        int (*exec_command) ( gpointer data, char **cmd, int count );
123        int (*exec_message) ( gpointer data, char *msg, int msglen, char **cmd, int count );
124};
125
126/* Bitfield values for msn_status_code.flags */
127#define STATUS_FATAL            1
128#define STATUS_SB_FATAL         2
129#define STATUS_SB_IM_SPARE      4       /* Make one-to-one conversation switchboard available again, invite failed. */
130#define STATUS_SB_CHAT_SPARE    8       /* Same, but also for groupchats (not used yet). */
131
132int msn_chat_id;
133extern struct msn_away_state msn_away_state_list[];
134extern struct msn_status_code msn_status_code_list[];
135
136/* Keep a list of all the active connections. We need these lists because
137   "connected" callbacks might be called when the connection they belong too
138   is down already (for example, when an impatient user disabled the
139   connection), the callback should check whether it's still listed here
140   before doing *anything* else. */
141GSList *msn_connections;
142GSList *msn_switchboards;
143
144/* ns.c */
145void msn_ns_connected( gpointer data, gint source, GaimInputCondition cond );
146
147/* msn_util.c */
148int msn_write( struct gaim_connection *gc, char *s, int len );
149int msn_logged_in( struct gaim_connection *gc );
150int msn_buddy_list_add( struct gaim_connection *gc, char *list, char *who, char *realname );
151int msn_buddy_list_remove( struct gaim_connection *gc, char *list, char *who );
152void msn_buddy_ask( struct gaim_connection *gc, char *handle, char *realname );
153char *msn_findheader( char *text, char *header, int len );
154char **msn_linesplit( char *line );
155int msn_handler( struct msn_handler_data *h );
156
157/* tables.c */
158struct msn_away_state *msn_away_state_by_number( int number );
159struct msn_away_state *msn_away_state_by_code( char *code );
160struct msn_away_state *msn_away_state_by_name( char *name );
161struct msn_status_code *msn_status_by_number( int number );
162
163/* sb.c */
164int msn_sb_write( struct msn_switchboard *sb, char *s, int len );
165struct msn_switchboard *msn_sb_create( struct gaim_connection *gc, char *host, int port, char *key, int session );
166struct msn_switchboard *msn_sb_by_handle( struct gaim_connection *gc, char *handle );
167struct msn_switchboard *msn_sb_by_id( struct gaim_connection *gc, int id );
168struct msn_switchboard *msn_sb_spare( struct gaim_connection *gc );
169int msn_sb_sendmessage( struct msn_switchboard *sb, char *text );
170void msn_sb_to_chat( struct msn_switchboard *sb );
171void msn_sb_destroy( struct msn_switchboard *sb );
172void msn_sb_connected( gpointer data, gint source, GaimInputCondition cond );
Note: See TracBrowser for help on using the repository browser.