source: protocols/msn/msn.h @ ffb6dea

Last change on this file since ffb6dea was e5a8118, checked in by Wilmer van der Gaast <wilmer@…>, at 2010-03-20T17:27:23Z

Added soap.c with a fairly reusable SOAP framework and simple code for
sending offline messages. It works somewhat, just that Pidgin shows the
messages as empty. :-(

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