a180a41bba1d50822df23fff0099e90b86638b89vboxsync/* -*- c-basic-offset: 8 -*-
a180a41bba1d50822df23fff0099e90b86638b89vboxsync rdesktop: A Remote Desktop Protocol client.
a180a41bba1d50822df23fff0099e90b86638b89vboxsync Protocol services - Clipboard functions
a180a41bba1d50822df23fff0099e90b86638b89vboxsync Copyright 2003 Erik Forsberg <forsberg@cendio.se> for Cendio AB
a180a41bba1d50822df23fff0099e90b86638b89vboxsync Copyright (C) Matthew Chapman <matthewc.unsw.edu.au> 2003-2008
a180a41bba1d50822df23fff0099e90b86638b89vboxsync This program is free software: you can redistribute it and/or modify
a180a41bba1d50822df23fff0099e90b86638b89vboxsync it under the terms of the GNU General Public License as published by
a180a41bba1d50822df23fff0099e90b86638b89vboxsync the Free Software Foundation, either version 3 of the License, or
a180a41bba1d50822df23fff0099e90b86638b89vboxsync (at your option) any later version.
a180a41bba1d50822df23fff0099e90b86638b89vboxsync This program is distributed in the hope that it will be useful,
a180a41bba1d50822df23fff0099e90b86638b89vboxsync but WITHOUT ANY WARRANTY; without even the implied warranty of
a180a41bba1d50822df23fff0099e90b86638b89vboxsync MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a180a41bba1d50822df23fff0099e90b86638b89vboxsync GNU General Public License for more details.
a180a41bba1d50822df23fff0099e90b86638b89vboxsync You should have received a copy of the GNU General Public License
a180a41bba1d50822df23fff0099e90b86638b89vboxsync along with this program. If not, see <http://www.gnu.org/licenses/>.
6e9aa255e3376b2da5824c09c4c62bc233463bfevboxsync * Oracle GPL Disclaimer: For the avoidance of doubt, except that if any license choice
6e9aa255e3376b2da5824c09c4c62bc233463bfevboxsync * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
6e9aa255e3376b2da5824c09c4c62bc233463bfevboxsync * the General Public License version 2 (GPLv2) at this time for any software where
6e9aa255e3376b2da5824c09c4c62bc233463bfevboxsync * a choice of GPL license versions is made available with the language indicating
6e9aa255e3376b2da5824c09c4c62bc233463bfevboxsync * that GPLv2 or any later version may be used, or where a choice of which version
6e9aa255e3376b2da5824c09c4c62bc233463bfevboxsync * of the GPL is applied is otherwise unspecified.
a180a41bba1d50822df23fff0099e90b86638b89vboxsynccliprdr_send_packet(uint16 type, uint16 status, uint8 * data, uint32 length)
a180a41bba1d50822df23fff0099e90b86638b89vboxsync DEBUG_CLIPBOARD(("CLIPRDR send: type=%d, status=%d, length=%d\n", type, status, length));
a180a41bba1d50822df23fff0099e90b86638b89vboxsync/* Helper which announces our readiness to supply clipboard data
a180a41bba1d50822df23fff0099e90b86638b89vboxsync in a single format (such as CF_TEXT) to the RDP side.
a180a41bba1d50822df23fff0099e90b86638b89vboxsync To announce more than one format at a time, use
a180a41bba1d50822df23fff0099e90b86638b89vboxsync cliprdr_send_native_format_announce.
a180a41bba1d50822df23fff0099e90b86638b89vboxsynccliprdr_send_simple_native_format_announce(uint32 format)
a180a41bba1d50822df23fff0099e90b86638b89vboxsync DEBUG_CLIPBOARD(("cliprdr_send_simple_native_format_announce\n"));
a180a41bba1d50822df23fff0099e90b86638b89vboxsync memset(buffer + 4, 0, sizeof(buffer) - 4); /* description */
a180a41bba1d50822df23fff0099e90b86638b89vboxsync cliprdr_send_native_format_announce(buffer, sizeof(buffer));
a180a41bba1d50822df23fff0099e90b86638b89vboxsync/* Announces our readiness to supply clipboard data in multiple
a180a41bba1d50822df23fff0099e90b86638b89vboxsync formats, each denoted by a 36-byte format descriptor of
a180a41bba1d50822df23fff0099e90b86638b89vboxsync [ uint32 format + 32-byte description ].
a180a41bba1d50822df23fff0099e90b86638b89vboxsynccliprdr_send_native_format_announce(uint8 * formats_data, uint32 formats_data_length)
a180a41bba1d50822df23fff0099e90b86638b89vboxsync DEBUG_CLIPBOARD(("cliprdr_send_native_format_announce\n"));
a180a41bba1d50822df23fff0099e90b86638b89vboxsync cliprdr_send_packet(CLIPRDR_FORMAT_ANNOUNCE, CLIPRDR_REQUEST, formats_data,
a180a41bba1d50822df23fff0099e90b86638b89vboxsync memcpy(last_formats, formats_data, formats_data_length);
a180a41bba1d50822df23fff0099e90b86638b89vboxsync cliprdr_send_packet(CLIPRDR_DATA_REQUEST, CLIPRDR_REQUEST, buffer, sizeof(buffer));
a180a41bba1d50822df23fff0099e90b86638b89vboxsync cliprdr_send_packet(CLIPRDR_DATA_RESPONSE, CLIPRDR_RESPONSE, data, length);
a180a41bba1d50822df23fff0099e90b86638b89vboxsync DEBUG_CLIPBOARD(("CLIPRDR recv: type=%d, status=%d, length=%d\n", type, status, length));
a180a41bba1d50822df23fff0099e90b86638b89vboxsync /* FIXME: We seem to get this when we send an announce while the server is
a180a41bba1d50822df23fff0099e90b86638b89vboxsync still processing a paste. Try sending another announce. */
a180a41bba1d50822df23fff0099e90b86638b89vboxsync DEBUG_CLIPBOARD(("CLIPRDR error (type=%d)\n", type));
a180a41bba1d50822df23fff0099e90b86638b89vboxsync cliprdr_send_packet(CLIPRDR_FORMAT_ACK, CLIPRDR_RESPONSE, NULL, 0);
a180a41bba1d50822df23fff0099e90b86638b89vboxsync case 7: /* TODO: W2K3 SP1 sends this on connect with a value of 1 */
a180a41bba1d50822df23fff0099e90b86638b89vboxsync CHANNEL_OPTION_INITIALIZED | CHANNEL_OPTION_ENCRYPT_RDP |