1 /*
2  * Virt Viewer: A virtual machine console viewer
3  *
4  * Copyright (C) 2007-2012 Red Hat, Inc.
5  * Copyright (C) 2009-2012 Daniel P. Berrange
6  * Copyright (C) 2010 Marc-André Lureau
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  *
22  * Author: Daniel P. Berrange <berrange@redhat.com>
23  */
24 
25 #pragma once
26 
27 #include <gtk/gtk.h>
28 
29 #include "virt-viewer-app.h"
30 #include "virt-viewer-file.h"
31 #include "virt-viewer-display.h"
32 
33 #define VIRT_VIEWER_TYPE_SESSION virt_viewer_session_get_type()
34 G_DECLARE_DERIVABLE_TYPE(VirtViewerSession,
35                          virt_viewer_session,
36                          VIRT_VIEWER,
37                          SESSION,
38                          GObject);
39 
40 typedef struct _VirtViewerSessionChannel VirtViewerSessionChannel;
41 
42 enum {
43     VIRT_VIEWER_SESSION_VM_ACTION_QUIT,
44     VIRT_VIEWER_SESSION_VM_ACTION_RESET,
45     VIRT_VIEWER_SESSION_VM_ACTION_POWER_DOWN,
46     VIRT_VIEWER_SESSION_VM_ACTION_PAUSE,
47     VIRT_VIEWER_SESSION_VM_ACTION_CONTINUE,
48 };
49 
50 
51 struct _VirtViewerSessionClass {
52     GObjectClass parent_class;
53 
54     /* virtual methods */
55     void (* close) (VirtViewerSession* session);
56     gboolean (* open_fd) (VirtViewerSession* session, int fd);
57     gboolean (* open_host) (VirtViewerSession* session, const gchar *host, const gchar *port, const gchar *tlsport);
58     gboolean (* open_uri) (VirtViewerSession* session, const gchar *uri, GError **error);
59     gboolean (* channel_open_fd) (VirtViewerSession* session, VirtViewerSessionChannel *channel, int fd);
60     void (* usb_device_selection) (VirtViewerSession* session, GtkWindow *parent);
61     void (* usb_device_reset) (VirtViewerSession* session);
62     void (* smartcard_insert) (VirtViewerSession* session);
63     void (* smartcard_remove) (VirtViewerSession* session);
64     const gchar* (* mime_type) (VirtViewerSession* session);
65 
66     /* monitors = GHashTable<int, GdkRectangle*> */
67     void (*apply_monitor_geometry)(VirtViewerSession *session, GHashTable* monitors);
68     gboolean (*can_share_folder)(VirtViewerSession *session);
69     gboolean (*can_retry_auth)(VirtViewerSession *session);
70     void (*vm_action)(VirtViewerSession *session, gint action);
71     gboolean (*has_vm_action)(VirtViewerSession *session, gint action);
72 };
73 
74 GType virt_viewer_session_get_type(void);
75 
76 const gchar* virt_viewer_session_mime_type(VirtViewerSession *session);
77 
78 void virt_viewer_session_add_display(VirtViewerSession *session,
79                                      VirtViewerDisplay *display);
80 void virt_viewer_session_remove_display(VirtViewerSession *session,
81                                         VirtViewerDisplay *display);
82 void virt_viewer_session_clear_displays(VirtViewerSession *session);
83 void virt_viewer_session_update_displays_geometry(VirtViewerSession *session);
84 
85 void virt_viewer_session_close(VirtViewerSession* session);
86 gboolean virt_viewer_session_open_fd(VirtViewerSession* session, int fd);
87 gboolean virt_viewer_session_open_host(VirtViewerSession* session, const gchar *host, const gchar *port, const gchar *tlsport);
88 GObject* virt_viewer_session_get(VirtViewerSession* session);
89 gboolean virt_viewer_session_channel_open_fd(VirtViewerSession* session,
90                                              VirtViewerSessionChannel* channel, int fd);
91 gboolean virt_viewer_session_open_uri(VirtViewerSession *session, const gchar *uri, GError **error);
92 
93 void virt_viewer_session_set_auto_usbredir(VirtViewerSession* session, gboolean auto_usbredir);
94 gboolean virt_viewer_session_get_auto_usbredir(VirtViewerSession* session);
95 
96 void virt_viewer_session_set_has_usbredir(VirtViewerSession* session, gboolean has_usbredir);
97 gboolean virt_viewer_session_get_has_usbredir(VirtViewerSession *self);
98 
99 void virt_viewer_session_usb_device_selection(VirtViewerSession *self, GtkWindow *parent);
100 void virt_viewer_session_usb_device_reset(VirtViewerSession *self);
101 void virt_viewer_session_smartcard_insert(VirtViewerSession *self);
102 void virt_viewer_session_smartcard_remove(VirtViewerSession *self);
103 VirtViewerApp* virt_viewer_session_get_app(VirtViewerSession *self);
104 gchar* virt_viewer_session_get_uri(VirtViewerSession *self);
105 void virt_viewer_session_set_file(VirtViewerSession *self, VirtViewerFile *file);
106 VirtViewerFile* virt_viewer_session_get_file(VirtViewerSession *self);
107 gboolean virt_viewer_session_can_share_folder(VirtViewerSession *self);
108 gboolean virt_viewer_session_can_retry_auth(VirtViewerSession *self);
109 
110 void virt_viewer_session_vm_action(VirtViewerSession *self, gint action);
111 gboolean virt_viewer_session_has_vm_action(VirtViewerSession *self, gint action);
112