source: protocols/msn/msn.h @ 33b306e

Last change on this file since 33b306e was e3413cc, checked in by Wilmer van der Gaast <wilmer@…>, at 2010-03-30T01:30:19Z

Added local_display_name setting for MSN accounts and some hopefully clever
enough handling for it. Should solve problems with MSN servers forgetting/
overriding display names set by the user.

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