diff --git a/i18n/src/main/resources/openfire_i18n.properties b/i18n/src/main/resources/openfire_i18n.properties index 3f62edacfa..b842c4daaf 100644 --- a/i18n/src/main/resources/openfire_i18n.properties +++ b/i18n/src/main/resources/openfire_i18n.properties @@ -97,8 +97,6 @@ tab.server.descr=Click to manage server settings sidebar.security-truststore-administrative-s2s=Server (administrative) Truststore sidebar.security-truststore-administrative-s2s.descr=Click to manage certificates used for administrative, server-to-server communication. sidebar.sidebar-media-services=Media Services - sidebar.media-proxy=Media Proxy - sidebar.media-proxy.descr=Click to view media proxy settings. sidebar.sidebar-pubsub=PubSub sidebar.pubsub-service-summary=PubSub Service sidebar.pubsub-service-summary.descr=Click to manage PubSub service @@ -3610,44 +3608,11 @@ ports.file_proxy.desc=The port used for the proxy service that allows file trans ports.http_bind=Web Binding ports.http_bind.desc_unsecured=The port used for unsecured web client connections (websocket and BOSH). ports.http_bind.desc_secured=The port used for secured web client connections (websocket and BOSH). -ports.media_proxy=Real time media proxy -ports.media_proxy.desc=The port used for the proxy service that allows Jingle connections between two entities on \ - the XMPP network. ports.jmx_console=JMX Console ports.jmx_console.desc=The port used by the JMX connector to provide JConsole access to Openfire via RMI. ports.jmx_console.alt=Requires Openfire admin credentials ports.secure.alt=This port uses TLS to encrypt traffic over the network -# Media Proxy - -mediaproxy.desc = The media proxy enables clients to make rich media (including VoIP) connections to one another \ - when peer to peer connections fail, such as when one or both clients are behind a \ - strict firewall. -mediaproxy.settings.success = Settings updated successfully. -mediaproxy.form.label = Media Proxy Settings -mediaproxy.form.enabled = Enabled -mediaproxy.form.enabled.desc = This server will act as a media proxy. -mediaproxy.form.disabled = Disabled -mediaproxy.form.disabled.desc = This server will not act as a media proxy. -mediaproxy.form.idletimeout = Session Idle Timeout (in seconds) -mediaproxy.form.idletimeout.tip = This value is usually bigger than 15 seconds. -mediaproxy.form.lifetime = Session Life Time (in seconds) -mediaproxy.form.lifetime.tip = Life Time is the maximum time that a Session can live. After this time it is destroyed, even if it stills active. -mediaproxy.form.minport = UDP Port Range Min -mediaproxy.form.maxport = UDP Port Range Max -mediaproxy.form.echoport = UDP Echo Test Port - -mediaproxy.summary.label = Active Sessions Summary -mediaproxy.summary.desc = Sessions are Media Proxy Channels that controls packet relaying. \ - The list below shows current sessions running and which user created the channel. -mediaproxy.summary.session.creator = Creator -mediaproxy.summary.session.port = Port -mediaproxy.summary.session.server = Server -mediaproxy.summary.session.inactivity = Inactivity(secs) -mediaproxy.summary.session.type = Type -mediaproxy.summary.session.noactive = No active Sessions -mediaproxy.summary.stopbutton = Stop Active Sessions - # Import keystore certificate page ssl.import.certificate.keystore.title=Import Signed Certificate for Socket-based Communication diff --git a/i18n/src/main/resources/openfire_i18n_cs_CZ.properties b/i18n/src/main/resources/openfire_i18n_cs_CZ.properties index 20c96e32a0..16398a8a0a 100644 --- a/i18n/src/main/resources/openfire_i18n_cs_CZ.properties +++ b/i18n/src/main/resources/openfire_i18n_cs_CZ.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=Click to manage certificate sidebar.security-truststore-administrative-s2s=Server (administrative) Truststore sidebar.security-truststore-administrative-s2s.descr=Click to manage certificates used for administrative, server-to-server communication. sidebar.sidebar-media-services=Media Services -sidebar.media-proxy=Media Proxy -sidebar.media-proxy.descr=Click to view media proxy settings. sidebar.sidebar-pubsub=PubSub sidebar.pubsub-service-summary=PubSub Service sidebar.pubsub-service-summary.descr=Click to manage PubSub service @@ -3100,40 +3098,11 @@ ports.file_proxy.desc=Port používaný službou proxy, který umožňuje přeno ports.http_bind=Web připojení ports.http_bind.desc_unsecured=Port používaný pro nezabezpečená web klientská spojení (websocket, BOSH). ports.http_bind.desc_secured=Port používaný pro zabezpečená web klientská spojení (websocket, BOSH). -ports.media_proxy=Proxy pro média v reálném čase -ports.media_proxy.desc=Port používaný službou proxy, který umožňuje Jingle spojení mezi dvěma entitami v síti XMPP. ports.jmx_console=JMX Console ports.jmx_console.desc=The port used by the JMX connector to provide JConsole access to Openfire via RMI. ports.jmx_console.alt=Requires Openfire admin credentials ports.secure.alt=This port uses SSL to encrypt traffic over the network -# Media Proxy - -mediaproxy.desc = Proxy pro média dovoluje klientům vytvářet mezi sebou mediální spojení (včetně VoIP), když selže přímé spojení, jako když je jeden nebo oba klienti za firewallem. -mediaproxy.settings.success = Nastavení úspěšně změněno. -mediaproxy.form.label = Nastavení mediální proxy -mediaproxy.form.enabled = Povoleno -mediaproxy.form.enabled.desc = Tento server bude fungovat jako mediální proxy. -mediaproxy.form.disabled = Zakázáno -mediaproxy.form.disabled.desc = Tento server nebude fungovat jako mediální proxy. -mediaproxy.form.idletimeout = Čas vypršení relace při nečinnosti (v sekundách) -mediaproxy.form.idletimeout.tip = Tato hodnota je obvykle vyšší než 15 sekund. -mediaproxy.form.lifetime = Životnost relace (v sekundách) -mediaproxy.form.lifetime.tip = Životnost je nejdelší čas po který relace funguje. Po tomto čase je zničena, i když stále funguje. -mediaproxy.form.minport = Nejnižší port -mediaproxy.form.maxport = Nejvyšší port -mediaproxy.form.echoport = Echo Test Port - -mediaproxy.summary.label = Shrnutí aktivních relací -mediaproxy.summary.desc = Relace jsou kanály mediální proxy, které řídí doručování paketů. Spodní seznam zobrazuje bežící relace a uživatele, který kanál vytvořil. -mediaproxy.summary.session.creator = Vytvořeno -mediaproxy.summary.session.port = Port -mediaproxy.summary.session.server = Server -mediaproxy.summary.session.inactivity = Neaktivní(sek) -mediaproxy.summary.session.type = Typ -mediaproxy.summary.session.noactive = Žádné aktivní relace -mediaproxy.summary.stopbutton = Zastavit aktivní relace - # Import keystore certificate page ssl.import.certificate.keystore.title=Import Signed Certificate diff --git a/i18n/src/main/resources/openfire_i18n_de.properties b/i18n/src/main/resources/openfire_i18n_de.properties index 7f4b1d8e09..06474ca02a 100644 --- a/i18n/src/main/resources/openfire_i18n_de.properties +++ b/i18n/src/main/resources/openfire_i18n_de.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=Klicken Sie hier, um Zertif sidebar.security-truststore-administrative-s2s=Server (Administrative) Truststore sidebar.security-truststore-administrative-s2s.descr=Klicken Sie hier, um Zertifikate zu verwalten, die für die administrative Kommunikation zwischen Server und Server verwendet werden. sidebar.sidebar-media-services=Mediendienste -sidebar.media-proxy=Medien-Proxy -sidebar.media-proxy.descr=Hier klicken, um die Medien-Proxy Einstellungen anzuzeigen. sidebar.sidebar-pubsub=PubSub sidebar.pubsub-service-summary=PubSub Service sidebar.pubsub-service-summary.descr=Klicken Sie hier, um den PubSub-Dienst zu verwalten. @@ -3100,40 +3098,11 @@ ports.file_proxy.desc=Der Port, der von dem Proxydienst verwendet wird, der den ports.http_bind=Web-Anbindung ports.http_bind.desc_unsecured=Der Port, der für ungesicherte web-basierte Client Verbindungen verwendet wird (websocket und BOSH). ports.http_bind.desc_secured=Der Port, der für gesicherte web-basierte Client Verbindungen verwendet wird (websocket und BOSH). -ports.media_proxy=Echtzeit Medien-Proxy -ports.media_proxy.desc=Der Port, der für den Proxyservice verwendet wird, welcher Jingle Verbindungen zwischen zwei Instanzen auf dem XMPP Netzwerk erlaubt. ports.jmx_console=JMX-Konsole ports.jmx_console.desc=Der Port, der vom JMX-Verbinder verwendet wird, um der JConsole Zugang zu Openfire via RMI zu verschaffen. ports.jmx_console.alt=Erfordert Openfire Admin-Anmeldedaten ports.secure.alt=Dieser Port verwendet SSL, um Datenverkehr über das Netzwerk zu verschlüsseln -# Media Proxy - -mediaproxy.desc = Der Medien-Proxy ermöglicht es den Clients, rich media (einschließlich VoIP) Verbindungen miteinander aufzubauen when Peer-zu-Peer Verbindungen versagen, so wie wenn sich einer oder beide Clients hinter einer stark gesicherten Firewall befinden. -mediaproxy.settings.success = Einstellungen erfolgreich aktualisiert. -mediaproxy.form.label = Medien-Proxy Einstellungen -mediaproxy.form.enabled = Aktiviert -mediaproxy.form.enabled.desc = Dieser Server wird als Medien-Proxy arbeiten. -mediaproxy.form.disabled = Deaktiviert -mediaproxy.form.disabled.desc = Dieser Server wird nicht als Medien-Proxy arbeiten. -mediaproxy.form.idletimeout = Timeout der inaktiven Sitzung (in Sekunden) -mediaproxy.form.idletimeout.tip = Dieser Wert ist gewöhnlich größer als 15 Sekunden. -mediaproxy.form.lifetime = Sitzungslaufzeit (in Sekunden) -mediaproxy.form.lifetime.tip = Laufzeit ist die maximal mögliche Zeitdauer einer Sitzung. Nach Ablauf dieser wird sie wird sie geschlossen, auch wenn sie noch aktiv ist. -mediaproxy.form.minport = Minimaler Port-Bereich -mediaproxy.form.maxport = Maximaler Port-Bereich -mediaproxy.form.echoport = Echo Test Port - -mediaproxy.summary.label = Überblick aktueller Sitzungen -mediaproxy.summary.desc = Die Sitzungen sind Medien-Proxy Kanäle, welche die Paketübertragung kontrollieren. Die untere Liste zeigt aktuell laufende Sitzungen und den Nutzer, der den Kanal erstellt hat. -mediaproxy.summary.session.creator = Erzeuger -mediaproxy.summary.session.port = Port -mediaproxy.summary.session.server = Server -mediaproxy.summary.session.inactivity = Inaktivität(Sekunden) -mediaproxy.summary.session.type = Typ -mediaproxy.summary.session.noactive = Keinen aktiven Sitzungen -mediaproxy.summary.stopbutton = Aktive Sitzungen anhalten - # Import keystore certificate page ssl.import.certificate.keystore.title=Signiertes Zertifikat importieren diff --git a/i18n/src/main/resources/openfire_i18n_es.properties b/i18n/src/main/resources/openfire_i18n_es.properties index 3b353ab8cb..9531305bcc 100644 --- a/i18n/src/main/resources/openfire_i18n_es.properties +++ b/i18n/src/main/resources/openfire_i18n_es.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=Presione para administrar l sidebar.security-truststore-administrative-s2s=Almacén de Confianza de Servidores (socket) sidebar.security-truststore-administrative-s2s.descr=Presione para administrar los certificados usados en la comunicación servidor-servidor de administración. sidebar.sidebar-media-services=Servicios de Multimedios -sidebar.media-proxy=Proxy de Multimedios -sidebar.media-proxy.descr=Haga clic para ver la configuración del proxy de multimedios. sidebar.sidebar-pubsub=PubSub sidebar.pubsub-service-summary=Servicio PubSub sidebar.pubsub-service-summary.descr=Presione para administrar el servicio PubSub @@ -3100,40 +3098,11 @@ ports.file_proxy.desc=Puerto utilizado por el servicio de transferencia de archi ports.http_bind=Web Binding ports.http_bind.desc_unsecured=Puerto utilizado para conexiones inseguras de clientes web (websocket, BOSH). ports.http_bind.desc_secured=Puerto utilizado para conexiones seguras de clientes web (websocket, BOSH). -ports.media_proxy=Proxy de medios en tiempo real -ports.media_proxy.desc=Puerto utilizado por el servicio para permitir conexiones Jingle entre dos entidades de la red XMPP. ports.jmx_console=Consola JMX ports.jmx_console.desc=El puerto usado por el conector JMX para proveer al JConsole acceso al Openfire usndo RMI. ports.jmx_console.alt=Requiere permiso de administrador en el Openfire ports.secure.alt=Este puerto usa SSL para cifrar el tráfico en la red -# Media Proxy - -mediaproxy.desc = El proxy de medios permite a los clientes realizar conexiones multimedia (incluyendo VoIP) a otros clientes cuando conexiones punto a punto no son posibles. Usualmente conexiones punto a punto no son posibles cuando uno o los dos clientes se encuentran detras de cortafuegos. -mediaproxy.settings.success = Configuración actualizada exitosamente. -mediaproxy.form.label = Configuración del Proxy de Medios -mediaproxy.form.enabled = Habilitado -mediaproxy.form.enabled.desc = El servidor va a actuar como un proxy de medios. -mediaproxy.form.disabled = Deshabilitado -mediaproxy.form.disabled.desc = El servidor no va a actuar como un proxy de medios. -mediaproxy.form.idletimeout = Tiempo máximo de Inactividad (en segundos) -mediaproxy.form.idletimeout.tip = Este valor es usualmente mayor a los 15 segundos. -mediaproxy.form.lifetime = Tiempo de Vida de la Sesión (en segundos) -mediaproxy.form.lifetime.tip = Tiempo de Vida es el tiempo máximo que una sesión puede vivir. Después de este tiempo la sesión será destruida aún si se encontraba activa. -mediaproxy.form.minport = Rango mínimo del Puerto -mediaproxy.form.maxport = Rango máximo del Puerto -mediaproxy.form.echoport = Puerto de Test de Eco - -mediaproxy.summary.label = Listado de Sesiones Activas -mediaproxy.summary.desc = Las sesiones son canales de proxy de medios que controlan la transmisión de paquetes. La siguiente lista muestra las sesiones actuales y los usuarios que crearon las mismas. -mediaproxy.summary.session.creator = Creador -mediaproxy.summary.session.port = Puerto -mediaproxy.summary.session.server = Servidor -mediaproxy.summary.session.inactivity = Inactividad (segs) -mediaproxy.summary.session.type = Tipo -mediaproxy.summary.session.noactive = No se han encontrado sesiones activas -mediaproxy.summary.stopbutton = Para Sesiones Activas - # Import keystore certificate page ssl.import.certificate.keystore.title=Importar Certificado Firmado diff --git a/i18n/src/main/resources/openfire_i18n_fa_IR.properties b/i18n/src/main/resources/openfire_i18n_fa_IR.properties index bc349507ec..879d5f836e 100644 --- a/i18n/src/main/resources/openfire_i18n_fa_IR.properties +++ b/i18n/src/main/resources/openfire_i18n_fa_IR.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=برای مدیریت گو sidebar.security-truststore-administrative-s2s=ذخیره‌سازی اعتماد سرور (مدیریتی) sidebar.security-truststore-administrative-s2s.descr=برای مدیریت گواهینامه‌هایی که برای ارتباط سرور به سرور مدیریتی استفاده می‌شوند، کلیک کنید. sidebar.sidebar-media-services=سرویس‌های رسانه‌ای -sidebar.media-proxy=پراکسی رسانه -sidebar.media-proxy.descr=برای مشاهده تنظیمات پراکسی رسانه کلیک کنید. sidebar.sidebar-pubsub=PubSub sidebar.pubsub-service-summary=سرویس PubSub sidebar.pubsub-service-summary.descr=برای مدیریت سرویس PubSub کلیک کنید @@ -3100,40 +3098,11 @@ ports.file_proxy.desc=پورت مورد استفاده برای سرویس پر ports.http_bind=وب‌بایندینگ ports.http_bind.desc_unsecured=پورت مورد استفاده برای اتصال‌های وب کلاینت غیر امن (وب‌سوکت و BOSH). ports.http_bind.desc_secured=پورت مورد استفاده برای اتصال‌های وب کلاینت امن (وب‌سوکت و BOSH). -ports.media_proxy=پروکسی رسانه‌ای در زمان واقعی -ports.media_proxy.desc=پورت مورد استفاده برای سرویس پروکسی که اجازه می‌دهد ارتباطات Jingle بین دو نهاد در شبکه XMPP انجام شود. ports.jmx_console=کنسول JMX ports.jmx_console.desc=پورت مورد استفاده توسط کانکتور JMX برای ارائه دسترسی JConsole به Openfire از طریق RMI. ports.jmx_console.alt=نیاز به مدارک مدیر Openfire ports.secure.alt=این پورت از SSL برای رمزگذاری ترافیک بر روی شبکه استفاده می‌کند -# Media Proxy - -mediaproxy.desc = پروکسی رسانه‌ای به مشتریان اجازه می‌دهد تا ارتباطات رسانه‌ای غنی (از جمله VoIP) با یکدیگر برقرار کنند زمانی که ارتباطات نقطه به نقطه شکست می‌خورند، مانند زمانی که یکی یا هر دو مشتری پشت یک دیوار آتشین سختگیرانه هستند. -mediaproxy.settings.success = تنظیمات با موفقیت به‌روزرسانی شد. -mediaproxy.form.label = تنظیمات پروکسی رسانه‌ای -mediaproxy.form.enabled = فعال -mediaproxy.form.enabled.desc = این سرور به عنوان پروکسی رسانه‌ای عمل خواهد کرد. -mediaproxy.form.disabled = غیرفعال -mediaproxy.form.disabled.desc = این سرور به عنوان پروکسی رسانه‌ای عمل نخواهد کرد. -mediaproxy.form.idletimeout = زمان خروج جلسه به دلیل عدم فعالیت (بر حسب ثانیه) -mediaproxy.form.idletimeout.tip = این مقدار معمولاً بیشتر از 15 ثانیه است. -mediaproxy.form.lifetime = مدت زمان زندگی جلسه (بر حسب ثانیه) -mediaproxy.form.lifetime.tip = مدت زمان زندگی حداکثر زمانی است که یک جلسه می‌تواند ادامه یابد. پس از این زمان، حتی اگر هنوز فعال باشد، نابود می‌شود. -mediaproxy.form.minport = حداقل محدوده پورت -mediaproxy.form.maxport = حداکثر محدوده پورت -mediaproxy.form.echoport = پورت آزمایش اکو - -mediaproxy.summary.label = خلاصه جلسات فعال -mediaproxy.summary.desc = جلسات، کانال‌های پروکسی رسانه‌ای هستند که کنترل انتقال بسته‌ها را بر عهده دارند. فهرست زیر جلسات فعلی و کاربری که کانال را ایجاد کرده است را نشان می‌دهد. -mediaproxy.summary.session.creator = سازنده -mediaproxy.summary.session.port = پورت -mediaproxy.summary.session.server = سرور -mediaproxy.summary.session.inactivity = عدم فعالیت (ثانیه) -mediaproxy.summary.session.type = نوع -mediaproxy.summary.session.noactive = هیچ جلسه فعالی وجود ندارد -mediaproxy.summary.stopbutton = توقف جلسات فعال - # Import keystore certificate page ssl.import.certificate.keystore.title=وارد کردن گواهینامه امضا شده برای ارتباطات مبتنی بر سوکت diff --git a/i18n/src/main/resources/openfire_i18n_fr.properties b/i18n/src/main/resources/openfire_i18n_fr.properties index ddcd29d3f0..530d1f2f73 100644 --- a/i18n/src/main/resources/openfire_i18n_fr.properties +++ b/i18n/src/main/resources/openfire_i18n_fr.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=Cliquez pour gérer les cer sidebar.security-truststore-administrative-s2s=Serveur (administration) Truststore sidebar.security-truststore-administrative-s2s.descr=Cliquez pour gérer les certificats utilisés pour la communication administrative de serveur à serveur. sidebar.sidebar-media-services=Services médias -sidebar.media-proxy=Proxy Média -sidebar.media-proxy.descr=Cliquez pour afficher les paramètres du proxy média. sidebar.sidebar-pubsub=PubSub sidebar.pubsub-service-summary=PubSub Service sidebar.pubsub-service-summary.descr=Cliquez pour gérer le service PubSub @@ -3100,40 +3098,11 @@ ports.file_proxy.desc=Le port utilisé pour le service proxy qui permet le trans ports.http_bind=Liaison Web ports.http_bind.desc_unsecured=Le port utilisé pour les connexions client web non sécurisées (websocket et BOSH). ports.http_bind.desc_secured=Le port utilisé pour les connexions client web sécurisées (websocket et BOSH). -ports.media_proxy=Proxy média en temps réel -ports.media_proxy.desc=Le port utilisé pour le service proxy qui permet les connexions Jingle entre deux entités sur le réseau XMPP. ports.jmx_console=Console JMX ports.jmx_console.desc=Le port utilisé par le connecteur JMX pour fournir à JConsole un accès à Openfire via RMI. ports.jmx_console.alt=Nécessite les informations d'identification de l'administrateur d'Openfire. ports.secure.alt=Ce port utilise le protocole SSL pour chiffrer le trafic sur le réseau. -# Media Proxy - -mediaproxy.desc = Le proxy média permet aux clients d'établir des connexions multimédias (y compris VoIP) entre eux lorsque les connexions peer to peer échouent, par exemple lorsqu'un ou les deux clients se trouvent derrière un pare-feu strict. -mediaproxy.settings.success = Les paramètres ont été mis à jour avec succès. -mediaproxy.form.label = Paramètres du proxy média -mediaproxy.form.enabled = Activé -mediaproxy.form.enabled.desc = Ce serveur agira comme un proxy média. -mediaproxy.form.disabled = Désactivé -mediaproxy.form.disabled.desc = Ce serveur n'agira pas comme un proxy média. -mediaproxy.form.idletimeout = Dépassement du délai d'inactivité de la session (en secondes) -mediaproxy.form.idletimeout.tip = Cette valeur est généralement supérieure à 15 secondes. -mediaproxy.form.lifetime = Durée de vie de la session (en secondes) -mediaproxy.form.lifetime.tip = La durée de vie est la durée maximale de vie d'une session. Après cette durée, elle est détruite, même si elle est toujours active. -mediaproxy.form.minport = Plage de ports Min -mediaproxy.form.maxport = Plage de ports Max -mediaproxy.form.echoport = Port de test écho - -mediaproxy.summary.label = Résumé des sessions actives -mediaproxy.summary.desc = Les sessions sont des canaux proxy média qui contrôlent le relais des paquets. La liste ci-dessous indique les sessions en cours d'exécution et l'utilisateur qui a créé le canal. -mediaproxy.summary.session.creator = Créateur -mediaproxy.summary.session.port = Port -mediaproxy.summary.session.server = Serveur -mediaproxy.summary.session.inactivity = Inactivité (sec) -mediaproxy.summary.session.type = Type -mediaproxy.summary.session.noactive = Aucune session active -mediaproxy.summary.stopbutton = Arrêter les sessions actives - # Import keystore certificate page ssl.import.certificate.keystore.title=Importer un certificat signé diff --git a/i18n/src/main/resources/openfire_i18n_he.properties b/i18n/src/main/resources/openfire_i18n_he.properties index 9c9085536e..6e60898c3f 100644 --- a/i18n/src/main/resources/openfire_i18n_he.properties +++ b/i18n/src/main/resources/openfire_i18n_he.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=לחץ כדי לנהל תע sidebar.security-truststore-administrative-s2s=Truststore (מנהלי) שרת sidebar.security-truststore-administrative-s2s.descr=לחץ כדי לנהל תעודות אשר משמשות עבור תקשורת שרת-אל-שרת, מנהלית. sidebar.sidebar-media-services=שירותי מדיה -sidebar.media-proxy=Proxy מדיה -sidebar.media-proxy.descr=לחץ כדי לצפות בהגדרות Proxy מדיה. sidebar.sidebar-pubsub=PubSub sidebar.pubsub-service-summary=שירות PubSub sidebar.pubsub-service-summary.descr=לחץ כדי לנהל שירות PubSub @@ -3100,40 +3098,11 @@ ports.file_proxy.desc=הפורט אשר משמש עבור שירות Proxy אש ports.http_bind=Web Binding ports.http_bind.desc_unsecured=הפורט אשר משמש עבור חיבורי לקוח Web לא מאובטחים (websocket וגם BOSH). ports.http_bind.desc_secured=הפורט אשר משמש עבור חיבורי לקוח Web מאובטחים (websocket וגם BOSH). -ports.media_proxy=Proxy מדיה בזמן אמת -ports.media_proxy.desc=הפורט אשר משמש עבור שירות Proxy אשר מאפשר חיבורי Jingle בין שתי ישויות על גבי רשת XMPP. ports.jmx_console=מסוף JMX ports.jmx_console.desc=The port used by the JMX connector to provide JConsole access to Openfire via RMI. ports.jmx_console.alt=Requires Openfire admin credentials ports.secure.alt=This port uses SSL to encrypt traffic over the network -# Media Proxy - -mediaproxy.desc = The media proxy enables clients to make rich media (including VoIP) connections to one another when peer to peer connections fail, such as when one or both clients are behind a strict firewall. -mediaproxy.settings.success = הגדרות עודכנו בהצלחה. -mediaproxy.form.label = הגדרות Proxy מדיה -mediaproxy.form.enabled = מאופשר -mediaproxy.form.enabled.desc = שרת זה יפעל בתוך Proxy מדיה. -mediaproxy.form.disabled = מנוטרל -mediaproxy.form.disabled.desc = This server will not act as a media proxy. -mediaproxy.form.idletimeout = Session Idle Timeout (in seconds) -mediaproxy.form.idletimeout.tip = This value is usually bigger than 15 seconds. -mediaproxy.form.lifetime = Session Life Time (in seconds) -mediaproxy.form.lifetime.tip = Life Time is the maximum time that a Session can lives. After this time it is destroyed, even if it stills active. -mediaproxy.form.minport = Port Range Min -mediaproxy.form.maxport = Port Range Max -mediaproxy.form.echoport = פורט בדיקת הד - -mediaproxy.summary.label = סיכום הפעלות פעילות -mediaproxy.summary.desc = Sessions are Media Proxy Channels that controls packet relaying. The list below shows current sessions running and which user created the channel. -mediaproxy.summary.session.creator = יוצר -mediaproxy.summary.session.port = פורט -mediaproxy.summary.session.server = שרת -mediaproxy.summary.session.inactivity = חוסר פעילות (שניות) -mediaproxy.summary.session.type = טיפוס -mediaproxy.summary.session.noactive = אין הפעלות פעילות -mediaproxy.summary.stopbutton = הפסק הפעלות פעילות - # Import keystore certificate page ssl.import.certificate.keystore.title=Import Signed Certificate for Socket-based Communication diff --git a/i18n/src/main/resources/openfire_i18n_it_IT.properties b/i18n/src/main/resources/openfire_i18n_it_IT.properties index 2cfded4593..7844600653 100644 --- a/i18n/src/main/resources/openfire_i18n_it_IT.properties +++ b/i18n/src/main/resources/openfire_i18n_it_IT.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=Premi per gestire i certifi sidebar.security-truststore-administrative-s2s=Certificati attendibili del Server (amministrativo) sidebar.security-truststore-administrative-s2s.descr=Premi per gestire i certificati utilizzati per le comunicazioni amministrative tra server. sidebar.sidebar-media-services=Servizi multimediali -sidebar.media-proxy=Proxy multimediale -sidebar.media-proxy.descr=Premi per visualizzare le impostazioni del proxy multimediale. sidebar.sidebar-pubsub=PubSub sidebar.pubsub-service-summary=Servizio PubSub sidebar.pubsub-service-summary.descr=Premi per gestire il servizio PubSub diff --git a/i18n/src/main/resources/openfire_i18n_ja_JP.properties b/i18n/src/main/resources/openfire_i18n_ja_JP.properties index f7b88deaed..74bf7c374f 100644 --- a/i18n/src/main/resources/openfire_i18n_ja_JP.properties +++ b/i18n/src/main/resources/openfire_i18n_ja_JP.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=Click to manage certificate sidebar.security-truststore-administrative-s2s=Server (administrative) Truststore sidebar.security-truststore-administrative-s2s.descr=Click to manage certificates used for administrative, server-to-server communication. sidebar.sidebar-media-services=メディアサービス -sidebar.media-proxy=メディアプロキシー -sidebar.media-proxy.descr=メディアプロキシー設定を参照する場合にクリックしてください。 sidebar.sidebar-pubsub=PubSub sidebar.pubsub-service-summary=PubSub Service sidebar.pubsub-service-summary.descr=Click to manage PubSub service @@ -3100,40 +3098,11 @@ ports.file_proxy.desc=XMPPネットワーク上で、2つのエンティティ ports.http_bind=Webバインディング ports.http_bind.desc_unsecured=セキュアーでないwebクライアント接続が使用するためのポートです。 ports.http_bind.desc_secured=セキュアーなwebクライアント接続が使用するためのポートです。 -ports.media_proxy=リアルタイムメディアプロキシー -ports.media_proxy.desc=XMPPネットワーク上で、2つのエンティティの間でのJingle接続を許可しているプロキシーサービスが使用するポートです。 ports.jmx_console=JMX Console ports.jmx_console.desc=The port used by the JMX connector to provide JConsole access to Openfire via RMI. ports.jmx_console.alt=Requires Openfire admin credentials ports.secure.alt=This port uses SSL to encrypt traffic over the network -# Media Proxy - -mediaproxy.desc = メディアプロキシーは、1人のクライアント、もしくは両方のクライアントが厳重なファイアウォールの後にいる場合のようなpeer to peer接続が失敗してしまうときに、クライアントが相手にリッチメディア(VoIPを含む)接続をすることを可能にします。 -mediaproxy.settings.success = 設定が正常に更新されました。 -mediaproxy.form.label = メディアプロキシー設定 -mediaproxy.form.enabled = 使用可能 -mediaproxy.form.enabled.desc = このサーバーはメディアプロキシーとして動作します。 -mediaproxy.form.disabled = 無効 -mediaproxy.form.disabled.desc = このサーバーはメディアプロキシーとして動作しません。 -mediaproxy.form.idletimeout = セッションアイドルタイムアウト (秒) -mediaproxy.form.idletimeout.tip = この値は通常は15秒以上に設定します。 -mediaproxy.form.lifetime = セッションライフタイム(秒) -mediaproxy.form.lifetime.tip = ライフタイムはセッションが生存することができる最大値です。この時間が経過すると、たとえまだアクティブ状態でもセッションは切断されます。 -mediaproxy.form.minport = 最小ポート範囲 -mediaproxy.form.maxport = 最大ポート範囲 -mediaproxy.form.echoport = テストポートをエコー - -mediaproxy.summary.label = アクティブセッション要約 -mediaproxy.summary.desc = セッションは、中継しているパケットを制御するメディアプロキシーチャネルです。下のリストは、現在の作動しているセッションで、ユーザーがチャネルを作成したものを表示しています。 -mediaproxy.summary.session.creator = 作成者 -mediaproxy.summary.session.port = ポート -mediaproxy.summary.session.server = サーバー -mediaproxy.summary.session.inactivity = 動作していない時間(秒) -mediaproxy.summary.session.type = タイプ -mediaproxy.summary.session.noactive = アクティブセッションがありません。 -mediaproxy.summary.stopbutton = アクティブセッションを停止 - # Import keystore certificate page ssl.import.certificate.keystore.title=署名済み証明書のインポート diff --git a/i18n/src/main/resources/openfire_i18n_nl.properties b/i18n/src/main/resources/openfire_i18n_nl.properties index 51fe1e9c04..a09262ab7e 100644 --- a/i18n/src/main/resources/openfire_i18n_nl.properties +++ b/i18n/src/main/resources/openfire_i18n_nl.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=Klik hier om certificaten t sidebar.security-truststore-administrative-s2s=Certificaatbestand voor vertrouwde server (administratieve) entiteiten sidebar.security-truststore-administrative-s2s.descr=Klik hier om certificaten te beheren die worden gebruikt voor administratieve, server-naar-server connecties op deze Openfire server. sidebar.sidebar-media-services=Media Services -sidebar.media-proxy=Media Proxy -sidebar.media-proxy.descr=Klik hier om media proxy settings te bekijken. sidebar.sidebar-pubsub=PubSub sidebar.pubsub-service-summary=PubSub Service sidebar.pubsub-service-summary.descr=Klik hier om de Pubsub service te beheren. @@ -3208,40 +3206,11 @@ ports.file_proxy.desc=The port used for the proxy service that allows file trans ports.http_bind=Web Binding ports.http_bind.desc_unsecured=De poort die gebuikt wordt voor onbeveiligde, web-gebaseerde client connecties (websocket en BOSH). ports.http_bind.desc_secured=De poort die gebuikt wordt voor beveiligde, web-gebaseerde client connecties (websocket en BOSH). -ports.media_proxy=Real time media proxy -ports.media_proxy.desc=The port used for the proxy service that allows Jingle connections between two entities on the XMPP network. ports.jmx_console=JMX Console ports.jmx_console.desc=The port used by the JMX connector to provide JConsole access to Openfire via RMI. ports.jmx_console.alt=Requires Openfire admin credentials ports.secure.alt=This port uses SSL to encrypt traffic over the network -# Media Proxy - -mediaproxy.desc = The media proxy enables clients to make rich media (including VoIP) connections to one another when peer to peer connections fail, such as when one or both clients are behind a strict firewall. -mediaproxy.settings.success = Settings updated successfully. -mediaproxy.form.label = Media Proxy Settings -mediaproxy.form.enabled = Ingeschakeld -mediaproxy.form.enabled.desc = This server will act as a media proxy. -mediaproxy.form.disabled = Uitgeschakeldq -mediaproxy.form.disabled.desc = This server will not act as a media proxy. -mediaproxy.form.idletimeout = Session Idle Timeout (in seconds) -mediaproxy.form.idletimeout.tip = This value is usually bigger than 15 seconds. -mediaproxy.form.lifetime = Session Life Time (in seconds) -mediaproxy.form.lifetime.tip = Life Time is the maximum time that a Session can lives. After this time it is destroyed, even if it stills active. -mediaproxy.form.minport = Port Range Min -mediaproxy.form.maxport = Port Range Max -mediaproxy.form.echoport = Echo Test Port - -mediaproxy.summary.label = Active Sessions Summary -mediaproxy.summary.desc = Sessions are Media Proxy Channels that controls packet relaying. The list below shows current sessions running and which user created the channel. -mediaproxy.summary.session.creator = Creator -mediaproxy.summary.session.port = Port -mediaproxy.summary.session.server = Server -mediaproxy.summary.session.inactivity = Inactivity(secs) -mediaproxy.summary.session.type = Type -mediaproxy.summary.session.noactive = No active Sessions -mediaproxy.summary.stopbutton = Stop Active Sessions - # Import keystore certificate page ssl.import.certificate.keystore.title=Import Signed Certificate diff --git a/i18n/src/main/resources/openfire_i18n_pl_PL.properties b/i18n/src/main/resources/openfire_i18n_pl_PL.properties index 7ce8543fe4..58674e63f6 100644 --- a/i18n/src/main/resources/openfire_i18n_pl_PL.properties +++ b/i18n/src/main/resources/openfire_i18n_pl_PL.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=Click to manage certificate sidebar.security-truststore-administrative-s2s=Server (administrative) Truststore sidebar.security-truststore-administrative-s2s.descr=Click to manage certificates used for administrative, server-to-server communication. sidebar.sidebar-media-services=Media Services -sidebar.media-proxy=Media Proxy -sidebar.media-proxy.descr=Click to view media proxy settings. sidebar.sidebar-pubsub=PubSub sidebar.pubsub-service-summary=PubSub Service sidebar.pubsub-service-summary.descr=Click to manage PubSub service @@ -3100,40 +3098,11 @@ ports.file_proxy.desc=The port used for the proxy service that allows file trans ports.http_bind=Web Binding ports.http_bind.desc_unsecured=The port used for unsecured web client connections (websocket and BOSH). ports.http_bind.desc_secured=The port used for secured web client connections (websocket and BOSH). -ports.media_proxy=Real time media proxy -ports.media_proxy.desc=The port used for the proxy service that allows Jingle connections between two entities on the XMPP network. ports.jmx_console=JMX Console ports.jmx_console.desc=The port used by the JMX connector to provide JConsole access to Openfire via RMI. ports.jmx_console.alt=Requires Openfire admin credentials ports.secure.alt=This port uses SSL to encrypt traffic over the network -# Media Proxy - -mediaproxy.desc = The media proxy enables clients to make rich media (including VoIP) connections to one another when peer to peer connections fail, such as when one or both clients are behind a strict firewall. -mediaproxy.settings.success = Settings updated successfully. -mediaproxy.form.label = Media Proxy Settings -mediaproxy.form.enabled = Enabled -mediaproxy.form.enabled.desc = This server will act as a media proxy. -mediaproxy.form.disabled = Disabled -mediaproxy.form.disabled.desc = This server will not act as a media proxy. -mediaproxy.form.idletimeout = Session Idle Timeout (in seconds) -mediaproxy.form.idletimeout.tip = This value is usually bigger than 15 seconds. -mediaproxy.form.lifetime = Session Life Time (in seconds) -mediaproxy.form.lifetime.tip = Life Time is the maximum time that a Session can lives. After this time it is destroyed, even if it stills active. -mediaproxy.form.minport = Port Range Min -mediaproxy.form.maxport = Port Range Max -mediaproxy.form.echoport = Echo Test Port - -mediaproxy.summary.label = Active Sessions Summary -mediaproxy.summary.desc = Sessions are Media Proxy Channels that controls packet relaying. The list below shows current sessions running and which user created the channel. -mediaproxy.summary.session.creator = Creator -mediaproxy.summary.session.port = Port -mediaproxy.summary.session.server = Server -mediaproxy.summary.session.inactivity = Inactivity(secs) -mediaproxy.summary.session.type = Type -mediaproxy.summary.session.noactive = No active Sessions -mediaproxy.summary.stopbutton = Stop Active Sessions - # Import keystore certificate page ssl.import.certificate.keystore.title=Import Signed Certificate diff --git a/i18n/src/main/resources/openfire_i18n_pt_BR.properties b/i18n/src/main/resources/openfire_i18n_pt_BR.properties index e6b7560450..7890707523 100644 --- a/i18n/src/main/resources/openfire_i18n_pt_BR.properties +++ b/i18n/src/main/resources/openfire_i18n_pt_BR.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=Clique para gerenciar os ce sidebar.security-truststore-administrative-s2s=Truststore do Server (administrativa) sidebar.security-truststore-administrative-s2s.descr=Clique para gerenciar certificados utilizados para administrar, comunicação entre server-para-server. sidebar.sidebar-media-services=Media Services -sidebar.media-proxy=Media Proxy -sidebar.media-proxy.descr=Click to view media proxy settings. sidebar.sidebar-pubsub=PubSub sidebar.pubsub-service-summary=Serviço Pubsub sidebar.pubsub-service-summary.descr=Clique para gerenciar serviço de PubSub @@ -3100,40 +3098,11 @@ ports.file_proxy.desc=A porta utilizada pelo serviço de Proxy que permite a tra ports.http_bind=Web Binding ports.http_bind.desc_unsecured=Porta utilizada para conexão insegura a clientes web (websocket, BOSH). ports.http_bind.desc_secured=Porta utilizada para conexão segura a clientes web (websocket, BOSH). -ports.media_proxy=Media Proxy -ports.media_proxy.desc=Porta utilizada para conexão ao serviço de proxy para conexões Jinglena rede XMPP. ports.jmx_console=JMX Console ports.jmx_console.desc=The port used by the JMX connector to provide JConsole access to Openfire via RMI. ports.jmx_console.alt=Requires Openfire admin credentials ports.secure.alt=This port uses SSL to encrypt traffic over the network -# Media Proxy - -mediaproxy.desc = O media proxy habilita dois clientes se conectarem para uma sessão de Media (incluindo VoIP). Quando a conex�o ponto a ponto falhar, como por exemplo quando os dois clientes estiverem atrás de NATs. -mediaproxy.settings.success = Configurações atualizadas com sucesso. -mediaproxy.form.label = Configurações do Media Proxy -mediaproxy.form.enabled = Habilitado -mediaproxy.form.enabled.desc = Este servidor irá se comportar como um Media Proxy. -mediaproxy.form.disabled = Desabilitado -mediaproxy.form.disabled.desc = Este servidor não irá se comportar como um Media Proxy. -mediaproxy.form.idletimeout = Desconexão por inatividade (segundos) -mediaproxy.form.idletimeout.tip = Este valor geralmente é maior do que 15 segundos. -mediaproxy.form.lifetime = Tempo de Vida da Sessão (isegundos) -mediaproxy.form.lifetime.tip = Tempo de Vida da Sessão é o tempo máximo que uma conexão pode ficar ativa. Após este tempo, ela é destruída, mesmo que ela esteja ativa. -mediaproxy.form.minport = Porta Mínima -mediaproxy.form.maxport = PortA Máxima -mediaproxy.form.echoport = Porta para teste de eco - -mediaproxy.summary.label = Lista de Sessões Ativas -mediaproxy.summary.desc = Sessões são canais que controlam o repasse dos pacotes. A lista abaixo mostra quais os canais ativos e que os criou. -mediaproxy.summary.session.creator = Criador -mediaproxy.summary.session.port = Porta -mediaproxy.summary.session.server = Servidor -mediaproxy.summary.session.inactivity = Inatividade(seg) -mediaproxy.summary.session.type = Tipo -mediaproxy.summary.session.noactive = Nenhuma Sessão Ativa -mediaproxy.summary.stopbutton = Parar Sessões Ativas - # Import keystore certificate page ssl.import.certificate.keystore.title=Import Signed Certificate diff --git a/i18n/src/main/resources/openfire_i18n_pt_PT.properties b/i18n/src/main/resources/openfire_i18n_pt_PT.properties index b8c3f807b7..919e5b4bfe 100644 --- a/i18n/src/main/resources/openfire_i18n_pt_PT.properties +++ b/i18n/src/main/resources/openfire_i18n_pt_PT.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=Click to manage certificate sidebar.security-truststore-administrative-s2s=Server (administrative) Truststore sidebar.security-truststore-administrative-s2s.descr=Click to manage certificates used for administrative, server-to-server communication. sidebar.sidebar-media-services=Serviços de Multimédia -sidebar.media-proxy=Proxy Multimédia -sidebar.media-proxy.descr=Clique para ver as configurações de proxy. sidebar.sidebar-pubsub=PubSub sidebar.pubsub-service-summary=PubSub Service sidebar.pubsub-service-summary.descr=Click to manage PubSub service @@ -3100,40 +3098,11 @@ ports.file_proxy.desc=A porta utilizada pelo serviço de Proxy que permite a tra ports.http_bind=Web Binding ports.http_bind.desc_unsecured=Porta utilizada para ligação insegura a clientes web (websocket, BOSH). ports.http_bind.desc_secured=Porta utilizada para ligação segura a clientes web (websocket, BOSH). -ports.media_proxy=Media Proxy -ports.media_proxy.desc=Porta utilizada para ligação ao serviço de proxy para ligações Jinglena rede XMPP. ports.jmx_console=Consola JMX ports.jmx_console.desc=The port used by the JMX connector to provide JConsole access to Openfire via RMI. ports.jmx_console.alt=Requer credenciais de administrador do Openfire ports.secure.alt=Esta porta usa SSL para encriptar o trafego na rede -# Media Proxy - -mediaproxy.desc = O media proxy habilita dois clientes se conectarem para uma sessão de Media (incluindo VoIP). Quando a conex�o ponto a ponto falhar, como por exemplo quando os dois clientes estiverem atrás de NATs. -mediaproxy.settings.success = Configurações atualizadas com sucesso. -mediaproxy.form.label = Configurações do Media Proxy -mediaproxy.form.enabled = Habilitado -mediaproxy.form.enabled.desc = Este servidor vai atuar como um Media Proxy. -mediaproxy.form.disabled = Desativado -mediaproxy.form.disabled.desc = Este servidor não vai atuar como um Media Proxy. -mediaproxy.form.idletimeout = Desligar por inatividade (segundos) -mediaproxy.form.idletimeout.tip = Este valor geralmente é maior do que 15 segundos. -mediaproxy.form.lifetime = Tempo de Vida da Sessão (segundos) -mediaproxy.form.lifetime.tip = Tempo de Vida da Sessão é o tempo máximo que uma ligação pode ficar ativa. Após este tempo, ela é destruída, mesmo que ela esteja ativa. -mediaproxy.form.minport = Porta Mínima -mediaproxy.form.maxport = Porta Máxima -mediaproxy.form.echoport = Porta para teste de eco - -mediaproxy.summary.label = Lista de Sessões Ativas -mediaproxy.summary.desc = Sessões são canais que controlam o reenvio dos pacotes. A lista abaixo mostra quais os canais ativos e quem os criou. -mediaproxy.summary.session.creator = Criador -mediaproxy.summary.session.port = Porta -mediaproxy.summary.session.server = Servidor -mediaproxy.summary.session.inactivity = Inatividade(seg) -mediaproxy.summary.session.type = Tipo -mediaproxy.summary.session.noactive = Nenhuma Sessão Ativa -mediaproxy.summary.stopbutton = Parar Sessões Ativas - # Import keystore certificate page ssl.import.certificate.keystore.title=Importar Certificado Assinado diff --git a/i18n/src/main/resources/openfire_i18n_ru_RU.properties b/i18n/src/main/resources/openfire_i18n_ru_RU.properties index 8245fa313f..50504f431d 100644 --- a/i18n/src/main/resources/openfire_i18n_ru_RU.properties +++ b/i18n/src/main/resources/openfire_i18n_ru_RU.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=Нажмите, чтобы sidebar.security-truststore-administrative-s2s=Сервер (административный) хранилища доверия sidebar.security-truststore-administrative-s2s.descr=Нажмите, чтобы управлять сертификатами, используемыми для административной связи, от сервера к серверу sidebar.sidebar-media-services=Медиа-службы -sidebar.media-proxy=Медиа-прокси -sidebar.media-proxy.descr=Нажмите, чтобы просмотреть настройки прокси-сервера sidebar.sidebar-pubsub=Издатель-подписчик (PubSub) sidebar.pubsub-service-summary=PubSub-службы sidebar.pubsub-service-summary.descr=Нажмите, чтобы управлять службой PubSub @@ -3108,40 +3106,11 @@ ports.file_proxy.desc=Порт, используемый прокси-служб ports.http_bind=Привязка web ports.http_bind.desc_unsecured=Порт, используемый для небезопасных подключений клиентов по протоколу web. ports.http_bind.desc_secured=Порт, используемый для безопасного подключения клиентов по протоколу web. -ports.media_proxy=Прокси-сервер в реальном времени -ports.media_proxy.desc=Порт, используемый для прокси-службы, который позволяет соединениям Jingle между двумя объектами в сети XMPP. ports.jmx_console=Консоль JMX ports.jmx_console.desc=Порт, используемый JMX для обеспечения доступа JConsole к Openfire через RMI. ports.jmx_console.alt=Требуются учётные данные администратора Openfire ports.secure.alt=Порт, используемый протоколом SSL для шифрования трафика по сети -# Media Proxy - -mediaproxy.desc = Прокси-сервер мультимедиа позволяет клиентам создавать мультимедийные (в том числе VoIP) соединения друг с другом при сбое соединений одноранговых соединений, например, когда один или оба клиента находятся за строгим брандмауэром. -mediaproxy.settings.success = Настройки успешно обновлены. -mediaproxy.form.label = Настройки прокси-сервера мультимедиа -mediaproxy.form.enabled = Включить -mediaproxy.form.enabled.desc = Этот сервер будет выступать в качестве мультимедийного прокси-сервера. -mediaproxy.form.disabled = Отключить -mediaproxy.form.disabled.desc = Этот сервер не будет выступать в качестве мультимедийного прокси-сервера. -mediaproxy.form.idletimeout = Тайм-аут простоя сеанса (в секундах) -mediaproxy.form.idletimeout.tip = Это значение обычно больше 15 секунд. -mediaproxy.form.lifetime = Время жизни сеанса (в секундах) -mediaproxy.form.lifetime.tip = Время жизни - это максимальное время жизни сеанса. По истечении этого времени он закрывается, даже если остается активным. -mediaproxy.form.minport = Мин. диапазон портов -mediaproxy.form.maxport = Макс. диапазон портов -mediaproxy.form.echoport = Порт проверки эхо (ECHO) - -mediaproxy.summary.label = Сводка активных сеансов -mediaproxy.summary.desc = Сеансы представляют собой каналы прокси-сервера мультимедиа, которые управляют ретрансляцией пакетов. В приведенном ниже списке показаны текущие сеансы и какой пользователь создал канал. -mediaproxy.summary.session.creator = Создатель -mediaproxy.summary.session.port = Порт -mediaproxy.summary.session.server = Сервер -mediaproxy.summary.session.inactivity = Бездействие (сек) -mediaproxy.summary.session.type = Тип -mediaproxy.summary.session.noactive = Нет активных сеансов -mediaproxy.summary.stopbutton = Остановить активные сеансы - # Import keystore certificate page ssl.import.certificate.keystore.title=Импортировать подписанный сертификат для связи на основе сокета diff --git a/i18n/src/main/resources/openfire_i18n_sk.properties b/i18n/src/main/resources/openfire_i18n_sk.properties index 19b68a76b7..18320081de 100644 --- a/i18n/src/main/resources/openfire_i18n_sk.properties +++ b/i18n/src/main/resources/openfire_i18n_sk.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=Click to manage certificate sidebar.security-truststore-administrative-s2s=Server (administrative) Truststore sidebar.security-truststore-administrative-s2s.descr=Click to manage certificates used for administrative, server-to-server communication. sidebar.sidebar-media-services=Multimediálne služby -sidebar.media-proxy=P=Multimediálny proxy -sidebar.media-proxy.descr=t=Kliknutím zobrazíte nastavenia multimediálneho proxy. sidebar.sidebar-pubsub=PubSub sidebar.pubsub-service-summary=PubSub Service sidebar.pubsub-service-summary.descr=Click to manage PubSub service @@ -3100,40 +3098,11 @@ ports.file_proxy.desc=Tento port používa proxy služba, ktorá umožňuje pren ports.http_bind=Web väzba ports.http_bind.desc_unsecured=Tento port sa používa pre nezabezpečené klientské web spojenia. ports.http_bind.desc_secured=Tento port sa používa pre zabezpečené klientské web spojenia. -ports.media_proxy=Multimediálny proxy realtime media -ports.media_proxy.desc=Tento port používa proxy služba, ktorá umožňuje spojenia Jingle medzi dvomi entitami v sieti XMPP. ports.jmx_console=JMX Console ports.jmx_console.desc=The port used by the JMX connector to provide JConsole access to Openfire via RMI. ports.jmx_console.alt=Requires Openfire admin credentials ports.secure.alt=This port uses SSL to encrypt traffic over the network -# Media Proxy - -mediaproxy.desc = Multimediálny proxy umožňuje klientom nadväzovať multimediálne spojenia (vrátane VoIP) s inými, keď zlyhajú spojenia peer-to-peer, ako v prípade, že sa jeden alebo obaja klienti nachádzajú za prísnym firewallom. -mediaproxy.settings.success = Nastavenia úspešne aktualizované. -mediaproxy.form.label = Nastavenia multimediálneho proxy -mediaproxy.form.enabled = Zapnuté -mediaproxy.form.enabled.desc = Tento server bude slúžiť ako multimediálne proxy. -mediaproxy.form.disabled = Vypnutá -mediaproxy.form.disabled.desc = Tento server nebude slúžiť ako multimediálne proxy. -mediaproxy.form.idletimeout = Čas expirácie relácie (v sekundách) -mediaproxy.form.idletimeout.tip = Táto hodnota zvyčajne býva väčšia ako 15 sekúnd. -mediaproxy.form.lifetime = Životnosť relácie (v sekundách) -mediaproxy.form.lifetime.tip = Životnosť je maximálna doba, po ktorú relácia pretrvá. Po tejto dobe bude zničená, aj ak je stále aktívna. -mediaproxy.form.minport = Najnižší z rozsahu portov -mediaproxy.form.maxport = Navyšší z rozsahu portov -mediaproxy.form.echoport = Port pre test Echo - -mediaproxy.summary.label = Zhrnutie aktívnych relácií -mediaproxy.summary.desc = Relácie sú kanály multimediálneho proxy, ktorý riadi prepínanie paketov. Tento zoznam zobrazuje momentálne bežiace relácie a používateľa, ktorý vytvoril kanál. -mediaproxy.summary.session.creator = Vytvoril -mediaproxy.summary.session.port = Port -mediaproxy.summary.session.server = Server -mediaproxy.summary.session.inactivity = Neaktivita (v sekundách) -mediaproxy.summary.session.type = Typ -mediaproxy.summary.session.noactive = Žiadne aktívne relácie -mediaproxy.summary.stopbutton = Zastaviť aktívne relácie - # Import keystore certificate page ssl.import.certificate.keystore.title=Importovať podpísaný certifikát diff --git a/i18n/src/main/resources/openfire_i18n_tr_TR.properties b/i18n/src/main/resources/openfire_i18n_tr_TR.properties index c1c805ede7..f9ac360b23 100644 --- a/i18n/src/main/resources/openfire_i18n_tr_TR.properties +++ b/i18n/src/main/resources/openfire_i18n_tr_TR.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=Yönetimsel, istemci-sunucu sidebar.security-truststore-administrative-s2s=Sunucu (yönetimsel) Güven Deposu sidebar.security-truststore-administrative-s2s.descr=Sunucudan sunucuya iletişimde, yönetimsel amaçla kullanılan sertifikaları yönetmek için tıklayın. sidebar.sidebar-media-services=Medya Hizmetleri -sidebar.media-proxy=Medya Vekili -sidebar.media-proxy.descr=Medya vekil sunucu ayarlarını görüntülemek için tıklayın. sidebar.sidebar-pubsub=Yayınla Abone Ol sidebar.pubsub-service-summary=Yayınla Abone Ol Hizmeti sidebar.pubsub-service-summary.descr=Yayınla Abone Ol hizmetini yönetmek için tıklayın diff --git a/i18n/src/main/resources/openfire_i18n_uk_UA.properties b/i18n/src/main/resources/openfire_i18n_uk_UA.properties index da6fb18a0a..2d2ae56cec 100644 --- a/i18n/src/main/resources/openfire_i18n_uk_UA.properties +++ b/i18n/src/main/resources/openfire_i18n_uk_UA.properties @@ -93,8 +93,6 @@ sidebar.security-truststore-administrative-c2s.descr=Натисніть, щоб sidebar.security-truststore-administrative-s2s=Довічне сховище сервера (адміністративний) sidebar.security-truststore-administrative-s2s.descr=Натисніть, щоб керувати сертифікатами, які використовуються для адміністративного зв’язку між серверами. sidebar.sidebar-media-services=Медіа-сервіси -sidebar.media-proxy=Медіа-проксі -sidebar.media-proxy.descr=Натисніть, щоб переглянути налаштування медіапроксі. sidebar.sidebar-pubsub=PubSub sidebar.pubsub-service-summary=Сервіс PubSub sidebar.pubsub-service-summary.descr=Натисніть, щоб керувати службою PubSub @@ -3101,40 +3099,11 @@ ports.file_proxy.desc=Порт, який використовується для ports.http_bind=Веб-зв'язування ports.http_bind.desc_unsecured=Порт, який використовується для незахищених підключень веб-клієнта (websocket і BOSH). ports.http_bind.desc_secured=Порт, який використовується для захищених підключень веб-клієнта (websocket і BOSH). -ports.media_proxy=Медіа-проксі у реальному часі -ports.media_proxy.desc=Порт, який використовується для проксі-сервісу, який дозволяє Jingle-з’єднання між двома об’єктами в мережі XMPP. ports.jmx_console=Консоль JMX ports.jmx_console.desc=Порт, який використовується роз’ємом JMX для надання доступу JConsole до Openfire через RMI. ports.jmx_console.alt=Потрібні облікові дані адміністратора Openfire ports.secure.alt=Цей порт використовує SSL для шифрування трафіку в мережі -# Media Proxy - -mediaproxy.desc = Проксі-сервер медіа дозволяє клієнтам встановлювати мультимедійні (включаючи VoIP) з’єднання один з одним у разі збою однорангових з’єднань, наприклад, коли один або обидва клієнти знаходяться за суворим брандмауером. -mediaproxy.settings.success = Налаштування успішно оновлено. -mediaproxy.form.label = Параметри медіапроксі -mediaproxy.form.enabled = Увімкнено -mediaproxy.form.enabled.desc = Цей сервер діятиме як медіа-проксі. -mediaproxy.form.disabled = Вимкнено -mediaproxy.form.disabled.desc = Цей сервер не працюватиме як медіа-проксі. -mediaproxy.form.idletimeout = Час простою сеансу (у секундах) -mediaproxy.form.idletimeout.tip = Зазвичай це значення перевищує 15 секунд. -mediaproxy.form.lifetime = Тривалість сеансу (у секундах) -mediaproxy.form.lifetime.tip = Час життя – це максимальний час, протягом якого може жити сесія. Після закінчення цього часу він знищується, навіть якщо він все ще активний. -mediaproxy.form.minport = Мінімальний діапазон портів -mediaproxy.form.maxport = Максимальний діапазон портів -mediaproxy.form.echoport = Тестовий порт відлуння - -mediaproxy.summary.label = Підсумок активних сесій -mediaproxy.summary.desc = Сесії – це медіапроксі-канали, які керують ретрансляцією пакетів. У списку нижче показано поточні запущені сеанси та користувач, який створив канал. -mediaproxy.summary.session.creator = Творець -mediaproxy.summary.session.port = Порт -mediaproxy.summary.session.server = Сервер -mediaproxy.summary.session.inactivity = Бездіяльність (с) -mediaproxy.summary.session.type = Тип -mediaproxy.summary.session.noactive = Немає активних сесій -mediaproxy.summary.stopbutton = Зупинити активні сеcії - # Import keystore certificate page ssl.import.certificate.keystore.title=Імпорт підписаного сертифіката для зв’язку на основі сокетів diff --git a/i18n/src/main/resources/openfire_i18n_zh_CN.properties b/i18n/src/main/resources/openfire_i18n_zh_CN.properties index c77d8e17dc..988ca2b54f 100644 --- a/i18n/src/main/resources/openfire_i18n_zh_CN.properties +++ b/i18n/src/main/resources/openfire_i18n_zh_CN.properties @@ -97,8 +97,6 @@ sidebar.security-truststore-administrative-c2s.descr=点击即可管理用于管 sidebar.security-truststore-administrative-s2s=服务器(管理类)信任存储 sidebar.security-truststore-administrative-s2s.descr=点击即可管理用于管理类、服务器到服务器通信的证书。 sidebar.sidebar-media-services=媒体服务 -sidebar.media-proxy=媒体代理 -sidebar.media-proxy.descr=点击即可查看媒体代理设置。 sidebar.sidebar-pubsub=发布—订阅 sidebar.pubsub-service-summary=发布—订阅服务 sidebar.pubsub-service-summary.descr=点击即可管理发布—订阅服务 @@ -3193,40 +3191,11 @@ ports.file_proxy.desc=用于代理服务的端口,该端口允许在 XMPP 网 ports.http_bind=Web 绑定 ports.http_bind.desc_unsecured=用于不安全的 web 客户端连接(websocket 和 BOSH)的端口。 ports.http_bind.desc_secured=用于安全 web 客户端连接(websocket 和 BOSH)的端口。 -ports.media_proxy=实时媒体代理 -ports.media_proxy.desc=用于代理服务的端口,该端口允许 XMPP 网络上两个实体之间的 Jingle 连接。 ports.jmx_console=JMX 控制台 ports.jmx_console.desc=JMX 连接器用于通过 RMI 提供对 Openfire 的 JConsole 访问的端口。 ports.jmx_console.alt=需要 Openfire 管理员凭据 ports.secure.alt=此端口使用 SSL 加密网络上的流量 -# Media Proxy - -mediaproxy.desc = 当对等连接失败时,例如当一个或两个客户端都在严格的防火墙后面时,媒体代理使客户端能够进行富媒体(包括 VoIP)连接。 -mediaproxy.settings.success = 设置更新成功。 -mediaproxy.form.label = 媒体代理设置 -mediaproxy.form.enabled = 已启用 -mediaproxy.form.enabled.desc = 此服务器将充当媒体代理。 -mediaproxy.form.disabled = 已禁用 -mediaproxy.form.disabled.desc = 此服务器不会充当媒体代理。 -mediaproxy.form.idletimeout = 会话空闲超时(秒) -mediaproxy.form.idletimeout.tip = 此值通常大于 15 秒。 -mediaproxy.form.lifetime = 会话寿命(秒) -mediaproxy.form.lifetime.tip = 寿命是会话可以存活的最长时间。在这段时间之后,即使它仍然处于活动状态,它也会被摧毁。 -mediaproxy.form.minport = 端口范围最小值 -mediaproxy.form.maxport = 端口范围最大值 -mediaproxy.form.echoport = 回声测试端口 - -mediaproxy.summary.label = 活动会话摘要 -mediaproxy.summary.desc = 会话是控制数据包中继的媒体代理通道。下面的列表显示当前正在运行的会话以及哪个用户创建了该通道。 -mediaproxy.summary.session.creator = 创建者 -mediaproxy.summary.session.port = 端口 -mediaproxy.summary.session.server = 服务器 -mediaproxy.summary.session.inactivity = 不活动(秒) -mediaproxy.summary.session.type = 类型 -mediaproxy.summary.session.noactive = 没有活动会话 -mediaproxy.summary.stopbutton = 停止活动会话 - # Import keystore certificate page ssl.import.certificate.keystore.title=为基于套接字的通信导入签名证书 diff --git a/xmppserver/src/main/java/org/jivesoftware/openfire/XMPPServer.java b/xmppserver/src/main/java/org/jivesoftware/openfire/XMPPServer.java index 52f2bf4bf8..f04fa0414e 100644 --- a/xmppserver/src/main/java/org/jivesoftware/openfire/XMPPServer.java +++ b/xmppserver/src/main/java/org/jivesoftware/openfire/XMPPServer.java @@ -34,6 +34,7 @@ import org.jivesoftware.openfire.container.AdminConsolePlugin; import org.jivesoftware.openfire.container.Module; import org.jivesoftware.openfire.container.PluginManager; +import org.jivesoftware.openfire.container.PluginManagerListener; import org.jivesoftware.openfire.csi.CsiModule; import org.jivesoftware.openfire.disco.*; import org.jivesoftware.openfire.entitycaps.EntityCapabilitiesManager; @@ -45,7 +46,6 @@ import org.jivesoftware.openfire.keystore.CertificateStoreManager; import org.jivesoftware.openfire.keystore.IdentityStore; import org.jivesoftware.openfire.lockout.LockOutManager; -import org.jivesoftware.openfire.mediaproxy.MediaProxyService; import org.jivesoftware.openfire.muc.MultiUserChatManager; import org.jivesoftware.openfire.net.MulticastDNSService; import org.jivesoftware.openfire.net.ServerTrafficCounter; @@ -704,6 +704,7 @@ public void start() { if (!setupMode) { scanForSystemPropertyClasses(); + warnIfRemovedMediaProxyIsEnabled(); } } catch (Exception e) { @@ -714,6 +715,29 @@ public void start() { } } + /** + * Logs a warning when the configuration enables the Media Proxy, which is no longer part of Openfire, while the + * plugin that provides it is not installed. The check is performed after plugins have been loaded. + * + * @see OF-3408 + */ + private void warnIfRemovedMediaProxyIsEnabled() { + if (!JiveGlobals.getBooleanProperty("mediaproxy.enabled", false)) { + return; + } + pluginManager.addPluginManagerListener(new PluginManagerListener() { + @Override + public void pluginsMonitored() { + pluginManager.removePluginManagerListener(this); + if (pluginManager.getPluginByCanonicalName("rtpbridge").isEmpty()) { + final String message = "Property 'mediaproxy.enabled' enables the RTP Bridge (formerly known as the Media Proxy), but that is no longer part of Openfire. To continue using it, install the 'RTP Bridge' plugin. Otherwise, remove the property to stop this warning."; + logger.warn(message); + System.out.println(message); + } + } + }); + } + // A SystemProperty class will not appear in the System Properties screen until it is referenced. This method // ensures that they are all referenced immediately. // The following class cannot always be loaded as it references a class that's part of the Install4J launcher @@ -795,7 +819,6 @@ private void loadModules() { loadModule(IQPrivacyHandler.class.getName()); loadModule(DefaultFileTransferManager.class.getName()); loadModule(FileTransferProxy.class.getName()); - loadModule(MediaProxyService.class.getName()); loadModule(PubSubModule.class.getName()); loadModule(IQDiscoInfoHandler.class.getName()); loadModule(IQDiscoItemsHandler.class.getName()); @@ -1690,17 +1713,6 @@ public FileTransferManager getFileTransferManager() { return (FileTransferManager) modules.get(DefaultFileTransferManager.class); } - /** - * Returns the MediaProxyService registered with this server. The - * MediaProxyService was registered with the server as a module while starting up - * the server. - * - * @return the MediaProxyService registered with this server. - */ - public MediaProxyService getMediaProxyService() { - return (MediaProxyService) modules.get(MediaProxyService.class); - } - /** * Returns the VCardManager registered with this server. The * VCardManager was registered with the server as a module while starting up diff --git a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/Channel.java b/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/Channel.java deleted file mode 100644 index 393ce74285..0000000000 --- a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/Channel.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (C) 2005-2008 Jive Software, 2017-2022 Ignite Realtime Foundation. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jivesoftware.openfire.mediaproxy; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetAddress; -import java.net.SocketException; -import java.net.UnknownHostException; -import java.util.ArrayList; -import java.util.List; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Listen packets from defined dataSocket and send packets to the defined host. - * - * @author Thiago Camargo - */ -abstract class Channel implements Runnable { - - private static final Logger Log = LoggerFactory.getLogger(Channel.class); - - protected byte[] buf = new byte[5000]; - protected DatagramSocket dataSocket; - protected DatagramPacket packet; - protected boolean enabled = true; - - List listeners = new ArrayList<>(); - - protected InetAddress host; - protected int port; - - /** - * Creates a Channel according to the parameters. - * - * @param dataSocket datasocket to used to send and receive packets - * @param host default destination host for received packets - * @param port default destination port for received packets - */ - public Channel(DatagramSocket dataSocket, InetAddress host, int port) { - this.dataSocket = dataSocket; - this.host = host; - this.port = port; - } - - /** - * Get the host that the packet will be sent to. - * - * @return remote host address - */ - public InetAddress getHost() { - return host; - } - - /** - * Set the host that the packet will be sent to. - * @param host the host to send the packet to - */ - protected void setHost(InetAddress host) { - this.host = host; - } - - /** - * Get the port that the packet will be sent to. - * - * @return The remote port number - */ - public int getPort() { - return port; - } - - /** - * Set the port that the packet will be sent to. - * - * @param port the port to send the packet to - */ - protected void setPort(int port) { - this.port = port; - } - - /** - * Adds a DatagramListener to the Channel - * - * @param datagramListener the listener to add - */ - public void addListener(DatagramListener datagramListener) { - listeners.add(datagramListener); - } - - /** - * Remove a DatagramListener from the Channel - * - * @param datagramListener the listener to remove - */ - public void removeListener(DatagramListener datagramListener) { - listeners.remove(datagramListener); - } - - /** - * Remove every Listeners - */ - public void removeListeners() { - listeners.clear(); - } - - public void cancel() { - this.enabled = false; - if (dataSocket != null){ - dataSocket.close(); - } - } - - /** - * Thread override method - */ - @Override - public void run() { - try { - while (enabled) { - // Block until a datagram appears: - packet = new DatagramPacket(buf, buf.length); - dataSocket.receive(packet); - - if (handle(packet)) { - boolean resend = true; - - for (DatagramListener dl : listeners) { - boolean send = dl.datagramReceived(packet); - if (resend && !send) { - resend = false; - } - } - - if (resend) { - relayPacket(packet); - } - } - } - } - catch (UnknownHostException uhe) { - if (enabled) { - Log.error("Unknown Host", uhe); - } - } - catch (SocketException se) { - if (enabled) { - Log.error("Socket closed", se); - } - } - catch (IOException ioe) { - if (enabled) { - Log.error("Communication error", ioe); - } - } - } - - public void relayPacket(DatagramPacket packet) { - try { - DatagramPacket echo = new DatagramPacket(packet.getData(), packet.getLength(), host, port); - dataSocket.send(echo); - } - catch (IOException e) { - Log.error(e.getMessage(), e); - } - } - - /** - * Handles received packet and returns true if the packet should be processed by the channel. - * - * @param packet received datagram packet - * @return true if listeners will be alerted that a new packet was received. - */ - abstract boolean handle(DatagramPacket packet); -} diff --git a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/DatagramListener.java b/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/DatagramListener.java deleted file mode 100644 index 78abf84a72..0000000000 --- a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/DatagramListener.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2005-2008 Jive Software, 2017-2018 Ignite Realtime Foundation. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jivesoftware.openfire.mediaproxy; - -import java.net.DatagramPacket; - -/** - * Listener for datagram packets received. - * - * @author Thiago Camargo - */ -public interface DatagramListener { - - /** - * Called when a datagram is received. If the method returns false, the - * packet MUST NOT be resent from the received Channel. - * - * @param datagramPacket the datagram packet received. - * @return ? - */ - boolean datagramReceived( DatagramPacket datagramPacket ); -} diff --git a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/DynamicAddressChannel.java b/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/DynamicAddressChannel.java deleted file mode 100644 index ace9c0468b..0000000000 --- a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/DynamicAddressChannel.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2005-2008 Jive Software, 2017-2018 Ignite Realtime Foundation. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jivesoftware.openfire.mediaproxy; - -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetAddress; - -/** - * Listen packets from defined dataSocket and send packets to the defined host. - * But also provides a mechanism to dynamic bind host and port implementing DatagramListener methods to - * change the host and port values according to the received packets. - * - * @author Thiago Camargo - */ -public class DynamicAddressChannel extends Channel implements Runnable, DatagramListener { - private int c = 0; - - /** - * Default Channel Constructor - * - * @param dataSocket datasocket to used to send and receive packets - * @param host default destination host for received packets - * @param port default destination port for received packets - */ - public DynamicAddressChannel(DatagramSocket dataSocket, InetAddress host, int port) { - super(dataSocket, host, port); - } - - @Override - boolean handle(DatagramPacket packet) { - // Relay Destination - if (c++ < 100) { // 100 packets are enough to discover relay address - this.setHost(packet.getAddress()); - this.setPort(packet.getPort()); - return true; - } else { - c = 1000; // Prevents long overflow - // Check Source Address. If it's different, discard packet. - return this.getHost().equals(packet.getAddress()); - } - } - - /** - * Implement DatagramListener method. - * Set the host and port value to the host and port value from the received packet. - * - * @param datagramPacket the received packet - */ - @Override - public boolean datagramReceived(DatagramPacket datagramPacket) { - this.relayPacket(datagramPacket); - return false; - } -} diff --git a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/Echo.java b/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/Echo.java deleted file mode 100644 index decdb3e994..0000000000 --- a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/Echo.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2005-2008 Jive Software, 2017-2019 Ignite Realtime Foundation. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jivesoftware.openfire.mediaproxy; - -import java.io.IOException; -import java.net.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class Echo implements Runnable { - private static final Logger Log = LoggerFactory.getLogger(Echo.class); - DatagramSocket socket = null; - byte password[] = null; - List listeners = new ArrayList<>(); - boolean enabled = true; - - public Echo(int port) throws UnknownHostException, SocketException { - this.socket = new DatagramSocket(port, InetAddress.getByName("0.0.0.0")); - } - - @Override - public void run() { - try { - //System.out.println("Listening for ECHO: " + socket.getLocalAddress().getHostAddress() + ":" + socket.getLocalPort()); - while (true) { - - DatagramPacket packet = new DatagramPacket(new byte[8], 8); - - socket.receive(packet); - - System.out.println("ECHO Packet Received in: " + socket.getLocalAddress().getHostAddress() + ":" + socket.getLocalPort() + " From: " + packet.getAddress().getHostAddress() + ":" + packet.getPort()); - - for (DatagramListener listener : listeners) { - try { - listener.datagramReceived(packet); - } catch (Exception e) { - Log.warn("An exception occurred while dispatching a 'datagramReceived' event!", e); - } - } - - packet.setAddress(packet.getAddress()); - packet.setPort(packet.getPort()); - if (!Arrays.equals(packet.getData(), password)) - for (int i = 0; i < 3; i++) - socket.send(packet); - } - } catch (IOException ioe) { - if (enabled) { - } - } - } - - public void cancel() { - this.enabled = false; - socket.close(); - } -} diff --git a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/MediaProxy.java b/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/MediaProxy.java deleted file mode 100644 index 73908e4c7b..0000000000 --- a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/MediaProxy.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright (C) 2005-2008 Jive Software, 2017-2019 Ignite Realtime Foundation. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jivesoftware.openfire.mediaproxy; - -import java.util.Collection; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * A Media Proxy relays UDP traffic between two IPs to provide connectivity between - * two parties that are behind NAT devices. It also provides connectivity - * between two parties that are directly connected to the internet or one party on the - * internet and another behind a NAT.

- * - * Each connection relay between two parties is called a session. You can setup a MediaProxy - * for all network interfaces with an empty constructor, or bind it to a specific interface - * with the MediaProxy(String localhost) constructor. The media proxy ONLY works if you - * are directly connected to the Internet with a valid IP address.. - * - * @author Thiago Camargo - */ -public class MediaProxy implements SessionListener { - - private static final Logger Log = LoggerFactory.getLogger(MediaProxy.class); - - final private Map sessions = new ConcurrentHashMap<>(); - - private String ipAddress; - - private int minPort = 10000; - private int maxPort = 20000; - - private long idleTime = 60000; - - // Lifetime of a Channel in Seconds - private long lifetime = 9000; - - /** - * Contruct a MediaProxy instance that will listen on a specific network interface. - * - * @param ipAddress the IP address on this server that will listen for packets. - */ - public MediaProxy(String ipAddress) { - this.ipAddress = ipAddress; - } - - /** - * Get the public IP of this media proxy that listen for incomming packets. - * - * @return the host that listens for incomming packets. - */ - public String getPublicIP() { - return ipAddress; - } - - /** - * Returns the max time (in millis) that a session can remain open without - * receiving any packets. After this time period elapses, the session is - * automatically closed. - * - * @return the max idle time (in millis). - */ - public long getIdleTime() { - return idleTime; - } - - /** - * Sets the max time (in millis) that a session can remain open without - * receiving any packets. After this time period elapses, the session is - * automatically closed. - * - * @param idleTime the max idle time in millis. - */ - public void setIdleTime(long idleTime) { - this.idleTime = idleTime; - } - - /** - * Returns the list of all currently active and running sessions. - * - * @return List of the Agents - */ - public Collection getSessions() { - return sessions.values(); - } - - /** - * Returns the minimum port value to listen for incoming packets. - * - * @return the minimum port value. - */ - public int getMinPort() { - return minPort; - } - - /** - * Sets the minimum port value to listen from incoming packets. - * - * @param minPort the minimum port value. - */ - public void setMinPort(int minPort) { - this.minPort = minPort; - } - - /** - * Returns the maximum port value to listen for incoming packets. - * - * @return the maximun port value. - */ - public int getMaxPort() { - return maxPort; - } - - /** - * Sets the maximum port value to listen for incoming packets. - * - * @param maxPort the maximun port value. - */ - public void setMaxPort(int maxPort) { - this.maxPort = maxPort; - } - - /** - * Returns the maximum lifetime (in seconds) of a session. After the time period - * elapses, the session will be destroyed even if currently active. - * - * @return the max lifetime of a session (in seconds). - */ - public long getLifetime() { - return lifetime; - } - - /** - * Sets the maximum lifetime (in seconds) of a session. After the time period - * elapses, the session will be destroyed even if currently active. - * - * @param lifetime the max lifetime of a session (in seconds). - */ - public void setLifetime(long lifetime) { - this.lifetime = lifetime; - } - - /** - * Returns a media proxy session with the specified ID. - * - * @param sid the session ID. - * @return the session or {@code null} if the session doesn't exist. - */ - public MediaProxySession getSession(String sid) { - MediaProxySession proxySession = sessions.get(sid); - if (proxySession != null) { - if (Log.isDebugEnabled()) { - Log.debug("MediaProxy: SID: " + sid + " agentSID: " + proxySession.getSID()); - return proxySession; - } - } - return null; - } - - /** - * Implements Session Listener stopAgent event. - * Remove the stopped session from the sessions list. - * - * @param session the session that stopped - */ - @Override - public void sessionClosed(MediaProxySession session) { - sessions.remove(session.getSID()); - if (Log.isDebugEnabled()) { - Log.debug("MediaProxy: Session: " + session.getSID() + " removed."); - } - } - - /** - * Add a new Dynamic Session to the mediaproxy for defined IPs and ports. - * The IP and port pairs can change depending of the Senders IP and port. - * Which means that the IP and port values of the points can dynamic change after the Channel is opened. - * When the agent receives a packet from Point A, the channel set the point A IP and port according to - * the received packet sender IP and port. - * Every packet received from Point B will be relayed to the new Point A IP and port. - * When the agent receives a packet from Point B, the channel set the point B IP and port according to - * the received packet sender IP and port. - * Every packet received from Point A will be relayed to the new Point B IP and port. - * Create a dynamic channel between two IPs. ( Dynamic Point A - Dynamic Point B ) - * - * @param id id of the candidate returned (Could be a Jingle session ID) - * @param creator the agent creator name or description - * @param hostA the hostname or IP of the point A of the Channel - * @param portA the port number point A of the Channel - * @param hostB the hostname or IP of the point B of the Channel - * @param portB the port number point B of the Channel - * @return the added ProxyCandidate - */ - public ProxyCandidate addRelayAgent(String id, String creator, String hostA, int portA, - String hostB, int portB) - { - RelaySession session = new RelaySession(id, creator, ipAddress, hostA, portA, hostB, portB, minPort, maxPort); - sessions.put(id, session); - session.addKeepAlive(idleTime); - session.addLifeTime(lifetime); - session.addAgentListener(this); - return session; - } - - /** - * Add a new Dynamic Session to the mediaproxy WITHOUT defined IPs and ports. - * The IP and port pairs WILL change depending of the Senders IP and port. - * Which means that the IP and port values of the points will dynamic change after the Channel is opened - * and received packet from both points. - * When the agent receives a packet from Point A, the channel set the point A IP and port according to - * the received packet sender IP and port. - * Every packet received from Point B will be relayed to the new Point A IP and port. - * When the agent receives a packet from Point B, the channel set the point B IP and port according to - * the received packet sender IP and port. - * Every packet received from Point A will be relayed to the new Point B IP and port. - * Create a dynamic channel between two IPs. ( Dynamic Point A - Dynamic Point B ) - * - * @param id id of the candidate returned (Could be a Jingle session ID) - * @param creator the agent creator name or description - * @return the added ProxyCandidate - */ - public ProxyCandidate addRelayAgent(String id, String creator) { - return addRelayAgent(id, creator, ipAddress, 40000, ipAddress, 40004); - } - - /** - * Stop every running sessions. - */ - void stopProxy() { - for (MediaProxySession session : getSessions()) { - try { - session.clearAgentListeners(); - session.stopAgent(); - } - catch (Exception e) { - Log.error("Error cleaning up media proxy sessions", e); - } - } - sessions.clear(); - } -} diff --git a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/MediaProxyService.java b/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/MediaProxyService.java deleted file mode 100644 index 7afe72768c..0000000000 --- a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/MediaProxyService.java +++ /dev/null @@ -1,480 +0,0 @@ -/* - * Copyright (C) 2005-2008 Jive Software, 2017-2025 Ignite Realtime Foundation. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jivesoftware.openfire.mediaproxy; - -import org.dom4j.Attribute; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; -import org.jivesoftware.openfire.*; -import org.jivesoftware.openfire.auth.UnauthorizedException; -import org.jivesoftware.openfire.container.BasicModule; -import org.jivesoftware.openfire.disco.*; -import org.jivesoftware.util.JiveGlobals; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.xmpp.forms.DataForm; -import org.xmpp.packet.IQ; -import org.xmpp.packet.JID; -import org.xmpp.packet.Packet; -import org.xmpp.packet.PacketError; - -import java.net.SocketException; -import java.net.UnknownHostException; -import java.util.*; - -/** - * A proxy service for UDP traffic such as RTP. It provides Jingle transport candidates - * to be used for media transmission. The media proxy is especially useful for users - * behind NAT devices or firewalls that prevent peer to peer communication. - * - * @author Thiago Camargo - */ -public class MediaProxyService extends BasicModule - implements ServerItemsProvider, RoutableChannelHandler, DiscoInfoProvider, DiscoItemsProvider { - - private static final Logger Log = LoggerFactory.getLogger(MediaProxyService.class); - - private String serviceName; - private RoutingTable routingTable; - private PacketRouter router; - private Echo echo = null; - private int echoPort = 10020; - private SessionManager sessionManager = null; - - private MediaProxy mediaProxy = null; - private boolean enabled = true; - - public static final String NAMESPACE = "http://www.jivesoftware.com/protocol/rtpbridge"; - - /** - * Constructs a new MediaProxyService. - */ - public MediaProxyService() { - super("Media Proxy Service"); - } - - @Override - public void initialize(XMPPServer server) { - super.initialize(server); - - sessionManager = server.getSessionManager(); - // In some cases, the domain name of the server may not be the actual address of the machine - // (ie, when using DNS SRV records). In that case, the "mediaproxy.externalip" property should be - // set to the IP address of the actual server where the media proxy is listening. - String ipAddress = JiveGlobals.getProperty("mediaproxy.externalip", server.getServerInfo().getXMPPDomain()); - mediaProxy = new MediaProxy(ipAddress); - - String defaultName = "rtpbridge"; - serviceName = JiveGlobals.getProperty("mediaproxy.serviceName", defaultName); - serviceName = serviceName.isEmpty() ? defaultName : serviceName; - - echoPort = JiveGlobals.getIntProperty("mediaproxy.echoPort", echoPort); - - routingTable = server.getRoutingTable(); - router = server.getPacketRouter(); - - initMediaProxy(); - } - - @Override - public void start() { - if (isEnabled()) { - - try { - echo = new Echo(echoPort); - Thread t = new Thread(echo); - t.start(); - } catch (UnknownHostException | SocketException e) { - // Ignore - } - - routingTable.addComponentRoute(getAddress(), this); - XMPPServer.getInstance().getIQDiscoItemsHandler().addServerItemsProvider(this); - } else { - if (echo != null) echo.cancel(); - XMPPServer.getInstance().getIQDiscoItemsHandler().removeComponentItem(getAddress().toString()); - } - } - - @Override - public void stop() { - super.stop(); - mediaProxy.stopProxy(); - XMPPServer.getInstance().getIQDiscoItemsHandler().removeComponentItem(getAddress().toString()); - routingTable.removeComponentRoute(getAddress()); - if (echo != null) echo.cancel(); - } - - // Component Interface - - @Override - public String getName() { - // Get the name from the plugin.xml file. - return serviceName; - } - - @Override - public Iterator getItems(String name, String node, JID senderJID) { - // A proxy server has no items - return new ArrayList().iterator(); - } - - @Override - public void process(Packet packet) throws UnauthorizedException, PacketException { - // Check if user is allowed to send packet to this service - if (packet instanceof IQ) { - // Handle disco packets - IQ iq = (IQ) packet; - // Ignore IQs of type ERROR or RESULT - if (IQ.Type.error == iq.getType() || IQ.Type.result == iq.getType()) { - return; - } - processIQ(iq); - } - } - - private void processIQ(IQ iq) { - IQ reply = IQ.createResultIQ(iq); - Element childElement = iq.getChildElement(); - String namespace = childElement.getNamespaceURI(); - Element childElementCopy = iq.getChildElement().createCopy(); - reply.setChildElement(childElementCopy); - - if ("http://jabber.org/protocol/disco#info".equals(namespace)) { - reply = XMPPServer.getInstance().getIQDiscoInfoHandler().handleIQ(iq); - router.route(reply); - return; - } else if ("http://jabber.org/protocol/disco#items".equals(namespace)) { - // a component - reply = XMPPServer.getInstance().getIQDiscoItemsHandler().handleIQ(iq); - router.route(reply); - return; - } else if (NAMESPACE.equals(namespace) && enabled) { - - List candidateElements = childElementCopy.elements("candidate"); - String sid = childElementCopy.attribute("sid").getValue() + "-" + iq.getFrom(); - - if (!candidateElements.isEmpty()) { - for (final Element candidateElement : candidateElements) { - childElementCopy.remove(candidateElement); - Element candidate = childElementCopy.addElement("candidate "); - ProxyCandidate proxyCandidate = mediaProxy.addRelayAgent(sid, iq.getFrom().toString()); - Log.debug("MediaProxyService: "+sid); - proxyCandidate.start(); - candidate.addAttribute("name", "voicechannel"); - candidate.addAttribute("ip", mediaProxy.getPublicIP()); - candidate.addAttribute("porta", String.valueOf(proxyCandidate.getLocalPortA())); - candidate.addAttribute("portb", String.valueOf(proxyCandidate.getLocalPortB())); - candidate.addAttribute("pass", proxyCandidate.getPass()); - } - } else { - final List relayElements = childElementCopy.elements("relay"); - if (!relayElements.isEmpty()) { - for (final Element relayElement : relayElements) { - MediaProxySession session = mediaProxy.getSession(sid); - Log.debug("MediaProxyService: {}", sid); - if (session != null) { - Attribute pass = relayElement.attribute("pass"); - - if (pass != null && pass.getValue().trim().equals(session.getPass().trim())) { - Attribute portA = relayElement.attribute("porta"); - Attribute portB = relayElement.attribute("portb"); - Attribute hostA = relayElement.attribute("hosta"); - Attribute hostB = relayElement.attribute("hostb"); - - try { - if (hostA != null && portA != null) { - for (int i = 0; i < 2; i++) { - session.sendFromPortA(hostB.getValue(), Integer.parseInt(portB.getValue())); - } - } - } catch (Exception e) { - Log.error(e.getMessage(), e); - } - - } else { - reply.setError(PacketError.Condition.forbidden); - } - } - childElementCopy.remove(relayElement); - } - } else { - final List publicips = childElementCopy.elements("publicip"); - if (!publicips.isEmpty()) { - for (final Element publicip : publicips) { - childElementCopy.remove(publicip); - Element publicIp = childElementCopy.addElement("publicip"); - try { - String ip = sessionManager.getSession(iq.getFrom()).getHostAddress(); - if (ip != null) { - publicIp.addAttribute("ip", ip); - } - } catch (UnknownHostException e) { - Log.error(e.getMessage(), e); - } - } - } else { - reply.setError(PacketError.Condition.forbidden); - } - } - } - } else { - // Answer an error since the server can't handle the requested namespace - Log.trace("Responding with 'service-unavailable': the server can't handle the requested namespace: {}", iq); - reply.setError(PacketError.Condition.service_unavailable); - } - - try { - if (Log.isDebugEnabled()) { - Log.debug("MediaProxyService: RETURNED:" + reply.toXML()); - } - router.route(reply); - } - catch (Exception e) { - Log.error(e.getMessage(), e); - } - } - - /** - * Load config using JiveGlobals - */ - private void initMediaProxy() { - try { - long idleTime = - Long.parseLong(JiveGlobals.getProperty("mediaproxy.idleTimeout")); - mediaProxy.setIdleTime(idleTime); - } - catch (NumberFormatException e) { - // Do nothing let the default values to be used. - } - try { - long lifetime = - Long.parseLong(JiveGlobals.getProperty("mediaproxy.lifetime")); - mediaProxy.setLifetime(lifetime); - } - catch (NumberFormatException e) { - // Do nothing let the default values to be used. - } - try { - int minPort = Integer.parseInt(JiveGlobals.getProperty("mediaproxy.portMin")); - mediaProxy.setMinPort(minPort); - } - catch (NumberFormatException e) { - // Do nothing let the default values to be used. - } - try { - int maxPort = JiveGlobals.getIntProperty("mediaproxy.portMax", mediaProxy.getMaxPort()); - mediaProxy.setMaxPort(maxPort); - } - catch (NumberFormatException e) { - // Do nothing let the default values to be used. - } - this.enabled = JiveGlobals.getBooleanProperty("mediaproxy.enabled"); - } - - /** - * Returns the fully-qualifed domain name of this chat service. - * The domain is composed by the service name and the - * name of the XMPP server where the service is running. - * - * @return the file transfer server domain (service name + host name). - */ - public String getServiceDomain() { - return serviceName + "." + XMPPServer.getInstance().getServerInfo().getXMPPDomain(); - } - - @Override - public JID getAddress() { - return new JID(null, getServiceDomain(), null); - } - - @Override - public Iterator getItems() - { - List items = new ArrayList<>(); - if (!isEnabled()) - { - return items.iterator(); - } - - final DiscoServerItem item = new DiscoServerItem(new JID( - getServiceDomain()), "Media Proxy Service", null, null, this, this); - items.add(item); - return items.iterator(); - } - - @Override - public Iterator getIdentities(String name, String node, JID senderJID) { - List identities = new ArrayList<>(); - // Answer the identity of the proxy - Element identity = DocumentHelper.createElement("identity"); - identity.addAttribute("category", "proxy"); - identity.addAttribute("name", "Media Proxy Service"); - identity.addAttribute("type", "rtpbridge"); - - identities.add(identity); - - return identities.iterator(); - } - - @Override - public Iterator getFeatures(String name, String node, JID senderJID) { - return Arrays.asList(NAMESPACE, - "http://jabber.org/protocol/disco#info").iterator(); - } - - @Override - public Set getExtendedInfos(String name, String node, JID senderJID) { - return new HashSet<>(); - } - - @Override - public boolean hasInfo(String name, String node, JID senderJID) { - return true; - } - - /** - * Return the list of active Agents - * - * @return list of active agents - */ - public Collection getAgents() { - return mediaProxy.getSessions(); - } - - /** - * Set the keep alive delay of the mediaproxy agents. - * When an agent stay more then this delay, the agent is destroyed. - * - * @param delay time in millis - */ - public void setKeepAliveDelay(long delay) { - mediaProxy.setIdleTime(delay); - } - - /** - * Returns the maximum amount of time (in milleseconds) that a session can - * be idle before it's closed. - * - * @return the max idle time in millis. - */ - public long getIdleTime() { - return mediaProxy.getIdleTime(); - } - - /** - * Set Minimal port value to listen for incoming packets. - * - * @param minPort port value to listen for incoming packets - */ - public void setMinPort(int minPort) { - mediaProxy.setMinPort(minPort); - } - - /** - * Set Maximum port value to listen for incoming packets. - * - * @param maxPort port value to listen for incoming packets - */ - public void setMaxPort(int maxPort) { - mediaProxy.setMaxPort(maxPort); - } - - /** - * Get Minimal port value to listen from incoming packets. - * - * @return minPort - */ - public int getMinPort() { - return mediaProxy.getMinPort(); - } - - /** - * Get Maximum port value to listen from incoming packets. - * - * @return maxPort - */ - public int getMaxPort() { - return mediaProxy.getMaxPort(); - } - - /** - * Get if the service is enabled. - * - * @return enabled - */ - public boolean isEnabled() { - return enabled; - } - - /** - * Set the service enable status. - * - * @param enabled boolean value setting enabled or disabled - */ - public void setEnabled(boolean enabled) { - this.enabled = enabled; - if (isEnabled()) { - start(); - } else { - stop(); - } - } - - /** - * Stops every running agents - */ - public void stopAgents() { - mediaProxy.stopProxy(); - } - - /** - * Get the Life Time of Sessions - * - * @return lifetime in seconds - */ - public long getLifetime() { - return mediaProxy.getLifetime(); - } - - /** - * Set the Life time of Sessions - * - * @param lifetime lifetime in seconds - */ - public void setLifetime(long lifetime) { - mediaProxy.setLifetime(lifetime); - } - - /** - * Get the Port used to the UDP Echo Test - * - * @return port number - */ - public int getEchoPort() { - return echoPort; - } - - /** - * Set the Port used to the UDP Echo Test - * - * @param echoPort port number - */ - public void setEchoPort(int echoPort) { - this.echoPort = echoPort; - } -} diff --git a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/MediaProxySession.java b/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/MediaProxySession.java deleted file mode 100644 index 89ac955cdc..0000000000 --- a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/MediaProxySession.java +++ /dev/null @@ -1,527 +0,0 @@ -/* - * Copyright (C) 2004-2009 Jive Software, 2017-2025 Ignite Realtime Foundation. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jivesoftware.openfire.mediaproxy; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetAddress; -import java.net.ServerSocket; -import java.security.SecureRandom; -import java.util.ArrayList; -import java.util.List; -import java.util.Timer; -import java.util.TimerTask; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * A media proxy session enables two clients to exchange UDP traffic. Each client connects to - * a UDP port and then the proxy is responsible for exchanging traffic. Each session uses - * a total of four ports: two for traffic exchange, and two control ports. - * - * @author Thiago Camargo - */ -public abstract class MediaProxySession extends Thread implements ProxyCandidate, DatagramListener { - - private static final Logger Log = LoggerFactory.getLogger(MediaProxySession.class); - - private List sessionListeners = new ArrayList<>(); - - private String id; - private String pass; - private String creator = ""; - private long timestamp = 0; - - protected InetAddress localAddress; - protected InetAddress hostA; - protected InetAddress hostB; - - protected int portA; - protected int portB; - - protected int localPortA; - protected int localPortB; - - protected DatagramSocket socketA; - protected DatagramSocket socketAControl; - protected DatagramSocket socketB; - protected DatagramSocket socketBControl; - - protected Channel channelAtoB; - protected Channel channelAtoBControl; - protected Channel channelBtoA; - protected Channel channelBtoAControl; - - protected Thread threadAtoB; - protected Thread threadAtoBControl; - protected Thread threadBtoA; - protected Thread threadBtoAControl; - - private Timer idleTimer = null; - private Timer lifeTimer = null; - - private int minPort = 10000; - private int maxPort = 20000; - - /** - * Creates a new static UDP channel between Host A and Host B. - * - * @param id of the Session (Could be a Jingle session ID) - * @param creator the session creator name or description - * @param localAddress the localhost IP that will listen for UDP packets - * @param hostA the hostname or IP of the point A of the Channel - * @param portA the port number point A of the Channel - * @param hostB the hostname or IP of the point B of the Channel - * @param portB the port number point B of the Channel - * @param minPort the minimal port value to be used by the server - * @param maxPort the maximun port value to be used by the server - */ - public MediaProxySession(String id, String creator, String localAddress, String hostA, int portA, String hostB, - int portB, int minPort, int maxPort) { - this.id = id; - this.creator = creator; - this.minPort = minPort; - this.maxPort = maxPort; - this.pass = String.valueOf(Math.abs(new SecureRandom().nextLong())); - try { - this.hostA = InetAddress.getByName(hostA); - this.hostB = InetAddress.getByName(hostB); - - this.portA = portA; - this.portB = portB; - - this.localAddress = InetAddress.getByName(localAddress); - this.localPortA = getFreePort(); - this.socketA = new DatagramSocket(localPortA, this.localAddress); - this.socketAControl = new DatagramSocket(localPortA + 1, this.localAddress); - this.localPortB = getFreePort(); - this.socketB = new DatagramSocket(localPortB, this.localAddress); - this.socketBControl = new DatagramSocket(localPortB + 1, this.localAddress); - if (Log.isDebugEnabled()) { - Log.debug("MediaProxySession: Session Created at: A " + localPortA + " : B " + localPortB); - } - } - catch (Exception e) { - Log.error(e.getMessage(), e); - } - } - - /** - * Obtain a free port with a nested control port we can use. - * - * @return A free port number. - */ - protected int getFreePort() { - ServerSocket ss; - int freePort = 0; - int controlPort; - - for (int i = 0; i < 10; i++) { - freePort = (int) (minPort + Math.round(Math.random() * (maxPort - minPort))); - freePort = freePort % 2 == 0 ? freePort : freePort + 1; - try { - ss = new ServerSocket(freePort); - freePort = ss.getLocalPort(); - ss.close(); - ss = new ServerSocket(freePort + 1); - controlPort = ss.getLocalPort(); - ss.close(); - if (controlPort == (freePort + 1)) - return freePort; - } - catch (IOException e) { - Log.error(e.getMessage(), e); - } - } - try { - ss = new ServerSocket(0); - freePort = ss.getLocalPort(); - ss.close(); - } - catch (IOException e) { - Log.error(e.getMessage(), e); - } finally { - ss = null; - } - return freePort; - } - - /** - * Get the ID of the Session - * - * @return the ID of the session - */ - @Override - public String getSID() { - return id; - } - - /** - * Get the pass of this Session - * A pass can be used to authorize an Session modification - */ - @Override - public String getPass() { - return pass; - } - - /** - * Get the agent creator. - * This field is open to MediaProxy users and just can be set in constructor. - * - * @return the session creator name or description - */ - public String getCreator() { - return creator; - } - - /** - * Get last packet arrived timestamp - * - * @return TimeStamp in Millis - */ - public long getTimestamp() { - return timestamp; - } - - /** - * Thread override method - */ - @Override - public void run() { - // Create channels for parties - createChannels(); - - // Start a thread for each channel - threadAtoB = new Thread(channelAtoB); - threadAtoBControl = new Thread(channelAtoBControl); - threadBtoA = new Thread(channelBtoA); - threadBtoAControl = new Thread(channelBtoAControl); - - threadAtoB.start(); - threadAtoBControl.start(); - threadBtoA.start(); - threadBtoAControl.start(); - - // Listen to channel events - addChannelListeners(); - } - - /** - * Creates 4 new channels for the two entities. We will create a channel between A and B and vice versa - * and also a control channel betwwen A and B and vice versa. - */ - abstract void createChannels(); - - /** - * Adds listener to channel events like receiving data. - */ - void addChannelListeners() { - channelAtoB.addListener(this); - channelAtoBControl.addListener(this); - channelBtoA.addListener(this); - channelBtoAControl.addListener(this); - } - - /** - * Stop the Session - */ - @Override - public void stopAgent() { - - try { - if (idleTimer != null) { - idleTimer.cancel(); - idleTimer.purge(); - idleTimer = null; - } - } catch (Exception e) { - Log.error(e.getMessage(), e); - } - - try { - if (lifeTimer != null) { - lifeTimer.cancel(); - lifeTimer.purge(); - lifeTimer = null; - } - } catch (Exception e) { - Log.error(e.getMessage(), e); - } - - channelAtoB.removeListeners(); - channelAtoBControl.removeListeners(); - channelBtoA.removeListeners(); - channelBtoAControl.removeListeners(); - - try { - channelAtoB.cancel(); - channelAtoBControl.cancel(); - channelBtoA.cancel(); - channelBtoAControl.cancel(); - } catch (Exception e) { - Log.error(e.getMessage(), e); - } - - socketA.close(); - socketAControl.close(); - socketB.close(); - socketBControl.close(); - - dispatchAgentStopped(); - - Log.debug("MediaProxySession: Session Stopped"); - } - - /** - * Get localhost of the Session - * - * @return the localhost of the session - */ - @Override - public InetAddress getLocalhost() { - return localAddress; - } - - /** - * Get the Host A IP - * - * @return the host A ip - */ - @Override - public InetAddress getHostA() { - return hostA; - } - - /** - * Get the Host B IP - * - * @return the host B ip - */ - @Override - public InetAddress getHostB() { - return hostB; - } - - /** - * Set port A value - * - * @param portA the port number for A - */ - @Override - public void setPortA(int portA) { - if (Log.isDebugEnabled()) { - Log.debug("MediaProxySession: PORT CHANGED(A):" + portA); - } - this.portA = portA; - } - - /** - * Set port B value - * - * @param portB the port number for B - */ - @Override - public void setPortB(int portB) { - if (Log.isDebugEnabled()) { - Log.debug("MediaProxySession: PORT CHANGED(B):" + portB); - } - this.portB = portB; - } - - /** - * Set the Host A IP - * - * @param hostA the host for A - */ - @Override - public void setHostA(InetAddress hostA) { - this.hostA = hostA; - } - - /** - * Set the Host B IP - * - * @param hostB the host for B - */ - @Override - public void setHostB(InetAddress hostB) { - this.hostB = hostB; - } - - /** - * Get the Port A IP - * - * @return the port for A - */ - @Override - public int getPortA() { - return portA; - } - - /** - * Get the Port B IP - * - * @return the port for B - */ - @Override - public int getPortB() { - return portB; - } - - /** - * Get the localport that listen for Host A Packets - * - * @return the local port for A - */ - @Override - public int getLocalPortA() { - return localPortA; - } - - /** - * Get the localport that listen for Host B Packets - * - * @return the local port for B - */ - @Override - public int getLocalPortB() { - return localPortB; - } - - @Override - public void sendFromPortA(String host, int port) { - try { - InetAddress address = InetAddress.getByName(host); - channelAtoB.setHost(address); - channelAtoB.setPort(port); - channelAtoBControl.setHost(address); - channelAtoBControl.setPort(port + 1); - } - catch (Exception e) { - Log.error(e.getMessage(), e); - } - } - - @Override - public void sendFromPortB(String host, int port) { - try { - InetAddress address = InetAddress.getByName(host); - channelBtoA.setHost(address); - channelBtoA.setPort(port); - channelBtoAControl.setHost(address); - channelBtoAControl.setPort(port + 1); - } - catch (Exception e) { - Log.error(e.getMessage(), e); - } - } - - /** - * Implement DatagramListener to timestamp last packet arrived - * - * @param datagramPacket the datagram packet - */ - @Override - public boolean datagramReceived(DatagramPacket datagramPacket) { - timestamp = System.currentTimeMillis(); - return true; - } - - /** - * Add a keep alive detector. - * If the packet still more than the keep alive delay without receiving any packets. The Session is - * stoped and remove from agents List. - * - * @param delay delay time in millis to check if the channel is inactive - */ - void addKeepAlive(long delay) { - if (idleTimer != null) return; - idleTimer = new Timer(); - idleTimer.scheduleAtFixedRate(new TimerTask() { - long lastTimeStamp = getTimestamp(); - - @Override - public void run() { - if (lastTimeStamp == getTimestamp()) { - stopAgent(); - return; - } - lastTimeStamp = getTimestamp(); - } - }, delay, delay); - } - - /** - * Add a limited life time to the Session. - * The Session is stoped and remove from agents List after a certain time. - * Prevents that network cycles, refreshes a Session forever. - * - * @param lifetime time in Seconds to kill the Session - */ - void addLifeTime(long lifetime) { - lifetime *= 1000; - if (lifeTimer != null) return; - lifeTimer = new Timer(); - lifeTimer.scheduleAtFixedRate(new TimerTask() { - @Override - public void run() { - stopAgent(); - } - }, lifetime, lifetime); - } - - /** - * Adds a listener for Session events - * - * @param sessionListener the sessionj listener to add - */ - public void addAgentListener(SessionListener sessionListener) { - sessionListeners.add(sessionListener); - } - - /** - * Removes an Session events listener - * - * @param sessionListener the session listener to remove - */ - public void removeAgentListener(SessionListener sessionListener) { - sessionListeners.remove(sessionListener); - } - - /** - * Removes every Session events listeners - */ - public void clearAgentListeners() { - sessionListeners.clear(); - } - - /** - * Dispatch Stop Event - */ - public void dispatchAgentStopped() { - for (SessionListener sessionListener : sessionListeners) { - try { - sessionListener.sessionClosed(this); - } catch (Exception e) { - Log.error(e.getMessage(), e); - } - } - } -} diff --git a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/ProxyCandidate.java b/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/ProxyCandidate.java deleted file mode 100644 index 74ff29e62a..0000000000 --- a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/ProxyCandidate.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2005-2008 Jive Software, 2017-2018 Ignite Realtime Foundation. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jivesoftware.openfire.mediaproxy; - -import java.net.InetAddress; - -/** - * Basic interface to access a Candidate provided by a Session - * - * @author Thiago Camargo - */ -public interface ProxyCandidate { - - String getSID(); - - String getPass(); - - InetAddress getLocalhost(); - - InetAddress getHostA(); - - InetAddress getHostB(); - - void setHostA( InetAddress hostA ); - - void setHostB( InetAddress hostB ); - - void sendFromPortA( String host, int port ); - - void sendFromPortB( String host, int port ); - - int getPortA(); - - int getPortB(); - - void setPortA( int portA ); - - void setPortB( int portB ); - - int getLocalPortA(); - - int getLocalPortB(); - - void start(); - - void stopAgent(); -} diff --git a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/RelaySession.java b/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/RelaySession.java deleted file mode 100644 index 41023ef905..0000000000 --- a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/RelaySession.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2005-2008 Jive Software, 2017-2018 Ignite Realtime Foundation. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jivesoftware.openfire.mediaproxy; - -/** - * A Session Class will control "receive and relay" proccess. - * It creates UDP channels from Host A to Host B and from Host B to Host A using or NOT the specified - * hosts and ports. - * The IP and port pairs can change depending of the Senders IP and port. - * Which means that the IP and port values of the points can dynamic change after the Channel is opened. - * When the agent receives a packet from Point A, the channel set the point A IP and port according to the - * received packet sender IP and port. - * Every packet received from Point B will be relayed to the new Point A IP and port. - * When the agent receives a packet from Point B, the channel set the point B IP and port according to the - * received packet sender IP and port. - * Every packet received from Point A will be relayed to the new Point B IP and port. - * Create a dynamic channel between two IPs. ( Dynamic Point A - Dynamic Point B ) - * It has 4 Channels. 2 for data and 2 for control. - * - * @author Thiago Camargo - */ - -public class RelaySession extends MediaProxySession { - - /** - * Creates a new Smart Session to provide connectivity between Host A and Host B. - * - * @param id of the Session (Could be a Jingle session ID) - * @param localhost The localhost IP that will listen for UDP packets - * @param hostA the hostname or IP of the point A of the Channel - * @param portA the port number point A of the Channel - * @param hostB the hostname or IP of the point B of the Channel - * @param portB the port number point B of the Channel - * @param creator the created name or description of the Channel - * @param minPort the minimal port number to be used by the proxy - * @param maxPort the maximun port number to be used by the proxy - */ - public RelaySession(String id, String creator, String localhost, String hostA, int portA, String hostB, int portB, - int minPort, int maxPort) { - super(id, creator, localhost, hostA, portA, hostB, portB, minPort, maxPort); - } - - /** - * Creates a new Smart Session to provide connectivity between Host A and Host B. - * - * @param id of the Session (Could be a Jingle session ID) - * @param localhost The localhost IP that will listen for UDP packets - * @param hostA the hostname or IP of the point A of the Channel - * @param portA the port number point A of the Channel - * @param hostB the hostname or IP of the point B of the Channel - * @param portB the port number point B of the Channel - * @param creator the created name or description of the Channel - */ - public RelaySession(String id, String creator, String localhost, String hostA, int portA, String hostB, int portB) { - super(id, creator, localhost, hostA, portA, hostB, portB, 10000, 20000); - } - - @Override - void createChannels() { - channelAtoB = new DynamicAddressChannel(socketA, hostB, portB); - channelAtoBControl = new DynamicAddressChannel(socketAControl, hostB, portB + 1); - channelBtoA = new DynamicAddressChannel(socketB, hostA, portA); - channelBtoAControl = new DynamicAddressChannel(socketBControl, hostA, portA + 1); - } - - - @Override - void addChannelListeners() { - super.addChannelListeners(); - // Add channel as listeners - channelAtoB.addListener((DynamicAddressChannel) channelBtoA); - channelAtoBControl.addListener((DynamicAddressChannel) channelBtoAControl); - channelBtoA.addListener((DynamicAddressChannel) channelAtoB); - channelBtoAControl.addListener((DynamicAddressChannel) channelAtoBControl); - } -} diff --git a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/SessionListener.java b/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/SessionListener.java deleted file mode 100644 index 3db0e902e2..0000000000 --- a/xmppserver/src/main/java/org/jivesoftware/openfire/mediaproxy/SessionListener.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2005-2008 Jive Software, 2017-2018 Ignite Realtime Foundation. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jivesoftware.openfire.mediaproxy; - -/** - * Listener for media proxy session events. - * - * @author Thiago Camargo - */ -public interface SessionListener { - - /** - * A media proxy session was closed as a result of normal termination or because - * the max idle time elapsed. - * - * @param session the session that closed. - */ - void sessionClosed( MediaProxySession session ); - -} diff --git a/xmppserver/src/main/resources/admin-sidebar.xml b/xmppserver/src/main/resources/admin-sidebar.xml index 2adcde8da2..a97c5316a1 100644 --- a/xmppserver/src/main/resources/admin-sidebar.xml +++ b/xmppserver/src/main/resources/admin-sidebar.xml @@ -293,10 +293,7 @@ - - + diff --git a/xmppserver/src/main/webapp/index.jsp b/xmppserver/src/main/webapp/index.jsp index 82bb5cff3e..ee2391993f 100644 --- a/xmppserver/src/main/webapp/index.jsp +++ b/xmppserver/src/main/webapp/index.jsp @@ -22,7 +22,6 @@ <%@ page import="org.jivesoftware.openfire.XMPPServer" %> <%@ page import="org.jivesoftware.openfire.filetransfer.proxy.FileTransferProxy" %> <%@ page import="org.jivesoftware.openfire.keystore.IdentityStore" %> -<%@ page import="org.jivesoftware.openfire.mediaproxy.MediaProxyService" %> <%@ page import="org.jivesoftware.openfire.spi.ConnectionListener" %> <%@ page import="org.jivesoftware.openfire.spi.ConnectionType" %> <%@ page import="org.jivesoftware.openfire.update.Update" %> @@ -64,7 +63,6 @@ ConnectionManager connectionManager = XMPPServer.getInstance().getConnectionManager(); FileTransferProxy fileTransferProxy = XMPPServer.getInstance().getFileTransferProxy(); - MediaProxyService mediaProxyService = XMPPServer.getInstance().getMediaProxyService(); boolean rssEnabled = BlogPostServlet.ENABLED.getValue();; @@ -610,17 +608,6 @@ <% } %> - <% - if (mediaProxyService.isEnabled()) { - %> - - <%= interfaceName %> - <%= mediaProxyService.getMinPort() %> - <%= mediaProxyService.getMaxPort() %> - - - - - <% } %> <% if (JMXManager.isEnabled()) { %> diff --git a/xmppserver/src/main/webapp/media-proxy.jsp b/xmppserver/src/main/webapp/media-proxy.jsp deleted file mode 100644 index b98fc23d09..0000000000 --- a/xmppserver/src/main/webapp/media-proxy.jsp +++ /dev/null @@ -1,323 +0,0 @@ -<%-- - - - - Copyright (C) 2005-2008 Jive Software, 2017-2022 Ignite Realtime Foundation. All rights reserved. - - - - Licensed under the Apache License, Version 2.0 (the "License"); - - you may not use this file except in compliance with the License. - - You may obtain a copy of the License at - - - - http://www.apache.org/licenses/LICENSE-2.0 - - - - Unless required by applicable law or agreed to in writing, software - - distributed under the License is distributed on an "AS IS" BASIS, - - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - - See the License for the specific language governing permissions and - - limitations under the License. - ---%> - -<%@ page import="org.jivesoftware.util.JiveGlobals" %> -<%@ page import="org.jivesoftware.util.ParamUtils" %> -<%@ page import="org.jivesoftware.util.CookieUtils" %> -<%@ page import="org.jivesoftware.util.StringUtils" %> -<%@ page import="org.jivesoftware.openfire.XMPPServer" %> -<%@ page import="org.jivesoftware.openfire.mediaproxy.MediaProxyService" %> -<%@ page import="org.jivesoftware.openfire.mediaproxy.MediaProxySession" %> -<%@ page import="org.jivesoftware.openfire.mediaproxy.RelaySession" %> -<%@ page import="java.util.Collection" %> - -<%@ page contentType="text/html;charset=UTF-8" %> -<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> -<%@ taglib prefix="admin" uri="admin" %> - -<% webManager.init(request, response, session, application, out ); %> - -<% - - MediaProxyService mediaProxyService = XMPPServer.getInstance().getMediaProxyService(); - - boolean stop = request.getParameter("stop") != null; - boolean save = request.getParameter("update") != null; - boolean success = false; - - long keepAliveDelay = mediaProxyService.getIdleTime(); - long lifetime = mediaProxyService.getLifetime(); - int minPort = mediaProxyService.getMinPort(); - int maxPort = mediaProxyService.getMaxPort(); - int echoPort = mediaProxyService.getEchoPort(); - boolean enabled = mediaProxyService.isEnabled(); - Cookie csrfCookie = CookieUtils.getCookie(request, "csrf"); - String csrfParam = ParamUtils.getParameter(request, "csrf"); - - if (save || stop) { - if (csrfCookie == null || csrfParam == null || !csrfCookie.getValue().equals(csrfParam)) { - save = false; - stop = false; - } - } - csrfParam = StringUtils.randomString(15); - CookieUtils.setCookie(request, response, "csrf", csrfParam, -1); - pageContext.setAttribute("csrf", csrfParam); - - if (stop) { - mediaProxyService.stopAgents(); - } - - if (save) { - keepAliveDelay = ParamUtils.getLongParameter(request, "idleTimeout", keepAliveDelay); - if (keepAliveDelay > 1) { - mediaProxyService.setKeepAliveDelay(keepAliveDelay * 1000); - JiveGlobals - .setProperty("mediaproxy.idleTimeout", String.valueOf(keepAliveDelay * 1000)); - } - - lifetime = ParamUtils.getLongParameter(request, "lifetime", lifetime); - if (lifetime > 0) { - mediaProxyService.setLifetime(lifetime); - JiveGlobals - .setProperty("mediaproxy.lifetime", String.valueOf(lifetime)); - } - - minPort = ParamUtils.getIntParameter(request, "minport", minPort); - maxPort = ParamUtils.getIntParameter(request, "maxport", maxPort); - echoPort = ParamUtils.getIntParameter(request, "echoport", echoPort); - enabled = ParamUtils.getBooleanParameter(request, "enabled", enabled); - - JiveGlobals.setProperty("mediaproxy.enabled", String.valueOf(enabled)); - - if (minPort > 0 && maxPort > 0) { - if (maxPort - minPort > 1000) { - mediaProxyService.setMinPort(minPort); - mediaProxyService.setMaxPort(maxPort); - JiveGlobals.setProperty("mediaproxy.portMin", String.valueOf(minPort)); - JiveGlobals.setProperty("mediaproxy.portMax", String.valueOf(maxPort)); - } - } - - if (echoPort > 0){ - mediaProxyService.setEchoPort(echoPort); - JiveGlobals.setProperty("mediaproxy.echoPort", String.valueOf(echoPort)); - } - - mediaProxyService.setEnabled(enabled); - - // Log the event - webManager.logEvent("edited media proxy settings", "minport = "+minPort+"\nmaxport = "+maxPort+"\nechoport = "+echoPort+"\nenabled = "+enabled+"\nlifetime = "+lifetime+"\nkeepalivedelay = "+keepAliveDelay); - - success = true; - } - -%> - - - Media Proxy - - - - -

- -
-

- -<% if (success) { %> - - - - - -<% } %> - -
- -
- -
-
- - - - - - - - - - - - - - -
- > - - -
- - - - - - - - - - - - - - - - - - - - - -
- - -   - -
- - -   - -
- - - -
- - - -
- - - -
-
 
- > - - -
-
- "> -
- -<% if (mediaProxyService.isEnabled()) { %> - -

- - -
- -

- -
- - - - - - - - - - - - - - - <% // Print the list of agents - Collection sessions = mediaProxyService.getAgents(); - if (sessions.isEmpty()) { - %> - - - - - <% - } - int i = 0; - for (MediaProxySession proxySession : sessions) { - i++; - %> - - - - - - - - - - - <% - } - %> - -
  - - - - A - - - B - - - - - - -
- -
- <%= i %> - - <%= StringUtils.escapeHTMLTags(proxySession.getCreator())%> - - <%=proxySession.getHostA()%>:<%=proxySession.getLocalPortA()%> - - <%=proxySession.getHostB()%>:<%=proxySession.getLocalPortB()%> - - <%=proxySession.getLocalhost()%> - - <%=(System.currentTimeMillis() - proxySession.getTimestamp()) / 1000%> - - <% if (proxySession instanceof RelaySession) { %> - Smart Session - <% } else { %> - Fixed Session - <% } %> -
-
- - "/> -
-
- -<% } // end enabled check %> - - -