diff options
author | Alexander Larsson <alexl@redhat.com> | 2010-05-25 16:01:18 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2010-06-18 16:32:11 +0200 |
commit | 4154d7028943ca4bf0f1ff2e0480d688fc081fcc (patch) | |
tree | fe166cb9d21905653aed68592166b58f14927ff5 /client/tunnel_channel.cpp | |
parent | 17bbef4df334bd8d98d3960143f229d753b4b0a3 (diff) | |
download | spice-4154d7028943ca4bf0f1ff2e0480d688fc081fcc.tar.gz spice-4154d7028943ca4bf0f1ff2e0480d688fc081fcc.tar.xz spice-4154d7028943ca4bf0f1ff2e0480d688fc081fcc.zip |
Client: Use the autogenerated demarshallers
When a message has been read from the network we now pass it into
the generated demarshaller for the channel. The demarshaller converts
the network data to in-memory structures that is passed on to the
spice internals.
Additionally it also:
* Converts endianness
* Validates sizes of message and any pointers in it
* Localizes offsets (converts them to pointers)
* Checks for zero offsets in messages where they are not supported
Some of this was previously done using custom code in the client, this
is now removed.
Diffstat (limited to 'client/tunnel_channel.cpp')
-rw-r--r-- | client/tunnel_channel.cpp | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/client/tunnel_channel.cpp b/client/tunnel_channel.cpp index 1b7d7cb4..cecd9bab 100644 --- a/client/tunnel_channel.cpp +++ b/client/tunnel_channel.cpp @@ -219,10 +219,10 @@ TunnelChannel::TunnelSocket::TunnelSocket(uint16_t id, TunnelService& dst_servic { } -class TunnelHandler: public MessageHandlerImp<TunnelChannel, SPICE_MSG_END_TUNNEL> { +class TunnelHandler: public MessageHandlerImp<TunnelChannel, SPICE_CHANNEL_TUNNEL> { public: TunnelHandler(TunnelChannel& channel) - : MessageHandlerImp<TunnelChannel, SPICE_MSG_END_TUNNEL>(channel) {} + : MessageHandlerImp<TunnelChannel, SPICE_CHANNEL_TUNNEL>(channel) {} }; TunnelChannel::TunnelChannel(RedClient& client, uint32_t id) @@ -236,29 +236,27 @@ TunnelChannel::TunnelChannel(RedClient& client, uint32_t id) { TunnelHandler* handler = static_cast<TunnelHandler*>(get_message_handler()); - handler->set_handler(SPICE_MSG_MIGRATE, &TunnelChannel::handle_migrate, 0); - handler->set_handler(SPICE_MSG_SET_ACK, &TunnelChannel::handle_set_ack, sizeof(SpiceMsgSetAck)); - handler->set_handler(SPICE_MSG_PING, &TunnelChannel::handle_ping, sizeof(SpiceMsgPing)); - handler->set_handler(SPICE_MSG_WAIT_FOR_CHANNELS, &TunnelChannel::handle_wait_for_channels, - sizeof(SpiceMsgWaitForChannels)); + handler->set_handler(SPICE_MSG_MIGRATE, &TunnelChannel::handle_migrate); + handler->set_handler(SPICE_MSG_SET_ACK, &TunnelChannel::handle_set_ack); + handler->set_handler(SPICE_MSG_PING, &TunnelChannel::handle_ping); + handler->set_handler(SPICE_MSG_WAIT_FOR_CHANNELS, &TunnelChannel::handle_wait_for_channels); handler->set_handler(SPICE_MSG_TUNNEL_INIT, - &TunnelChannel::handle_init, sizeof(SpiceMsgTunnelInit)); + &TunnelChannel::handle_init); handler->set_handler(SPICE_MSG_TUNNEL_SERVICE_IP_MAP, - &TunnelChannel::handle_service_ip_map, sizeof(SpiceMsgTunnelServiceIpMap)); + &TunnelChannel::handle_service_ip_map); handler->set_handler(SPICE_MSG_TUNNEL_SOCKET_OPEN, - &TunnelChannel::handle_socket_open, sizeof(SpiceMsgTunnelSocketOpen)); + &TunnelChannel::handle_socket_open); handler->set_handler(SPICE_MSG_TUNNEL_SOCKET_CLOSE, - &TunnelChannel::handle_socket_close, sizeof(SpiceMsgTunnelSocketClose)); + &TunnelChannel::handle_socket_close); handler->set_handler(SPICE_MSG_TUNNEL_SOCKET_FIN, - &TunnelChannel::handle_socket_fin, sizeof(SpiceMsgTunnelSocketFin)); + &TunnelChannel::handle_socket_fin); handler->set_handler(SPICE_MSG_TUNNEL_SOCKET_TOKEN, - &TunnelChannel::handle_socket_token, sizeof(SpiceMsgTunnelSocketTokens)); + &TunnelChannel::handle_socket_token); handler->set_handler(SPICE_MSG_TUNNEL_SOCKET_CLOSED_ACK, - &TunnelChannel::handle_socket_closed_ack, - sizeof(SpiceMsgTunnelSocketClosedAck)); + &TunnelChannel::handle_socket_closed_ack); handler->set_handler(SPICE_MSG_TUNNEL_SOCKET_DATA, - &TunnelChannel::handle_socket_data, sizeof(SpiceMsgTunnelSocketData)); + &TunnelChannel::handle_socket_data); } TunnelChannel::~TunnelChannel() |