Remmina - The GTK+ Remote Desktop Client  v1.4.33
Remmina is a remote desktop client written in GTK+, aiming to be useful for system administrators and travellers, who need to work with lots of remote computers in front of either large monitors or tiny netbooks. Remmina supports multiple network protocols in an integrated and consistent user interface. Currently RDP, VNC, NX, XDMCP and SSH are supported.
python_wrapper_file.c
Go to the documentation of this file.
1 /*
2  * Remmina - The GTK+ Remote Desktop Client
3  * Copyright (C) 2014-2023 Antenore Gatta, Giovanni Panozzo, Mathias Winterhalter (ToolsDevler)
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  *
20  * In addition, as a special exception, the copyright holders give
21  * permission to link the code of portions of this program with the
22  * OpenSSL library under certain conditions as described in each
23  * individual source file, and distribute linked combinations
24  * including the two.
25  * You must obey the GNU General Public License in all respects
26  * for all of the code used other than OpenSSL. * If you modify
27  * file(s) with this exception, you may extend this exception to your
28  * version of the file(s), but you are not obligated to do so. * If you
29  * do not wish to do so, delete this exception statement from your
30  * version. * If you delete this exception statement from all source
31  * files in the program, then also delete it here.
32  */
33 
35 // I N C L U D E S
37 
38 #include "python_wrapper_common.h"
39 #include "python_wrapper_file.h"
41 
43 // D E C L A R A T I O N S
45 
47 // A P I
49 
51 {
52  TRACE_CALL(__func__);
53 }
54 
55 gboolean python_wrapper_file_import_test_func_wrapper(RemminaFilePlugin* instance, const gchar* from_file)
56 {
57  TRACE_CALL(__func__);
58 
59  PyObject* result = NULL;
60 
61  PyPlugin* plugin = python_wrapper_get_plugin(instance->name);
62 
63  if (plugin)
64  {
65  result = CallPythonMethod(plugin->instance, "import_test_func", "s", from_file);
66  }
67 
68  return result == Py_None || result != Py_False;
69 }
70 
72 {
73  TRACE_CALL(__func__);
74 
75  PyObject* result = NULL;
76 
77  PyPlugin* plugin = python_wrapper_get_plugin(instance->name);
78  if (!plugin)
79  {
80  return NULL;
81  }
82 
83  result = CallPythonMethod(plugin->instance, "import_func", "s", from_file);
84 
85  if (result == Py_None || result == Py_False)
86  {
87  return NULL;
88  }
89 
90  return ((PyRemminaFile*)result)->file;
91 }
92 
94 {
95  TRACE_CALL(__func__);
96 
97  PyObject* result = NULL;
98 
99  PyPlugin* plugin = python_wrapper_get_plugin(instance->name);
100  if (plugin)
101  {
102  result = CallPythonMethod(plugin->instance,
103  "export_test_func",
104  "O",
106  }
107 
108  return result == Py_None || result != Py_False;
109 }
110 
111 gboolean
113 {
114  TRACE_CALL(__func__);
115 
116  PyObject* result = NULL;
117 
118  PyPlugin* plugin = python_wrapper_get_plugin(instance->name);
119  if (plugin)
120  {
121  result = CallPythonMethod(plugin->instance, "export_func", "s", to_file);
122  }
123 
124  return result == Py_None || result != Py_False;
125 }
126 
128 {
129  TRACE_CALL(__func__);
130 
131  PyObject* instance = plugin->instance;
132  Py_IncRef(instance);
133 
135  {
136  g_printerr("Unable to create file plugin. Aborting!\n");
137  return NULL;
138  }
139 
141 
142  remmina_plugin->type = REMMINA_PLUGIN_TYPE_FILE;
143  remmina_plugin->domain = GETTEXT_PACKAGE;
144  remmina_plugin->name = PyUnicode_AsUTF8(PyObject_GetAttrString(instance, ATTR_NAME));
145  remmina_plugin->version = PyUnicode_AsUTF8(PyObject_GetAttrString(instance, ATTR_VERSION));
146  remmina_plugin->description = PyUnicode_AsUTF8(PyObject_GetAttrString(instance, ATTR_DESCRIPTION));
147  remmina_plugin->export_hints = PyUnicode_AsUTF8(PyObject_GetAttrString(instance, ATTR_EXPORT_HINTS));
148 
153 
154  plugin->file_plugin = remmina_plugin;
155  plugin->generic_plugin = (RemminaPlugin*)remmina_plugin;
156 
158 
159  return (RemminaPlugin*)remmina_plugin;
160 }
gboolean python_wrapper_file_export_test_func_wrapper(RemminaFilePlugin *instance, RemminaFile *file)
Maps an instance of a Python plugin to a Remmina one.
typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile
Definition: types.h:44
const gchar * export_hints
Definition: plugin.h:111
gboolean python_wrapper_check_attribute(PyObject *instance, const char *attr_name)
Checks if a given attribute exists.
gboolean python_wrapper_file_import_test_func_wrapper(RemminaFilePlugin *instance, const gchar *from_file)
RemminaFile *(* import_func)(struct _RemminaFilePlugin *instance, const gchar *from_file)
Definition: plugin.h:108
const char * ATTR_VERSION
void * python_wrapper_malloc(int bytes)
Allocates memory and checks for errors before returning.
static RemminaProtocolPlugin remmina_plugin
Definition: exec_plugin.c:304
RemminaFilePlugin * file_plugin
const gchar * domain
Definition: plugin.h:104
void python_wrapper_file_init(void)
Initializes the Python plugin specialisation for file plugins.
RemminaFile * python_wrapper_file_import_func_wrapper(RemminaFilePlugin *instance, const gchar *from_file)
Contains functions and constants that are commonly used throughout the Python plugin implementation...
PyRemminaFile * python_wrapper_remmina_file_to_python(RemminaFile *file)
Converts the instance of RemminaFile to a Python object that can be passed to the Python engine...
PyPlugin * python_wrapper_get_plugin(const gchar *name)
Tries to find the Python plugin matching to the given instance of RemminaPlugin.
void python_wrapper_add_plugin(PyPlugin *plugin)
Registers the given plugin if no other plugin with the same name has been already registered...
RemminaPlugin * python_wrapper_create_file_plugin(PyPlugin *plugin)
Creates a new instance of the RemminaPluginFile, initializes its members and references the wrapper f...
gboolean(* export_test_func)(struct _RemminaFilePlugin *instance, RemminaFile *file)
Definition: plugin.h:109
RemminaPlugin * generic_plugin
const gchar * name
Definition: plugin.h:102
const char * ATTR_NAME
const gchar * version
Definition: plugin.h:105
const char * ATTR_EXPORT_HINTS
const char * ATTR_DESCRIPTION
Wrapper for a Python object that contains a pointer to an instance of RemminaFile.
RemminaPluginType type
Definition: plugin.h:101
gboolean(* import_test_func)(struct _RemminaFilePlugin *instance, const gchar *from_file)
Definition: plugin.h:107
const gchar * description
Definition: plugin.h:103
gboolean python_wrapper_file_export_func_wrapper(RemminaFilePlugin *instance, RemminaFile *file, const gchar *to_file)
gboolean(* export_func)(struct _RemminaFilePlugin *instance, RemminaFile *file, const gchar *to_file)
Definition: plugin.h:110
Contains the specialisation of RemminaPluginFile plugins in Python.
PyObject * instance