bitmap->Decompress = guac_rdp_bitmap_decompress;
bitmap->SetSurface = guac_rdp_bitmap_setsurface;
graphics_register_bitmap(context->graphics, bitmap);
+ xfree(bitmap);
/* Set up glyph handling */
glyph = xnew(rdpGlyph);
glyph->BeginDraw = guac_rdp_glyph_begindraw;
glyph->EndDraw = guac_rdp_glyph_enddraw;
graphics_register_glyph(context->graphics, glyph);
+ xfree(glyph);
/* Set up pointer handling */
pointer = xnew(rdpPointer);
pointer->Free = guac_rdp_pointer_free;
pointer->Set = guac_rdp_pointer_set;
graphics_register_pointer(context->graphics, pointer);
+ xfree(pointer);
/* Set up GDI */
instance->update->Palette = guac_rdp_gdi_palette_update;
#include <freerdp/freerdp.h>
#include <freerdp/channels/channels.h>
#include <freerdp/input.h>
+#include <freerdp/codec/color.h>
+#include <freerdp/cache/cache.h>
#include <guacamole/socket.h>
#include <guacamole/protocol.h>
int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed);
void __guac_rdp_send_altcode(guac_client* client, int altcode);
+
int rdp_guac_client_free_handler(guac_client* client) {
- /* STUB */
+ rdp_guac_client_data* guac_client_data =
+ (rdp_guac_client_data*) client->data;
+
+ freerdp* rdp_inst = guac_client_data->rdp_inst;
+ rdpChannels* channels = rdp_inst->context->channels;
+
+ /* Clean up RDP client */
+ freerdp_channels_close(channels, rdp_inst);
+ freerdp_channels_free(channels);
+ freerdp_disconnect(rdp_inst);
+ freerdp_clrconv_free(((rdp_freerdp_context*) rdp_inst->context)->clrconv);
+ cache_free(rdp_inst->context->cache);
+ freerdp_free(rdp_inst);
- /* FIXME: Clean up RDP client + disconnect */
+ /* Free client data */
+ free(guac_client_data);
return 0;