view libpurple/protocols/msn/notification.h @ 32797:aacfb71133cc

Fix a possible MSN remote crash Incoming messages with certain characters or character encodings can cause clients to crash. The fix is for the contents of all incoming plaintext messages are converted to UTF-8 and validated before used. This was reported to us by Fabian Yamaguchi and this patch was written by Elliott Sales de Andrade (maybe with small, insignificant changes by me)
author Mark Doliner <mark@kingant.net>
date Mon, 07 May 2012 03:18:08 +0000
parents e091c8ea292e
children
line wrap: on
line source

/**
 * @file notification.h Notification server functions
 *
 * purple
 *
 * Purple is the legal property of its developers, whose names are too numerous
 * to list here.  Please refer to the COPYRIGHT file distributed with this
 * source distribution.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
 */
#ifndef MSN_NOTIFICATION_H
#define MSN_NOTIFICATION_H

typedef struct _MsnNotification MsnNotification;

/* MSN protocol challenge info */

/* MSNP18 challenge: WLM Version 2009 (Build 14.0.8089.726) */
#define MSNP18_WLM_PRODUCT_KEY "C1BX{V4W}Q3*10SM"
#define MSNP18_WLM_PRODUCT_ID "PROD0120PW!CCV9@"

/* MSNP15 challenge: WLM 8.5.1288.816 */
#define MSNP15_WLM_PRODUCT_KEY "ILTXC!4IXB5FB*PX"
#define MSNP15_WLM_PRODUCT_ID "PROD0119GSJUC$18"

/* MSNP13 challenge */
#define MSNP13_WLM_PRODUCT_KEY	"O4BG@C7BWLYQX?5G"
#define MSNP13_WLM_PRODUCT_ID	"PROD01065C%ZFN6F"

#define MSNP10_PRODUCT_KEY		"VT6PX?UQTM4WM%YR"
#define MSNP10_PRODUCT_ID		"PROD0038W!61ZTF9"

#include "cmdproc.h"
#include "msg.h"
#include "session.h"
#include "servconn.h"
#include "state.h"
#include "user.h"
#include "userlist.h"

struct _MsnNotification
{
	MsnSession *session;

	/**
	 * This is a convenience pointer that always points to
	 * servconn->cmdproc
	 */
	MsnCmdProc *cmdproc;
	MsnServConn *servconn;

	gboolean in_use;
};

typedef void (*MsnFqyCb)(MsnSession *session, const char *passport, MsnNetwork network, gpointer data);

/* Type used for msn_notification_send_uun */
typedef enum {
	MSN_UNIFIED_NOTIFICATION_SHARED_FOLDERS = 1,
	MSN_UNIFIED_NOTIFICATION_UNKNOWN1 = 2,
	MSN_UNIFIED_NOTIFICATION_P2P = 3,
	MSN_UNIFIED_NOTIFICATION_MPOP = 4

} MsnUnifiedNotificationType;

void msn_notification_end(void);
void msn_notification_init(void);

void msn_notification_add_buddy_to_list(MsnNotification *notification,
					MsnListId list_id, MsnUser *user);
void msn_notification_rem_buddy_from_list(MsnNotification *notification,
					  MsnListId list_id, MsnUser *user);

void msn_notification_send_fqy(MsnSession *session,
                               const char *payload, int payload_len,
                               MsnFqyCb cb, gpointer cb_data);

MsnNotification *msn_notification_new(MsnSession *session);
void msn_notification_destroy(MsnNotification *notification);
gboolean msn_notification_connect(MsnNotification *notification,
				  const char *host, int port);
void msn_notification_disconnect(MsnNotification *notification);
void msn_notification_dump_contact(MsnSession *session);

void msn_notification_send_uum(MsnSession *session, MsnMessage *msg);

void msn_notification_send_uux(MsnSession *session, const char *payload);

void msn_notification_send_uux_endpointdata(MsnSession *session);

void msn_notification_send_uux_private_endpointdata(MsnSession *session);

void msn_notification_send_uun(MsnSession *session,
                               const char *user,
                               MsnUnifiedNotificationType type,
                               const char *payload);

void msn_notification_send_circle_auth(MsnSession *session, const char *ticket);

/**
 * Closes a notification.
 *
 * It's first closed, and then disconnected.
 *
 * @param notification The notification object to close.
 */
void msn_notification_close(MsnNotification *notification);

void msn_got_login_params(MsnSession *session, const char *ticket, const char *response);

#endif /* MSN_NOTIFICATION_H */