Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/mumble.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/mumble_legacy_plugin.h')
-rw-r--r--plugins/mumble_legacy_plugin.h196
1 files changed, 196 insertions, 0 deletions
diff --git a/plugins/mumble_legacy_plugin.h b/plugins/mumble_legacy_plugin.h
new file mode 100644
index 000000000..14c35cf40
--- /dev/null
+++ b/plugins/mumble_legacy_plugin.h
@@ -0,0 +1,196 @@
+// Copyright 2021 The Mumble Developers. All rights reserved.
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file at the root of the
+// Mumble source tree or at <https://www.mumble.info/LICENSE>.
+
+// This header describes the deprecated "plugin" API from the times in which "plugins" could only be used
+// alongside the positional audio feature of Mumble.
+// By default translation units including this file will not compile due to a preprocessor error. This is intended
+// behaviour as you shouldn't be using this API any longer. Use the API from MumblePlugin.h instead.
+//
+// If for some reason you absolutely have to include this header file, you have to define the macro MUMBLE_ALLOW_DEPRECATED_LEGACY_PLUGIN_API
+// before including this header.
+#ifndef MUMBLE_LEGACY_PLUGIN_H_
+#define MUMBLE_LEGACY_PLUGIN_H_
+
+#ifndef MUMBLE_ALLOW_DEPRECATED_LEGACY_PLUGIN_API
+ #error "You are trying to use a deprecated plugin API. Use the new API from MumblePlugin.h instead. If you think you really need this deprecated one, see the instructions at the top of this file."
+#else
+ #undef MUMBLE_ALLOW_DEPRECATED_LEGACY_PLUGIN_API
+#endif
+
+#include <stdint.h>
+
+typedef uint32_t procid_t;
+typedef uint64_t procptr_t;
+
+#define LENGTH_OF(array) (sizeof(array) / sizeof((array)[0]))
+
+#include <map>
+#include <string>
+
+#if defined(_MSC_VER)
+# define MUMBLE_PLUGIN_CALLING_CONVENTION __cdecl
+#elif defined(__MINGW32__)
+# define MUMBLE_PLUGIN_CALLING_CONVENTION __attribute__((cdecl))
+#else
+# define MUMBLE_PLUGIN_CALLING_CONVENTION
+#endif
+
+#if defined(__GNUC__) && !defined(__MINGW32__) // GCC on Unix-like systems
+# define MUMBLE_PLUGIN_EXPORT __attribute__((visibility("default")))
+#elif defined(_MSC_VER)
+# define MUMBLE_PLUGIN_EXPORT __declspec(dllexport)
+#elif defined(__MINGW32__)
+# define MUMBLE_PLUGIN_EXPORT __attribute__((dllexport))
+#else
+# error No MUMBLE_PLUGIN_EXPORT definition available
+#endif
+
+// Visual Studio 2008 x86
+#if _MSC_VER == 1500 && defined(_M_IX86)
+# define MUMBLE_PLUGIN_MAGIC 0xd63ab7ef
+# define MUMBLE_PLUGIN_MAGIC_2 0xd63ab7fe
+# define MUMBLE_PLUGIN_MAGIC_QT 0xd63ab7ee
+// Visual Studio 2010 x86
+#elif _MSC_VER == 1600 && defined(_M_IX86)
+# define MUMBLE_PLUGIN_MAGIC 0xd63ab7f0
+# define MUMBLE_PLUGIN_MAGIC_2 0xd63ab7ff
+# define MUMBLE_PLUGIN_MAGIC_QT 0xd63ab70f
+// Visual Studio 2013 x86
+#elif _MSC_VER == 1800 && defined(_M_IX86)
+# define MUMBLE_PLUGIN_MAGIC 0xd63ab7c0
+# define MUMBLE_PLUGIN_MAGIC_2 0xd63ab7cf
+# define MUMBLE_PLUGIN_MAGIC_QT 0xd63ab7ca
+// Visual Studio 2013 x64
+#elif _MSC_VER == 1800 && defined(_M_X64)
+# define MUMBLE_PLUGIN_MAGIC 0x9f3ed4c0
+# define MUMBLE_PLUGIN_MAGIC_2 0x9f3ed4cf
+# define MUMBLE_PLUGIN_MAGIC_QT 0x9f3ed4ca
+// Visual Studio 2015 x86
+#elif _MSC_VER == 1900 && defined(_M_IX86)
+# define MUMBLE_PLUGIN_MAGIC 0xa9b8c7c0
+# define MUMBLE_PLUGIN_MAGIC_2 0xa9b8c7cf
+# define MUMBLE_PLUGIN_MAGIC_QT 0xa9b8c7ca
+// Visual Studio 2015 x64
+#elif _MSC_VER == 1900 && defined(_M_X64)
+# define MUMBLE_PLUGIN_MAGIC 0x1f2e3dc0
+# define MUMBLE_PLUGIN_MAGIC_2 0x1f2e3dcf
+# define MUMBLE_PLUGIN_MAGIC_QT 0x1f2e3dca
+// Generic plugin magic values for platforms
+// where we do not officially plugins other
+// than "link".
+#else
+# define MUMBLE_PLUGIN_MAGIC 0xf4573570
+# define MUMBLE_PLUGIN_MAGIC_2 0xf457357f
+# define MUMBLE_PLUGIN_MAGIC_QT 0xf457357a
+#endif
+
+#define MUMBLE_PLUGIN_VERSION 2
+
+typedef struct _MumblePlugin {
+ unsigned int magic;
+ const std::wstring &description;
+ const std::wstring &shortname;
+ void(MUMBLE_PLUGIN_CALLING_CONVENTION *about)(void *);
+ void(MUMBLE_PLUGIN_CALLING_CONVENTION *config)(void *);
+ int(MUMBLE_PLUGIN_CALLING_CONVENTION *trylock)();
+ void(MUMBLE_PLUGIN_CALLING_CONVENTION *unlock)();
+ const std::wstring(MUMBLE_PLUGIN_CALLING_CONVENTION *longdesc)();
+ int(MUMBLE_PLUGIN_CALLING_CONVENTION *fetch)(float *avatar_pos, float *avatar_front, float *avatar_top,
+ float *camera_pos, float *camera_front, float *camera_top,
+ std::string &context, std::wstring &identity);
+} MumblePlugin;
+
+typedef struct _MumblePlugin2 {
+ unsigned int magic;
+ unsigned int version;
+ int(MUMBLE_PLUGIN_CALLING_CONVENTION *trylock)(const std::multimap< std::wstring, unsigned long long int > &);
+} MumblePlugin2;
+
+/// MumblePluginQt provides an extra set of functions that will
+/// provide a plugin with a pointer to a QWidget that should be
+/// used as the parent for any dialogs Qt widgets shown by the
+/// plugin.
+///
+/// This interface should only be used if a plugin intends to
+/// present Qt-based dialogs to the user.
+///
+/// This interface is most useful for plugins that are internal
+/// to Mumble. This is because plugins can't integrate with Mumble's
+/// QWidgets unless they're built into Mumble itself.
+typedef struct _MumblePluginQt {
+ unsigned int magic;
+
+ /// about is called when Mumble requests the plugin
+ /// to show an about dialog.
+ ///
+ /// The ptr argument is a pointer to a QWidget that
+ /// should be used as the parent for a Qt-based
+ /// about dialog.
+ void(MUMBLE_PLUGIN_CALLING_CONVENTION *about)(void *ptr);
+
+ /// config is called when Mumble requests the plugin
+ /// to show its configuration dialog.
+ ///
+ /// The ptr argument is a pointer to a QWidget that
+ /// should be used as the parent for a Qt-based
+ /// configuration dialog.
+ void(MUMBLE_PLUGIN_CALLING_CONVENTION *config)(void *ptr);
+} MumblePluginQt;
+
+typedef MumblePlugin *(MUMBLE_PLUGIN_CALLING_CONVENTION *mumblePluginFunc)();
+typedef MumblePlugin2 *(MUMBLE_PLUGIN_CALLING_CONVENTION *mumblePlugin2Func)();
+typedef MumblePluginQt *(MUMBLE_PLUGIN_CALLING_CONVENTION *mumblePluginQtFunc)();
+
+/*
+ * All plugins must implement one function called getMumblePlugin(), which
+ * follows the mumblePluginFunc type and returns a MumblePlugin struct.
+ *
+ * magic should be initialized to MUMBLE_PLUGIN_MAGIC. description is the
+ * name of the plugin shown in the GUI, while shortname is used for TTS.
+ *
+ * The individual functions are:
+ * about(void *parent) - Player clicked the about button over plugin
+ * config(void *parent) - Player clicked the config button
+ * trylock() - Search system for likely process and try to lock on.
+ * The parameter is a set of process names and associated PIDs.
+ * Return 1 if succeeded, else 0. Note that once a plugin is locked on,
+ * no other plugins will be queried.
+ * unlock() - Unlock from process. Either from user intervention or
+ * because fetch failed.
+ * fetch(...) - Fetch data from locked process. avatar_pos is position in
+ * world coordinates (1 meter per unit). avatar_front and avatar_top
+ * specify the heading of the player, as in where he is looking.
+ * You need at minimum to figure out pos and front, otherwise
+ * sounds cannot be placed. If you do not fetch top, make it the
+ * same as front but rotated 90 degrees "upwards".
+ *
+ * camera_x is the same, but for the camera. Make this identical to the
+ * avatar position if you don't know (or if it's a 1st person
+ * perspective).
+ *
+ * It is important that you set all fields to 0.0 if you can't
+ * fetch meaningfull values, like between rounds and such.
+ *
+ * context and identity are transmitted to the server. Only players
+ * with identical context will hear positional audio from each other.
+ * Mumble will automatically prepend the shortname of the plugin to
+ * the context, so make this a representation of the game server and
+ * team the player is on.
+ *
+ * identity is retained by the server and is pollable over Ice/DBus,
+ * to be used by external scripts. This should uniquiely identify the
+ * player inside the game.
+ *
+ * ctx_len and id_len are initialized to the bufferspace available. Set these
+ * to -1 to keep the previous value (as parsing and optimizing can be CPU
+ * intensive)
+ *
+ * The function should return 1 if it is still "locked on",
+ * otherwise it should return 0. Mumble will call unlock()
+ * if it return 0, and go back to polling with trylock()
+ * once in a while.
+ */
+
+#endif