aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-x.classpath2
-rw-r--r--.gitignore1
-rw-r--r--build.xml4
-rwxr-xr-x[-rw-r--r--]lib/installer-exclude/bcpkix-jdk15on-151.jar (renamed from lib/installer-exclude/bcpkix-jdk15on-150.jar)bin598674 -> 605519 bytes
-rwxr-xr-x[-rw-r--r--]lib/installer-exclude/bcprov-jdk15on-151.jar (renamed from lib/installer-exclude/bcprov-jdk15on-150.jar)bin2732684 -> 2842667 bytes
-rw-r--r--lib/installer-exclude/fmj.jarbin1061681 -> 1193763 bytes
-rw-r--r--lib/installer-exclude/hsqldb.jar.manifest.mf102
-rw-r--r--lib/installer-exclude/ice4j.jarbin355667 -> 361011 bytes
-rw-r--r--lib/installer-exclude/libjitsi.jarbin1680390 -> 1753273 bytes
-rw-r--r--lib/installer-exclude/sdes4j.jarbin17544 -> 17287 bytes
-rw-r--r--nbproject/project.properties29
-rw-r--r--nbproject/project.xml2
-rw-r--r--resources/images/protocol/facebook/status16x16-meeting.pngbin0 -> 1829 bytes
-rw-r--r--resources/images/protocol/ippi/sip16x16-meeting.pngbin0 -> 2034 bytes
-rw-r--r--resources/images/protocol/iptel/sip16x16-meeting.pngbin0 -> 2074 bytes
-rw-r--r--resources/images/protocol/sip2sip/sip16x16-meeting.pngbin0 -> 2101 bytes
-rw-r--r--resources/install/README.Debian7
-rw-r--r--resources/install/build.xml183
-rw-r--r--resources/install/debian/control-src.tmpl18
-rw-r--r--resources/install/debian/copyright6
-rw-r--r--resources/install/debian/jitsi.sh.tmpl3
-rw-r--r--resources/install/debian/package.install.tmpl14
-rwxr-xr-xresources/install/debian/rules.tmpl2
-rwxr-xr-xresources/install/rpm/SPECS/build-jitsi-rpm.sh23
-rw-r--r--resources/install/rpm/SPECS/jitsi.spec17
-rw-r--r--resources/install/windows/DefaultOverridesProps.wxi.template24
-rw-r--r--resources/install/windows/en-us.wxl2
-rw-r--r--resources/install/windows/fr-fr.wxl2
-rw-r--r--resources/install/windows/installer-windows.wxs47
-rw-r--r--resources/languages/resources.properties13
-rw-r--r--resources/languages/resources_es.properties28
-rw-r--r--resources/languages/resources_ru.properties257
-rw-r--r--src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java5
-rw-r--r--src/net/java/sip/communicator/impl/credentialsstorage/CredentialsStorageServiceImpl.java1
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/call/CallPanel.java2
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPanel.java11
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java72
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/call/RecordButton.java8
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/presence/AccountStatusPanel.java43
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusSelectorBox.java11
-rw-r--r--src/net/java/sip/communicator/impl/libjitsi/libjitsi.manifest.mf2
-rw-r--r--src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriConferenceIQ.java146
-rw-r--r--src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriIQProvider.java53
-rw-r--r--src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriStatsExtension.java160
-rw-r--r--src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java19
-rw-r--r--src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java7
-rw-r--r--src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RtcpmuxPacketExtension.java31
-rw-r--r--src/net/java/sip/communicator/impl/protocol/jabber/sasl/SASLDigestMD5Mechanism.java2
-rw-r--r--src/net/java/sip/communicator/impl/protocol/mock/MockContact.java5
-rw-r--r--src/net/java/sip/communicator/impl/protocol/mock/MockContactGroup.java4
-rw-r--r--src/net/java/sip/communicator/impl/protocol/mock/MockPersistentPresenceOperationSet.java68
-rw-r--r--src/net/java/sip/communicator/impl/protocol/sip/CallPeerMediaHandlerSipImpl.java134
-rw-r--r--src/net/java/sip/communicator/impl/protocol/sip/ServerStoredContactListSipImpl.java1
-rw-r--r--src/net/java/sip/communicator/impl/protocol/sip/sdp/SdpUtils.java8
-rw-r--r--src/net/java/sip/communicator/impl/protocol/ssh/ContactSSHImpl.java3
-rw-r--r--src/net/java/sip/communicator/plugin/desktoputil/FramedImageWithMenu.java1
-rw-r--r--src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java37
-rw-r--r--src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java34
-rw-r--r--src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java542
-rw-r--r--src/net/java/sip/communicator/plugin/desktoputil/presence/GlobalStatusMessageMenu.java3
-rw-r--r--src/net/java/sip/communicator/plugin/otr/OtrActivator.java8
-rw-r--r--src/net/java/sip/communicator/plugin/otr/OtrConfigurator.java2
-rw-r--r--src/net/java/sip/communicator/service/protocol/AccountManager.java1
-rw-r--r--test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java7
-rw-r--r--test/net/java/sip/communicator/slick/protocol/sip/TestOperationSetServerStoredInfo.java2
-rw-r--r--test/net/java/sip/communicator/slick/slickless/util/TestBase64.java2
66 files changed, 1695 insertions, 526 deletions
diff --git a/.classpath b/.classpath
index cba1bcc..4a0f4c4 100755
--- a/.classpath
+++ b/.classpath
@@ -78,7 +78,7 @@
<classpathentry kind="lib" path="lib/os-specific/mac/growl4j.jar"/>
<classpathentry kind="lib" path="lib/os-specific/mac/OrangeExtensions.jar"/>
<classpathentry kind="lib" path="lib/installer-exclude/jmork-1.0.5-SNAPSHOT.jar" sourcepath="/jmork"/>
- <classpathentry kind="lib" path="lib/installer-exclude/bcprov-jdk15on-150.jar"/>
+ <classpathentry kind="lib" path="lib/installer-exclude/bcprov-jdk15on-151.jar"/>
<classpathentry kind="lib" path="lib/installer-exclude/commons-lang3-3.1.jar"/>
<classpathentry kind="lib" path="lib/installer-exclude/bccontrib-1.0-SNAPSHOT.jar"/>
<classpathentry kind="lib" path="lib/installer-exclude/zrtp4j-light.jar"/>
diff --git a/.gitignore b/.gitignore
index 86d40f9..45797fa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,4 @@ release
lib/accounts.properties
.DS_Store
web-start/WebStartBuild.properties
+nbproject/private
diff --git a/build.xml b/build.xml
index 3384fea..31c65de 100644
--- a/build.xml
+++ b/build.xml
@@ -1315,7 +1315,7 @@
<zipfileset dir="${dest}/net/java/sip/communicator/impl/libjitsi"
prefix="net/java/sip/communicator/impl/libjitsi"/>
- <zipfileset src="${lib.noinst}/bcpkix-jdk15on-150.jar" prefix=""
+ <zipfileset src="${lib.noinst}/bcpkix-jdk15on-151.jar" prefix=""
excludes="META-INF/BCKEY.*"/>
<zipfileset src="${lib.noinst}/fmj.jar" prefix=""/>
<zipfileset src="${lib.noinst}/libjitsi.jar" prefix=""/>
@@ -2513,7 +2513,7 @@ org.bouncycastle.util"/>
<!--BUNDLE-BOUNCYCASTLE -->
<target name="bundle-bouncycastle">
- <copy file="${lib.noinst}/bcprov-jdk15on-150.jar" tofile="${bundles.dest}/bouncycastle.jar"/>
+ <copy file="${lib.noinst}/bcprov-jdk15on-151.jar" tofile="${bundles.dest}/bouncycastle.jar"/>
<copy file="${lib.noinst}/bccontrib-1.0-SNAPSHOT.jar" tofile="${bundles.dest}/bccontrib.jar"/>
</target>
diff --git a/lib/installer-exclude/bcpkix-jdk15on-150.jar b/lib/installer-exclude/bcpkix-jdk15on-151.jar
index 5dc125f..57e0080 100644..100755
--- a/lib/installer-exclude/bcpkix-jdk15on-150.jar
+++ b/lib/installer-exclude/bcpkix-jdk15on-151.jar
Binary files differ
diff --git a/lib/installer-exclude/bcprov-jdk15on-150.jar b/lib/installer-exclude/bcprov-jdk15on-151.jar
index d4b510d..4076e11 100644..100755
--- a/lib/installer-exclude/bcprov-jdk15on-150.jar
+++ b/lib/installer-exclude/bcprov-jdk15on-151.jar
Binary files differ
diff --git a/lib/installer-exclude/fmj.jar b/lib/installer-exclude/fmj.jar
index dc18668..699a893 100644
--- a/lib/installer-exclude/fmj.jar
+++ b/lib/installer-exclude/fmj.jar
Binary files differ
diff --git a/lib/installer-exclude/hsqldb.jar.manifest.mf b/lib/installer-exclude/hsqldb.jar.manifest.mf
new file mode 100644
index 0000000..597b652
--- /dev/null
+++ b/lib/installer-exclude/hsqldb.jar.manifest.mf
@@ -0,0 +1,102 @@
+Manifest-Version: 1.0
+Export-Package: org.hsqldb;uses:="org.hsqldb.server,org.hsqldb.jdbc,or
+ g.hsqldb.types,org.hsqldb.rowio,org.hsqldb.result,org.hsqldb.persist,
+ org.hsqldb.error,org.hsqldb.navigator,org.hsqldb.map,org.hsqldb.lib,o
+ rg.hsqldb.rights,org.hsqldb.index,org.hsqldb.dbinfo,org.hsqldb.lib.ja
+ va,org.hsqldb.scriptio",org.hsqldb.auth;uses:="org.hsqldb.jdbc,org.hs
+ qldb.types,org.hsqldb.lib,javax.security.auth.callback,javax.security
+ .auth.login,javax.security.auth,javax.naming.directory,javax.naming,j
+ avax.naming.ldap,javax.net.ssl",org.hsqldb.dbinfo;uses:="org.hsqldb.r
+ ights,org.hsqldb.resources,org.hsqldb,org.hsqldb.map,org.hsqldb.persi
+ st,org.hsqldb.lib,org.hsqldb.types,org.hsqldb.result,org.hsqldb.index
+ ",org.hsqldb.error;uses:="org.hsqldb.resources,org.hsqldb,org.hsqldb.
+ result,org.hsqldb.lib",org.hsqldb.index;uses:="org.hsqldb.persist,org
+ .hsqldb.types,org.hsqldb,org.hsqldb.navigator,org.hsqldb.rights,org.h
+ sqldb.error,org.hsqldb.lib,org.hsqldb.rowio",org.hsqldb.jdbc;uses:="o
+ rg.hsqldb.types,org.hsqldb,org.hsqldb.navigator,org.hsqldb.result,org
+ .hsqldb.lib.java,org.hsqldb.lib,org.hsqldb.error,javax.sql,org.hsqldb
+ .persist,javax.naming,javax.naming.spi,org.hsqldb.jdbc.pool,javax.xml
+ .parsers,org.w3c.dom,org.xml.sax,javax.xml.stream,javax.xml.transform
+ .stax,javax.xml.transform.dom,org.w3c.dom.bootstrap,javax.xml.transfo
+ rm,javax.xml.bind.util,javax.xml.transform.stream,javax.xml.transform
+ .sax",org.hsqldb.jdbc.pool;uses:="javax.sql,org.hsqldb.jdbc,org.hsqld
+ b.lib,javax.naming,javax.transaction.xa,org.hsqldb,org.hsqldb.error",
+ org.hsqldb.lib;uses:="org.hsqldb.lib.java,org.hsqldb.map,org.hsqldb",
+ org.hsqldb.lib.java,org.hsqldb.lib.tar;uses:="org.hsqldb.lib",org.hsq
+ ldb.lib.tar.rb,org.hsqldb.map;uses:="org.hsqldb.lib,org.hsqldb.types"
+ ,org.hsqldb.navigator;uses:="org.hsqldb,org.hsqldb.error,org.hsqldb.r
+ owio,org.hsqldb.result,org.hsqldb.types,org.hsqldb.lib,org.hsqldb.ind
+ ex,org.hsqldb.persist",org.hsqldb.persist;uses:="org.hsqldb,org.hsqld
+ b.error,org.hsqldb.map,org.hsqldb.rowio,org.hsqldb.lib,javax.crypto.s
+ pec,javax.crypto,org.hsqldb.scriptio,org.hsqldb.types,org.hsqldb.resu
+ lt,org.hsqldb.navigator,org.hsqldb.index,org.hsqldb.lib.tar,org.hsqld
+ b.dbinfo,org.hsqldb.lib.java",org.hsqldb.resources;uses:="org.hsqldb.
+ lib",org.hsqldb.result;uses:="org.hsqldb.persist,org.hsqldb.types,org
+ .hsqldb.error,org.hsqldb,org.hsqldb.navigator,org.hsqldb.map,org.hsql
+ db.rowio,org.hsqldb.lib",org.hsqldb.rights;uses:="org.hsqldb.types,or
+ g.hsqldb.error,org.hsqldb,org.hsqldb.lib,org.hsqldb.result",org.hsqld
+ b.rowio;uses:="org.hsqldb.types,org.hsqldb.error,org.hsqldb,org.hsqld
+ b.lib,org.hsqldb.map,org.hsqldb.persist",org.hsqldb.sample,org.hsqldb
+ .scriptio;uses:="org.hsqldb.persist,org.hsqldb,org.hsqldb.error,org.h
+ sqldb.rowio,org.hsqldb.lib,org.hsqldb.types,org.hsqldb.map,org.hsqldb
+ .result,org.hsqldb.navigator",org.hsqldb.server;uses:="org.hsqldb.per
+ sist,org.hsqldb.jdbc,org.hsqldb.error,org.hsqldb,javax.net,javax.secu
+ rity.cert,javax.net.ssl,org.hsqldb.lib,org.hsqldb.types,org.hsqldb.re
+ sult,org.hsqldb.resources,org.hsqldb.lib.java,org.hsqldb.map,org.hsql
+ db.rowio,org.hsqldb.navigator,javax.servlet,javax.servlet.http",org.h
+ sqldb.types;uses:="org.hsqldb.jdbc,org.hsqldb.error,org.hsqldb,org.hs
+ qldb.lib,org.hsqldb.map,org.hsqldb.result,org.hsqldb.lib.java,org.hsq
+ ldb.persist,org.hsqldb.rights",org.hsqldb.util;uses:="javax.swing,jav
+ ax.swing.border,org.hsqldb.lib.java,org.hsqldb.lib,javax.swing.tree,j
+ avax.swing.table,javax.swing.event"
+Implementation-Title: Standard runtime
+Implementation-Version: 2.3.1
+Build-Vendor: blaine
+Specification-Vendor: The HSQL Development Group
+Tool: Bnd-0.0.384
+Bundle-Name: HSQLDB
+Created-By: 1.6.0_30 (Sun Microsystems Inc.)
+Ant-Version: Apache Ant 1.8.4
+Implementation-Vendor: The HSQL Development Group
+Bundle-Version: 2.3.1
+Bnd-LastModified: 1381200774974
+Specification-Title: HSQLDB
+Bundle-ManifestVersion: 2
+Bundle-Description: HyperSQL Lightweight 100% Java SQL Database Engine
+Specification-Version: 2.3.1
+Import-Package: javax.crypto;resolution:=optional,javax.crypto.spec;re
+ solution:=optional,javax.naming;resolution:=optional,javax.naming.dir
+ ectory;resolution:=optional,javax.naming.ldap;resolution:=optional,ja
+ vax.naming.spi;resolution:=optional,javax.net;resolution:=optional,ja
+ vax.net.ssl;resolution:=optional,javax.security.auth;resolution:=opti
+ onal,javax.security.auth.callback;resolution:=optional,javax.security
+ .auth.login;resolution:=optional,javax.security.cert;resolution:=opti
+ onal,javax.servlet;resolution:=optional,javax.servlet.http;resolution
+ :=optional,javax.sql;resolution:=optional,javax.swing;resolution:=opt
+ ional,javax.swing.border;resolution:=optional,javax.swing.event;resol
+ ution:=optional,javax.swing.table;resolution:=optional,javax.swing.tr
+ ee;resolution:=optional,javax.transaction.xa;resolution:=optional,jav
+ ax.xml.bind.util;resolution:=optional,javax.xml.parsers;resolution:=o
+ ptional,javax.xml.stream;resolution:=optional,javax.xml.transform;res
+ olution:=optional,javax.xml.transform.dom;resolution:=optional,javax.
+ xml.transform.sax;resolution:=optional,javax.xml.transform.stax;resol
+ ution:=optional,javax.xml.transform.stream;resolution:=optional,org.h
+ sqldb;resolution:=optional,org.hsqldb.auth;resolution:=optional,org.h
+ sqldb.dbinfo;resolution:=optional,org.hsqldb.error;resolution:=option
+ al,org.hsqldb.index;resolution:=optional,org.hsqldb.jdbc;resolution:=
+ optional,org.hsqldb.jdbc.pool;resolution:=optional,org.hsqldb.lib;res
+ olution:=optional,org.hsqldb.lib.java;resolution:=optional,org.hsqldb
+ .lib.tar;resolution:=optional,org.hsqldb.lib.tar.rb;resolution:=optio
+ nal,org.hsqldb.map;resolution:=optional,org.hsqldb.navigator;resoluti
+ on:=optional,org.hsqldb.persist;resolution:=optional,org.hsqldb.resou
+ rces;resolution:=optional,org.hsqldb.result;resolution:=optional,org.
+ hsqldb.rights;resolution:=optional,org.hsqldb.rowio;resolution:=optio
+ nal,org.hsqldb.sample;resolution:=optional,org.hsqldb.scriptio;resolu
+ tion:=optional,org.hsqldb.server;resolution:=optional,org.hsqldb.type
+ s;resolution:=optional,org.hsqldb.util;resolution:=optional,org.w3c.d
+ om;resolution:=optional,org.w3c.dom.bootstrap;resolution:=optional,or
+ g.xml.sax;resolution:=optional
+Bundle-SymbolicName: org.hsqldb.hsqldb
+Main-Class: org.hsqldb.util.DatabaseManagerSwing
+Originally-Created-By: 1.6.0_30-b12 (Sun Microsystems Inc.)
+
diff --git a/lib/installer-exclude/ice4j.jar b/lib/installer-exclude/ice4j.jar
index ba6f443..29f5cc6 100644
--- a/lib/installer-exclude/ice4j.jar
+++ b/lib/installer-exclude/ice4j.jar
Binary files differ
diff --git a/lib/installer-exclude/libjitsi.jar b/lib/installer-exclude/libjitsi.jar
index d5dc16a..3a63713 100644
--- a/lib/installer-exclude/libjitsi.jar
+++ b/lib/installer-exclude/libjitsi.jar
Binary files differ
diff --git a/lib/installer-exclude/sdes4j.jar b/lib/installer-exclude/sdes4j.jar
index 0aa0ff7..6b90e63 100644
--- a/lib/installer-exclude/sdes4j.jar
+++ b/lib/installer-exclude/sdes4j.jar
Binary files differ
diff --git a/nbproject/project.properties b/nbproject/project.properties
new file mode 100644
index 0000000..338575b
--- /dev/null
+++ b/nbproject/project.properties
@@ -0,0 +1,29 @@
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=4
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=4
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=8
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=80
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap=none
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=project
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineImplements=true
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineThrows=true
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement=NEW_LINE
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs=true
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.importGroupsOrder=*
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width=4
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement=NEW_LINE
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement=NEW_LINE
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine=true
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine=true
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine=true
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine=true
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab=4
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size=8
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width=80
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-line-wrap=words
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.usePackageImport=true
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.useSingleClassImport=false
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword=WRAP_ALWAYS
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList=WRAP_ALWAYS
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword=WRAP_ALWAYS
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList=WRAP_ALWAYS
diff --git a/nbproject/project.xml b/nbproject/project.xml
index 6fc27b3..851da9c 100644
--- a/nbproject/project.xml
+++ b/nbproject/project.xml
@@ -116,7 +116,7 @@
<java-data xmlns="http://www.netbeans.org/ns/freeform-project-java/2">
<compilation-unit>
<package-root>src</package-root>
- <classpath mode="compile">lib/felix.jar:lib/bundle/commons-logging.jar:lib/bundle/junit.jar:lib/bundle/log4j.jar:lib/installer-exclude/apache-ant-1.7.0.jar:lib/installer-exclude/dhcp4java-1.00.jar:lib/installer-exclude/dict4j.jar:lib/installer-exclude/dnsjava.jar:lib/installer-exclude/fmj.jar:lib/installer-exclude/forms-1.2.1.jar:lib/installer-exclude/gdata-client-1.0.jar:lib/installer-exclude/gdata-client-meta-1.0.jar:lib/installer-exclude/gdata-contacts-3.0.jar:lib/installer-exclude/gdata-contacts-meta-3.0.jar:lib/installer-exclude/gdata-core-1.0.jar:lib/installer-exclude/google-collect-1.0-rc1.jar:lib/installer-exclude/hexdump-0.2.jar:lib/installer-exclude/httpclient-osgi-4.2.3.jar:lib/installer-exclude/httpcore-osgi-4.2.3.jar:lib/installer-exclude/ice4j.jar:lib/installer-exclude/jain-sdp.jar:lib/installer-exclude/jain-sip-api.jar:lib/installer-exclude/jain-sip-ri.jar:lib/installer-exclude/jdic_misc.jar:lib/installer-exclude/jfontchooser-1.0.5.jar:lib/installer-exclude/jmdns.jar:lib/installer-exclude/jml-1.0b5.jar:lib/installer-exclude/jmyspell-core.jar:lib/installer-exclude/jna.jar:lib/installer-exclude/jnsapi.jar:lib/installer-exclude/joscar-client.jar:lib/installer-exclude/joscar-common.jar:lib/installer-exclude/joscar-protocol.jar:lib/installer-exclude/jsch-0.1.36.jar:lib/installer-exclude/jsocks-klea.jar:lib/installer-exclude/json-simple-1.1.1.jar:lib/installer-exclude/jspeex.jar:lib/installer-exclude/junit.jar:lib/installer-exclude/laf-widget.jar:lib/installer-exclude/lcrypto-jdk16-143.jar:lib/installer-exclude/libdbus-java-2.7.jar:lib/installer-exclude/libjitsi.jar:lib/installer-exclude/log4j-1.2.8.jar:lib/installer-exclude/lti-civil-no_s_w_t.jar:lib/installer-exclude/mac_widgets-0.9.5.jar:lib/installer-exclude/nist-sdp-1.0.jar:lib/installer-exclude/otr4j.jar:lib/installer-exclude/pircbot.jar:lib/installer-exclude/profiler4j-1.0-beta3-SC.jar:lib/installer-exclude/sdes4j.jar:lib/installer-exclude/smack.jar:lib/installer-exclude/smackx.jar:lib/installer-exclude/swing-worker-1.2.jar:lib/installer-exclude/jna-platform.jar:lib/installer-exclude/unix-0.5.jar:lib/installer-exclude/weupnp-0.1.2-SNAPSHOT.jar:lib/installer-exclude/ymsg_network_v0_67.jar:lib/installer-exclude/zrtp4j-light.jar:lib/installer-exclude/jcalendar-1.4.jar:lib/installer-exclude/bcpkix-jdk15on-150.jar:lib/installer-exclude/bcprov-jdk15on-150.jar:lib/installer-exclude/guava-15.0.jar:lib/installer-exclude/libphonenumber-5.9.jar:lib/installer-exclude/commons-lang3-3.1.jar:lib/installer-exclude/jmork-1.0.5-SNAPSHOT.jar:lib/os-specific/mac/growl4j.jar:lib/os-specific/mac/OrangeExtensions.jar:lib/os-specific/mac/installer-exclude/dock.jar</classpath>
+ <classpath mode="compile">lib/felix.jar:lib/bundle/commons-logging.jar:lib/bundle/junit.jar:lib/bundle/log4j.jar:lib/installer-exclude/apache-ant-1.7.0.jar:lib/installer-exclude/dhcp4java-1.00.jar:lib/installer-exclude/dict4j.jar:lib/installer-exclude/dnsjava.jar:lib/installer-exclude/fmj.jar:lib/installer-exclude/forms-1.2.1.jar:lib/installer-exclude/gdata-client-1.0.jar:lib/installer-exclude/gdata-client-meta-1.0.jar:lib/installer-exclude/gdata-contacts-3.0.jar:lib/installer-exclude/gdata-contacts-meta-3.0.jar:lib/installer-exclude/gdata-core-1.0.jar:lib/installer-exclude/google-collect-1.0-rc1.jar:lib/installer-exclude/hexdump-0.2.jar:lib/installer-exclude/httpclient-osgi-4.2.3.jar:lib/installer-exclude/httpcore-osgi-4.2.3.jar:lib/installer-exclude/ice4j.jar:lib/installer-exclude/jain-sdp.jar:lib/installer-exclude/jain-sip-api.jar:lib/installer-exclude/jain-sip-ri.jar:lib/installer-exclude/jdic_misc.jar:lib/installer-exclude/jfontchooser-1.0.5.jar:lib/installer-exclude/jmdns.jar:lib/installer-exclude/jml-1.0b5.jar:lib/installer-exclude/jmyspell-core.jar:lib/installer-exclude/jna.jar:lib/installer-exclude/jnsapi.jar:lib/installer-exclude/joscar-client.jar:lib/installer-exclude/joscar-common.jar:lib/installer-exclude/joscar-protocol.jar:lib/installer-exclude/jsch-0.1.36.jar:lib/installer-exclude/jsocks-klea.jar:lib/installer-exclude/json-simple-1.1.1.jar:lib/installer-exclude/jspeex.jar:lib/installer-exclude/junit.jar:lib/installer-exclude/laf-widget.jar:lib/installer-exclude/lcrypto-jdk16-143.jar:lib/installer-exclude/libdbus-java-2.7.jar:lib/installer-exclude/libjitsi.jar:lib/installer-exclude/log4j-1.2.8.jar:lib/installer-exclude/lti-civil-no_s_w_t.jar:lib/installer-exclude/mac_widgets-0.9.5.jar:lib/installer-exclude/nist-sdp-1.0.jar:lib/installer-exclude/otr4j.jar:lib/installer-exclude/pircbot.jar:lib/installer-exclude/profiler4j-1.0-beta3-SC.jar:lib/installer-exclude/sdes4j.jar:lib/installer-exclude/smack.jar:lib/installer-exclude/smackx.jar:lib/installer-exclude/swing-worker-1.2.jar:lib/installer-exclude/jna-platform.jar:lib/installer-exclude/unix-0.5.jar:lib/installer-exclude/weupnp-0.1.2-SNAPSHOT.jar:lib/installer-exclude/ymsg_network_v0_67.jar:lib/installer-exclude/zrtp4j-light.jar:lib/installer-exclude/jcalendar-1.4.jar:lib/installer-exclude/bcpkix-jdk15on-151.jar:lib/installer-exclude/bcprov-jdk15on-151.jar:lib/installer-exclude/guava-15.0.jar:lib/installer-exclude/libphonenumber-5.9.jar:lib/installer-exclude/commons-lang3-3.1.jar:lib/installer-exclude/jmork-1.0.5-SNAPSHOT.jar:lib/os-specific/mac/growl4j.jar:lib/os-specific/mac/OrangeExtensions.jar:lib/os-specific/mac/installer-exclude/dock.jar</classpath>
<built-to>classes</built-to>
<source-level>1.5</source-level>
</compilation-unit>
diff --git a/resources/images/protocol/facebook/status16x16-meeting.png b/resources/images/protocol/facebook/status16x16-meeting.png
new file mode 100644
index 0000000..6d939ee
--- /dev/null
+++ b/resources/images/protocol/facebook/status16x16-meeting.png
Binary files differ
diff --git a/resources/images/protocol/ippi/sip16x16-meeting.png b/resources/images/protocol/ippi/sip16x16-meeting.png
new file mode 100644
index 0000000..a48b7db
--- /dev/null
+++ b/resources/images/protocol/ippi/sip16x16-meeting.png
Binary files differ
diff --git a/resources/images/protocol/iptel/sip16x16-meeting.png b/resources/images/protocol/iptel/sip16x16-meeting.png
new file mode 100644
index 0000000..c637f5f
--- /dev/null
+++ b/resources/images/protocol/iptel/sip16x16-meeting.png
Binary files differ
diff --git a/resources/images/protocol/sip2sip/sip16x16-meeting.png b/resources/images/protocol/sip2sip/sip16x16-meeting.png
new file mode 100644
index 0000000..20b191a
--- /dev/null
+++ b/resources/images/protocol/sip2sip/sip16x16-meeting.png
Binary files differ
diff --git a/resources/install/README.Debian b/resources/install/README.Debian
new file mode 100644
index 0000000..ecd925b
--- /dev/null
+++ b/resources/install/README.Debian
@@ -0,0 +1,7 @@
+To create debian source package you need some other projects sources that
+jitsi depends on. In the same folder where jitsi is checked out do:
+git clone https://github.com/jitsi/otr4j.git
+git clone https://github.com/jitsi/libsrc.git
+And then in jitsi do: ant deb-src -Dlabel=4444
+This will create orig.tar.gz debian sources that can be used to debuild
+debian package. \ No newline at end of file
diff --git a/resources/install/build.xml b/resources/install/build.xml
index 4036c35..efcd5ed 100644
--- a/resources/install/build.xml
+++ b/resources/install/build.xml
@@ -582,6 +582,7 @@
<filterchain>
<tokenfilter>
<replacestring from="@@lib" to="${wix.heat.jitsi.lib.dir}" />
+ <replacestring from="@APP_NAME@" to="${application.name}" />
</tokenfilter>
</filterchain>
</copy>
@@ -2295,8 +2296,11 @@
token="/usr/share/java/org.apache.felix.framework.jar:/usr/share/java/org.apache.felix.main.jar"
value="$LIBPATH/felix.jar"/>
<replace file="${debianize.dir}/sh/${package.name}"
- token="$SCDIR/sc-bundles/util.jar/launchutils.jar"
- value="$SCDIR/sc-bundles/util.jar"/>
+ token="-common"
+ value="/sc-bundles"/>
+ <replace file="${debianize.dir}/sh/${package.name}"
+ token="util.jar/launchutils.jar"
+ value="util.jar"/>
<replace file="${debianize.dir}/sh/${package.name}"
token="/usr/lib/jni"
value="$SCDIR/lib/native"/>
@@ -2550,7 +2554,7 @@
<!-- pack as original sources -->
<tar destfile="${debian.dir}/${package.name}_${sip-communicator.version}.orig.tar.gz"
compression="gzip"
- basedir="${debian.src.dir}"/>
+ basedir="${debian.tmp.dir}"/>
<delete dir="${debian.tmp.dir}"/>
</target>
@@ -2970,10 +2974,10 @@
link="${debian.src.dir}/lib/installer-exclude/bccontrib-1.0-SNAPSHOT.jar"/>
<symlink resource="/usr/share/java/bcprov.jar"
overwrite="true"
- link="${debian.src.dir}/lib/installer-exclude/bcprov-jdk15on-150.jar"/>
+ link="${debian.src.dir}/lib/installer-exclude/bcprov-jdk15on-151.jar"/>
<symlink resource="/usr/share/java/bcpkix.jar"
overwrite="true"
- link="${debian.src.dir}/lib/installer-exclude/bcpkix-jdk15on-150.jar"/>
+ link="${debian.src.dir}/lib/installer-exclude/bcpkix-jdk15on-151.jar"/>
<!-- liblaf-widget-java -->
<symlink resource="/usr/share/java/laf-widget.jar"
@@ -3236,13 +3240,13 @@
</patternset>
</unzip>
<delete file="${debian.bundles.dest}/util.jar"/>
- <mkdir dir="${debian.bundles.dest}/util.jar/META-INF"/>
- <symlink resource="../../../../share/java/dnsjava.jar"
- link="${debian.bundles.dest}/util.jar/dnsjava.jar"/>
+ <mkdir dir="${debian.bundles.common.dest}/util.jar/META-INF"/>
+ <symlink resource="../../../share/java/dnsjava.jar"
+ link="${debian.bundles.common.dest}/util.jar/dnsjava.jar"/>
<!-- Create the util.jar-->
<jar compress="false"
- destfile="${debian.bundles.dest}/util.jar/util.jar">
+ destfile="${debian.bundles.common.dest}/util.jar/util.jar">
<zipfileset dir="${dest}/net/java/sip/communicator/util"
prefix="net/java/sip/communicator/util">
<exclude name="dns/**"/>
@@ -3250,7 +3254,7 @@
</jar>
<!-- Create the launchutils.jar-->
<jar compress="false"
- destfile="${debian.bundles.dest}/util.jar/launchutils.jar">
+ destfile="${debian.bundles.common.dest}/util.jar/launchutils.jar">
<zipfileset
dir="${dest}/net/java/sip/communicator/util/launchutils"
prefix="net/java/sip/communicator/util/launchutils"/>
@@ -3263,16 +3267,17 @@
</zipfileset>
</jar>
<move file="${debian.bundles.dest}/META-INF/MANIFEST.MF"
- todir="${debian.bundles.dest}/util.jar/META-INF"/>
+ todir="${debian.bundles.common.dest}/util.jar/META-INF"/>
<delete dir="${debian.bundles.dest}/META-INF"/>
+ <delete dir="${debian.bundles.dest}/util.jar"/>
<!-- Removes the last empty line -->
<replaceregexp
- file="${debian.bundles.dest}/util.jar/META-INF/MANIFEST.MF"
+ file="${debian.bundles.common.dest}/util.jar/META-INF/MANIFEST.MF"
match="^\r\n$"
flags="m"
replace=""/>
<concat
- destfile="${debian.bundles.dest}/util.jar/META-INF/MANIFEST.MF"
+ destfile="${debian.bundles.common.dest}/util.jar/META-INF/MANIFEST.MF"
append="true"
eol="crlf"
fixlastline="true">Bundle-ClassPath: .,util.jar,dnsjava.jar&#013;&#010;&#013;&#010;</concat>
@@ -3281,6 +3286,11 @@
<echo file="${debian.bundles.dest}/../lib/felix.client.run.properties"
append="true">felix.auto.start.14= reference:file:/usr/share/java/dnsjava.jar
</echo>
+ <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties"
+ token="reference:file:sc-bundles/util.jar">
+ <replacevalue>reference:file:/usr/share/jitsi-common/util.jar</replacevalue>
+ </replace>
+
</target>
<!-- target to rebuild the util bundle reusing debian package -->
@@ -3415,16 +3425,16 @@
</patternset>
</unzip>
<delete file="${debian.bundles.dest}/smacklib.jar"/>
- <mkdir dir="${debian.bundles.dest}/smacklib.jar/META-INF"/>
+ <mkdir dir="${debian.bundles.common.dest}/smacklib.jar/META-INF"/>
- <symlink resource="../../../../share/java/xpp3-min.jar"
- link="${debian.bundles.dest}/smacklib.jar/xpp3.jar"/>
- <symlink resource="../../../../share/java/jzlib.jar"
- link="${debian.bundles.dest}/smacklib.jar/jzlib.jar"/>
+ <symlink resource="../../../share/java/xpp3-min.jar"
+ link="${debian.bundles.common.dest}/smacklib.jar/xpp3.jar"/>
+ <symlink resource="../../../share/java/jzlib.jar"
+ link="${debian.bundles.common.dest}/smacklib.jar/jzlib.jar"/>
<!-- Create the smacklib .jar-->
<jar compress="false"
- destfile="${debian.bundles.dest}/smacklib.jar/smacklib.jar"
+ destfile="${debian.bundles.common.dest}/smacklib.jar/smacklib.jar"
manifest="lib/installer-exclude/smack.manifest.mf">
<zipfileset src="lib/installer-exclude/smackx-debug.jar" prefix=""/>
<zipfileset src="lib/installer-exclude/smack.jar" prefix=""/>
@@ -3432,19 +3442,25 @@
<zipfileset src="lib/installer-exclude/jnsapi.jar" prefix=""/>
</jar>
<move file="${debian.bundles.dest}/META-INF/MANIFEST.MF"
- todir="${debian.bundles.dest}/smacklib.jar/META-INF"/>
+ todir="${debian.bundles.common.dest}/smacklib.jar/META-INF"/>
<delete dir="${debian.bundles.dest}/META-INF"/>
+ <delete dir="${debian.bundles.dest}/smacklib.jar"/>
<!-- Removes the last empty line -->
<replaceregexp
- file="${debian.bundles.dest}/smacklib.jar/META-INF/MANIFEST.MF"
+ file="${debian.bundles.common.dest}/smacklib.jar/META-INF/MANIFEST.MF"
match="^\r\n$"
flags="m"
replace=""/>
<concat
- destfile="${debian.bundles.dest}/smacklib.jar/META-INF/MANIFEST.MF"
+ destfile="${debian.bundles.common.dest}/smacklib.jar/META-INF/MANIFEST.MF"
append="true"
eol="crlf"
fixlastline="true">Bundle-ClassPath: .,smacklib.jar,xpp3.jar,jzlib.jar&#013;&#010;&#013;&#010;</concat>
+ <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties"
+ token="reference:file:sc-bundles/smacklib.jar">
+ <replacevalue>reference:file:/usr/share/jitsi-common/smacklib.jar</replacevalue>
+ </replace>
+
</target>
<!-- target to rebuild the jmdnslib bundle reusing debian package -->
@@ -3502,7 +3518,7 @@
eol="crlf"
fixlastline="true">Bundle-ClassPath: .,bcprov.jar&#013;&#010;&#013;&#010;</concat>
</target>
-
+
<!-- target to rebuild the account info bundle reusing debian package -->
<target name="deb-bundle-plugin-accountinfo">
@@ -3578,35 +3594,40 @@
</patternset>
</unzip>
<delete file="${debian.bundles.dest}/libjitsi.jar"/>
- <mkdir dir="${debian.bundles.dest}/libjitsi.jar/META-INF"/>
- <symlink resource="../../../../share/java/bcpkix.jar"
- link="${debian.bundles.dest}/libjitsi.jar/"/>
- <symlink resource="../../../../share/libjitsi/libjitsi.jar"
- link="${debian.bundles.dest}/libjitsi.jar/"/>
- <symlink resource="../../../../share/libjitsi/lib/fmj.jar"
- link="${debian.bundles.dest}/libjitsi.jar/"/>
+ <mkdir dir="${debian.bundles.common.dest}/libjitsi.jar/META-INF"/>
+ <symlink resource="../../../share/java/bcpkix.jar"
+ link="${debian.bundles.common.dest}/libjitsi.jar/"/>
+ <symlink resource="../../../share/libjitsi/libjitsi.jar"
+ link="${debian.bundles.common.dest}/libjitsi.jar/"/>
+ <symlink resource="../../../share/libjitsi/lib/fmj.jar"
+ link="${debian.bundles.common.dest}/libjitsi.jar/"/>
<!-- Create the sys .jar-->
<jar compress="false"
- destfile="${debian.bundles.dest}/libjitsi.jar/libjitsi-impl.jar">
+ destfile="${debian.bundles.common.dest}/libjitsi.jar/libjitsi-impl.jar">
<zipfileset dir="${dest}/net/java/sip/communicator/impl/libjitsi"
prefix="net/java/sip/communicator/impl/libjitsi"/>
</jar>
<move file="${debian.bundles.dest}/META-INF/MANIFEST.MF"
- todir="${debian.bundles.dest}/libjitsi.jar/META-INF"/>
+ todir="${debian.bundles.common.dest}/libjitsi.jar/META-INF"/>
<delete dir="${debian.bundles.dest}/META-INF"/>
+ <delete dir="${debian.bundles.dest}/libjitsi.jar"/>
<!-- Removes the last empty line -->
<replaceregexp
- file="${debian.bundles.dest}/libjitsi.jar/META-INF/MANIFEST.MF"
+ file="${debian.bundles.common.dest}/libjitsi.jar/META-INF/MANIFEST.MF"
match="^\r\n$"
flags="m"
replace=""/>
<concat
- destfile="${debian.bundles.dest}/libjitsi.jar/META-INF/MANIFEST.MF"
+ destfile="${debian.bundles.common.dest}/libjitsi.jar/META-INF/MANIFEST.MF"
append="true"
eol="crlf"
fixlastline="true">Bundle-ClassPath: .,libjitsi-impl.jar,fmj.jar,libjitsi.jar,bcpkix.jar&#013;&#010;&#013;&#010;</concat>
+ <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties"
+ token="reference:file:sc-bundles/libjitsi.jar">
+ <replacevalue>reference:file:/usr/share/jitsi-common/libjitsi.jar</replacevalue>
+ </replace>
<!--bundle-netaddr-->
<unzip src="${debian.bundles.dest}/netaddr.jar"
@@ -3616,35 +3637,40 @@
</patternset>
</unzip>
<delete file="${debian.bundles.dest}/netaddr.jar"/>
- <mkdir dir="${debian.bundles.dest}/netaddr.jar/META-INF"/>
- <symlink resource="../../../../share/libjitsi/lib/ice4j.jar"
- link="${debian.bundles.dest}/netaddr.jar/"/>
- <symlink resource="../../../../share/java/weupnp.jar"
- link="${debian.bundles.dest}/netaddr.jar/"/>
+ <mkdir dir="${debian.bundles.common.dest}/netaddr.jar/META-INF"/>
+ <symlink resource="../../../share/libjitsi/lib/ice4j.jar"
+ link="${debian.bundles.common.dest}/netaddr.jar/"/>
+ <symlink resource="../../../share/java/weupnp.jar"
+ link="${debian.bundles.common.dest}/netaddr.jar/"/>
<!-- Create the sys .jar-->
<jar compress="false"
- destfile="${debian.bundles.dest}/netaddr.jar/netaddr.jar">
+ destfile="${debian.bundles.common.dest}/netaddr.jar/netaddr.jar">
<zipfileset dir="${dest}/net/java/sip/communicator/service/netaddr"
prefix="net/java/sip/communicator/service/netaddr"/>
<zipfileset dir="${dest}/net/java/sip/communicator/impl/netaddr"
prefix="net/java/sip/communicator/impl/netaddr"/>
</jar>
<move file="${debian.bundles.dest}/META-INF/MANIFEST.MF"
- todir="${debian.bundles.dest}/netaddr.jar/META-INF"/>
+ todir="${debian.bundles.common.dest}/netaddr.jar/META-INF"/>
<delete dir="${debian.bundles.dest}/META-INF"/>
+ <delete dir="${debian.bundles.dest}/netaddr.jar"/>
<!-- Removes the last empty line -->
<replaceregexp
- file="${debian.bundles.dest}/netaddr.jar/META-INF/MANIFEST.MF"
+ file="${debian.bundles.common.dest}/netaddr.jar/META-INF/MANIFEST.MF"
match="^\r\n$"
flags="m"
replace=""/>
<concat
- destfile="${debian.bundles.dest}/netaddr.jar/META-INF/MANIFEST.MF"
+ destfile="${debian.bundles.common.dest}/netaddr.jar/META-INF/MANIFEST.MF"
append="true"
eol="crlf"
fixlastline="true">Bundle-ClassPath: .,netaddr.jar,ice4j.jar,weupnp.jar&#013;&#010;&#013;&#010;</concat>
+ <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties"
+ token="reference:file:sc-bundles/netaddr.jar">
+ <replacevalue>reference:file:/usr/share/jitsi-common/netaddr.jar</replacevalue>
+ </replace>
<!--zrtp4j /usr/share/libjitsi/lib/zrtp4j-light.jar -->
<unzip src="${debian.bundles.dest}/zrtp4j.jar"
@@ -3761,5 +3787,76 @@
<attribute name="Bundle-ClassPath" value=".,httpmime.jar"/>
</manifest>
</target>
+ <target name="deb-bundle-common">
+
+ <move file="${debian.bundles.dest}/protocol-jabber.jar"
+ tofile="${debian.bundles.common.dest}/protocol-jabber.jar"/>
+ <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties"
+ token="reference:file:sc-bundles/protocol-jabber.jar">
+ <replacevalue>reference:file:/usr/share/jitsi-common/protocol-jabber.jar</replacevalue>
+ </replace>
+
+ <move file="${debian.bundles.dest}/protocol-media.jar"
+ tofile="${debian.bundles.common.dest}/protocol-media.jar"/>
+ <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties"
+ token="reference:file:sc-bundles/protocol-media.jar">
+ <replacevalue>reference:file:/usr/share/jitsi-common/protocol-media.jar</replacevalue>
+ </replace>
+
+ <move file="${debian.bundles.dest}/protocol.jar"
+ tofile="${debian.bundles.common.dest}/protocol.jar"/>
+ <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties"
+ token="reference:file:sc-bundles/protocol.jar">
+ <replacevalue>reference:file:/usr/share/jitsi-common/protocol.jar</replacevalue>
+ </replace>
+ <move file="${debian.bundles.dest}/configuration.jar"
+ tofile="${debian.bundles.common.dest}/configuration.jar"/>
+ <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties"
+ token="reference:file:sc-bundles/configuration.jar">
+ <replacevalue>reference:file:/usr/share/jitsi-common/configuration.jar</replacevalue>
+ </replace>
+
+ <move file="${debian.bundles.dest}/dns.jar"
+ tofile="${debian.bundles.common.dest}/dns.jar"/>
+ <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties"
+ token="reference:file:sc-bundles/dns.jar">
+ <replacevalue>reference:file:/usr/share/jitsi-common/dns.jar</replacevalue>
+ </replace>
+
+ <move file="${debian.bundles.dest}/dnsservice.jar"
+ tofile="${debian.bundles.common.dest}/dnsservice.jar"/>
+ <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties"
+ token="reference:file:sc-bundles/dnsservice.jar">
+ <replacevalue>reference:file:/usr/share/jitsi-common/dnsservice.jar</replacevalue>
+ </replace>
+
+ <move file="${debian.bundles.dest}/fileaccess.jar"
+ tofile="${debian.bundles.common.dest}/fileaccess.jar"/>
+ <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties"
+ token="reference:file:sc-bundles/fileaccess.jar">
+ <replacevalue>reference:file:/usr/share/jitsi-common/fileaccess.jar</replacevalue>
+ </replace>
+
+ <move file="${debian.bundles.dest}/packetlogging.jar"
+ tofile="${debian.bundles.common.dest}/packetlogging.jar"/>
+ <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties"
+ token="reference:file:sc-bundles/packetlogging.jar">
+ <replacevalue>reference:file:/usr/share/jitsi-common/packetlogging.jar</replacevalue>
+ </replace>
+
+ <move file="${debian.bundles.dest}/resourcemanager.jar"
+ tofile="${debian.bundles.common.dest}/resourcemanager.jar"/>
+ <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties"
+ token="reference:file:sc-bundles/resourcemanager.jar">
+ <replacevalue>reference:file:/usr/share/jitsi-common/resourcemanager.jar</replacevalue>
+ </replace>
+
+ <move file="${debian.bundles.dest}/ui-service.jar"
+ tofile="${debian.bundles.common.dest}/ui-service.jar"/>
+ <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties"
+ token="reference:file:sc-bundles/ui-service.jar">
+ <replacevalue>reference:file:/usr/share/jitsi-common/ui-service.jar</replacevalue>
+ </replace>
+ </target>
</project>
diff --git a/resources/install/debian/control-src.tmpl b/resources/install/debian/control-src.tmpl
index c6ec0f1..04c40fe 100644
--- a/resources/install/debian/control-src.tmpl
+++ b/resources/install/debian/control-src.tmpl
@@ -11,7 +11,6 @@ Build-Depends: debhelper (>= 9), javahelper,
ant-optional,
ant-contrib-cpptasks,
ant-contrib,
- maven,
autotools-dev,
libjitsi,
libjitsi-jni,
@@ -73,6 +72,7 @@ Package: _PACKAGE_NAME_
Architecture: all
Depends: ${misc:Depends},
_PACKAGE_NAME_-jni (>= ${source:Version}),
+ _PACKAGE_NAME_-common (>= ${source:Version}),
libjitsi (>= 415-0),
libjitsi-jni (>= 415-0),
default-jre | java6-runtime,
@@ -80,7 +80,6 @@ Depends: ${misc:Depends},
libhttpcore-java,
liblog4j1.2-java,
libjmdns-java,
- libdnsjava-java,
libmac-widgets-java,
libfelix-main-java,
libfelix-framework-java,
@@ -91,10 +90,7 @@ Depends: ${misc:Depends},
libcommons-lang3-java,
liblaf-widget-java,
libdbus-java,
- libxpp3-java,
- libjzlib-java,
libbcprov-java,
- libbcpkix-java,
libweupnp-java,
libjna-java,
libjgoodies-forms-java,
@@ -120,3 +116,15 @@ Description: _APP_NAME_ JNI library
Native binaries used to render the video and detect network configuration
changes. Binaries for audio codecs like opus and g722. Global shortcuts,
notifications and hid devices control.
+
+Package: _PACKAGE_NAME_-common
+Section: libs
+Architecture: all
+Depends: ${misc:Depends}, ${shlibs:Depends},
+ libdnsjava-java,
+ libxpp3-java,
+ libjzlib-java,
+ libbcpkix-java
+Description: _APP_NAME_ JNI library
+ These are the common files for _APP_NAME_ the Java VoIP
+ and Instant Messaging client.
diff --git a/resources/install/debian/copyright b/resources/install/debian/copyright
index bb2a999..8c4b26f 100644
--- a/resources/install/debian/copyright
+++ b/resources/install/debian/copyright
@@ -95,12 +95,6 @@ Copyright:
1999-2006 Ross Bencina and Phil Burk
License: MIT
-Files: lib/src/sdes4j/*
-Copyright:
- 2011 University of Applied Sciences Northwestern Switzerland (FHNW)
- 2011 School of Engineering Institute of Mobile and Distributed Systems (IMVS)
-License: LGPL-2.1
-
Files: lib/src/smack_src_3_2_2/*
Copyright:
2002-2008 Jive Software
diff --git a/resources/install/debian/jitsi.sh.tmpl b/resources/install/debian/jitsi.sh.tmpl
index 877b32b..de159db 100644
--- a/resources/install/debian/jitsi.sh.tmpl
+++ b/resources/install/debian/jitsi.sh.tmpl
@@ -28,8 +28,9 @@ fi
javabin=`which java`
SCDIR=/usr/share/_PACKAGE_NAME_
+JITSI_COMMON_DIR=/usr/share/_PACKAGE_NAME_-common
LIBPATH=$SCDIR/lib
-CLASSPATH=/usr/share/java/org.apache.felix.framework.jar:/usr/share/java/org.apache.felix.main.jar:$SCDIR/sc-bundles/sc-launcher.jar:$SCDIR/sc-bundles/util.jar/launchutils.jar:$LIBPATH
+CLASSPATH=/usr/share/java/org.apache.felix.framework.jar:/usr/share/java/org.apache.felix.main.jar:$SCDIR/sc-bundles/sc-launcher.jar:$JITSI_COMMON_DIR/util.jar/launchutils.jar:$LIBPATH
FELIX_CONFIG=$LIBPATH/felix.client.run.properties
LOG_CONFIG=$LIBPATH/logging.properties
COMMAND="$javabin $CLIENTARGS -classpath $CLASSPATH -Djna.library.path=/usr/lib/jni -Dfelix.config.properties=file:$FELIX_CONFIG -Djava.util.logging.config.file=$LOG_CONFIG $SPLASH_ARG net.java.sip.communicator.launcher.SIPCommunicator"
diff --git a/resources/install/debian/package.install.tmpl b/resources/install/debian/package.install.tmpl
index 954b303..d1b9787 100644
--- a/resources/install/debian/package.install.tmpl
+++ b/resources/install/debian/package.install.tmpl
@@ -1,9 +1,9 @@
-debian/_PACKAGE_NAME_-32.xpm usr/share/pixmaps/
-debian/_PACKAGE_NAME_-16.xpm usr/share/pixmaps/
-debian/_PACKAGE_NAME_.svg usr/share/pixmaps/
-debian/_PACKAGE_NAME_.desktop usr/share/applications/
-resources/install/logging.properties usr/share/_PACKAGE_NAME_/lib/
-lib/felix.client.run.properties usr/share/_PACKAGE_NAME_/lib/
-lib/jitsi-defaults.properties usr/share/_PACKAGE_NAME_/lib/
+debian/_PACKAGE_NAME_-32.xpm usr/share/pixmaps
+debian/_PACKAGE_NAME_-16.xpm usr/share/pixmaps
+debian/_PACKAGE_NAME_.svg usr/share/pixmaps
+debian/_PACKAGE_NAME_.desktop usr/share/applications
+resources/install/logging.properties usr/share/_PACKAGE_NAME_/lib
+lib/felix.client.run.properties usr/share/_PACKAGE_NAME_/lib
+lib/jitsi-defaults.properties usr/share/_PACKAGE_NAME_/lib
sc-bundles/*.jar usr/share/_PACKAGE_NAME_/sc-bundles
debian/sh/_PACKAGE_NAME_ usr/bin
diff --git a/resources/install/debian/rules.tmpl b/resources/install/debian/rules.tmpl
index 5f393c3..a960b7d 100755
--- a/resources/install/debian/rules.tmpl
+++ b/resources/install/debian/rules.tmpl
@@ -21,7 +21,7 @@ override_dh_install-indep:
# make and install the debian specific bundles
# use the prebuild and installed bundles to extract/modify and use the
# exising debian java packages
- $(ANT) -file build.xml -Ddebian.bundles.dest=debian/$(PACKAGE_NAME)/usr/share/$(PACKAGE_NAME)/sc-bundles deb-bundle-jna deb-bundle-util deb-bundle-sysactivitynotifications deb-bundle-swing-ui deb-bundle-json deb-bundle-smacklib deb-bundle-jmdnslib deb-bundle-desktoputil deb-bundle-bouncycastle deb-bundle-plugin-accountinfo deb-bundle-commons-lang deb-bundle-hsqldb deb-libjitsi-deps deb-bundle-httpmime
+ $(ANT) -file build.xml -Ddebian.bundles.dest=debian/$(PACKAGE_NAME)/usr/share/$(PACKAGE_NAME)/sc-bundles -Ddebian.bundles.common.dest=debian/$(PACKAGE_NAME)-common/usr/share/$(PACKAGE_NAME)-common deb-bundle-jna deb-bundle-util deb-bundle-sysactivitynotifications deb-bundle-swing-ui deb-bundle-json deb-bundle-smacklib deb-bundle-jmdnslib deb-bundle-desktoputil deb-bundle-bouncycastle deb-bundle-plugin-accountinfo deb-bundle-commons-lang deb-bundle-hsqldb deb-libjitsi-deps deb-bundle-httpmime deb-bundle-common
override_dh_install-arch:
ifeq ($(DEB_HOST_ARCH),amd64)
diff --git a/resources/install/rpm/SPECS/build-jitsi-rpm.sh b/resources/install/rpm/SPECS/build-jitsi-rpm.sh
index 932df3d..f501d51 100755
--- a/resources/install/rpm/SPECS/build-jitsi-rpm.sh
+++ b/resources/install/rpm/SPECS/build-jitsi-rpm.sh
@@ -1,17 +1,15 @@
-#!/bin/bash -x
+#!/bin/bash -xe
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
+cd $SCRIPT_DIR
#exec > "${0%.*}.log" 2>&1
-#exec -x
-
-if [[ "$1" == "--help" || "$1" == "-h" || "$1" == "-?" || $# -lt 2 ]]; then
- echo "Usage $0 VERSION BUILD_NUMBER"
+if [[ "$1" == "--help" || "$1" == "-h" || "$1" == "-?" || $# -lt 1 ]]; then
+ echo "Usage $0 BUILD_NUMBER"
exit 1
fi
-version=$1
-buildNumber=$2
+buildNumber=$1
# Deletes everything but the newest files matching the specified pattern
clean_oldies() {
@@ -26,13 +24,18 @@ clean_oldies() {
ls -t $pattern | tail -$tailCount | xargs rm -f
}
-cd $SCRIPT_DIR/SOURCES
+cd SOURCES
+
+[[ ! -d jitsi ]] && git clone https://github.com/jitsi/jitsi.git
-[[ ! -d jitsi ]] && git clone https://github.com/jitsi/jitsi
cd jitsi
git stash
git pull --rebase
-git stash pop
+git stash pop || true
+
+VERSION_MAJOR=$(grep 'public static final int VERSION_MAJOR = ' src/net/java/sip/communicator/impl/version/VersionImpl.java | awk '{print $7}' | awk -F ';' '{print $1}')
+VERSION_MINOR=$(grep 'public static final int VERSION_MINOR = ' src/net/java/sip/communicator/impl/version/VersionImpl.java | awk '{print $7}' | awk -F ';' '{print $1}')
+version=$VERSION_MAJOR.$VERSION_MINOR
echo "Creating zip file"
cd $SCRIPT_DIR/SOURCES
diff --git a/resources/install/rpm/SPECS/jitsi.spec b/resources/install/rpm/SPECS/jitsi.spec
index a106e84..05acbdb 100644
--- a/resources/install/rpm/SPECS/jitsi.spec
+++ b/resources/install/rpm/SPECS/jitsi.spec
@@ -1,19 +1,21 @@
Name: jitsi
-Version: 2.3
-Release: 4831
+Version: 2.5
+Release: 5267
Summary: Jitsi - Open Source Video Calls and Chat
-Packager: Pavel Tankov <ptankov@bluejimp.com>
+Packager: Damian Minkov <damencho@jitsi.org>
Group: Applications/Internet
License: GNU Lesser General Public License
URL: https://www.jitsi.org
-Source0: http://download.jitsi.org/jitsi/nightly/src/jitsi-src-2.3-4831.zip
+Source0: http://download.jitsi.org/jitsi/nightly/src/%{name}-src-%{version}-%{release}.zip
BuildRoot: %{_topdir}/buildroot
AutoReqProv: no
BuildRequires: java-devel >= 0:1.6
BuildRequires: ant
+BuildRequires: ant-nodeps
BuildRequires: gzip
+BuildRequires: git-core
Requires: java >= 0:1.6
@@ -28,7 +30,7 @@ Yahoo! and many other useful features.
%setup -q -n jitsi
%build
-ant -Dlabel=4831 rebuild
+ant -Dlabel=%{release} rebuild
%install
[ "$(readlink -f "$RPM_BUILD_ROOT")" != "/" ] && rm -rf $RPM_BUILD_ROOT
@@ -56,6 +58,7 @@ gzip $RPM_BUILD_ROOT/usr/share/man/man1/jitsi.1
# copy the launcher script
cp resources/install/debian/jitsi.sh.tmpl $RPM_BUILD_ROOT/usr/bin/jitsi
sed -i -e "s/_PACKAGE_NAME_/jitsi/" $RPM_BUILD_ROOT/usr/bin/jitsi
+sed -i -e "s/-common/\/sc-bundles/" $RPM_BUILD_ROOT/usr/bin/jitsi
# no more libaoss
#sed -i -e "s@export LD_PRELOAD=/usr/lib/libaoss.so@export LD_PRELOAD=/usr/lib/libaoss.so.0@" $RPM_BUILD_ROOT/usr/bin/sip-communicator
@@ -125,6 +128,10 @@ sed -i -e "s/\/launchutils.jar//" $RPM_BUILD_ROOT/usr/bin/jitsi
%doc %{_mandir}/man*/*
%changelog
+* Tue Jul 29 2014 poma <poma@gmail.com>
+- Repair jitsi.spec in regard to jitsi.sh.tmpl commit 4064c28,
+ and build-jitsi-rpm.sh for the build on Fedora.
+
* Fri Sep 13 2013 Pavel Tankov <ptankov@bluejimp.com>
- Now depends on java >= 0:1.6.
- Changed the info to conform with the description on the website.
diff --git a/resources/install/windows/DefaultOverridesProps.wxi.template b/resources/install/windows/DefaultOverridesProps.wxi.template
index 222bd64..d4f6557 100644
--- a/resources/install/windows/DefaultOverridesProps.wxi.template
+++ b/resources/install/windows/DefaultOverridesProps.wxi.template
@@ -8,6 +8,30 @@
-->
<Fragment>
<ComponentGroup Id="ComponentGroup_DefaultOverrides">
+ <Component
+ Id="ComponentGroup_DefaultOverrides_Disable_Updates_Check"
+ Directory="@@lib"
+ Guid="F09D26F0-402F-4CC1-AD28-9D88B9316AC1"
+ Win64="$(var.Win64)">
+ <Condition><![CDATA[DISABLE_UPDATES = 1 OR CREATE_DISABLE_UPDATES_CHECK = 1]]></Condition>
+ <IniFile
+ Id="DefaultOverrides_DisableUpdatesCheck"
+ Action="addLine"
+ Directory="@@lib"
+ Name="jitsi-default-overrides.properties"
+ Section="#dummy"
+ Key="net.java.sip.communicator.plugin.updatechecker.ENABLED"
+ Value="false"
+ />
+ <RegistryValue
+ Key="Software\Microsoft\@APP_NAME@"
+ KeyPath="yes"
+ Name="DisableUpdatesCheck"
+ Root="HKCU"
+ Type="integer"
+ Value="1" />
+ <CreateFolder/>
+ </Component>
<Component
Id="ComponentGroup_DefaultOverrides_Provisioning_Method"
Directory="@@lib"
diff --git a/resources/install/windows/en-us.wxl b/resources/install/windows/en-us.wxl
index c64ea72..d248f3b 100644
--- a/resources/install/windows/en-us.wxl
+++ b/resources/install/windows/en-us.wxl
@@ -18,6 +18,8 @@
<String Id="ShortcutsAndRegistryDlg_CreateAutoStart" Overridable="yes">&amp;Auto-start when computer restarts or reboots</String>
<String Id="ShortcutsAndRegistryDlg_AssociateProtocols" Overridable="yes">&amp;Associate Protocols</String>
<String Id="ShortcutsAndRegistryDlg_DefaultIMApp" Overridable="yes">M&amp;ake [ProductName] the default Instant Messaging Provider (Outlook integration)</String>
+ <String Id="ShortcutsAndRegistryDlg_DisableUpdates" Overridable="yes">&amp;Disable check for updates on startup</String>
+ <String Id="ShortcutsAndRegistryDlg_VariousSettings" Overridable="yes">&amp;Various Settings</String>
<String Id="WelcomeText1" Overridable="yes"><![CDATA[@WelcomeText1@]]></String>
<String Id="WelcomeText2" Overridable="yes"><![CDATA[@WelcomeText2@]]></String>
diff --git a/resources/install/windows/fr-fr.wxl b/resources/install/windows/fr-fr.wxl
index 76f7da7..4dcf621 100644
--- a/resources/install/windows/fr-fr.wxl
+++ b/resources/install/windows/fr-fr.wxl
@@ -18,6 +18,8 @@
<String Id="ShortcutsAndRegistryDlg_CreateAutoStart" Overridable="yes">Lancer automatiquement quand l’ordinateur démarre</String>
<String Id="ShortcutsAndRegistryDlg_AssociateProtocols" Overridable="yes">&amp;Protocoles associés</String>
<String Id="ShortcutsAndRegistryDlg_DefaultIMApp" Overridable="yes">M&amp;ake [ProductName] the default Instant Messaging Provider (Outlook integration)</String>
+ <String Id="ShortcutsAndRegistryDlg_DisableUpdates" Overridable="yes">&amp;Disable check for updates on startup</String>
+ <String Id="ShortcutsAndRegistryDlg_VariousSettings" Overridable="yes">&amp;Various Settings</String>
<String Id="WelcomeText1" Overridable="yes"><![CDATA[Ce logiciel est developpé par la communauté de [ProductName] ]]></String>
<String Id="WelcomeText2" Overridable="yes"><![CDATA[Découvrir notre site : @APP_WEB@]]></String>
diff --git a/resources/install/windows/installer-windows.wxs b/resources/install/windows/installer-windows.wxs
index 1e31d2e..3f4f07b 100644
--- a/resources/install/windows/installer-windows.wxs
+++ b/resources/install/windows/installer-windows.wxs
@@ -193,15 +193,18 @@
<Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.ShortcutsAndRegistryDlgDescription)" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
- <Control Id="ShortcutGroup" Type="GroupBox" X="20" Y="60" Width="330" Height="90" Text="!(loc.ShortcutsAndRegistryDlg_CreateShortcuts)" />
- <Control Id="StartMenuShortcutCheckBox" Type="CheckBox" X="25" Y="75" Width="320" Height="15" Property="CREATE_START_MENU_SHORTCUT" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_CreateStartMenu)" />
- <Control Id="DesktopShortcutCheckBox" Type="CheckBox" X="25" Y="90" Width="320" Height="15" Property="CREATE_DESKTOP_SHORTCUT" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_CreateDesktop)" />
- <Control Id="StartupShortcutCheckBox" Type="CheckBox" X="25" Y="105" Width="320" Height="15" Property="HAS_STARTUP_REGISTRY" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_CreateAutoStart)" />
- <Control Id="DefaultIMApplicationCheckBox" Type="CheckBox" X="25" Y="120" Width="320" Height="25" Property="SET_DEFAULT_IM_APP" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_DefaultIMApp)" />
+ <Control Id="ShortcutGroup" Type="GroupBox" X="20" Y="50" Width="330" Height="50" Text="!(loc.ShortcutsAndRegistryDlg_CreateShortcuts)" />
+ <Control Id="StartMenuShortcutCheckBox" Type="CheckBox" X="25" Y="65" Width="320" Height="15" Property="CREATE_START_MENU_SHORTCUT" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_CreateStartMenu)" />
+ <Control Id="DesktopShortcutCheckBox" Type="CheckBox" X="25" Y="80" Width="320" Height="15" Property="CREATE_DESKTOP_SHORTCUT" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_CreateDesktop)" />
- <Control Id="RegistryGroup" Type="GroupBox" X="20" Y="155" Width="330" Height="50" Text="!(loc.ShortcutsAndRegistryDlg_AssociateProtocols)" />
- <Control Id="SipRegistryEntriesCheckBox" Type="CheckBox" X="25" Y="170" Width="320" Height="15" Property="CREATE_SIP_REGISTRY_ENTRIES" CheckBoxValue="1" Text="&amp;SIP" />
- <Control Id="XmppRegistryEntriesCheckBox" Type="CheckBox" X="25" Y="185" Width="320" Height="15" Property="CREATE_XMPP_REGISTRY_ENTRIES" CheckBoxValue="1" Text="&amp;XMPP" />
+ <Control Id="VeriousGroup" Type="GroupBox" X="20" Y="105" Width="330" Height="75" Text="!(loc.ShortcutsAndRegistryDlg_VariousSettings)" />
+ <Control Id="StartupShortcutCheckBox" Type="CheckBox" X="25" Y="120" Width="320" Height="15" Property="HAS_STARTUP_REGISTRY" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_CreateAutoStart)" />
+ <Control Id="DisableUpdatesCheckCheckBox" Type="CheckBox" X="25" Y="135" Width="320" Height="15" Property="CREATE_DISABLE_UPDATES_CHECK" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_DisableUpdates)" />
+ <Control Id="DefaultIMApplicationCheckBox" Type="CheckBox" X="25" Y="150" Width="320" Height="25" Property="SET_DEFAULT_IM_APP" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_DefaultIMApp)" />
+
+ <Control Id="RegistryGroup" Type="GroupBox" X="20" Y="185" Width="330" Height="45" Text="!(loc.ShortcutsAndRegistryDlg_AssociateProtocols)" />
+ <Control Id="SipRegistryEntriesCheckBox" Type="CheckBox" X="25" Y="200" Width="320" Height="15" Property="CREATE_SIP_REGISTRY_ENTRIES" CheckBoxValue="1" Text="&amp;SIP" />
+ <Control Id="XmppRegistryEntriesCheckBox" Type="CheckBox" X="25" Y="215" Width="320" Height="15" Property="CREATE_XMPP_REGISTRY_ENTRIES" CheckBoxValue="1" Text="&amp;XMPP" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
@@ -294,6 +297,12 @@
<Custom Action="UnsetCREATE_STARTUP_REGISTRY" After="SetINSTALLDIR">
<![CDATA[NOT HAS_STARTUP_REGISTRY AND NOT (HAS_STARTUP_REGISTRY = "#1")]]>
</Custom>
+ <Custom Action="SetCREATE_DISABLE_UPDATES_CHECK" After="SetINSTALLDIR">
+ <![CDATA[HAS_DISABLE_UPDATES_CHECK_REGISTRY = "#1"]]>
+ </Custom>
+ <Custom Action="UnsetCREATE_DISABLE_UPDATES_CHECK" After="SetINSTALLDIR">
+ <![CDATA[NOT HAS_DISABLE_UPDATES_CHECK_REGISTRY]]>
+ </Custom>
<?ifdef JRESetup ?>
<Custom Action="SetWIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" After="AppSearch">
@@ -334,6 +343,14 @@
Property="CREATE_STARTUP_REGISTRY"
Value="1" />
<CustomAction
+ Id="SetCREATE_DISABLE_UPDATES_CHECK"
+ Property="CREATE_DISABLE_UPDATES_CHECK"
+ Value="1" />
+<CustomAction
+ Id="UnsetCREATE_DISABLE_UPDATES_CHECK"
+ Property="CREATE_DISABLE_UPDATES_CHECK"
+ Value="0" />
+<CustomAction
Id="SetINSTALLDIR"
Property="INSTALLDIR"
Value="[SIP_COMMUNICATOR_AUTOUPDATE_INSTALLDIR]" />
@@ -400,6 +417,12 @@
<Custom Action="UnsetCREATE_STARTUP_REGISTRY" After="SetINSTALLDIR">
<![CDATA[NOT HAS_STARTUP_REGISTRY AND NOT (HAS_STARTUP_REGISTRY = "#1")]]>
</Custom>
+ <Custom Action="SetCREATE_DISABLE_UPDATES_CHECK" After="SetINSTALLDIR">
+ <![CDATA[HAS_DISABLE_UPDATES_CHECK_REGISTRY AND HAS_DISABLE_UPDATES_CHECK_REGISTRY = "#1"]]>
+ </Custom>
+ <Custom Action="UnsetCREATE_DISABLE_UPDATES_CHECK" After="SetINSTALLDIR">
+ <![CDATA[NOT HAS_DISABLE_UPDATES_CHECK_REGISTRY]]>
+ </Custom>
<?ifdef JRESetup ?>
<Custom Action="SetWIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" After="AppSearch">
@@ -443,6 +466,14 @@
<SetProperty Id="HAS_STARTUP_REGISTRY" After="AppSearch" Value="[HAS_STARTUP_SHORTCUT]">
HAS_STARTUP_SHORTCUT
</SetProperty>
+<Property Id="HAS_DISABLE_UPDATES_CHECK_REGISTRY" Value="#0">
+ <RegistrySearch
+ Id="RegistrySearch_HasDisableUpdatesCheckRegistry"
+ Key="Software\Microsoft\@APP_NAME@"
+ Name="DisableUpdatesCheck"
+ Root="HKCU"
+ Type="raw" />
+</Property>
<Property Id="IS_DEFAULT_IM_APP">
<RegistrySearch
Id="RegistrySearch_IsDefaultIMApp"
diff --git a/resources/languages/resources.properties b/resources/languages/resources.properties
index 8ba6d1b..72562eb 100644
--- a/resources/languages/resources.properties
+++ b/resources/languages/resources.properties
@@ -720,23 +720,24 @@ identity cannot<br> be automatically verified. \
Do you want to continue connecting?<br><br> \
For more information, click "Show Certificate".</html>
service.gui.CONTINUE_ANYWAY=Continue anyway
-service.gui.CERT_INFO_ISSUED_TO=<html><b>Issued To</b></html>
+service.gui.CERT_INFO_CHAIN=Certificate Chain:
+service.gui.CERT_INFO_ISSUED_TO=Issued To
service.gui.CERT_INFO_CN=Common Name:
service.gui.CERT_INFO_O=Organization:
service.gui.CERT_INFO_C=Country Name:
service.gui.CERT_INFO_ST=State or Province Name:
service.gui.CERT_INFO_L=Locality Name:
-service.gui.CERT_INFO_ISSUED_BY=<html><b>Issued By</b></html>
+service.gui.CERT_INFO_ISSUED_BY=Issued By
service.gui.CERT_INFO_OU=Organizational Unit:
-service.gui.CERT_INFO_VALIDITY=<html><b>Validity</b></html>
+service.gui.CERT_INFO_VALIDITY=Validity
service.gui.CERT_INFO_ISSUED_ON=Issued On:
service.gui.CERT_INFO_EXPIRES_ON=Expires On:
-service.gui.CERT_INFO_FINGERPRINTS=<html><b>Fingerprints</b></html>
-service.gui.CERT_INFO_CERT_DETAILS=<html><b>Certificate Info</b></html>
+service.gui.CERT_INFO_FINGERPRINTS=Fingerprints
+service.gui.CERT_INFO_CERT_DETAILS=Certificate Info
service.gui.CERT_INFO_SER_NUM=Serial Number:
service.gui.CERT_INFO_VER=Version:
service.gui.CERT_INFO_SIGN_ALG=Signature Algorithm:
-service.gui.CERT_INFO_PUB_KEY_INFO=<html><b>Public Key Info</b></html>
+service.gui.CERT_INFO_PUB_KEY_INFO=Public Key Info
service.gui.CERT_INFO_ALG=Algorithm:
service.gui.CERT_INFO_PUB_KEY=Public Key:
service.gui.CERT_INFO_KEY_BYTES_PRINT={0} bytes: {1}
diff --git a/resources/languages/resources_es.properties b/resources/languages/resources_es.properties
index bc6981b..b712598 100644
--- a/resources/languages/resources_es.properties
+++ b/resources/languages/resources_es.properties
@@ -35,6 +35,7 @@ service.gui.ADD=&Agregar
service.gui.ADD_ACCOUNT=Agregar cuenta
service.gui.ADD_CONTACT=&Agregar contacto
service.gui.ADD_AUTHORIZED_CONTACT=Agregar {0} a su lista de contactos
+service.gui.ADD_CONTACT_TO_CONTACTLIST=Agregar contacto a su lista de contactos
service.gui.ADD_CONTACT_TO=&Agregar contacto a
service.gui.ADD_CONTACT_ERROR=Error al agregar contacto con identificador: {0}
service.gui.ADD_CONTACT_ERROR_TITLE=Error al agregar contacto
@@ -56,6 +57,7 @@ service.gui.ADMINISTRATOR=administrador
service.gui.ADVANCED=&Avanzado
service.gui.ALL=&Todos
service.gui.ALL_CONTACTS=&Todos los contactos
+service.gui.ALTERNATE_ADDRESS=Dirección alterna
service.gui.APPLY=&Aplicar
service.gui.ARE_CALLING={0} está llamando...
service.gui.ARE_NOW=Usted es {0}
@@ -73,6 +75,7 @@ service.gui.AUTHORIZATION_RESPONSE=Respuesta de la autorización
service.gui.AWAY_STATUS=Ausente
service.gui.EXTENDED_AWAY_STATUS=Ausencia extendida
service.gui.BAN=&Bloquear
+service.gui.BANNED=vetado
service.gui.BAN_FAILED=Falló el bloqueo
service.gui.BAN_FAILED_GENERAL_ERROR=Fallo al bloquear a {0}. Ocurrió un error general en el servidor.
service.gui.BAN_FAILED_NOT_ALLOWED=Fallo al bloquear a {0}. Ni el propietario o el administrador de la sala pueden ser bloqueados.
@@ -85,6 +88,7 @@ service.gui.CALL=Llamar
service.gui.CALL_CONTACT=Llamar al contacto
service.gui.CALL_FAILED=Falló la llamada
service.gui.CALL_HISTORY_TOOL_TIP=Presione aquí para ver historial
+service.gui.CALL_HISTORY_GROUP_NAME=Registro de llamadas
service.gui.CALL_VIA=Llamar usando:
service.gui.CALL_NAME_OR_NUMBER=Introduzca nombre o número
service.gui.CALL_NOT_SUPPORTING_PARTICIPANT=Esta llamada solo soporta participantes desde la red {0} y de su cuenta {1}. {2} no contiene ninguna dirección para esta red o cuenta.
@@ -110,10 +114,13 @@ service.gui.CHAT_ROOM_CONFIGURATION=Configuración de la sala {0}
service.gui.CHAT_ROOM_CONFIGURATION_FAILED=No se pudo obtener la configuración de la sala de charlas {0}.
service.gui.CHAT_ROOM_CONFIGURATION_FORBIDDEN=No se pudo obtener la configuración de sala de chat {0}. Sólo los propietarios de la sala de chat pueden ver y cambiar la configuración.
service.gui.CHAT_ROOM_CONFIGURATION_SUBMIT_FAILED=Ocurrió un error mientras se enviaba la configuración de la sala {0}.
+service.gui.CHAT_ROOM_CONFIGURATION_MEMBERS_EDIT_TITLE=Editar lista de miembros
+service.gui.CHAT_ROOM_CONFIGURATION_MEMBERS_EDIT_DESCRIPTION=Los miembros de este chat están en la lista de la derecha. Esos miembros serán los únicos permitidos cuando el chat sea "sólo-miembros".
service.gui.CHAT_ROOM_USER_JOINED=se ha conectado a {0}
service.gui.CHAT_ROOM_USER_LEFT=ha abandonado {0}
service.gui.CHAT_ROOM_USER_KICKED=ha sido expulsado de {0}
service.gui.CHAT_ROOM_USER_QUIT=ha cerrado su sesión {0}
+service.gui.CHAT_ROOM_SEND_MSG_FORBIDDEN=El Envió de mensajes esta prohibido (revocado)
service.gui.CHAT_ROOM_SAVE_BUTTON_TOOLTIP=Guardar la sala de chat para uso posterior
service.gui.CHAT_ROOM_REMOVE_BUTTON_TOOLTIP=Eliminar la sala seleccionada de la lista de salas guardadas
service.gui.CHAT_ROOM_NAME=Nombre de la sala de charlas
@@ -132,6 +139,7 @@ service.gui.CHAT_ROOM_REQUIRES_PASSWORD=La sala {0} ha solicitado contraseña.
service.gui.CHAT_ROOMS=Salas de charla
service.gui.CHAT_ROOM=Sala de chat
service.gui.CHAT_ROOM_SUBJECT_CHANGED={0} ha cambiado el asunto a {1}
+service.gui.CHAT_ROOM_ALTERNATE_ADDRESS=Puede continuar la conversación en la siguiente sala de charlas: {0}
service.gui.CHOOSE_CONTACT=Elegir contacto
service.gui.CHOOSE_NUMBER=Elija número
service.gui.CHOOSE_ACCOUNT=Por favor, seleccione una de las cuentas mostradas.
@@ -190,6 +198,8 @@ service.gui.DO_NOT_SHOW_AGAIN=No mostrar este mensaje de nuevo
service.gui.DOWNLOAD_NOW=&Descargar ahora
service.gui.DRAG_FOR_SHARING=Arrastre hasta aquí lo que desea compartir...
service.gui.DURATION=duración
+service.gui.DESTROY_CHATROOM=Destruir sala de charlas
+service.gui.DESTROY_MESSAGE=Para informar a otros participantes, por favor ingrese el motivo y una dirección de la sala de charlas alternativa para que se unan.
service.gui.EDIT=&Editar
service.gui.EDITED_AT=editado {0}
service.gui.EMAIL=Correo
@@ -282,6 +292,7 @@ service.gui.INSERT_SMILEY=Insertar emoticono
service.gui.INCOMING_CALL=Llamada entrante de: {0}
service.gui.INCOMING_CALL_STATUS=Llamada Entrante
service.gui.INSTANT_MESSAGINGS=IMs
+service.gui.IM=MI
service.gui.INITIATING_CALL_STATUS=Iniciando llamada
service.gui.INVITATION=Texto de la invitación
service.gui.INVITATION_RECEIVED=Invitación recibida
@@ -428,6 +439,7 @@ service.gui.PUT_OFF_HOLD=Quitar pausa
service.gui.PUT_ON_HOLD=Poner en pausa
service.gui.QUIT=&Salir
service.gui.READY=Preparado
+service.gui.RECENT_MESSAGES=Conversaciones recientes
service.gui.REASON=Razón
service.gui.RECEIVED={0} recibido
service.gui.RECONNECTION_LIMIT_EXCEEDED=Ha desconectado y reconectado al servidor muy rápido. La cuenta: Usuario {0}, Servidor {1} ha sido temporalmente deshabilitada y tendrá que esperar unos instantes antes de volver a intentar la conexión.
@@ -628,6 +640,11 @@ service.gui.callinfo.IS_CONFERENCE_FOCUS=Enfocar conferencia
service.gui.callinfo.IS_DEFAULT_ENCRYPTED=Cifrado activado
service.gui.callinfo.CALL_TRANSPORT=Señalización de transporte de llamadas
service.gui.callinfo.CALL_DURATION=Duración de la llamada
+service.gui.callinfo.TLS_PROTOCOL=Protocolo TLS
+service.gui.callinfo.TLS_CIPHER_SUITE=Suite de cifrado TLS
+service.gui.callinfo.TLS_SERVER_CERTIFICATE_CHAIN=Cadena del certificado del servidor TLS
+service.gui.callinfo.TLS_CERTIFICATE_CONTENT=El contenido del certificado del servidor TLS se muestra a continuación.
+service.gui.callinfo.VIEW_CERTIFICATE=Ver Certificado
service.gui.callinfo.CODEC=Códec / Frecuencia
service.gui.callinfo.NA=N.D.
service.gui.callinfo.VIDEO_SIZE=Tamaño de video
@@ -750,6 +767,8 @@ service.gui.avatar.imagepicker.WEBCAM_ERROR=Error en cámara web
service.gui.security.encryption.required=¡Cifrado requerido!
+service.protocol.ICE_FAILED=No se pudo establecer una conexión (falló ICE y no se encontró relé)
+
# impl.protocol.ssh
#Contact Details Seperator(must not be part of contact data stored as persistent
# data)
@@ -823,8 +842,12 @@ plugin.addrbook.ADDRESS_BOOKS=Libreta de direcciones
plugin.addrbook.ENABLE_MACOSX_ADDRESSBOOK=Activar búsqueda en la Libreta de Direcciones de MacOSX
plugin.addrbook.ENABLE_MICROSOFT_OUTLOOK=Activar búsqueda en Microsoft Outlook
plugin.addrbook.DESCRIPTION=Si se encuentra activado, al teclear en el campo de búsqueda de la lista de contactos, se buscará en la libreta de direcciones de su sistema y todos los contactos que coincidan se mostrarán en su lista de contactos.
+plugin.addrbook.DEFAULT_IM_APP=Hacer a Jitsi el Proveedor de Mensajería Instantánea por defecto (Integración con Outlook)
plugin.addrbook.PREFIX=Especifique un prefijo para el número de teléfono
plugin.addrbook.PREFIX_EXAMPLE=Ej: 00
+plugin.addrbook.OUTLOOK_IS_NOT_DEFAULT_MAIL_CLIENT_TITLE=Error accediendo a sus contactos de Microsoft Outlook.
+plugin.addrbook.OUTLOOK_IS_NOT_DEFAULT_MAIL_CLIENT={0} actualmente no puede acceder a sus contactos de Microsoft Outlook, porque Outlook no es su aplicación de correo por defecto.
+plugin.addrbook.MAKE_OUTLOOK_DEFAULT_MAIL_CLIENT=Hacer a Outlook su cliente de correo por defecto
# Google Contacts
impl.googlecontacts.CONFIG_FORM_TITLE=Contactos de Google
@@ -864,6 +887,7 @@ plugin.accountinfo.EMAIL=E-mail:
plugin.accountinfo.WORK_EMAIL=E-Mail laboral:
plugin.accountinfo.PHONE=Teléfono:
plugin.accountinfo.WORK_PHONE=Teléfono laboral:
+plugin.accountinfo.MOBILE_PHONE=Teléfono Móvil:
plugin.accountinfo.ORGANIZATION=Nombre de la organización:
plugin.accountinfo.JOB_TITLE=Puesto:
plugin.accountinfo.ABOUT_ME=Información sobre mí:
@@ -955,6 +979,7 @@ plugin.generalconfig.ERROR_PORT_NUMBER=Puerto erróneo
plugin.generalconfig.CHECK_FOR_UPDATES=Comprobar actualizaciones al iniciar
plugin.generalconfig.STARTUP_CONFIG=Iniciar
plugin.generalconfig.LEAVE_CHATROOM_ON_WINDOW_CLOSE=Abandonar las salas de charlas al cerrar la ventana
+plugin.generalconfig.SHOW_RECENT_MESSAGES=Mostrar las conversaciones recientes (depende del historial)
plugin.generalconfig.REMOVE_SPECIAL_PHONE_SYMBOLS=Eliminar símbolos especiales antes de llamar a números de teléfono
plugin.generalconfig.ACCEPT_PHONE_NUMBER_WITH_ALPHA_CHARS=Convertir letras a números de teléfono
plugin.generalconfig.ACCEPT_PHONE_NUMBER_WITH_ALPHA_CHARS_EXAMPLE=ejemplo. +1-800-MYPHONE -> +1-800-694663
@@ -1200,6 +1225,9 @@ plugin.updatechecker.DIALOG_NOUPDATE=Versión actualizada.
plugin.updatechecker.DIALOG_NOUPDATE_TITLE=No hay actualizaciones
plugin.updatechecker.DIALOG_MISSING_UPDATE=Falta el Instalador de actualizaciones.
+# usersearch
+plugin.usersearch.USER_SEARCH=Búscar usuario
+
# whiteboard
plugin.whiteboard.TITLE=Pizarra digital [Beta]
plugin.whiteboard.MENU_ITEM=Pizarra Digital
diff --git a/resources/languages/resources_ru.properties b/resources/languages/resources_ru.properties
index eec28e2..3cb363b 100644
--- a/resources/languages/resources_ru.properties
+++ b/resources/languages/resources_ru.properties
@@ -30,47 +30,52 @@ service.gui.ACCEPT=&ПринÑÑ‚ÑŒ
service.gui.ACCOUNT=Ðккаунт
service.gui.ACCOUNT_ME=Я
service.gui.ACCOUNT_REGISTRATION_WIZARD=МаÑтер региÑтрации учетных запиÑей
-service.gui.ACCOUNTS=Ðккаунты
+service.gui.ACCOUNTS=Учётные запиÑи
service.gui.ADD=&Добавить
service.gui.ADD_ACCOUNT=Добавить аккаунт
service.gui.ADD_CONTACT=&Добавить контакт
-service.gui.ADD_AUTHORIZED_CONTACT=Добавить {0} в ÑпиÑок контактов
+service.gui.ADD_AUTHORIZED_CONTACT=Добавить {0} в ваш ÑпиÑок контактов
+service.gui.ADD_CONTACT_TO_CONTACTLIST=Добавить контакт в ваш ÑпиÑок контактов
service.gui.ADD_CONTACT_TO=&Добавить контакт к
service.gui.ADD_CONTACT_ERROR=Ðе удалоÑÑŒ добавить контакт: {0}
service.gui.ADD_CONTACT_ERROR_TITLE=Ошибка при добавлении контакта
service.gui.ADD_CONTACT_EXIST_ERROR=Контакт {0} уже ÑущеÑтвует в ÑпиÑке контактов.
service.gui.ADD_CONTACT_NETWORK_ERROR=Сервер не ответил на Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð°: {0}.
-service.gui.ADD_CONTACT_NOT_SUPPORTED=Ðе удалоÑÑŒ добавить контакт: {0}. ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ поддерживаетÑÑ.
-service.gui.ADD_CONTACT_IDENTIFIER=Введите идентификатор контакта, который желаете добавить.
+service.gui.ADD_CONTACT_NOT_SUPPORTED=Ðе удалоÑÑŒ добавить контакт Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð¼: {0}. ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ поддерживаетÑÑ.
+service.gui.ADD_CONTACT_IDENTIFIER=В поле ниже введите идентификатор контакта который вы желаете добавить.
service.gui.ADD_CONTACT_WIZARD=МаÑтер Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¾Ð²
service.gui.ADD_CONTACT_NOT_CONNECTED=Ð’Ñ‹ должны быть подключены Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы добавить контакт. ПожалуйÑта, выполните вход и попробуйте Ñнова.
-service.gui.ADD_GROUP_LOCAL_ERROR=Ðе удалоÑÑŒ добавить группу: {0}. Произошёл Ñбой операции ввода-вывода.
+service.gui.ADD_GROUP_LOCAL_ERROR=Ðе удалоÑÑŒ добавить группу Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼: {0}. Сбой произошёл во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ ввода-вывода.
service.gui.ADD_GROUP_EXIST_ERROR=Группа {0} уже ÑущеÑтвует в ÑпиÑке контактов. ПожалуйÑта, выберите другое имÑ.
-service.gui.ADD_GROUP_NET_ERROR=Ðе удалоÑÑŒ добавить группу: {0}. Произошла ÑÐµÑ‚ÐµÐ²Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. ПожалуйÑта, проверьте ваше Ñетевое подключение и попробуйте Ñнова.
+service.gui.ADD_GROUP_NET_ERROR=Ðе удалоÑÑŒ добавить группу Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼: {0}. Сбой произошёл по причине отказа Ñети. ПожалуйÑта, проверьте ваше Ñетевое подключение и попробуйте Ñнова.
service.gui.ADD_GROUP_ERROR=Ðе удалоÑÑŒ добавить группу: {0}.
service.gui.ADD_GROUP_EMPTY_NAME=Ð˜Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ не может быть пуÑтым.
service.gui.ADD_GROUP=Создать группу
service.gui.ADD_SUBCONTACT=&Добавить дополнительный контакт
+service.gui.ADDRESS=ÐдреÑ
service.gui.ADMINISTRATOR=админиÑтратор
service.gui.ADVANCED=&РаÑширенные
service.gui.ALL=&Ð’Ñе
service.gui.ALL_CONTACTS=&Ð’Ñе контакты
+service.gui.ALTERNATE_ADDRESS=Ðльтернативный адреÑ
service.gui.APPLY=&Применить
-service.gui.ARE_CALLING=вызывает...
+service.gui.ARE_CALLING={0} вызывает...
service.gui.ARE_NOW=Ð’Ñ‹ ÑÐµÐ¹Ñ‡Ð°Ñ {0}
service.gui.AT=времÑ
service.gui.AUTHORIZE=&Ðвторизовать
-service.gui.AUTHORIZATION_ACCEPTED=ÑобеÑедник принÑл Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° авторизацию.
+service.gui.AUTHORIZATION_ACCEPTED={0} ÑобеÑедник принÑл Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° авторизацию.
service.gui.AUTHENTICATION_FAILED=Проверка подлинноÑти Ð´Ð»Ñ {0} не удалаÑÑŒ. Введённый пароль неверен.
service.gui.AUTHENTICATION_REQUESTED=Запрошена проверка подлинноÑти
service.gui.AUTHENTICATION_REQUESTED_SERVER=Сервер {0} запроÑил проверку подлинноÑти.
-service.gui.AUTHENTICATION_REJECTED=ÑобеÑедник отверг Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° авторизацию.
-service.gui.AUTHENTICATION_WINDOW_TITLE=Ð˜Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ {0}
+service.gui.AUTHENTICATION_REJECTED={0} ÑобеÑедник отверг Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° авторизацию.
+service.gui.AUTHENTICATION_WINDOW_TITLE={0} авторизациÑ
service.gui.AUTHORIZATION_REQUESTED=Запрошено разрешение на доÑтуп
service.gui.AUTHORIZATION_REQUESTED_INFO=Контакт {0} запроÑил вашу авторизацию.
service.gui.AUTHORIZATION_RESPONSE=Ответ на авторизацию
service.gui.AWAY_STATUS=Отошёл
+service.gui.EXTENDED_AWAY_STATUS=Давно отÑутÑтвую
service.gui.BAN=&Заблокировать
+service.gui.BANNED=забанен
service.gui.BAN_FAILED=Ðе удалоÑÑŒ заблокировать
service.gui.BAN_FAILED_GENERAL_ERROR=Ðе удалоÑÑŒ заблокировать {0}. ÐžÐ±Ñ‰Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñервера.
service.gui.BAN_FAILED_NOT_ALLOWED=Ðе удалоÑÑŒ заблокировать {0}. Владелец и админиÑтратор конференции не могут быть заблокированы.
@@ -78,15 +83,19 @@ service.gui.BAN_FAILED_NOT_ENOUGH_PERMISSIONS=Ðе удалоÑÑŒ заблоки
service.gui.BRB_MESSAGE=Ð’ данный момент Ñ Ð¾Ñ‚ÑутÑтвую, но Ñ Ð²ÐµÑ€Ð½ÑƒÑÑŒ.
service.gui.BROWSE=ПроÑмотреть
service.gui.BUSY_MESSAGE=Извините, но Ñ ÑÐµÐ¹Ñ‡Ð°Ñ Ð·Ð°Ð½ÑÑ‚.
-service.gui.BUSY_STATUS=ЗанÑÑ‚
+service.gui.BUSY_STATUS=ЗанÑто
service.gui.CALL=Вызов
service.gui.CALL_CONTACT=Позвонить контакту
service.gui.CALL_FAILED=Звонок не удалÑÑ
service.gui.CALL_HISTORY_TOOL_TIP=Ðажмите, чтобы проÑмотреть иÑторию звонков
+service.gui.CALL_HISTORY_GROUP_NAME=ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð¾Ð²
service.gui.CALL_VIA=Позвонить через:
service.gui.CALL_NAME_OR_NUMBER=Введите Ð¸Ð¼Ñ Ð¸Ð»Ð¸ номер
-service.gui.CALL_NOT_SUPPORTING_PARTICIPANT=Этот звонок поддерживает только учаÑтников из Ñети {0} и вашего {1} аккаунта. {2} не Ñодержит никаких адреÑов Ð´Ð»Ñ Ñтой Ñети или аккаунта.
+service.gui.CALL_NOT_SUPPORTING_PARTICIPANT=Этот звонок поддерживает только учаÑтников из Ñети {0} и вашего {1} аккаунта. {2} не Ñодержит адреÑов Ð´Ð»Ñ Ñтой Ñети или аккаунта.
service.gui.CALL_WITH=Ðбонент
+service.gui.CALL_NO_AUDIO_DEVICE=Ð’Ñ‹ не выбрали ни одного аудиоуÑтройÑтва.
+service.gui.CALL_NO_AUDIO_CODEC=У Ð²Ð°Ñ Ð½Ðµ уÑтановлены аудиокодеки.
+service.gui.CALL_NO_DEVICE_CODECS_Q=Хотите продолжить вызов?
service.gui.CANCEL=&Отмена
service.gui.CHAT=Чат
service.gui.CHANGE_FONT=Изменить шрифт
@@ -95,16 +104,24 @@ service.gui.CHANGE_ROOM_SUBJECT_LABEL=Ð’ поле ниже вы можете вÐ
service.gui.CHANGE_NICK=Изменить ник
service.gui.CHANGE_NICKNAME=Изменить ник...
service.gui.CHANGE_NICKNAME_LABEL=Ð’ поле ниже вы можете ввеÑти ваш новый ник.
-service.gui.CHANGE_VIDEO_QUALITY=Изменить качеÑтво входÑщего видео
+service.gui.CHANGE_NICKNAME_ERROR=Ðе удалоÑÑŒ изменить ник
+service.gui.CHANGE_NICKNAME_CONFLICT_ERROR=Такое Ð¸Ð¼Ñ ÑƒÐ¶Ðµ ÑущеÑтвует
+service.gui.CHANGE_VIDEO_QUALITY=Изменить качеÑтво передаваемого видео
+service.gui.CHAT_CONFERENCE_LABEL=КонференциÑ
+service.gui.CHAT_CONFERENCE_ITEM_LABEL={0} конференциÑ
service.gui.CHAT_ROOM_ALREADY_JOINED=ÐšÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ {0} уже подключена.
-service.gui.CHAT_ROOM_CONFIGURATION=ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ð¸ {0}
+service.gui.CHAT_ROOM_CONFIGURATION=ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð¼Ð½Ð°Ñ‚Ñ‹ {0}
service.gui.CHAT_ROOM_CONFIGURATION_FAILED=Ðе удалоÑÑŒ открыть наÑтройки конференции {0}.
+service.gui.CHAT_ROOM_CONFIGURATION_FORBIDDEN=Ðе удалоÑÑŒ отобразить конфигурацию комнаты {0}. Только владелец комнаты может увидеть или изменить конфигурацию.
service.gui.CHAT_ROOM_CONFIGURATION_SUBMIT_FAILED=Произошла ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ конференции {0}.
+service.gui.CHAT_ROOM_CONFIGURATION_MEMBERS_EDIT_TITLE=Редактировать ÑпиÑок учаÑтников
service.gui.CHAT_ROOM_USER_JOINED=подключилÑÑ Ðº {0}
service.gui.CHAT_ROOM_USER_LEFT=покинул {0}
service.gui.CHAT_ROOM_USER_KICKED=был иÑключён из {0}
service.gui.CHAT_ROOM_USER_QUIT=вышел из {0}
+service.gui.CHAT_ROOM_REMOVE_BUTTON_TOOLTIP=Удалить выбранную комнату из ÑпиÑка Ñохранённых
service.gui.CHAT_ROOM_NAME=Ð˜Ð¼Ñ ÐºÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ð¸
+service.gui.CLEAR_CUSTOM_MESSAGES=ОчиÑтка пользовательÑких Ñообщений
service.gui.ROOM_NAME=КонференциÑ
service.gui.AUTOJOIN=ÐвтоматичеÑкий вход
service.gui.CHANGE_PASSWORD=Сменить пароль
@@ -117,10 +134,12 @@ service.gui.CHAT_ROOM_OPTIONS=ÐаÑтройки конференции
service.gui.CHAT_ROOM_REGISTRATION_REQUIRED=ÐšÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ {0} требует региÑтрации Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð°.
service.gui.CHAT_ROOM_REQUIRES_PASSWORD=ÐšÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ {0} запроÑила пароль.
service.gui.CHAT_ROOMS=Конференции
-service.gui.CHAT_ROOM=Конференции
+service.gui.CHAT_ROOM=Комната
service.gui.CHAT_ROOM_SUBJECT_CHANGED={0} изменил тему на {1}
service.gui.CHOOSE_CONTACT=Выберите контакт
service.gui.CHOOSE_ACCOUNT=ПожалуйÑта, выберите один из указанных контактов.
+service.gui.CITY=Город
+service.gui.COUNTRY=Страна
service.gui.SHOW_MORE_TOOLTIP=Ðажмите Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ñтей
service.gui.CLEAR=ОчиÑтить
service.gui.CLOSE=За&крыть
@@ -146,16 +165,19 @@ service.gui.CONTACTS=Контакты
service.gui.COPY=&Копировать
service.gui.COPY_LINK=Копировать &ÑÑылку
service.gui.CREATE=С&оздать
+servoce.gui.CREATE_CALL_FAILED=Ðе удалоÑÑŒ Ñовершить звонок.
service.gui.CREATE_CHAT_ROOM=&Создать конференцию...
service.gui.CREATE_CHAT_ROOM_ERROR=Ðе удалоÑÑŒ Ñоздать конференцию {0}.
service.gui.CREATE_CHAT_ROOM_WIZARD=МаÑтер ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ð¹
service.gui.CREATE_CONFERENCE_CALL=&Создать многопользовательÑкий звонок...
service.gui.CREATE_CONFERENCE_CHAT=&Создать многопользовательÑкий чат...
service.gui.CREATE_GROUP=&Создать группу...
-service.gui.CREATE_GROUP_NAME=Ð’ поле ниже введите Ð¸Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹, которую хотите Ñоздать.
+service.gui.CREATE_GROUP_NAME=Ð’ поле ниже введите Ð¸Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹, которую вы хотите Ñоздать.
service.gui.CREATE_FIRST_GROUP_WIZARD=Ваш ÑпиÑок контактов не Ñодержит ни одной группы. ПожалуйÑта, Ñначала Ñоздайте группу (Файл/Создать группу).
service.gui.CREATE_VIDEO_BRIDGE=Создать &видео-моÑÑ‚...
service.gui.CREATE_VIDEO_BRIDGE_MENU=Создать &видеомоÑÑ‚
+service.gui.CREATE_JOIN_VIDEO_CONFERENCE=Создать/ПриÑоединитьÑÑ Ðº видео конференции
+service.gui.CREATE_VIDEO_CONFERENCE=Создать новую видео конференцию Ð´Ð»Ñ Ñтой комнаты
service.gui.CONTACT_INFO_NOT_SUPPORTED=Данный контакт не поддерживает Ñетевую контактную информацию
service.gui.CUT=В&ырезать
service.gui.DATE=Дата
@@ -164,17 +186,19 @@ service.gui.DENY=&Отклонить
service.gui.DESKTOP_SHARING_WARNING=<b>Ð’Ñ‹ уверены, что хотите предоÑтавить доÑтуп к вашему Ñкрану?</b> <br> Ðажатие OK позволит абонентам, учаÑтвующим в разговоре, видеть Ñодержимое вашего Ñкрана.
service.gui.DIALPAD=Ðомеронабиратель
service.gui.DISPLAY_NAME=Отображаемое имÑ
-service.gui.DISCONNECTED_STATUS=Разъединено
+service.gui.DISCONNECTED_STATUS=Отключено
service.gui.DND_STATUS=Ðе беÑпокоить
service.gui.DO_NOT_ASK_AGAIN=Ðе Ñпрашивать Ñнова
service.gui.DO_NOT_SHOW_AGAIN=Ðе показывать Ñто Ñообщение Ñнова
service.gui.DOWNLOAD_NOW=&Загрузить ÑейчаÑ
-service.gui.DRAG_FOR_SHARING=ПеренеÑите Ñюда Ð´Ð»Ñ ÑовмеÑтного доÑтупа...
+service.gui.DRAG_FOR_SHARING=ПеремеÑтите Ñюда Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ доÑтупа...
service.gui.DURATION=длительноÑÑ‚ÑŒ
+service.gui.DESTROY_CHATROOM=Удалить комнату
+service.gui.DESTROY_MESSAGE=Сообщите другим учаÑтникам причину и Ð°Ð´Ñ€ÐµÑ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð¹ комнаты Ð´Ð»Ñ Ð¿Ñ€Ð¸ÑоединениÑ.
service.gui.EDIT=&Правка
service.gui.EDITED_AT=отредактировано {0}
-service.gui.EMAIL=Электронный Ñщик:
-service.gui.EMAILS=Электронный Ñщик:
+service.gui.EMAIL=Ð­Ð»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð°
+service.gui.EMAILS=ПиÑьма
service.gui.EMPTY_HISTORY=&ОчиÑтить иÑторию
service.gui.ENABLE_DESKTOP_REMOTE_CONTROL=Включить управление удаленным рабочим Ñтолом
service.gui.ENABLE_TYPING_NOTIFICATIONS=Сообщать другим, когда вы пишете им (поÑылать активноÑÑ‚ÑŒ чата)
@@ -210,7 +234,7 @@ service.gui.FILE_TRANSFER_NOT_SUPPORTED=Контакт, выбранный ваÐ
service.gui.FILE_TRANSFER_PREPARING=Подготавливаю передачу файла Ð´Ð»Ñ {0}. ПожалуйÑта подождите...
service.gui.FILE_TRANSFER_REQUEST_RECIEVED={0} делитÑÑ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ Ñ Ð²Ð°Ð¼Ð¸.
service.gui.FILE_DOES_NOT_EXIST=Указанный файл не найден. Он был удалён или перемещён.
-service.gui.FILE_OPEN_FAILED=Ðе удалоÑÑŒ открыть файл. Он был удалён или перемещён.
+service.gui.FILE_OPEN_FAILED=Ðе удалоÑÑŒ открыть файл. Он мог быть удалён или перемещён.
service.gui.FILE_OPEN_NOT_SUPPORTED=ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° не поддерживаетÑÑ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ верÑией Jitsi.
service.gui.FILE_OPEN_NO_PERMISSION=Ð’Ñ‹ не имеете доÑтаточных прав Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°. ПожалуйÑта, проверьте ваши права на чтение и попробуйте Ñнова.
service.gui.FILE_OPEN_NO_APPLICATION=Мы не Ñмогли найти Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð°ÑÑоциированного Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ типом файла.
@@ -227,6 +251,7 @@ service.gui.FONT_ITALIC=КурÑив
service.gui.FONT_SIZE=Размер
service.gui.FONT_STYLE=Стиль
service.gui.FONT_UNDERLINE=Подчеркивание
+service.gui.FROM={0} из {1}
service.gui.GRANT_OWNERSHIP=Добавить к владельцам...
service.gui.GRANT_ADMIN=Добавить к админиÑтраторам...
service.gui.GRANT_MODERATOR=Добавить к модераторам
@@ -241,7 +266,14 @@ service.gui.HIDE_OFFLINE_CONTACTS=Скрыть контакты не в Ñети
service.gui.HIDE_MAIN_WINDOW=<DIV>Ðажатие креÑтика в углу окошка не завершит приложение, а только <BR> ÑпрÑчет его. ЕÑли желаете завершить приложение, выберите Файл/Выйти.</DIV>
service.gui.HISTORY=&ИÑториÑ
service.gui.HISTORY_CONTACT=ИÑÑ‚Ð¾Ñ€Ð¸Ñ - {0}
-service.gui.HOME=Домашний
+service.gui.HISTORY_TOGGLE_PER_CONTACT=Выключить иÑторию Ð´Ð»Ñ Ñтого контакта
+service.gui.HISTORY_ERASE_PER_CONTACT=Стереть вÑÑŽ иÑторию контакта
+service.gui.HISTORY_ERASE_PER_CHATROOM=Стереть вÑÑŽ иÑторию комнаты
+service.gui.HISTORY_ERASE_ALL=Стереть вÑÑŽ иÑторию в {0}
+service.gui.HISTORY_REMOVE_PER_CONTACT_WARNING=ДейÑтвительно окончательно уничтожить вÑе локально Ñохраненные ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ {0}?
+service.gui.HISTORY_REMOVE_ALL_WARNING=ДейÑтвительно окончательно уничтожить вÑе локально Ñохраненные ÑообщениÑ?
+service.gui.HISTORY_REMOVE_ERROR=Ошибка ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾ Ñохраненных Ñообщений.
+service.gui.HOME=Домой
service.gui.HOME_PAGE=ДомашнÑÑ Ñтраница
service.gui.HOUR=ВремÑ
service.gui.ICE=ICE
@@ -250,6 +282,8 @@ service.gui.IGNORE=&Игнорировать
service.gui.INSERT_SMILEY=Ð’Ñтавить Ñмайлик
service.gui.INCOMING_CALL=ВходÑщий звонок от: {0}
service.gui.INCOMING_CALL_STATUS=ВходÑщий звонок
+service.gui.INSTANT_MESSAGINGS=IMs
+service.gui.IM=IM
service.gui.INITIATING_CALL_STATUS=ОÑущеÑтвление вызова
service.gui.INVITATION=ТекÑÑ‚ приглашениÑ
service.gui.INVITATION_RECEIVED=Приглашение принÑто
@@ -261,26 +295,28 @@ service.gui.INVITE_CONTACT_TO_CHAT=ПриглаÑить контакты в ча
service.gui.INVITE_CONTACT_TO_CALL=ПриглаÑить контакты к звонку
service.gui.INVITE_CONTACT_TO_VIDEO_BRIDGE=ПриглаÑить контакты в видеомоÑÑ‚
service.gui.INVITE_REASON=Причина приглашениÑ
-service.gui.IS_CALLING=звонит...
+service.gui.IS_CALLING={0} звонит...
service.gui.IS_NOW={0} теперь {1}
-service.gui.JITSI_WARNING=SIP Communicator был переименован в Jitsi.<br/>Загружайте Jitsi, еÑли Ð’Ñ‹ хотите иÑпользовать новую верÑию программы.<br/><br/>ПриноÑим Ñвои Ð¸Ð·Ð²Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð° возможные причиненные неудобÑтва. С уважением,<br/><br/>Команда разработчиков Jitsi
+service.gui.JITSI_WARNING=SIP Communicator был переименован в Jitsi.<br/>ЕÑли Ð’Ñ‹ хотите иÑпользовать новую верÑию программы, пожалуйÑта загружайте Jitsi.<br/><br/>ПриноÑим Ñвои Ð¸Ð·Ð²Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð° возможные причиненные неудобÑтва.<br/><br/>Команда разработчиков Jitsi
service.gui.JITSI_WARNING_TITLE=SIP Communicator теперь Ñтал Jitsi
service.gui.JOIN=&Войти
service.gui.JOIN_AS=В&ойти как
service.gui.CLOSE_CHAT_ROOM_DIALOG=З&акрыть
+service.gui.JOB_TITLE=ДолжноÑÑ‚ÑŒ
service.gui.JOIN_CHAT_ROOM=&Войти в конференцию...
service.gui.JOIN_CHAT_ROOM_TITLE=Войти в конференцию
service.gui.JOIN_CHAT_ROOM_NAME=ПожалуйÑта, введите Ð¸Ð¼Ñ ÐºÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ð¸, в которую хотите войти.
service.gui.JOIN_CHAT_ROOM_WIZARD=МаÑтер приÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ðº конференции
+service.gui.JOIN_AUTOMATICALLY=ПриÑоединÑÑ‚ÑŒÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки
service.gui.KICK=&Выгнать
service.gui.KICK_FAILED=Ðе удалоÑÑŒ выгнать
service.gui.KICK_FAILED_GENERAL_ERROR=Ðе удалоÑÑŒ выгнать {0}. Произошла Ð¾Ð±Ñ‰Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñервера.
service.gui.KICK_FAILED_NOT_ALLOWED=Ðе удалоÑÑŒ выгнать {0}. Владелец и админиÑтратор конференции не может быть выгнан.
service.gui.KICK_FAILED_NOT_ENOUGH_PERMISSIONS=Ðе удалоÑÑŒ выгнать {0}. У Ð²Ð°Ñ Ð½ÐµÑ‚ на Ñто прав.
service.gui.LAST=ПоÑледний
-service.gui.LAST_NAME=ФамилиÑ:
+service.gui.LAST_NAME=ФамилиÑ
service.gui.LEAVE=&Покинуть
-service.gui.LIMIT_REACHED_FOR_IP=У Ð²Ð°Ñ Ñлишком много региÑтраций Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ IP-адреÑа. Сервер {0} не позволÑет больше региÑтраций.
+service.gui.LIMIT_REACHED_FOR_IP=У Ð²Ð°Ñ Ñлишком много региÑтраций Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ IP адреÑа и Ñервер {0} не позволÑет больше региÑтраций.
service.gui.LIST=ПоÑледний
service.gui.LOADING_ROOMS=Загружаю конференции...
service.gui.LOADING=Загрузка...
@@ -298,10 +334,10 @@ service.gui.MISSED_CALLS_TOOL_TIP=Пропущенные вызовы от:
service.gui.MISSED_CALLS_MORE_TOOL_TIP= и {0} больше
service.gui.MODERATOR=модератор
service.gui.MORE=ПоÑмотреть больше
-service.gui.MORE_LABEL=ПеремеÑтить
+service.gui.MORE_LABEL=Еще
service.gui.MOVE=ПеремеÑтить
service.gui.MOVE_SUBCONTACT=П&еремеÑтить контакт
-service.gui.MOVE_SUBCONTACT_MSG=Выберите контакт или группу, куда хотите перемеÑтить выбранный контакт.
+service.gui.MOVE_SUBCONTACT_MSG=Выберите контакт или группу в которые Ð’Ñ‹ бы хотели перемеÑтить выбранный контакт.
service.gui.MOVE_SUBCONTACT_FAILED=Контакт, который вы выбрали такой же как \n иÑточник. ПожалуйÑта, выберите другой контакт!
service.gui.MOVE_SUBCONTACT_QUESTION=Ð’Ñ‹ уверенны, что желаете перемеÑтить {0} в {1}?
service.gui.MOVE_TO_GROUP=&ПеремеÑтить в группу
@@ -309,17 +345,19 @@ service.gui.MOVE_CONTACT=ПеремеÑтить контакт
service.gui.MOVE_CONTACT_ERROR=&Контакт не может быть перемещён
service.gui.MSG_DELIVERY_FAILURE=Сообщение выше не может быть доÑтавлено
service.gui.MSG_DELIVERY_NOT_SUPPORTED=ИÑпользуемый вами протокол не поддерживает offline-ÑообщениÑ. Ð’Ñ‹ можете попробовать ÑвÑзатьÑÑ Ñ {0} через другой протокол или подождать пока он/она не подключатÑÑ Ðº Ñети.
-service.gui.MSG_DELIVERY_INTERNAL_ERROR=Произошла внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° приложениÑ. ПожалуйÑта, Ñообщите о ней Ñюда: http://www.jitsi.org/index.php/Development/BugsAndIssues.
-service.gui.MSG_DELIVERY_ERROR=Ðе Ñмог доÑтавить Ñообщение.
+service.gui.MSG_DELIVERY_INTERNAL_ERROR=Произошла внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° приложениÑ. Возможно Ñто баг. ПожалуйÑта, Ñообщите о ней Ñюда: https://jitsi.org/Development/BugsAndIssues.
+service.gui.MSG_DELIVERY_ERROR=Ðе удалоÑÑŒ доÑтавить Ñообщение.
service.gui.MSG_DELIVERY_UNKNOWN_ERROR=Произошла неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° во Ð²Ñ€ÐµÐ¼Ñ Ð´Ð¾Ñтавки вашего ÑообщениÑ.
service.gui.MSG_NOT_DELIVERED=Произошла ÑÐµÑ‚ÐµÐ²Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. ПожалуйÑта, проверьте вашу Ñетевую конфигурацию и попробуйте Ñнова.
service.gui.MSG_NOT_POSSIBLE=Обмен ÑообщениÑми невозможен Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ контакта (не поддерживаетÑÑ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð¾Ð¼)
service.gui.MSG_RECEIVED={0} напиÑал
service.gui.MSG_SEND_CONNECTION_PROBLEM=Ð’Ñ‹ должны быть подключены к Ñети, чтобы иметь возможноÑÑ‚ÑŒ отправлÑÑ‚ÑŒ ÑообщениÑ.
service.gui.MULTIPLE_LOGINS=Ð’Ñ‹ подключены больше одного раза к тому же аккаунту. Следующий аккаунт: Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: {0}, Ð˜Ð¼Ñ Ñервера: {1} в данный момент отключён.
+service.gui.MY_CHAT_ROOMS=Добавить комнату
+service.gui.MY_CHAT_ROOMS_TITLE=Добавить комнату
service.gui.MUTE=Отключить звук
service.gui.MUTUALLY_ON_HOLD_STATUS=В ожидании
-service.gui.NAME=ДейÑтвие
+service.gui.NAME=ИмÑ
service.gui.NETWORK=Сеть
service.gui.NETWORK_FAILURE=Сбой Ñети
service.gui.NEXT=&Следующий
@@ -327,7 +365,8 @@ service.gui.NEW_ACCOUNT=Добавить новую учетную запиÑÑŒ.
service.gui.NEW_MESSAGE=Ðовое Ñообщение
service.gui.NEW_NAME=Ðовое имÑ
service.gui.NEW_STATUS_MESSAGE=Ðовый ÑÑ‚Ð°Ñ‚ÑƒÑ ÑообщениÑ
-service.gui.NICKNAME=Ðик:
+service.gui.NEW_STATUS_MESSAGE_SAVE=Сохранить ÑобÑтвенное Ñообщение
+service.gui.NICKNAME=Ðик
service.gui.NO=Ðет
service.gui.NONE=Ðет
service.gui.NO_CAMERA_AVAILABLE=Камера не подключена
@@ -339,6 +378,7 @@ service.gui.NO_CONTACTS_FOUND=СоответÑтвующие контакты н
service.gui.NO_CONTACTS_FOUND_SHORT=СоответÑтвующие контакты не найдены.
service.gui.NO_MESSAGE=Ðет Ñообщений
service.gui.NO_GROUP_CHAT_ACCOUNT_AVAILABLE=Ðе обнаружены аккаунты Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ многопользовательÑкого чата. ПоÑетите jitsi.org Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ подробной информации о том какие протоколы поддерживает многопользовательÑкий чат.
+service.gui.NO_ONLINE_CONFERENCING_ACCOUNT=Ðккаунт не поддерживает конференции. Проверьте https://jitsi.org Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о протоколах Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ конференций.
service.gui.NO_ONLINE_TELEPHONY_ACCOUNT=По крайней мере один SIP Ðккаунт необходим Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы Ñделать звонок. Войдите в один из ваших SIP аккаунтов и повторите попытку.
service.gui.NOT_AUTHORIZED=Ðе авторизован
service.gui.NON_EMPTY_CHAT_WINDOW_CLOSE=Ð’ Ñтом чате еÑÑ‚ÑŒ не отправленное Ñообщение. Ð’Ñ‹ уверены, что хотите закрыть Ñтот чат?
@@ -354,15 +394,22 @@ service.gui.OPEN_FILE_FROM_IMAGE=Дважды щелкните, чтобы отÐ
service.gui.OPEN_FOLDER=Открыть папку
service.gui.OPEN_IN_BROWSER=Открыть в &браузере
service.gui.OPTIONS=Опции
+service.gui.OPEN_AUTOMATICALLY=Открыть комнату автоматичеÑки в Ñлучае
+service.gui.OPEN_ON_IMPORTANT_MESSAGE=Открывать только Ð´Ð»Ñ Ð²Ð°Ð¶Ð½Ñ‹Ñ… Ñообщений
service.gui.OR=или
service.gui.OR_ENTER_PHONE_NUMBER=Или введите номер телефона здеÑÑŒ...
-service.gui.ORGANIZATION=ОрганизациÑ:
+service.gui.ORGANIZATION=ОрганизациÑ
+service.gui.OTHER=Другое
service.gui.OWNER=владелец комнаты
+service.gui.ON_MOBILE_TOOLTIP=(на мобильный)
service.gui.PASSWORD=Пароль
service.gui.PASSWORD_CHANGE_FAILURE=Ðе удалоÑÑŒ изменить пароль
service.gui.PASSWORD_CHANGE_SUCCESS=МаÑтер-пароль уÑпешно изменен
service.gui.PASTE=&Ð’Ñтавить
+service.gui.PERSONAL=Личное
service.gui.PORT=Порт
+service.gui.POSTAL_CODE=Почтовый индекÑ
+service.gui.PREFERENCES=Параметры
service.gui.PREFIX=ПрефикÑ
service.gui.PRESENCE=ПриÑутÑтвие
service.gui.PRESS_ENTER_FOR_SUGGESTIONS='Enter' Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹
@@ -371,13 +418,15 @@ service.gui.PREVIOUS=Предыдущий
service.gui.PREVIOUS_TOOLTIP=Обзор Ñтарых разговоров
service.gui.PRINT=&Печать
service.gui.PROACTIVE_NOTIFICATION=пишет Ñообщение
+service.gui.PROBLEMS_ENCOUNTERED=Ð’ÑтречающиеÑÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹
service.gui.PROTOCOL=Протокол
service.gui.PUT_OFF_HOLD=СнÑÑ‚ÑŒ Ñ ÑƒÐ´ÐµÑ€Ð¶Ð°Ð½Ð¸Ñ
service.gui.PUT_ON_HOLD=ПоÑтавить на удержание
service.gui.QUIT=&Выйти
service.gui.READY=Готово
+service.gui.RECENT_MESSAGES=ПоÑледние разговоры
service.gui.REASON=Причина
-service.gui.RECONNECTION_LIMIT_EXCEEDED=Ð’Ñ‹ были отключены и подключены к Ñерверу Ñлишком быÑтро. Ðккаунт: Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: {0}, Ñервер: {1} временно заблокирован. Подождите 3 минуты, прежде чем пытатьÑÑ Ð²Ð¾Ð¹Ñ‚Ð¸ Ñнова.
+service.gui.RECONNECTION_LIMIT_EXCEEDED=Ð’Ñ‹ были отключены и подключены к Ñерверу Ñлишком быÑтро. Следующий аккаунт: Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: {0}, Сервер: {1} временно заблокирован и придетÑÑ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ подождать, прежде чем пробовать войти Ñнова.
service.gui.RE_REQUEST_AUTHORIZATION=Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ð¹ авторизации
service.gui.REFERRED_STATUS=Переведен
service.gui.REJECT=&Отклонить
@@ -427,13 +476,17 @@ service.gui.SEND_FILE=Отправить &файл
service.gui.SELECT_CONTACT_SUPPORTING_INFO=Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± Ñтом контакте отÑутÑтвует.
service.gui.SEND_MESSAGE=&Отправить Ñообщение
service.gui.SEND_AS_SMS=Отправить как SMS
+service.gui.SEND_PRIVATE_MESSAGE=Отправить личное Ñообщение
service.gui.SEND_SMS=Отправить SMS
service.gui.SEND_SMS_DETAILS=Помните, что вам нужно ввеÑти номер телефона в международном формате, например, Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ñ +7 Ð´Ð»Ñ Ð Ð¾ÑÑии, +78001112233
service.gui.SEND_SMS_NOT_SUPPORTED=Выбранный протокол не поддерживает SMS Ñообщений.
+service.gui.SMS=СМС
service.gui.SEND_VIA=Отправить по
service.gui.SENT=поÑланный
+service.gui.SERVER_CHAT_ROOMS=Сервер комнаты
service.gui.SET_GLOBAL_STATUS=УÑтановить глобальный ÑтатуÑ
service.gui.SET_STATUS_MESSAGE=УÑтановить ÑÑ‚Ð°Ñ‚ÑƒÑ ÑообщениÑ
+service.gui.SET_SUBJECT=Задать тему
service.gui.SETTINGS=&Опции
service.gui.SHARE_DESKTOP=&Открыть рабочий Ñтол
service.gui.SHARE_DESKTOP_WITH_CONTACT=Открыть рабочий Ñтол контакту
@@ -457,6 +510,7 @@ service.gui.STATUS_CHANGE_GENERAL_ERROR=Ðе удалоÑÑŒ изменить ÑÑ
service.gui.STATUS_CHANGE_NETWORK_FAILURE=Ðе удалоÑÑŒ изменить ÑÑ‚Ð°Ñ‚ÑƒÑ ÑƒÑ‡ÐµÑ‚Ð½Ð¾Ð¹ запиÑи: Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: {0}, Ð¸Ð¼Ñ Ñервера: {1}, в ÑвÑзи Ñ Ð½ÐµÐ¿Ð¾Ð»Ð°Ð´ÐºÐ°Ð¼Ð¸ в работе Ñети.
service.gui.STATUS_MESSAGE_INFO=Ð’ облаÑти ниже вы можете задать новое Ñообщение вашего ÑтатуÑа.
service.gui.STOP_SHARING=Прекратить общий доÑтуп
+service.gui.STREET=Улица
service.gui.SUBJECT=Тема
service.gui.SUMMARY=Сводка
service.gui.TELEPHONY=ТелефониÑ
@@ -474,19 +528,23 @@ service.gui.UNMUTE=Включить звук
service.gui.USER_IDENTIFIER=Идентификатор пользователÑ:
service.gui.USER_EXISTS_ERROR=Этот пользователь уже ÑущеÑтвует в выбранной Ñети. ПожалуйÑта, выберите другого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ Ñеть.
service.gui.USERNAME_NULL=ПожалуйÑта, заполните Ñвое Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ пароль.
+service.gui.WEBPAGE=Открыть веб Ñтраницу
service.gui.ACCOUNT_CREATION_FAILED=Мы не Ñмогли Ñоздать учетную запиÑÑŒ из-за Ñледующей ошибки: {0}
service.gui.UNKNOWN=ÐеизвеÑтный пользователь
service.gui.UNKNOWN_STATUS=ÐеизвеÑтное ÑоÑтоÑние
service.gui.UNREGISTERED_MESSAGE=Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ Ñледующие учетные запиÑи: Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: {0}, Ð¸Ð¼Ñ Ñервера: {1}. Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð’Ñ‹ в автономном режиме.
service.gui.USE_PROVISIONING=ИÑпользовать автонаÑтройку
-service.gui.VALUE=Значение:
+service.gui.VALUE=Значение
service.gui.VIDEO_CALL=&Видеовызов
+service.gui.VIA=через
service.gui.VIA_SMS=Через SMS
service.gui.VIEW=&Показать
service.gui.VIEW_HISTORY=Показать &иÑторию
service.gui.VIEW_SMILEYS=Показать &Ñмайлы
service.gui.VIEW_TOOLBAR=Показать &тулбар
service.gui.VIEW_SIMPLE_CHAT_THEME=ПроÑтой вид чата
+service.gui.VOICEMAIL_NEW_URGENT_OLD_RECEIVED={0} новых ({1} важных) и {2} Ñтарых Ñообщений
+service.gui.VOICEMAIL_NEW_URGENT_RECEIVED={0} новых ({1} Ñрочных) Ñообщений
service.gui.VOICEMAIL_NEW_OLD_RECEIVED={0} новых и {1} Ñтарых Ñообщений
service.gui.VOICEMAIL_NEW_RECEIVED={0} новых Ñообщений
service.gui.VOICEMAIL_OLD_RECEIVED={0} Ñтарых Ñообщений
@@ -512,7 +570,7 @@ service.gui.NEW=Ðовый
service.gui.ENTER_FULL_SCREEN_TOOL_TIP=Развернуть на веÑÑŒ Ñкран
service.gui.EXIT_FULL_SCREEN_TOOL_TIP=Выйти из полноÑкранного режима
service.gui.HOLD_BUTTON_TOOL_TIP=Удержание разговора
-service.gui.MUTE_BUTTON_TOOL_TIP=Выключить микрофон. Удерживайте кнопку Ð´Ð»Ñ Ð½Ð°Ñтройки громкоÑти микрофона
+service.gui.MUTE_BUTTON_TOOL_TIP=Выключить микрофон или удерживайте кнопку Ð´Ð»Ñ Ð½Ð°Ñтройки громкоÑти микрофона
service.gui.RECORD_BUTTON_TOOL_TIP=ЗапиÑÑŒ разговора
service.gui.LOCAL_VIDEO_BUTTON_TOOL_TIP=Включить видеоÑвÑзь
service.gui.SHOW_LOCAL_VIDEO_BUTTON_TOOL_TIP=Показать/Ñкрыть Ñвое видео
@@ -528,14 +586,16 @@ service.gui.UPDATE=Обновить
service.gui.MOBILE_PHONE=Мобильный
service.gui.VIDEO_PHONE=Видеовызовы
service.gui.WORK_PHONE=Рабочий
-service.gui.PHONE=Телефон:
-service.gui.PHONES=Телефон:
+service.gui.PHONE=Телефон
+service.gui.PHONES=Телефон
+service.gui.EDIT_NOT_SUPPORTED=Редактирование Ñтой учетной запиÑи не поддерживаетÑÑ
+service.gui.SHOW_PREVIEW=(показать превью)
service.gui.ZID_NAME_SET=Ð˜Ð¼Ñ ZRTP идентификатора:
service.gui.ZID_NAME_NOT_SET=Ðе задано Ð¸Ð¼Ñ ZRTP идентификатора.
service.gui.ZID_NAME_BUTTON=Ðажмите Ð´Ð»Ñ ÑƒÑтановки имени ZRTP идентификатора.
service.gui.ZID_NAME_DIALOG=Изменение имени ZRTP идентификатора
-service.gui.ZID_NAME_UNEXPECTED=<html>ZRTP идентификатор не Ñовпадает Ñ Ñохраненным.<br><b>Сравните проверочные Ñлова Ñ ÑобеÑедником!</b><br>Отредактируйте ZRTP идентификатор и Ñохраните его, только еÑли проверочные Ñлова Ñовпадают.</html>
+service.gui.ZID_NAME_UNEXPECTED=<html>ZRTP идентификатор не Ñовпадает Ñ Ñохраненным.<br><b>Сравните проверочные Ñлова Ñ ÑобеÑедником!</b><br>Отредактируйте ZRP идентификатор и Ñохраните его, только еÑли проверочные Ñлова Ñовпадают.</html>
service.gui.JANUARY=Янв
service.gui.FEBRUARY=Фев
@@ -558,6 +618,8 @@ service.gui.callinfo.IS_CONFERENCE_FOCUS=КонференциÑ
service.gui.callinfo.IS_DEFAULT_ENCRYPTED=Шифрование включено
service.gui.callinfo.CALL_TRANSPORT=ТранÑпорт Ñигнализации
service.gui.callinfo.CALL_DURATION=ДлительноÑÑ‚ÑŒ вызова
+service.gui.callinfo.TLS_PROTOCOL=Протокол TLS
+service.gui.callinfo.VIEW_CERTIFICATE=ПроÑмотр Ñертификата
service.gui.callinfo.CODEC=Кодек / ЧаÑтота
service.gui.callinfo.NA=N.A.
service.gui.callinfo.VIDEO_SIZE=Разрешение видео
@@ -595,10 +657,10 @@ service.gui.callinfo.DISCARDED_TOTAL=Ð’Ñего отброшенных пакеÑ
service.gui.ALWAYS_TRUST=Ð’Ñегда доверÑÑ‚ÑŒ Ñтому Ñертификату
service.gui.CERT_DIALOG_TITLE=Проверить Ñертификат
-service.gui.CERT_DIALOG_DESCRIPTION_TXT=<html>{0} не может проверить подлинноÑÑ‚ÑŒ Ñервера при подключении к<br><b>{1}</b>.<br><br>Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼. Это означает, что Ñервер не может быть автоматичеÑки проверен.<br><br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".<br><br>Ð’Ñ‹ хотите продолжить подключение?</html>
-service.gui.CERT_DIALOG_DESCRIPTION_TXT_NOHOST=<html>{0} не может проверить подлинноÑÑ‚ÑŒ Ñертификата Ñервера<br><br>Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼. Это означает, что Ñервер не может быть автоматичеÑки проверен.<br><br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".<br><br>Ð’Ñ‹ хотите продолжить подключение?</html>
-service.gui.CERT_DIALOG_CLIENT_DESCRIPTION_TXT=<html>{0} не может проверить подлинноÑÑ‚ÑŒ клиента<br><br>Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼. Это означает, что клиент не может быть автоматичеÑки проверен.<br><br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".<br><br>Ð’Ñ‹ хотите принÑÑ‚ÑŒ подключение?</html>
-service.gui.CERT_DIALOG_PEER_DESCRIPTION_TXT=<html>{0} не может проверить подлинноÑÑ‚ÑŒ клиента {1}<br><br>Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼. Это означает, что клиент не может быть автоматичеÑки проверен.<br><br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".<br><br>Ð’Ñ‹ хотите продолжить подключение?</html>
+service.gui.CERT_DIALOG_DESCRIPTION_TXT=<html>{0} не может проверить подлинноÑÑ‚ÑŒ Ñервера при подключении к<br><b>{1}</b>.<br><br>Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼, Ñто означает, что Ñервер не может быть автоматичеÑки проверен.<br><br>Ð’Ñ‹ хотите продолжить подключение?<br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".</html>
+service.gui.CERT_DIALOG_DESCRIPTION_TXT_NOHOST=<html>{0} не может проверить подлинноÑÑ‚ÑŒ Ñертификата Ñервера.<br><br>Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼. Это означает, что Ñервер не<br> может быть автоматичеÑки проверен.Ð’Ñ‹ хотите продолжить подключение?<br><br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".</html>
+service.gui.CERT_DIALOG_CLIENT_DESCRIPTION_TXT=<html>{0} не может проверить подлинноÑÑ‚ÑŒ клиента.<br><br> Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼, Ñто означает, что клиент не<br> может быть автоматичеÑки проверен. Ð’Ñ‹ хотите принÑÑ‚ÑŒ подключение?<br><br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".</html>
+service.gui.CERT_DIALOG_PEER_DESCRIPTION_TXT=<html>{0} не может проверить подлинноÑÑ‚ÑŒ клиента {1}.<br><br> Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼, Ñто означает, что клиент не<br> может быть автоматичеÑки проверен. Ð’Ñ‹ хотите продолжить подключение?<br><br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".</html>
service.gui.CONTINUE_ANYWAY=Ð’Ñе равно продолжить
service.gui.CERT_INFO_ISSUED_TO=<html><b>Кому выдан</b></html>
service.gui.CERT_INFO_CN=Ð˜Ð¼Ñ Ñертификата:
@@ -647,7 +709,7 @@ service.gui.security.SECURE_VIDEO=Видеопоток защищен
service.gui.security.VIDEO_NOT_SECURED=Видеопоток не защищен
service.gui.security.NO_VIDEO=Ðет видео
service.gui.security.CIPHER=Шифр: {0}
-service.gui.security.CALL_SECURED_TOOLTIP=Разговор защищен.
+service.gui.security.CALL_SECURED_TOOLTIP=Разговор защищен. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ нажмите Ñюда.
service.gui.security.CALL_NOT_SECURED_TOOLTIP=Разговор не защищен.
service.gui.security.CALL_SECURED_COMPARE_TOOLTIP=Ðажмите здеÑÑŒ, чтобы Ñверить ключ Ñ ÑобеÑедником.
service.gui.security.COMPARE_WITH_PARTNER=Сверьте ключ Ñ ÑобеÑедником и нажмите замочек Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ.
@@ -675,6 +737,7 @@ service.gui.avatar.imagepicker.WEBCAM_ERROR=Ошибка вебкамеры
service.gui.security.encryption.required=ТребуетÑÑ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ!
+
# impl.protocol.ssh
#Contact Details Seperator(must not be part of contact data stored as persistent
# data)
@@ -688,7 +751,7 @@ impl.protocol.sip.XCAP_ERROR_UNAUTHORIZED=Ðеверное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²
impl.systray.SET_STATUS=УÑтановить ÑтатуÑ
impl.systray.FAILED_TO_OPEN_ADD_CONTACT_DIALOG=Ðе удалоÑÑŒ открыть диалоговое окно "Добавить контакт".
impl.systray.POPUP_MESSAGE_HANDLER=Уведомление на панели задач Windows
-impl.swingnotification.POPUP_MESSAGE_HANDLER=Ð’Ñтроенное уведомление {0}
+impl.swingnotification.POPUP_MESSAGE_HANDLER={0} вÑплывающих Ñообщений
impl.growlnotification.POPUP_MESSAGE_HANDLER=Звуковое уведомление
impl.galagonotification.POPUP_MESSAGE_HANDLER=Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‡ÐµÐ³Ð¾ Ñтола freedesktop.org
@@ -700,6 +763,10 @@ impl.gui.main.account.DUMMY_PROTOCOL_DESCRIPTION=выберите Ñеть
# LDAP
impl.ldap.CONFIG_FORM_TITLE=ÐаÑтройка LDAP
+impl.ldap.GENERAL=Общие
+impl.ldap.FIELDS=ПолÑ
+impl.ldap.QUERY=ЗапроÑ
+impl.ldap.QUERY_DEFAULT=Создать автоматичеÑки
impl.ldap.NEW=Ðовый
impl.ldap.EDIT=изменить
impl.ldap.REMOVE=Удалить
@@ -739,9 +806,11 @@ impl.ldap.PHONE_PREFIX_EXAMPLE=Ðапример: +7
plugin.addrbook.ADDRESS_BOOKS=ÐдреÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°
plugin.addrbook.ENABLE_MACOSX_ADDRESSBOOK=Включить поиÑк в адреÑной книге MacOSX
plugin.addrbook.ENABLE_MICROSOFT_OUTLOOK=Включить поиÑк контактов в Microsoft Outlook
-plugin.addrbook.DESCRIPTION=ЕÑли включено, будет производитьÑÑ Ð¿Ð¾Ð¸Ñк в ÑиÑтемной адреÑной книге. Ð’Ñе ÑоответÑтвующие контакты из адреÑной книги поÑвÑÑ‚ÑÑ Ð² вашем ÑпиÑке контактов.
+plugin.addrbook.DESCRIPTION=ЕÑли включено, будет производитьÑÑ Ð¿Ð¾Ð¸Ñк в ÑиÑтемной адреÑной книге и вÑе ÑоответÑтвующие контакты из адреÑной книги поÑвÑÑ‚ÑÑ Ð² вашем ÑпиÑке контактов.
+plugin.addrbook.DEFAULT_IM_APP=Сделать Jitsi клиентом Ð´Ð»Ñ Ð¼Ð³Ð½Ð¾Ð²ÐµÐ½Ð½Ð¾Ð³Ð¾ обмена ÑообщениÑми по умолчанию (Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Outlook)
plugin.addrbook.PREFIX=Телефонный префикÑ
plugin.addrbook.PREFIX_EXAMPLE=Ðапример: +7
+plugin.addrbook.MAKE_OUTLOOK_DEFAULT_MAIL_CLIENT=Сделать Outlook почтовым клиентом по умолчанию
# Google Contacts
impl.googlecontacts.CONFIG_FORM_TITLE=Контакты Google
@@ -761,17 +830,30 @@ impl.googlecontacts.WRONG_CREDENTIALS=Ðеверные данные Ð´Ð»Ñ Ð°ÐºÐ
plugin.accountinfo.TITLE=Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± аккаунте
plugin.accountinfo.EXTENDED=РаÑширенные
plugin.accountinfo.NOT_SUPPORTED=Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± аккаунте отÑутÑтвует.
-plugin.accountinfo.DISPLAY_NAME=Отображаемое имÑ
+plugin.accountinfo.SELECT_ACCOUNT=Выберите учётную запиÑÑŒ:
+plugin.accountinfo.DISPLAY_NAME=Отображаемое имÑ:
plugin.accountinfo.FIRST_NAME=ИмÑ:
plugin.accountinfo.MIDDLE_NAME=ОтчеÑтво:
plugin.accountinfo.LAST_NAME=ФамилиÑ:
plugin.accountinfo.NICKNAME=Ðик:
+plugin.accountinfo.URL=URL:
plugin.accountinfo.AGE=ВозраÑÑ‚:
plugin.accountinfo.BDAY=Дата рождениÑ:
plugin.accountinfo.GENDER=Пол:
+plugin.accountinfo.STREET=ÐдреÑ:
+plugin.accountinfo.CITY=Город:
+plugin.accountinfo.REGION=ОблаÑÑ‚ÑŒ:
+plugin.accountinfo.POST=Почтовый индекÑ:
plugin.accountinfo.EMAIL=Электронный Ñщик:
plugin.accountinfo.PHONE=Телефон:
+plugin.accountinfo.MOBILE_PHONE=Мобильный телефон:
+plugin.accountinfo.ORGANIZATION=ОрганизациÑ:
+plugin.accountinfo.JOB_TITLE=ДолжноÑÑ‚ÑŒ:
+plugin.accountinfo.ABOUT_ME=Обо мне:
+plugin.accountinfo.ABOUT_ME_MAX_CHARACTERS=200
plugin.accountinfo.USER_PICTURES=Фотографии пользователÑ
+plugin.accountinfo.GLOBAL_ICON=ИÑпользовать общий значок
+plugin.accountinfo.LOCAL_ICON=ИÑпользовать Ñледующий значок:
plugin.accountinfo.CHANGE=Изменить
plugin.accountinfo.ONLY_MESSAGE=Только ÑообщениÑ
@@ -797,8 +879,8 @@ plugin.branding.ABOUT_WINDOW_TITLE=О Ð½Ð°Ñ {0}
plugin.branding.LOGO_MESSAGE=Open Source VoIP && Обмен мгновенными ÑообщениÑми
plugin.branding.LOADING=Загрузка
plugin.branding.ABOUT_MENU_ENTRY=&О программе
-plugin.branding.WELCOME_MESSAGE=<DIV color={0}>{1} в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð² Ñтадии активной разработки. ВерÑиÑ, Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½Ð½Ð°Ñ Ð²Ð°Ð¼Ð¸, ÑкÑÐ¿ÐµÑ€Ð¸Ð¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¸ может работать не так как вы ожидаете. ПожалуйÑта, обратитеÑÑŒ к {2} Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации.</DIV>
-plugin.branding.COPYRIGHT=<DIV><font size=3 color={0}>(c)2003-2012 Copyright <b>jitsi.org</b>. Ð’Ñе права защищены. ПоÑетите <a href="http://jitsi.org">http://jitsi.org</a>.</font></DIV>
+plugin.branding.WELCOME_MESSAGE=<DIV color={0}>{1} в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð² Ñтадии активной разработки. ВерÑиÑ, Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½Ð½Ð°Ñ Ð²Ð°Ð¼Ð¸, ÑкÑÐ¿ÐµÑ€Ð¸Ð¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¸ может работать ÐЕ ТÐК как вы ожидаете. ПожалуйÑта, обратитеÑÑŒ к {2} Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации.</DIV>
+plugin.branding.COPYRIGHT=<DIV><font size=3 color={0}>(c)2003-2013 Copyright <b>jitsi.org</b>. Ð’Ñе права защищены. ПоÑетите <a href="https://jitsi.org">https://jitsi.org</a>.</font></DIV>
plugin.branding.LICENSE=<DIV color={0}><b>Jitsi</b> раÑпроÑтранÑетÑÑ Ð¿Ð¾ лицензии LGPL (<a href="http://www.gnu.org">http://www.gnu.org</a>).</DIV>
# Dict protocol
@@ -810,7 +892,7 @@ plugin.dictaccregwizz.NO_MATCH=Ðет Ñовпадений
plugin.dictaccregwizz.MATCH_RESULT=Определений Ð´Ð»Ñ "{0}" не найдено, может быть, вы имеете в виду:\n
plugin.dictaccregwizz.INVALID_DATABASE=Текущего ÑÐ»Ð¾Ð²Ð°Ñ€Ñ "{0}" не ÑущеÑтвует на Ñервере.
plugin.dictaccregwizz.INVALID_STRATEGY=ÐынешнÑÑ ÑÑ‚Ñ€Ð°Ñ‚ÐµÐ³Ð¸Ñ Ð¾Ñ‚ÑутÑтвует на Ñервере.
-plugin.dictaccregwizz.PROTOCOL_NAME=DICT
+plugin.dictaccregwizz.PROTOCOL_NAME=Dict
plugin.dictaccregwizz.PROTOCOL_DESCRIPTION=DICT протокол
plugin.dictaccregwizz.HOST=ХоÑÑ‚
plugin.dictaccregwizz.SERVER_INFO=Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ Ñервере
@@ -836,6 +918,7 @@ plugin.facebookaccregwizz.USERNAME_AND_PASSWORD=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ
# generalconfig
plugin.generalconfig.AUTO_START=ÐвтоматичеÑкий запуÑк {0} при загрузке компьютера
+plugin.generalconfig.CHATALERTS_ON_MESSAGE=ИÑпользовать панель задач / облаÑÑ‚ÑŒ уведомлений Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñщих звонков и Ñообщений
plugin.generalconfig.GROUP_CHAT_MESSAGES=Группировать текÑтовые чаты в одном окне
plugin.generalconfig.LOG_HISTORY=ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ñ‡Ð°Ñ‚Ð°
plugin.generalconfig.SHOW_HISTORY=Показывать
@@ -847,6 +930,7 @@ plugin.generalconfig.TRANSPARENCY=ПрозрачноÑÑ‚ÑŒ
plugin.generalconfig.ENABLE_TRANSPARENCY=Включить прозрачноÑÑ‚ÑŒ
plugin.generalconfig.DEFAULT_LANGUAGE=Язык интерфейÑа
plugin.generalconfig.DEFAULT_LANGUAGE_RESTART_WARN=Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²ÑтупÑÑ‚ в Ñилу при Ñледующем запуÑке Jitsi.
+plugin.generalconfig.DEFAULT_LANGUAGE_TRANSLATED={0}% переведено
plugin.generalconfig.SIP_CLIENT_PORT=Порт SIP
plugin.generalconfig.SIP_CLIENT_SECURE_PORT=БезопаÑный порт SIP
plugin.generalconfig.SIP_SSL_PROTOCOLS=Разрешенные протоколы SSL/TLS
@@ -856,12 +940,12 @@ plugin.generalconfig.STARTUP_CONFIG=ЗапуÑк
plugin.generalconfig.LEAVE_CHATROOM_ON_WINDOW_CLOSE=Сообщить о выходе из чата при закрытии окна
plugin.generalconfig.REMOVE_SPECIAL_PHONE_SYMBOLS=Удалить Ñпециальные Ñимволы из телефонного номера, прежде чем Ñделать вызов
plugin.generalconfig.ACCEPT_PHONE_NUMBER_WITH_ALPHA_CHARS=Преобразовывать буквы в цифры телефонного номера
-plugin.generalconfig.ACCEPT_PHONE_NUMBER_WITH_ALPHA_CHARS_EXAMPLE=например, +1-800-MYPHONE преобразуетÑÑ Ð² +1-800-694663
+plugin.generalconfig.ACCEPT_PHONE_NUMBER_WITH_ALPHA_CHARS_EXAMPLE=напр. +1-800-MYPHONE преобразуетÑÑ Ð² +1-800-694663
plugin.generalconfig.SIP_CALL_CONFIG=SIP
plugin.generalconfig.OPUS_CONFIG=Кодек Opus
plugin.generalconfig.OPUS_USE_DTX=ИÑпользовать DTX:
plugin.generalconfig.OPUS_USE_FEC=ИÑпользовать Inband FEC:
-plugin.generalconfig.SILK_CONFIG=SILK
+plugin.generalconfig.SILK_CONFIG=Silk
plugin.generalconfig.SILK_USE_FEC=ИÑпользовать Inband FEC:
plugin.generalconfig.SILK_ALWAYS_ASSUME_PACKET_LOSS=Ð’Ñегда учитывать потери пакетов:
plugin.generalconfig.SILK_SAT=Порог голоÑовой активноÑти (0-1):
@@ -876,7 +960,7 @@ plugin.gibberishaccregwizz.USERNAME_AND_PASSWORD=ИдентификациÑ
# icqaccregwizz
plugin.icqaccregwizz.PROTOCOL_NAME=ICQ
-plugin.icqaccregwizz.PROTOCOL_DESCRIPTION=Протокол ICQ
+plugin.icqaccregwizz.PROTOCOL_DESCRIPTION=AOL ICQ протокол
plugin.icqaccregwizz.USERNAME=Ðомер ICQ:
plugin.icqaccregwizz.REGISTER_NEW_ACCOUNT_TEXT=Ð’ Ñлучае, еÑли вы не имеете учетной запиÑи ICQ, нажмите на Ñту кнопку, чтобы Ñоздать новую.
plugin.icqaccregwizz.REGISTER_NEW_ACCOUNT=РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð¹ учетной запиÑи
@@ -915,7 +999,7 @@ plugin.jabberaccregwizz.RESOURCE=РеÑурÑ
plugin.jabberaccregwizz.AUTORESOURCE=ÐвтоматичеÑкое Ñоздание реÑурÑа
plugin.jabberaccregwizz.PRIORITY=Приоритет
plugin.jabberaccregwizz.XMPP_ERROR=Ошибка XMPP
-plugin.jabberaccregwizz.UNKNOWN_XMPP_ERROR=ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° XMPP. УбедитеÑÑŒ, что Ð¸Ð¼Ñ Ñервера, ÑвлÑетÑÑ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¼.
+plugin.jabberaccregwizz.UNKNOWN_XMPP_ERROR=ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° XMPP ({0)}. УбедитеÑÑŒ, что Ð¸Ð¼Ñ Ñервера, ÑвлÑетÑÑ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¼.
plugin.jabberaccregwizz.NOT_SAME_PASSWORD=Пароли не Ñовпадают.
plugin.jabberaccregwizz.OVERRIDE_SERVER_DEFAULT_OPTIONS=Переопределить параметры Ñервера по умолчанию
plugin.jabberaccregwizz.ADVANCED_OPTIONS=Дополнительные параметры
@@ -952,9 +1036,9 @@ plugin.jabberaccregwizz.NEW_PASSWORD_CONFIRM=Повторите пароль
plugin.jabberaccregwizz.PORT_FIELD_INVALID=ПожалуйÑта, необходимо указать верный порт Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ.
plugin.jabberaccregwizz.HAS_TO_BE_LOGGED_IN=Ð”Ð»Ñ Ñмены Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ выполнить вход на Ñервер.
plugin.jabberaccregwizz.PASSWORD_EMPTY=Пароль пуÑтой.
-plugin.jabberaccregwizz.TLS_REQUIRED=Соединение не зашифровано! Пароль не будет изменен.
+plugin.jabberaccregwizz.TLS_REQUIRED=Соединение не иÑпользует TLS, пароль не будет изменен.
plugin.jabberaccregwizz.PASSWORD_CHANGED=Пароль уÑпешно изменен
-plugin.jabberaccregwizz.SERVER_NOT_SUPPORT_PASSWORD_CHANGE=Ваш Ñервер не поддерживает изменение паролÑ.
+plugin.jabberaccregwizz.SERVER_NOT_SUPPORT_PASSWORD_CHANGE=Ваш XMPP Ñервер не поддерживает изменение паролÑ.
plugin.jabberaccregwizz.PASSWORD_NOT_STORED=Пароль был изменен на Ñервере, но локальные наÑтройки обновлены не были
plugin.jabberaccregwizz.ENTER_NEW_PASSWORD=ПожалуйÑта, введите Ваш новый пароль в оба полÑ:
plugin.jabberaccregwizz.OVERRIDE_ENCODINGS=Переопределить глобальные наÑтройки кодеков
@@ -1020,6 +1104,7 @@ plugin.sipaccregwizz.KEEP_ALIVE=Поддерживать активным
plugin.sipaccregwizz.KEEP_ALIVE_METHOD=Метод поддержки
plugin.sipaccregwizz.KEEP_ALIVE_INTERVAL=Интервал переподключениÑ
plugin.sipaccregwizz.KEEP_ALIVE_INTERVAL_INFO=От 1 до 3600 Ñекунд
+plugin.sipaccregwizz.DTMF=DTMF
plugin.sipaccregwizz.DTMF_METHOD=Метод DTMF
plugin.sipaccregwizz.DTMF_AUTO=ÐвтоматичеÑки выбирать между RTP и Inband (нет SIP INFO)
plugin.sipaccregwizz.DTMF_RTP=RTP (RFC2833 / RFC4733)
@@ -1045,7 +1130,7 @@ plugin.sipaccregwizz.MWI=Ð˜Ð½Ð´Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ñообщений (M
plugin.sipaccregwizz.VOICEMAIL_URI=URI голоÑовой почты
plugin.sipaccregwizz.VOICEMAIL_CHECK_URI=URI Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ ГП
plugin.sipaccregwizz.NOT_SAME_PASSWORD=Пароли не Ñовпадают.
-plugin.sipaccregwizz.NO_CERTIFICATE=<нет> (иÑпользовать обычную проверку подлинноÑти)
+plugin.sipaccregwizz.NO_CERTIFICATE=<none> (иÑпользовать обычную проверку подлинноÑти)
plugin.sipaccregwizz.SAVP_OPTION=ИÑпользование RTP/SAVP
plugin.sipaccregwizz.SAVP_OPTION_0=Выключено (иÑпользовать только RTP/AVP)
plugin.sipaccregwizz.SAVP_OPTION_1=ОбÑзательно (предлагать и принимать только RTP/SAVP)
@@ -1076,9 +1161,10 @@ plugin.sshaccregwizz.ACCOUNT_DETAILS=Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± учетной з
# status update
plugin.autoaway.AUTO_STATUS=Ðвто отÑуÑтвие
plugin.autoaway.ENABLE_CHANGE_STATUS=Изменить ÑтатуÑ, когда отошел
-plugin.autoaway.AWAY_MINUTES=КоличеÑтво минут до перехода в режим ''Ðет на меÑте'':
+plugin.autoaway.AWAY_MINUTES=Минут до Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð² ''Ðет на меÑте'':
# updatechecker
+plugin.updatechecker.DIALOG_TITLE=УÑтановить обновлениÑ
plugin.updatechecker.DIALOG_MESSAGE=<html>ÐÐ¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ {0} доÑтупна Ð´Ð»Ñ ÑкачиваниÑ.
plugin.updatechecker.DIALOG_MESSAGE_2=<br>{0} ({1}): <br>
plugin.updatechecker.BUTTON_DOWNLOAD=Скачать
@@ -1089,6 +1175,9 @@ plugin.updatechecker.DIALOG_NOUPDATE=Ваша верÑÐ¸Ñ ÑвлÑетÑÑ Ð°Ðº
plugin.updatechecker.DIALOG_NOUPDATE_TITLE=Ðет новой верÑии
plugin.updatechecker.DIALOG_MISSING_UPDATE=Обновление уÑтановщика не удалоÑÑŒ.
+# usersearch
+plugin.usersearch.USER_SEARCH=ПоиÑк пользователей
+
# whiteboard
plugin.whiteboard.TITLE=ДоÑка риÑÐ¾Ð²Ð°Ð½Ð¸Ñ [Beta]
plugin.whiteboard.MENU_ITEM=ДоÑка риÑованиÑ
@@ -1117,7 +1206,7 @@ plugin.whiteboard.PROPERTIES=СвойÑтва
# yahoo accregwizz
plugin.yahooaccregwizz.PROTOCOL_NAME=Yahoo!
-plugin.yahooaccregwizz.PROTOCOL_DESCRIPTION=Протокол Yahoo.
+plugin.yahooaccregwizz.PROTOCOL_DESCRIPTION=Протокол Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¸ Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð° Yahoo! Service.
plugin.yahooaccregwizz.USERNAME=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ:
plugin.yahooaccregwizz.USERID_AND_PASSWORD=ID и пароль
@@ -1129,13 +1218,13 @@ plugin.zeroaccregwizz.LAST_NAME=ФамилиÑ:
plugin.zeroaccregwizz.EMAIL=Электронный Ñщик:
plugin.zeroaccregwizz.REMEMBER_CONTACTS=Запомнить Bonjour контакты?
plugin.zeroaccregwizz.USERID_AND_PASSWORD=ID и пароль
-plugin.zeroaccregwizz.USERID=Идентификатор пользователÑ
+plugin.zeroaccregwizz.USERID=ПользовательÑкий ID
# gtalk accregwizz
plugin.googletalkaccregwizz.PROTOCOL_NAME=Google Talk
plugin.googletalkaccregwizz.PROTOCOL_DESCRIPTION=Протокол Google Talk
plugin.googletalkaccregwizz.USERNAME=Google Talk Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ
-plugin.googletalkaccregwizz.REGISTER_NEW_ACCOUNT_TEXT=Ð’ Ñлучае, еÑли у Ð²Ð°Ñ Ð½ÐµÑ‚ учетной запиÑи Google Talk, нажмите на Ñту кнопку, чтобы Ñоздать новую.
+plugin.googletalkaccregwizz.REGISTER_NEW_ACCOUNT_TEXT=Ð’ Ñлучае, еÑли у Ð²Ð°Ñ Ð½ÐµÑ‚ учетной запиÑи Google Talk,</br> нажмите на Ñту кнопку, чтобы Ñоздать новую.
plugin.googletalkaccregwizz.NEW_ACCOUNT_TITLE=Создание новой учетной запиÑи Google Talk
# iptel accregwizz
@@ -1188,6 +1277,7 @@ plugin.keybindings.globalchooser.SHORTCUT_PRIMARY=Сочетание клавиÑ
plugin.keybindings.globalchooser.SHORTCUT_SECOND=Дополнительно
plugin.keybindings.globalchooser.PRESS_BTN=Ðажмите Ð´Ð»Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ
plugin.keybindings.globalchooser.PRESS_BTN_DOWN=Ожидание
+plugin.keybindings.globalchooser.PUSH_TO_TALK=Push to talk
plugin.keybindings.globalchooser.ENABLE_SPECIAL=Включить обнаружение Ñпециальных клавиш
plugin.keybindings.PLUGIN_NAME=Ð¡Ð¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ
plugin.keybindings.CHAT=Чат
@@ -1249,6 +1339,7 @@ plugin.notificationconfig.event.DTMFTone.9=DTMF тон 9
plugin.notificationconfig.event.DTMFTone.*=DTMF тон *
plugin.notificationconfig.event.DTMFTone.#=DTMF тон #
plugin.notificationconfig.event.DeviceConfigurationChanged=ИзменилаÑÑŒ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÑƒÑтройÑтва
+plugin.notificationconfig.event.NewSelectedDevice=Выбрано новое уÑтройÑтво
# ZRTP Securing
impl.media.security.WARNING_NO_RS_MATCH=<html>Ðет доÑтупного Ñохранённого общего ключа.<br/><b>РекомендуетÑÑ SAS проверка</b></html>
@@ -1299,7 +1390,11 @@ impl.media.configform.VIDEO_MORE_SETTINGS=Дополнительно
impl.media.configform.VIDEO_RESOLUTION=Разрешение видео
impl.media.configform.VIDEO_FRAME_RATE=КоличеÑтво кадров (в Ñек.)
impl.media.configform.VIDEO_RESET=Ð¡Ð±Ñ€Ð¾Ñ Ð½Ð°Ñтроек
-impl.media.configform.AUDIO_DEVICE_CONFIG_MANAGMENT_CLICK=Ðажмите Ð´Ð»Ñ Ð½Ð°Ñтройки уÑтройÑтва
+impl.media.configform.AUDIO_DEVICE_SELECTED_AUDIO_IN=Выбрано новое уÑтройÑтво Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð° звука:
+impl.media.configform.AUDIO_DEVICE_SELECTED_AUDIO_OUT=Выбрано новое уÑтройÑтво Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° звука:
+impl.media.configform.AUDIO_DEVICE_SELECTED_AUDIO_NOTIFICATIONS=Выбрано новое уÑтройÑтво Ð´Ð»Ñ Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ð¹:
+impl.media.configform.VIDEO_DEVICE_SELECTED=Выбрано новое уÑтройÑтво Ð´Ð»Ñ Ð²Ð¸Ð´ÐµÐ¾:
+impl.media.configform.AUDIO_DEVICE_CONFIG_MANAGMENT_CLICK=Ðажмите Ð´Ð»Ñ Ð½Ð°Ñтройки уÑтройÑтв
impl.neomedia.configform.AUDIO=Ðудио
impl.neomedia.configform.VIDEO=Видео
@@ -1307,10 +1402,12 @@ impl.neomedia.configform.VIDEO=Видео
impl.neomedia.configform.H264=H.264
impl.neomedia.configform.H264.defaultProfile=Профиль Ð´Ð»Ñ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ:
impl.neomedia.configform.H264.defaultProfile.baseline=Базовый
+impl.neomedia.configform.H264.defaultProfile.high=Ð’Ñ‹Ñокое
impl.neomedia.configform.H264.defaultProfile.main=ОÑновной
impl.neomedia.configform.H264.preferredKeyFrameRequester=Метод запроÑа ключевых кадров:
impl.neomedia.configform.H264.preferredKeyFrameRequester.rtcp=RTCP
impl.neomedia.configform.H264.preferredKeyFrameRequester.signaling=СигнализациÑ
+impl.neomedia.configform.H264.preset=ПредуÑтановки кодеков
# The callrecordingconfig plugin was never really committed into trunk and its
# ConfigurationForm was actually put in the neomedia bundle.
@@ -1362,27 +1459,34 @@ plugin.securityconfig.masterpassword.MP_INPUT=ПожалуйÑта введитÐ
plugin.otr.menu.TITLE=Шифрование
plugin.otr.menu.START_OTR=Ðачать приватный разговор
plugin.otr.menu.END_OTR=Закончить приватный разговор
-plugin.otr.menu.LOADING_OTR=Ðачать приватный разговор
+plugin.otr.menu.LOADING_OTR=Ðачать приватный разговор...
plugin.otr.menu.TIMED_OUT=Ðачать приватный разговор
plugin.otr.menu.REFRESH_OTR=Обновить приватный разговор
plugin.otr.menu.AUTHENTICATE_BUDDY=Проверка ÑобеÑедника
plugin.otr.menu.WHATS_THIS=О технологии
-plugin.otr.menu.CB_AUTO=ÐвтоматичеÑки включать шифрование Ñообщений
-plugin.otr.menu.CB_AUTO_ALL=ÐвтоматичеÑки включать шифрование Ñообщений
+plugin.otr.menu.CB_AUTO=ÐвтоматичеÑки включать шифрование Ñообщений Ñ {0}
+plugin.otr.menu.CB_AUTO_ALL=ÐвтоматичеÑки включать шифрование Ñообщений Ð´Ð»Ñ Ð²Ñех контактов
plugin.otr.menu.CB_ENABLE=Включить шифрование Ñообщений
plugin.otr.menu.CB_REQUIRE=Требовать шифрование Ñообщений
plugin.otr.menu.CB_RESET=СброÑ
-plugin.otr.menu.OTR_TOOLTIP=Шифровать перепиÑку
+plugin.otr.menu.OTR_TOOLTIP=Шифрование перепиÑки OTR
+plugin.otr.authbuddydialog.AUTHENTICATION_METHOD=Как бы вы хотели проходить авторизацию?
+plugin.otr.authbuddydialog.AUTHENTICATION_METHOD_QUESTION=Ð’Ð¾Ð¿Ñ€Ð¾Ñ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ð¸
+plugin.otr.authbuddydialog.AUTHENTICATION_METHOD_FINGERPRINT=ÐÐ²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ð¾ отпечатку
plugin.otr.authbuddydialog.LOCAL_FINGERPRINT=Ваш ключ, {0}: {1}
plugin.otr.authbuddydialog.REMOTE_FINGERPRINT=Ключ ÑобеÑедника {0}: {1}
+plugin.otr.authbuddydialog.QUESTION_INIT=Введите Ñвой вопроÑ:
+plugin.otr.authbuddydialog.ANSWER=Введите Ñвой ответ (Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ региÑтра):
plugin.otr.authbuddydialog.CANCEL=Отмена
plugin.otr.authbuddydialog.HELP=Помощь
plugin.otr.authbuddydialog.TITLE=Проверка ÑобеÑедника
plugin.otr.authbuddydialog.AUTHENTICATE_BUDDY=Подтверждение
-plugin.otr.authbuddydialog.I_HAVE=Я
+plugin.otr.authbuddydialog.I_HAVE=ЕÑÑ‚ÑŒ
plugin.otr.authbuddydialog.I_HAVE_NOT=Я не
plugin.otr.authbuddydialog.VERIFY_ACTION=подтверждаю, что Ñто дейÑтвительно правильный ключ Ð´Ð»Ñ {0}.
plugin.otr.authbuddydialog.FINGERPRINT_CHECK=ПожалуйÑта, введите уникальный код, полученный от {0}.
+plugin.otr.smpprogressdialog.AUTHENTICATION_SUCCESS=Проверка прошла уÑпешно!
+plugin.otr.smpprogressdialog.AUTHENTICATION_FAIL=Сбой проверки подлинноÑти!
plugin.otr.configform.MY_PRIVATE_KEYS=СобÑтвенные ключи
plugin.otr.configform.KNOWN_FINGERPRINTS=ИзвеÑтные ключи
plugin.otr.configform.CB_AUTO=ÐвтоматичеÑки включать шифрование Ñообщений
@@ -1398,11 +1502,12 @@ plugin.otr.configform.COLUMN_NAME_CONTACT=Контакт
plugin.otr.configform.COLUMN_NAME_VERIFIED_STATUS=Проверен
plugin.otr.configform.COLUMN_VALUE_VERIFIED_TRUE=Да
plugin.otr.configform.COLUMN_VALUE_VERIFIED_FALSE=Ðет
-plugin.otr.activator.unverifiedsessionwarning=Внимание! {0} ÑвÑзываетÑÑ Ñ Ð’Ð°Ð¼Ð¸ Ñ Ð½ÐµÐ´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ð¾Ð³Ð¾ компьютера. Ð’Ñ‹ должны <A href="jitsi://{1}/{2}?{3}">проверить подлинноÑÑ‚ÑŒ ÑобеÑедника {0}</a>.
+plugin.otr.activator.unverifiedsessionwarning={0} ÑвÑзываетÑÑ Ñ Ð’Ð°Ð¼Ð¸ Ñ Ð½ÐµÐ´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ð¾Ð³Ð¾ компьютера. Ð’Ñ‹ должны <A href="jitsi://{1}/{2}?{3}">проверить подлинноÑÑ‚ÑŒ ÑобеÑедника {0}</a>.
plugin.otr.activator.unverifiedsessionstared=<b>Ðепроверенный</b> приватный разговор Ñ {0} началÑÑ.
plugin.otr.activator.sessionstared=Приватный разговор Ñ {0} началÑÑ.
plugin.otr.activator.sessionfinished={0} закончил приватный разговор Ñ Ð’Ð°Ð¼Ð¸. Ð’Ñ‹ должны Ñделать то же Ñамое.
plugin.otr.activator.sessionlost=Приватный разговор Ñ {0} закончен.
+plugin.otr.activator.unreadablemsgreceived={0} отправил нечитаемое шифрованное Ñообщение.
# global proxy plugin
plugin.globalproxy.GLOBAL_PROXY_CONFIG=ПрокÑи-Ñервер
@@ -1412,8 +1517,10 @@ plugin.globalproxy.PROXY_PORT=Порт
plugin.globalproxy.PROXY_USERNAME=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ
plugin.globalproxy.PROXY_PASSWORD=Пароль
plugin.globalproxy.DESCRIPTION={0} будет иÑпользовать перечиÑленные параметры прокÑи-Ñервера Ð´Ð»Ñ Ð²Ñех Ñетей при Ñледующем подключении. \nПоддержка прокÑи в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ ÑкÑÐ¿ÐµÑ€Ð¸Ð¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¸ работает только Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ протоколами. Смотрите таблицу ниже Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ подробной информации:
-plugin.globalproxy.PROTOCOL_SUPPORT=<html><table><tralign="center"><td></td><td>SOCKS4/5</td><td>SOCKS4/5+Auth</td><td>HTTP</td><td>HTTP+Auth</td></tr><tralign="center"><td>Yahoo!</td><td>+</td><td>+</td><td>-</td><td>-</td></tr><tralign="center"><td>MSN</td><td>+</td><td>+</td><td>-</td><td>-</td></tr><tralign="center"><td>XMPP</td><td>+</td><td>+</td><td>+</td><td>+</td></tr><tralign="center"><td>ICQ/AIM</td><td>+</td><td>+</td><td>+</td><td>+</td></tr></table></html>
+plugin.globalproxy.PROTOCOL_SUPPORT=<html><table> <tr><td></td><td> SOSCKS4/5 </td><td> SOSCKS4/5+Auth </td><td> HTTP </td><td> HTTP+Auth </td></tr><tr><td>Yahoo!</td><td>+</td><td>+</td><td>-</td><td>-</td></tr><tr><td>MSN</td><td>+</td><td>+</td><td>-</td><td>-</td></tr><tr><td>XMPP</td><td>+</td><td>+</td><td>+</td><td>+</td></tr><tr><td>ICQ/AIM</td><td>+</td><td>+</td><td>+</td><td>+</td></tr></table></html>
#plugin.globalproxy.PROTOCOL_SUPPORT
+plugin.globalproxy.FWD_DNS_ADDR=ÐÐ´Ñ€ÐµÑ Ñервера DNS Proxy
+plugin.globalproxy.FWD_DNS_PORT=Порт Ñервера DNS Proxy
# plugin reconnect
plugin.reconnectplugin.CONNECTION_FAILED_MSG=Ðе удалоÑÑŒ Ñоединение Ð´Ð»Ñ Ñледующего аккаунта:\nÐ˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: {0}, Ð˜Ð¼Ñ Ñервера: {1}.\nПожалуйÑта, проверьте ваше Ñетевое подключение или ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором.
@@ -1431,7 +1538,7 @@ plugin.chatconfig.spellcheck.TITLE=Проверка правопиÑаниÑ
#provisioning plugin
plugin.provisioning.PROVISIONING=ÐвтонаÑтройка
-plugin.provisioning.ENABLE_DISABLE=Включить автонаÑтройку
+plugin.provisioning.ENABLE_DISABLE=ÐвтоматичеÑкое обнаружение адреÑа автонаÑтройки
plugin.provisioning.AUTO=ÐвтоматичеÑкое обнаружение адреÑа автонаÑтройки
plugin.provisioning.DHCP=DHCP
plugin.provisioning.DNS=DNS
@@ -1447,6 +1554,7 @@ plugin.provisioning.CREDENTIALS=Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð½Ð°Ñ
plugin.provisioning.REMOVE_CREDENTIALS_MESSAGE=Ð’Ñ‹ дейÑтвительно хотите ÑброÑить пароль Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð½Ð°Ñтройки?
plugin.provisioning.PROV_FAILED=ÐвтонаÑтройка не удалаÑÑŒ
plugin.provisioning.PROV_FAILED_MSG=<html>ÐвтонаÑтройка не удалаÑÑŒ. {0}! <br>ПожалуйÑта, попробуйте позже или ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором.</html>
+plugin.provisioning.FORGET_PASSWORD=Ð¡Ð±Ñ€Ð¾Ñ Ñохраненных паролей
# packet logging service
plugin.loggingutils.PACKET_LOGGING_CONFIG=Протоколирование
@@ -1540,7 +1648,7 @@ plugin.certconfig.KEYSTORE_PASSWORD=Пароль
plugin.certconfig.INCOMPLETE=Ð’Ñе Ð¿Ð¾Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ быть заполнены
plugin.certconfig.SHOW_CERT_EXCEPTION=Ðе удаетÑÑ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð·Ð¸Ñ‚ÑŒ Ñертификат ({0}).
plugin.certconfig.KEYSTORE_EXCEPTION=Ðе удаетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ хранилище ключей ({0}).
-plugin.certconfig.FILE_TYPE_DESCRIPTION=Хранилище Ñертификатов (PKCS#11 .dll, PKCS#12 .p12, Java .ks)
+plugin.certconfig.FILE_TYPE_DESCRIPTION=Хранилище Ñертификатов (PKCS#11 Module, PKCS#12 files, Java ks Keystore)
plugin.certconfig.ALIAS_LOAD_EXCEPTION=Ðе удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ пÑевдонимы из хранилища ключей ({0}).
plugin.certconfig.INVALID_KEYSTORE_TYPE=Выбранный тип хранилища ключей неверен ({0}).
plugin.certconfig.BROWSE_KEYSTORE=Открыть хранилище ключей
@@ -1549,7 +1657,12 @@ plugin.certconfig.BROWSE_KEYSTORE=Открыть хранилище ключей
plugin.phonenumbercontactsource.DISPLAY_NAME=Телефонные номера
# properties editor
+plugin.propertieseditor.TITLE=Редактор ÑвойÑтв
+plugin.propertieseditor.NEW_PROPERTY_TITLE=Добавить ÑвойÑтво
+plugin.propertieseditor.CHECK_BOX=Показать Ñто предупреждение в Ñледующий раз
+plugin.propertieseditor.IM_AWARE=Я оÑознаю риÑк
#Thunderbird address book plugin
+plugin.thunderbird.CONFIG_FORM_TITLE=Thunderbird
plugin.thunderbird.ENABLED=Ðктивен
-plugin.thunderbird.PHONE_PREFIX=Телефонный префикÑ
+plugin.thunderbird.PHONE_PREFIX=Телефонный префикÑ:
diff --git a/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java b/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java
index ae89f00..0183ae3 100644
--- a/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java
+++ b/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java
@@ -1265,6 +1265,11 @@ public class MclStorageManager
*/
public void metaContactAdded(MetaContactEvent evt)
{
+ // if the parent group is not persistent, do not do anything
+ // cause its missing in xml
+ if(!evt.getParentGroup().isPersistent())
+ return;
+
Element parentGroupNode =
findMetaContactGroupNode(evt.getParentGroup().getMetaUID());
diff --git a/src/net/java/sip/communicator/impl/credentialsstorage/CredentialsStorageServiceImpl.java b/src/net/java/sip/communicator/impl/credentialsstorage/CredentialsStorageServiceImpl.java
index d567449..87bbfc2 100644
--- a/src/net/java/sip/communicator/impl/credentialsstorage/CredentialsStorageServiceImpl.java
+++ b/src/net/java/sip/communicator/impl/credentialsstorage/CredentialsStorageServiceImpl.java
@@ -10,6 +10,7 @@ import java.util.*;
import net.java.sip.communicator.service.credentialsstorage.*;
import net.java.sip.communicator.util.*;
+import net.java.sip.communicator.util.Base64; // disambiguation
import org.jitsi.service.configuration.*;
import org.osgi.framework.*;
diff --git a/src/net/java/sip/communicator/impl/gui/main/call/CallPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/CallPanel.java
index 0b84eee..51fc669 100644
--- a/src/net/java/sip/communicator/impl/gui/main/call/CallPanel.java
+++ b/src/net/java/sip/communicator/impl/gui/main/call/CallPanel.java
@@ -1674,7 +1674,7 @@ public class CallPanel
settingsPanel.add(recordButton);
if (showHideVideoButton != null)
settingsPanel.add(showHideVideoButton);
- if (mergeButton != null)
+ if (transferCallButton != null)
settingsPanel.add(transferCallButton);
if (videoButton != null)
settingsPanel.add(videoButton);
diff --git a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPanel.java
index 582a114..a32b70f 100644
--- a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPanel.java
+++ b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPanel.java
@@ -118,7 +118,14 @@ public class OneToOneCallPanel
addCallPeerPanel(callPeer, uiVideoHandler);
- setPreferredSize(new Dimension(400, 400));
+ int preferredHeight = 400;
+ if(GuiActivator.getConfigurationService().getBoolean(
+ OneToOneCallPeerPanel.HIDE_PLACEHOLDER_PIC_PROP,
+ false))
+ {
+ preferredHeight = 128;
+ }
+ setPreferredSize(new Dimension(400, preferredHeight));
setTransferHandler(new CallTransferHandler(call));
this.callContainer.addPropertyChangeListener(
@@ -457,4 +464,4 @@ public class OneToOneCallPanel
{
callContainer.updateHoldButtonState();
}
-} \ No newline at end of file
+}
diff --git a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java
index a0d9df7..39bd9ba 100644
--- a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java
+++ b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java
@@ -61,6 +61,13 @@ public class OneToOneCallPeerPanel
private static final long serialVersionUID = 0L;
/**
+ * Property to disable showing the dummy picture for the peer when no
+ * streams present.
+ */
+ public static final String HIDE_PLACEHOLDER_PIC_PROP
+ = "net.java.sip.communicator.impl.gui.main.call.HIDE_PLACEHOLDER_PIC";
+
+ /**
* The <tt>CallPeer</tt>, which is rendered in this panel.
*/
private final CallPeer callPeer;
@@ -277,7 +284,15 @@ public class OneToOneCallPeerPanel
detailsChangeListener);
securityPanel = SecurityPanel.create(this, callPeer, null);
- photoLabel = new JLabel(getPhotoLabelIcon());
+ ImageIcon icon = getPhotoLabelIcon();
+ if(icon != null)
+ {
+ photoLabel = new JLabel(icon);
+ }
+ else
+ {
+ photoLabel = new JLabel();
+ }
center = createCenter();
statusBar = createStatusBar();
@@ -346,13 +361,28 @@ public class OneToOneCallPeerPanel
}
/**
+ * Set size of the {@link #photoLabel}
+ */
+ private void sizePhotoLabel()
+ {
+ if(photoLabel.getIcon() != null)
+ {
+ photoLabel.setPreferredSize(new Dimension(90, 90));
+ }
+ else
+ {
+ photoLabel.setPreferredSize(new Dimension(0, 0));
+ }
+ }
+
+ /**
* Creates the <tt>Component</tt> hierarchy of the central area of this
* <tt>CallPeerPanel</tt> which displays the photo of the <tt>CallPeer</tt>
* or the video if any.
*/
private VideoContainer createCenter()
{
- photoLabel.setPreferredSize(new Dimension(90, 90));
+ sizePhotoLabel();
return createVideoContainer(photoLabel);
}
@@ -585,6 +615,22 @@ public class OneToOneCallPeerPanel
}
/**
+ * Tests a provided boolean property name, returning false if it should be
+ * hidden.
+ *
+ * @param componentHidePropertyName the name of the boolean property to
+ * check.
+ * @return false if the component should be hidden, true otherwise.
+ *
+ */
+ private boolean isComponentEnabled(String componentHidePropertyName)
+ {
+ return !GuiActivator.getConfigurationService().getBoolean(
+ componentHidePropertyName,
+ false);
+ }
+
+ /**
* Gets the <tt>Icon</tt> to be displayed in {@link #photoLabel}.
*
* @return the <tt>Icon</tt> to be displayed in {@link #photoLabel}
@@ -592,7 +638,7 @@ public class OneToOneCallPeerPanel
private ImageIcon getPhotoLabelIcon()
{
return
- (peerImage == null)
+ (peerImage == null && isComponentEnabled(HIDE_PLACEHOLDER_PIC_PROP))
? new ImageIcon(
ImageLoader.getImage(ImageLoader.DEFAULT_USER_PHOTO))
: peerImage;
@@ -677,10 +723,18 @@ public class OneToOneCallPeerPanel
if(peerImage == null)
{
- photoLabel.setIcon(
- new ImageIcon(
- ImageLoader.getImage(
- ImageLoader.DEFAULT_USER_PHOTO)));
+ if(isComponentEnabled(HIDE_PLACEHOLDER_PIC_PROP))
+ {
+ photoLabel.setIcon(
+ new ImageIcon(
+ ImageLoader.getImage(
+ ImageLoader.DEFAULT_USER_PHOTO)));
+ }
+ else
+ {
+ photoLabel.setIcon(null);
+ }
+ sizePhotoLabel();
}
}
@@ -1108,6 +1162,7 @@ public class OneToOneCallPeerPanel
public void run()
{
photoLabel.setIcon(peerImage);
+ sizePhotoLabel();
photoLabel.repaint();
}
});
@@ -1115,6 +1170,7 @@ public class OneToOneCallPeerPanel
else
{
photoLabel.setIcon(peerImage);
+ sizePhotoLabel();
photoLabel.repaint();
}
}
@@ -1582,4 +1638,4 @@ public class OneToOneCallPeerPanel
this.interested = value;
}
}
-} \ No newline at end of file
+}
diff --git a/src/net/java/sip/communicator/impl/gui/main/call/RecordButton.java b/src/net/java/sip/communicator/impl/gui/main/call/RecordButton.java
index 856322e..8d0ad91 100644
--- a/src/net/java/sip/communicator/impl/gui/main/call/RecordButton.java
+++ b/src/net/java/sip/communicator/impl/gui/main/call/RecordButton.java
@@ -442,8 +442,14 @@ public class RecordButton
0,
callFilename.lastIndexOf('.'));
}
+ String configuredFormat
+ = configuration.getString(Recorder.FORMAT);
callFormat
- = SoundFileUtils.DEFAULT_CALL_RECORDING_FORMAT;
+ = (configuredFormat != null
+ && configuredFormat.length() != 0)
+ ? configuredFormat
+ : SoundFileUtils.DEFAULT_CALL_RECORDING_FORMAT;
+
callFilename += '.' + callFormat;
}
configuration.setProperty(Recorder.FORMAT, callFormat);
diff --git a/src/net/java/sip/communicator/impl/gui/main/presence/AccountStatusPanel.java b/src/net/java/sip/communicator/impl/gui/main/presence/AccountStatusPanel.java
index 6e80b2f..dc7a5dd 100644
--- a/src/net/java/sip/communicator/impl/gui/main/presence/AccountStatusPanel.java
+++ b/src/net/java/sip/communicator/impl/gui/main/presence/AccountStatusPanel.java
@@ -60,12 +60,12 @@ public class AccountStatusPanel
/**
* The desired height of the avatar.
*/
- private static final int AVATAR_ICON_HEIGHT = 40;
+ private static final int AVATAR_ICON_HEIGHT = 50;
/**
* The desired width of the avatar.
*/
- private static final int AVATAR_ICON_WIDTH = 40;
+ private static final int AVATAR_ICON_WIDTH = 50;
/**
* The image object storing the avatar.
@@ -123,6 +123,18 @@ public class AccountStatusPanel
private final PluginContainer mainToolbarPluginContainer;
/**
+ * When setting global status message, the message will be displayed in this
+ * label.
+ */
+ private final JLabel statusMessageLabel = new JLabel();
+
+ /**
+ * This is the panel that contains display name, status message, status
+ * selector box and plugins.
+ */
+ private final TransparentPanel rightPanel = new TransparentPanel();
+
+ /**
* Creates an instance of <tt>AccountStatusPanel</tt> by specifying the
* main window, where this panel is added.
*/
@@ -144,7 +156,7 @@ public class AccountStatusPanel
accountNameLabel.getFont().deriveFont(12f));
accountNameLabel.setOpaque(false);
- statusComboBox = new GlobalStatusSelectorBox();
+ statusComboBox = new GlobalStatusSelectorBox(this);
// Align status combo box with account name field.
statusComboBox.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
@@ -163,9 +175,14 @@ public class AccountStatusPanel
statusToolsPanel.add(toolbarPluginPanel, BorderLayout.EAST);
- TransparentPanel rightPanel = new TransparentPanel();
+ statusMessageLabel.setFont(
+ statusMessageLabel.getFont().deriveFont(9f));
+ statusMessageLabel.setForeground(Color.GRAY);
+
+
rightPanel.setLayout(new BorderLayout(0, 0));
rightPanel.add(accountNameLabel, BorderLayout.NORTH);
+ rightPanel.add(statusMessageLabel, BorderLayout.CENTER);
rightPanel.add(statusToolsPanel, BorderLayout.SOUTH);
this.add(accountImageLabel, BorderLayout.WEST);
@@ -197,6 +214,24 @@ public class AccountStatusPanel
}
/**
+ * Updates status message.
+ * @param text
+ */
+ void setStatusMessage(String text)
+ {
+ if(text == null)
+ {
+ statusMessageLabel.setText("");
+ rightPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0));
+ }
+ else
+ {
+ rightPanel.setBorder(null);
+ statusMessageLabel.setText(text);
+ }
+ }
+
+ /**
* Adds the account given by <tt>protocolProvider</tt> in the contained
* status combo box.
* @param protocolProvider the <tt>ProtocolProviderService</tt>
diff --git a/src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusSelectorBox.java b/src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusSelectorBox.java
index 8b8d889..ee6e029 100644
--- a/src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusSelectorBox.java
+++ b/src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusSelectorBox.java
@@ -87,12 +87,19 @@ public class GlobalStatusSelectorBox
private final GlobalStatusMessageMenu globalStatusMessageMenu;
/**
+ * The parent panel that creates us.
+ */
+ private final AccountStatusPanel accountStatusPanel;
+
+ /**
* Creates an instance of <tt>SimpleStatusSelectorBox</tt>.
*/
- public GlobalStatusSelectorBox()
+ public GlobalStatusSelectorBox(AccountStatusPanel accountStatusPanel)
{
super();
+ this.accountStatusPanel = accountStatusPanel;
+
JLabel titleLabel = new JLabel(GuiActivator.getResources()
.getI18NString("service.gui.SET_GLOBAL_STATUS"));
titleLabel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
@@ -156,10 +163,12 @@ public class GlobalStatusSelectorBox
this.setToolTipText("<html><b>" + GuiActivator.getResources()
.getI18NString("service.gui.SET_GLOBAL_STATUS")
+ "</b></html>");
+ accountStatusPanel.setStatusMessage(null);
}
else
{
this.setToolTipText("<html><b>" + message + "</b></html>");
+ accountStatusPanel.setStatusMessage(message);
}
}
diff --git a/src/net/java/sip/communicator/impl/libjitsi/libjitsi.manifest.mf b/src/net/java/sip/communicator/impl/libjitsi/libjitsi.manifest.mf
index 81986fc..e7a3ff1 100644
--- a/src/net/java/sip/communicator/impl/libjitsi/libjitsi.manifest.mf
+++ b/src/net/java/sip/communicator/impl/libjitsi/libjitsi.manifest.mf
@@ -56,7 +56,9 @@ Import-Package: apple.awt,
javax.xml.transform.dom,
javax.xml.transform.stream,
org.bouncycastle.asn1,
+ org.bouncycastle.asn1.bsi,
org.bouncycastle.asn1.cryptopro,
+ org.bouncycastle.asn1.eac,
org.bouncycastle.asn1.nist,
org.bouncycastle.asn1.oiw,
org.bouncycastle.asn1.pkcs,
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriConferenceIQ.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriConferenceIQ.java
index 60b7153..fcd467a 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriConferenceIQ.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriConferenceIQ.java
@@ -64,6 +64,13 @@ public class ColibriConferenceIQ
*/
public Recording recording = null;
+ private RTCPTerminationStrategy rtcpTerminationStrategy = null;
+
+ /**
+ * The list of <tt>Endpoint</tt>s included into this <tt>conference</tt> IQ.
+ */
+ private final List<Endpoint> endpoints = new LinkedList<Endpoint>();
+
/** Initializes a new <tt>ColibriConferenceIQ</tt> instance. */
public ColibriConferenceIQ()
{
@@ -141,6 +148,10 @@ public class ColibriConferenceIQ
content.toXML(xml);
if (recording != null)
recording.toXML(xml);
+
+ if (rtcpTerminationStrategy != null)
+ rtcpTerminationStrategy.toXML(xml);
+
xml.append("</").append(ELEMENT_NAME).append('>');
}
return xml.toString();
@@ -253,6 +264,35 @@ public class ColibriConferenceIQ
this.id = id;
}
+ public RTCPTerminationStrategy getRTCPTerminationStrategy()
+ {
+ return rtcpTerminationStrategy;
+ }
+
+ public void setRTCPTerminationStrategy(RTCPTerminationStrategy rtcpTerminationStrategy)
+ {
+ this.rtcpTerminationStrategy = rtcpTerminationStrategy;
+ }
+
+ /**
+ * Returns the list of <tt>Endpoint</tt>s included in this
+ * <tt>ColibriConferenceIQ</tt>.
+ * @return the list of <tt>Endpoint</tt>s included in this
+ * <tt>ColibriConferenceIQ</tt>.
+ */
+ public List<Endpoint> getEndpoints()
+ {
+ return Collections.unmodifiableList(endpoints);
+ }
+
+ /**
+ * Add an <tt>Endpoint</tt> to this <tt>ColibriConferenceIQ</tt>.
+ * @param endpoint the <tt>Endpoint</tt> to add.
+ */
+ public void addEndpoint(Endpoint endpoint)
+ {
+ endpoints.add(endpoint);
+ }
/**
* Class contains common code for both <tt>Channel</tt> and
* <tt>SctpConnection</tt> IQ classes.
@@ -515,6 +555,33 @@ public class ColibriConferenceIQ
}
}
+ public static class RTCPTerminationStrategy
+ {
+
+ public static final String ELEMENT_NAME = "rtcp-termination-strategy";
+ public static final String NAME_ATTR_NAME = "name";
+
+ private String name;
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void toXML(StringBuilder xml)
+ {
+ xml.append('<').append(ELEMENT_NAME);
+ xml.append(' ').append(NAME_ATTR_NAME).append("='")
+ .append(name).append('\'');
+ xml.append("/>");
+ }
+ }
+
/**
* Represents a <tt>channel</tt> included into a <tt>content</tt> of a Jitsi
* Videobridge <tt>conference</tt> IQ.
@@ -1597,4 +1664,83 @@ public class ColibriConferenceIQ
xml.append("/>");
}
}
+
+ /**
+ * Represents an 'endpoint' element.
+ */
+ public static class Endpoint
+ {
+ /**
+ * The name of the 'endpoint' element.
+ */
+ public static final String ELEMENT_NAME = "endpoint";
+
+ /**
+ * The name of the 'id' attribute.
+ */
+ public static final String ID_ATTR_NAME = "id";
+
+ /**
+ * The name of the 'displayname' attribute.
+ */
+ public static final String DISPLAYNAME_ATTR_NAME = "displayname";
+
+ /**
+ * The 'id' of this <tt>Endpoint</tt>.
+ */
+ private String id;
+
+ /**
+ * The 'display name' of this <tt>Endpoint</tt>.
+ */
+ private String displayName;
+
+ /**
+ * Initializes a new <tt>Endpoint</tt> with the given ID and display
+ * name.
+ * @param id the ID.
+ * @param displayName the display name.
+ */
+ public Endpoint(String id, String displayName)
+ {
+ this.id = id;
+ this.displayName = displayName;
+ }
+
+ /**
+ * Sets the ID of this <tt>Endpoint</tt>.
+ * @param id the ID to set.
+ */
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ /**
+ * Returns the ID of this <tt>Endpoint</tt>.
+ * @return the ID of this <tt>Endpoint</tt>.
+ */
+ public String getId()
+ {
+ return id;
+ }
+
+ /**
+ * Sets the display name of this <tt>Endpoint</tt>.
+ * @param displayName the display name to set.
+ */
+ public void setDisplayName(String displayName)
+ {
+ this.displayName = displayName;
+ }
+
+ /**
+ * Returns the display name of this <tt>Endpoint</tt>.
+ * @return the display name of this <tt>Endpoint</tt>.
+ */
+ public String getDisplayName()
+ {
+ return displayName;
+ }
+ }
}
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriIQProvider.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriIQProvider.java
index ec1c182..d5b2d37 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriIQProvider.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriIQProvider.java
@@ -158,9 +158,12 @@ public class ColibriIQProvider
boolean done = false;
ColibriConferenceIQ.Channel channel = null;
+ ColibriConferenceIQ.RTCPTerminationStrategy rtcpTerminationStrategy
+ = null;
ColibriConferenceIQ.SctpConnection sctpConnection = null;
ColibriConferenceIQ.Content content = null;
ColibriConferenceIQ.Recording recording = null;
+ ColibriConferenceIQ.Endpoint conferenceEndpoint = null;
StringBuilder ssrc = null;
while (!done)
@@ -187,6 +190,12 @@ public class ColibriIQProvider
content.addSctpConnection(sctpConnection);
sctpConnection = null;
}
+ else if (ColibriConferenceIQ.Endpoint.ELEMENT_NAME
+ .equals(name))
+ {
+ conference.addEndpoint(conferenceEndpoint);
+ conferenceEndpoint = null;
+ }
else if (ColibriConferenceIQ.Channel.SSRC_ELEMENT_NAME
.equals(name))
{
@@ -215,6 +224,13 @@ public class ColibriIQProvider
conference.addContent(content);
content = null;
}
+ else if (ColibriConferenceIQ.RTCPTerminationStrategy
+ .ELEMENT_NAME.equals(name))
+ {
+ conference.setRTCPTerminationStrategy(
+ rtcpTerminationStrategy);
+ rtcpTerminationStrategy = null;
+ }
else if (ColibriConferenceIQ.Recording.ELEMENT_NAME.equals(
name))
{
@@ -336,6 +352,24 @@ public class ColibriIQProvider
if ((rtpPort != null) && (rtpPort.length() != 0))
channel.setRTPPort(Integer.parseInt(rtpPort));
}
+ else if (ColibriConferenceIQ.RTCPTerminationStrategy
+ .ELEMENT_NAME.equals(name))
+ {
+ rtcpTerminationStrategy =
+ new ColibriConferenceIQ.RTCPTerminationStrategy();
+
+ // name
+ String strategyName
+ = parser.getAttributeValue(
+ "",
+ ColibriConferenceIQ.RTCPTerminationStrategy
+ .NAME_ATTR_NAME);
+
+ if ((strategyName != null)
+ && (strategyName.length() != 0))
+ rtcpTerminationStrategy.setName(strategyName);
+
+ }
else if (ColibriConferenceIQ.Channel.SSRC_ELEMENT_NAME
.equals(name))
{
@@ -428,6 +462,25 @@ public class ColibriIQProvider
if (!StringUtils.isNullOrEmpty(expire))
sctpConnection.setExpire(Integer.parseInt(expire));
}
+ else if (ColibriConferenceIQ.Endpoint.ELEMENT_NAME
+ .equals(name))
+ {
+ String id
+ = parser.getAttributeValue(
+ "",
+ ColibriConferenceIQ.Endpoint.ID_ATTR_NAME);
+
+ String endpointName
+ = parser.getAttributeValue(
+ "",
+ ColibriConferenceIQ.Endpoint
+ .DISPLAYNAME_ATTR_NAME);
+
+ conferenceEndpoint
+ = new ColibriConferenceIQ.Endpoint(id,
+ endpointName);
+
+ }
else if (channel != null || sctpConnection != null)
{
String peName = null;
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriStatsExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriStatsExtension.java
new file mode 100644
index 0000000..ef23bb6
--- /dev/null
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriStatsExtension.java
@@ -0,0 +1,160 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package net.java.sip.communicator.impl.protocol.jabber.extensions.colibri;
+
+import java.util.*;
+
+import net.java.sip.communicator.impl.protocol.jabber.extensions.*;
+
+import org.jivesoftware.smack.packet.*;
+import org.jivesoftware.smack.util.*;
+
+/**
+ * Implements the Jitsi Videobridge <tt>stats</tt> extension within the
+ * COnferencing with LIghtweight BRIdging that will provide various statistics.
+ *
+ * @author Hristo Terezov
+ */
+public class ColibriStatsExtension
+ extends AbstractPacketExtension
+{
+
+ /**
+ * The XML element name of the Jitsi Videobridge <tt>stats</tt> extension.
+ */
+ public static final String ELEMENT_NAME = "stats";
+
+ /**
+ * The XML COnferencing with LIghtweight BRIdging namespace of the Jitsi
+ * Videobridge <tt>stats</tt> extension.
+ */
+ public static final String NAMESPACE
+ = "http://jitsi.org/protocol/colibri";
+
+ /**
+ * Constructs new <tt>ColibriStatsExtension</tt>
+ */
+ public ColibriStatsExtension() {
+ super(NAMESPACE, ELEMENT_NAME);
+
+ }
+
+ /**
+ * Adds stat extension.
+ * @param stat the stat to be added
+ */
+ public void addStat(Stat stat)
+ {
+ addChildExtension(stat);
+ }
+
+ @Override
+ public List<? extends PacketExtension> getChildExtensions()
+ {
+ return Collections.unmodifiableList(super.getChildExtensions());
+ }
+
+ public static class Stat implements PacketExtension
+ {
+ /**
+ * The XML element name of a <tt>content</tt> of a Jitsi Videobridge
+ * <tt>stats</tt> IQ.
+ */
+ public static final String ELEMENT_NAME = "stat";
+
+ /**
+ * The XML name of the <tt>name</tt> attribute of a <tt>stat</tt> of
+ * a <tt>stats</tt> IQ which represents the <tt>name</tt> property
+ * of the statistic.
+ */
+ public static final String NAME_ATTR_NAME = "name";
+
+ /**
+ * The XML name of the <tt>name</tt> attribute of a <tt>stat</tt> of
+ * a <tt>stats</tt> IQ which represents the <tt>value</tt> property
+ * of the statistic.
+ */
+ public static final String VALUE_ATTR_NAME = "value";
+
+ /**
+ * The name attribute value.
+ */
+ private String name;
+
+ /**
+ * The value attribute value.
+ */
+ private Object value;
+
+ public Stat() { }
+
+ /**
+ * Constructs new <tt>Stat</tt> by given name and value.
+ * @param name the name
+ * @param value the value
+ */
+ public Stat(String name, Object value)
+ {
+ this.setName(name);
+ this.setValue(value);
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName()
+ {
+ return name;
+ }
+
+ /**
+ * @param name the name to set
+ */
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ /**
+ * @return the value
+ */
+ public Object getValue()
+ {
+ return value;
+ }
+
+ /**
+ * @param value the value to set
+ */
+ public void setValue(Object value)
+ {
+ this.value = value;
+ }
+
+ public String toXML()
+ {
+ if(name == null || value == null)
+ return "";
+
+ return "<" + ELEMENT_NAME + " " + NAME_ATTR_NAME + "='" +
+ StringUtils.escapeForXML(getName()) + "' " + VALUE_ATTR_NAME +
+ "='" + StringUtils.escapeForXML(getValue().toString()) + "' />";
+ }
+
+ @Override
+ public String getElementName()
+ {
+ return ELEMENT_NAME;
+ }
+
+ @Override
+ public String getNamespace()
+ {
+ return NAMESPACE;
+ }
+ }
+}
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java
index f09fcaf..3ebb576 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java
@@ -232,7 +232,24 @@ public class IceUdpTransportPacketExtension
else if(childExtension instanceof CandidatePacketExtension)
addCandidate((CandidatePacketExtension) childExtension);
- else if (childExtension instanceof DtlsFingerprintPacketExtension)
+ else
super.addChildExtension(childExtension);
}
+
+ /**
+ * Checks whether an 'rtcp-mux' extension has been added to this
+ * <tt>IceUdpTransportPacketExtension</tt>.
+ * @return <tt>true</tt> if this <tt>IceUdpTransportPacketExtension</tt>
+ * has a child with the 'rtcp-mux' name.
+ */
+ public boolean isRtcpMux()
+ {
+ for (PacketExtension packetExtension : getChildExtensions())
+ {
+ if (RtcpmuxPacketExtension.ELEMENT_NAME
+ .equals(packetExtension.getElementName()))
+ return true;
+ }
+ return false;
+ }
}
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java
index 4cefe8f..bc46b8f 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java
@@ -156,6 +156,13 @@ public class JingleIQProvider implements IQProvider
ConferenceDescriptionPacketExtension.NAMESPACE,
new DefaultPacketExtensionProvider<CallIdPacketExtension>(
CallIdPacketExtension.class));
+
+ //rtcp-mux
+ providerManager.addExtensionProvider(
+ RtcpmuxPacketExtension.ELEMENT_NAME,
+ IceUdpTransportPacketExtension.NAMESPACE,
+ new DefaultPacketExtensionProvider<RtcpmuxPacketExtension>(
+ RtcpmuxPacketExtension.class));
}
/**
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RtcpmuxPacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RtcpmuxPacketExtension.java
new file mode 100644
index 0000000..21577ee
--- /dev/null
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RtcpmuxPacketExtension.java
@@ -0,0 +1,31 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package net.java.sip.communicator.impl.protocol.jabber.extensions.jingle;
+
+import net.java.sip.communicator.impl.protocol.jabber.extensions.*;
+
+/**
+ * An 'rtcp-mux' extension.
+ * @author Boris Grozev
+ */
+public class RtcpmuxPacketExtension
+ extends AbstractPacketExtension
+{
+ /**
+ * The name of the "encryption" element.
+ */
+ public static final String ELEMENT_NAME = "rtcp-mux";
+
+ /**
+ * Creates a new instance of <tt>RtcpmuxPacketExtension</tt>.
+ */
+ public RtcpmuxPacketExtension()
+ {
+ super(null, ELEMENT_NAME);
+ }
+}
+
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/sasl/SASLDigestMD5Mechanism.java b/src/net/java/sip/communicator/impl/protocol/jabber/sasl/SASLDigestMD5Mechanism.java
index 56ea029..e390389 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/sasl/SASLDigestMD5Mechanism.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/sasl/SASLDigestMD5Mechanism.java
@@ -13,7 +13,7 @@ import javax.security.auth.callback.*;
import javax.security.sasl.*;
import org.jivesoftware.smack.*;
-import org.jivesoftware.smack.util.*;
+import org.jivesoftware.smack.util.Base64; // disambiguation
/**
* Creates our custom SASLDigestMD5Mechanism with some changes in order
diff --git a/src/net/java/sip/communicator/impl/protocol/mock/MockContact.java b/src/net/java/sip/communicator/impl/protocol/mock/MockContact.java
index a2bb441..bb5ab80 100644
--- a/src/net/java/sip/communicator/impl/protocol/mock/MockContact.java
+++ b/src/net/java/sip/communicator/impl/protocol/mock/MockContact.java
@@ -294,4 +294,9 @@ public class MockContact
{
return null;
}
+
+ public void setPersistent(boolean isPersistent)
+ {
+ this.isPersistent = isPersistent;
+ }
}
diff --git a/src/net/java/sip/communicator/impl/protocol/mock/MockContactGroup.java b/src/net/java/sip/communicator/impl/protocol/mock/MockContactGroup.java
index 4287cc6..f1352ae 100644
--- a/src/net/java/sip/communicator/impl/protocol/mock/MockContactGroup.java
+++ b/src/net/java/sip/communicator/impl/protocol/mock/MockContactGroup.java
@@ -495,5 +495,9 @@ public class MockContactGroup
return true;
}
+ public void setPersistent(boolean isPersistent)
+ {
+ this.isPersistent = isPersistent;
+ }
}
diff --git a/src/net/java/sip/communicator/impl/protocol/mock/MockPersistentPresenceOperationSet.java b/src/net/java/sip/communicator/impl/protocol/mock/MockPersistentPresenceOperationSet.java
index dcccdc7..b8371fd 100644
--- a/src/net/java/sip/communicator/impl/protocol/mock/MockPersistentPresenceOperationSet.java
+++ b/src/net/java/sip/communicator/impl/protocol/mock/MockPersistentPresenceOperationSet.java
@@ -529,4 +529,72 @@ public class MockPersistentPresenceOperationSet
return newGroup;
}
+
+ /**
+ * Creates a non persistent contact for the specified id. This would
+ * also create (if necessary) a group for volatile contacts.
+ * @param id the address of the contact to create.
+ * @return the newly created volatile <tt>MockContact</tt>
+ */
+ public MockContact createVolatileContact(
+ String id)
+ {
+ MockContact newVolatileContact
+ = new MockContact(id, parentProvider);
+ newVolatileContact.setResolved(false);
+ newVolatileContact.setPersistent(false);
+
+ //Check whether a volatile group already exists and if not create
+ //one
+ MockContactGroup theVolatileGroup = getNonPersistentGroup();
+
+ //if the parent group is null then add necessary create the group
+ if (theVolatileGroup == null)
+ {
+ theVolatileGroup = new MockContactGroup(
+ "Not-In-Contactlist",
+ parentProvider);
+ theVolatileGroup.setResolved(false);
+ theVolatileGroup.setPersistent(false);
+
+ theVolatileGroup.addContact(newVolatileContact);
+
+ this.contactListRoot.addSubgroup(theVolatileGroup);
+
+ fireServerStoredGroupEvent(theVolatileGroup
+ , ServerStoredGroupEvent.GROUP_CREATED_EVENT);
+ }
+ else
+ {
+ theVolatileGroup.addContact(newVolatileContact);
+
+ fireSubscriptionEvent(
+ newVolatileContact,
+ theVolatileGroup,
+ SubscriptionEvent.SUBSCRIPTION_CREATED);
+ }
+
+ return newVolatileContact;
+ }
+
+ /**
+ * Returns the volatile group that we use when creating volatile contacts.
+ *
+ * @return MockContactGroup
+ */
+ public MockContactGroup getNonPersistentGroup()
+ {
+ String groupName = "Not-In-Contactlist";
+
+ for (int i = 0; i < contactListRoot.countSubgroups(); i++)
+ {
+ MockContactGroup gr =
+ (MockContactGroup)contactListRoot.getGroup(i);
+
+ if(!gr.isPersistent() && gr.getGroupName().equals(groupName))
+ return gr;
+ }
+
+ return null;
+ }
}
diff --git a/src/net/java/sip/communicator/impl/protocol/sip/CallPeerMediaHandlerSipImpl.java b/src/net/java/sip/communicator/impl/protocol/sip/CallPeerMediaHandlerSipImpl.java
index 2ca7d83..6f6b980 100644
--- a/src/net/java/sip/communicator/impl/protocol/sip/CallPeerMediaHandlerSipImpl.java
+++ b/src/net/java/sip/communicator/impl/protocol/sip/CallPeerMediaHandlerSipImpl.java
@@ -21,6 +21,7 @@ import org.jitsi.service.configuration.*;
import org.jitsi.service.neomedia.*;
import org.jitsi.service.neomedia.device.*;
import org.jitsi.service.neomedia.format.*;
+import org.jitsi.service.neomedia.rtp.*;
import ch.imvs.sdes4j.srtp.*;
@@ -244,21 +245,46 @@ public class CallPeerMediaHandlerSipImpl
try
{
- // If we have a video preset, let's send info about the
- // desired frame rate.
- if (mediaType.equals(MediaType.VIDEO)
- && (receiveQualityPreset != null))
+ switch (mediaType)
{
- // doing only int frame rate for now
- int frameRate
- = (int) receiveQualityPreset.getFameRate();
+ case AUDIO:
+ /*
+ * Let the remote peer know that we support RTCP XR
+ * in general and VoIP Metrics Report Block in
+ * particular.
+ */
+ String rtcpxr
+ = md.getAttribute(
+ RTCPExtendedReport.SDP_ATTRIBUTE);
- if (frameRate > 0)
+ if (rtcpxr == null)
{
md.setAttribute(
- "framerate",
- String.valueOf(frameRate));
+ RTCPExtendedReport.SDP_ATTRIBUTE,
+ RTCPExtendedReport
+ .VoIPMetricsReportBlock
+ .SDP_PARAMETER);
+ }
+ break;
+ case VIDEO:
+ // If we have a video preset, let's send info about
+ // the desired frame rate.
+ if (receiveQualityPreset != null)
+ {
+ // doing only int frame rate for now
+ int frameRate
+ = (int) receiveQualityPreset.getFameRate();
+
+ if (frameRate > 0)
+ {
+ md.setAttribute(
+ "framerate",
+ String.valueOf(frameRate));
+ }
}
+ break;
+ default:
+ break;
}
}
catch(SdpException e)
@@ -708,6 +734,44 @@ public class CallPeerMediaHandlerSipImpl
md,
mediaDescription);
+ // RTCP XR
+ String rtcpxr;
+
+ try
+ {
+ /*
+ * We support the receiving of RTCP XR so we will answer the
+ * offer of the remote peer.
+ */
+ rtcpxr
+ = mediaDescription.getAttribute(
+ RTCPExtendedReport.SDP_ATTRIBUTE);
+ if (rtcpxr != null)
+ {
+ /*
+ * However, we support the receiving and sending of VoIP
+ * Metrics Report Block only.
+ */
+ if (rtcpxr.contains(
+ RTCPExtendedReport.VoIPMetricsReportBlock
+ .SDP_PARAMETER))
+ {
+ rtcpxr
+ = RTCPExtendedReport.VoIPMetricsReportBlock
+ .SDP_PARAMETER;
+ }
+ else
+ {
+ rtcpxr = "";
+ }
+ md.setAttribute(RTCPExtendedReport.SDP_ATTRIBUTE, rtcpxr);
+ }
+ }
+ catch (SdpException se)
+ {
+ rtcpxr = null;
+ }
+
// create the corresponding stream...
MediaFormat fmt
= findMediaFormat(
@@ -733,8 +797,19 @@ public class CallPeerMediaHandlerSipImpl
}
}
- initStream(connector, dev, fmt, target, direction, rtpExtensions,
- masterStream);
+ MediaStream stream
+ = initStream(
+ connector,
+ dev,
+ fmt,
+ target,
+ direction,
+ rtpExtensions,
+ masterStream);
+
+ // RTCP XR
+ if (stream != null)
+ stream.setProperty(RTCPExtendedReport.SDP_ATTRIBUTE, rtcpxr);
// create the answer description
answerDescriptions.add(md);
@@ -1471,14 +1546,33 @@ public class CallPeerMediaHandlerSipImpl
}
// create the corresponding stream...
- initStream(
- connector,
- dev,
- supportedFormats.get(0),
- target,
- direction,
- rtpExtensions,
- masterStream);
+ MediaStream stream
+ = initStream(
+ connector,
+ dev,
+ supportedFormats.get(0),
+ target,
+ direction,
+ rtpExtensions,
+ masterStream);
+
+ // RTCP XR
+ if (stream != null)
+ {
+ String rtcpxr;
+
+ try
+ {
+ rtcpxr
+ = mediaDescription.getAttribute(
+ RTCPExtendedReport.SDP_ATTRIBUTE);
+ }
+ catch (SdpException se)
+ {
+ rtcpxr = null;
+ }
+ stream.setProperty(RTCPExtendedReport.SDP_ATTRIBUTE, rtcpxr);
+ }
}
}
diff --git a/src/net/java/sip/communicator/impl/protocol/sip/ServerStoredContactListSipImpl.java b/src/net/java/sip/communicator/impl/protocol/sip/ServerStoredContactListSipImpl.java
index 659f5db..112a95b 100644
--- a/src/net/java/sip/communicator/impl/protocol/sip/ServerStoredContactListSipImpl.java
+++ b/src/net/java/sip/communicator/impl/protocol/sip/ServerStoredContactListSipImpl.java
@@ -23,6 +23,7 @@ import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.ServerStoredDetails.ImageDetail;
import net.java.sip.communicator.service.protocol.event.*;
import net.java.sip.communicator.util.*;
+import net.java.sip.communicator.util.Base64; // disambiguation
import org.jitsi.util.xml.XMLUtils;
import org.w3c.dom.*;
diff --git a/src/net/java/sip/communicator/impl/protocol/sip/sdp/SdpUtils.java b/src/net/java/sip/communicator/impl/protocol/sip/sdp/SdpUtils.java
index 1bf5bc1..fd53672 100644
--- a/src/net/java/sip/communicator/impl/protocol/sip/sdp/SdpUtils.java
+++ b/src/net/java/sip/communicator/impl/protocol/sip/sdp/SdpUtils.java
@@ -273,7 +273,7 @@ public class SdpUtils
else
{
//if rtpmap was null, check whether we have previously registered
- //the type in our dynamiyc payload type registry. and if that's
+ //the type in our dynamic payload type registry. and if that's
//the case return it.
MediaFormat fmt = ptRegistry.findFormat(payloadType);
if (fmt != null)
@@ -290,6 +290,12 @@ public class SdpUtils
if (advp != null)
advancedAttrMap = parseAdvancedAttributes(advp);
+ // Many implementations use opus as "opus/48000", while the specification
+ // mandates "opus/48000/2". Our upper layers only support 2 channels, so
+ // we patch it here.
+ if ("opus".equals(encoding))
+ numChannels = 2;
+
//now create the format.
MediaFormat format
= SipActivator.getMediaService().getFormatFactory()
diff --git a/src/net/java/sip/communicator/impl/protocol/ssh/ContactSSHImpl.java b/src/net/java/sip/communicator/impl/protocol/ssh/ContactSSHImpl.java
index e0fae1d..714e27b 100644
--- a/src/net/java/sip/communicator/impl/protocol/ssh/ContactSSHImpl.java
+++ b/src/net/java/sip/communicator/impl/protocol/ssh/ContactSSHImpl.java
@@ -14,10 +14,11 @@ import java.io.*;
import java.util.*;
import net.java.sip.communicator.service.protocol.*;
-import net.java.sip.communicator.util.*;
+import net.java.sip.communicator.util.Base64; // disambiguation
import net.java.sip.communicator.util.Logger;
import com.jcraft.jsch.*;
+// disambiguation
/**
* A Contact of SSH Type
diff --git a/src/net/java/sip/communicator/plugin/desktoputil/FramedImageWithMenu.java b/src/net/java/sip/communicator/plugin/desktoputil/FramedImageWithMenu.java
index 4262e3b..683d8bd 100644
--- a/src/net/java/sip/communicator/plugin/desktoputil/FramedImageWithMenu.java
+++ b/src/net/java/sip/communicator/plugin/desktoputil/FramedImageWithMenu.java
@@ -51,7 +51,6 @@ public class FramedImageWithMenu
/**
* Creates the component.
- * @param mainFrame the parent frame.
* @param imageIcon the image icon to show as default one.
* @param width width of component.
* @param height height of component.
diff --git a/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java b/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java
index 62415b5..ed09959 100644
--- a/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java
+++ b/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java
@@ -11,6 +11,7 @@ import java.awt.event.*;
import java.security.cert.*;
import javax.swing.*;
+import javax.swing.border.*;
import net.java.sip.communicator.service.certificate.*;
import net.java.sip.communicator.util.*;
@@ -51,9 +52,9 @@ class VerifyCertificateDialogImpl
private static final int MAX_MSG_PANE_HEIGHT = 800;
/**
- * The certificate to show.
+ * The certificates to show.
*/
- Certificate cert;
+ Certificate[] certs;
/**
* A text that describes why the verification failed.
@@ -110,8 +111,7 @@ class VerifyCertificateDialogImpl
R.getI18NString("service.gui.CERT_DIALOG_TITLE"));
setModal(true);
- // for now shows only the first certificate from the chain
- this.cert = certs[0];
+ this.certs = certs;
this.message = message;
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
@@ -224,34 +224,11 @@ class VerifyCertificateDialogImpl
return;
}
- certPanel.setLayout(new BorderLayout());
+ certPanel.setLayout(new BorderLayout(5, 5));
+ certPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
certPanel.add(alwaysTrustCheckBox, BorderLayout.NORTH);
- Component certInfoPane = null;
- if(cert instanceof X509Certificate)
- {
- certInfoPane = new X509CertificatePanel((X509Certificate)cert);
- }
- else
- {
- JTextArea textArea = new JTextArea();
- textArea.setOpaque(false);
- textArea.setEditable(false);
- textArea.setText(cert.toString());
- certInfoPane = textArea;
- }
-
- final JScrollPane certScroll = new JScrollPane(certInfoPane);
- certScroll.setPreferredSize(new Dimension(300, 300));
- certPanel.add(certScroll, BorderLayout.CENTER);
-
- SwingUtilities.invokeLater(new Runnable()
- {
- public void run()
- {
- certScroll.getVerticalScrollBar().setValue(0);
- }
- });
+ certPanel.add(new X509CertificatePanel(certs), BorderLayout.CENTER);
certButton.setText(R.getI18NString("service.gui.HIDE_CERT"));
diff --git a/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java b/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java
index 3c6bf33..943a204 100644
--- a/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java
+++ b/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java
@@ -39,9 +39,9 @@ public class ViewCertificateFrame
private static final int MAX_MSG_PANE_HEIGHT = 800;
/**
- * The certificate to show.
+ * The certificates to show.
*/
- Certificate cert;
+ Certificate[] certs;
/**
* A text that describes why the verification failed.
@@ -74,8 +74,7 @@ public class ViewCertificateFrame
setTitle(title != null ? title :
R.getI18NString("service.gui.CERT_DIALOG_TITLE"));
- // for now shows only the first certificate from the chain
- this.cert = certs[0];
+ this.certs = certs;
this.message = message;
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
@@ -123,31 +122,8 @@ public class ViewCertificateFrame
this.getContentPane().add(contentPane, BorderLayout.CENTER);
- Component certInfoPane;
- if(cert instanceof X509Certificate)
- {
- certInfoPane = new X509CertificatePanel((X509Certificate)cert);
- }
- else
- {
- JTextArea textArea = new JTextArea();
- textArea.setOpaque(false);
- textArea.setEditable(false);
- textArea.setText(cert.toString());
- certInfoPane = textArea;
- }
-
- final JScrollPane certScroll = new JScrollPane(certInfoPane);
- certScroll.setPreferredSize(new Dimension(300, 600));
- certPanel.add(certScroll, BorderLayout.CENTER);
-
- SwingUtilities.invokeLater(new Runnable()
- {
- public void run()
- {
- certScroll.getVerticalScrollBar().setValue(0);
- }
- });
+ certPanel.add(new X509CertificatePanel(certs), BorderLayout.CENTER);
+
setPreferredSize(null);
pack();
diff --git a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java
index dde05a4..ff48651 100644
--- a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java
+++ b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java
@@ -9,14 +9,18 @@ package net.java.sip.communicator.plugin.desktoputil;
import java.awt.*;
import java.security.*;
import java.security.cert.*;
+import java.security.cert.Certificate;
import java.security.interfaces.*;
-import java.text.*;
import java.util.*;
import javax.naming.*;
import javax.naming.ldap.*;
import javax.security.auth.x500.*;
import javax.swing.*;
+import javax.swing.border.*;
+import javax.swing.event.*;
+import javax.swing.text.*;
+import javax.swing.tree.*;
import org.jitsi.service.resources.*;
@@ -28,42 +32,171 @@ public class X509CertificatePanel
{
private static final long serialVersionUID = -8368302061995971947L;
+ private final JEditorPane infoTextPane = new JEditorPane();
+
+ private final ResourceManagementService R
+ = DesktopUtilActivator.getResources();
+
/**
- * Constructs a X509 certificate panel.
+ * Constructs a X509 certificate panel from a single certificate.
+ * If a chain is available instead use the second constructor.
+ * This constructor is kept for backwards compatibility and for convenience
+ * when there is only one certificate of interest.
*
* @param certificate <tt>X509Certificate</tt> object
*/
- public X509CertificatePanel(X509Certificate certificate)
+ public X509CertificatePanel(Certificate certificate)
+ {
+ this(new Certificate[]
+ {
+ certificate
+ });
+ }
+
+ /**
+ * Constructs a X509 certificate panel.
+ *
+ * @param certificates <tt>X509Certificate</tt> objects
+ */
+ public X509CertificatePanel(Certificate[] certificates)
{
- ResourceManagementService R = DesktopUtilActivator.getResources();
- DateFormat dateFormatter
- = DateFormat.getDateInstance(DateFormat.MEDIUM);
+ setLayout(new BorderLayout(5, 5));
+
+ // Certificate chain list
+ TransparentPanel topPanel = new TransparentPanel(new BorderLayout());
+ topPanel.add(new JLabel("<html><body><b>"
+ + R.getI18NString("service.gui.CERT_INFO_CHAIN")
+ + "</b></body></html>"), BorderLayout.NORTH);
+
+ DefaultMutableTreeNode top = new DefaultMutableTreeNode();
+ DefaultMutableTreeNode previous = top;
+ for (int i = certificates.length - 1; i >= 0; i--)
+ {
+ Certificate cert = certificates[i];
+ DefaultMutableTreeNode next = new DefaultMutableTreeNode(cert);
+ previous.add(next);
+ previous = next;
+ }
+ JTree tree = new JTree(top);
+ tree.setBorder(new BevelBorder(BevelBorder.LOWERED));
+ tree.setRootVisible(false);
+ tree.setExpandsSelectedPaths(true);
+ tree.getSelectionModel().setSelectionMode(
+ TreeSelectionModel.SINGLE_TREE_SELECTION);
+ tree.setCellRenderer(new DefaultTreeCellRenderer()
+ {
+
+ @Override
+ public Component getTreeCellRendererComponent(JTree tree,
+ Object value, boolean sel, boolean expanded, boolean leaf,
+ int row, boolean hasFocus)
+ {
+ JLabel component = (JLabel) super.getTreeCellRendererComponent(
+ tree, value, sel, expanded, leaf, row, hasFocus);
+ if (value instanceof DefaultMutableTreeNode)
+ {
+ Object o = ((DefaultMutableTreeNode) value).getUserObject();
+ if (o instanceof X509Certificate)
+ {
+ component.setText(
+ getSimplifiedName((X509Certificate) o));
+ }
+ else
+ {
+ // We don't know how to represent this certificate type,
+ // let's use the first 20 characters
+ String text = o.toString();
+ if (text.length() > 20)
+ {
+ text = text.substring(0, 20);
+ }
+ component.setText(text);
+ }
+ }
+ return component;
+ }
+
+ });
+ tree.getSelectionModel().addTreeSelectionListener(
+ new TreeSelectionListener()
+ {
+
+ @Override
+ public void valueChanged(TreeSelectionEvent e)
+ {
+ valueChangedPerformed(e);
+ }
+ });
+ tree.setSelectionPath(new TreePath(((
+ (DefaultTreeModel)tree.getModel()).getPathToRoot(previous))));
+ topPanel.add(tree, BorderLayout.CENTER);
+
+ add(topPanel, BorderLayout.NORTH);
+
+ // Certificate details pane
+ Caret caret = infoTextPane.getCaret();
+ if (caret instanceof DefaultCaret)
+ {
+ ((DefaultCaret) caret).setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
+ }
- Insets valueInsets = new Insets(2,10,0,0);
- Insets titleInsets = new Insets(10,5,0,0);
+ /*
+ * Make JEditorPane respect our default font because we will be using it
+ * to just display text.
+ */
+ infoTextPane.putClientProperty(
+ JEditorPane.HONOR_DISPLAY_PROPERTIES,
+ true);
+
+ infoTextPane.setOpaque(false);
+ infoTextPane.setEditable(false);
+ infoTextPane.setContentType("text/html");
+ infoTextPane.setText(toString(certificates[0]));
+
+ final JScrollPane certScroll = new JScrollPane(infoTextPane);
+ certScroll.setPreferredSize(new Dimension(300, 500));
+ add(certScroll, BorderLayout.CENTER);
+ }
- setLayout(new GridBagLayout());
+ /**
+ * Creates a String representation of the given object.
+ * @param certificate to print
+ * @return the String representation
+ */
+ private String toString(Object certificate)
+ {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("<html><body>\n");
- int currentRow = 0;
+ if (certificate instanceof X509Certificate)
+ {
+ renderX509(sb, (X509Certificate) certificate);
+ }
+ else
+ {
+ sb.append("<pre>\n");
+ sb.append(certificate.toString());
+ sb.append("</pre>\n");
+ }
- GridBagConstraints constraints = new GridBagConstraints();
- constraints.anchor = GridBagConstraints.WEST;
- constraints.fill = GridBagConstraints.HORIZONTAL;
- constraints.insets = new Insets(2,5,0,0);
- constraints.gridx = 0;
- constraints.weightx = 0;
- constraints.weighty = 0;
- constraints.gridy = currentRow++;
+ sb.append("</body></html>");
+ return sb.toString();
+ }
+ /**
+ * Appends an HTML representation of the given X509Certificate.
+ * @param sb StringBuilder to append to
+ * @param certificate to print
+ */
+ private void renderX509(StringBuilder sb, X509Certificate certificate)
+ {
X500Principal issuer = certificate.getIssuerX500Principal();
X500Principal subject = certificate.getSubjectX500Principal();
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_ISSUED_TO")),
- constraints);
+ sb.append("<table cellspacing='1' cellpadding='1'>\n");
// subject
- constraints.insets = valueInsets;
+ addTitle(sb, R.getI18NString("service.gui.CERT_INFO_ISSUED_TO"));
try
{
for(Rdn name : new LdapName(subject.getName()).getRdns())
@@ -75,47 +208,31 @@ public class X509CertificatePanel
if ((lbl == null) || ("!" + lblKey + "!").equals(lbl))
lbl = nameType;
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(lbl), constraints);
-
+ final String value;
Object nameValue = name.getValue();
if (nameValue instanceof byte[])
{
byte[] nameValueAsByteArray = (byte[]) nameValue;
- lbl
+ value
= getHex(nameValueAsByteArray) + " ("
+ new String(nameValueAsByteArray) + ")";
}
else
- lbl = nameValue.toString();
+ value = nameValue.toString();
- constraints.gridx = 1;
- add(new JLabel(lbl), constraints);
+ addField(sb, lbl, value);
}
}
catch (InvalidNameException ine)
{
- constraints.gridy = currentRow++;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_CN")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(subject.getName()),
- constraints);
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_CN"),
+ subject.getName());
}
// issuer
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- constraints.insets = titleInsets;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_ISSUED_BY")),
- constraints);
- constraints.insets = valueInsets;
+ addTitle(sb, R.getI18NString("service.gui.CERT_INFO_ISSUED_BY"));
try
{
for(Rdn name : new LdapName(issuer.getName()).getRdns())
@@ -127,268 +244,133 @@ public class X509CertificatePanel
if ((lbl == null) || ("!" + lblKey + "!").equals(lbl))
lbl = nameType;
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- constraints.gridx = 0;
- add(new JLabel(lbl), constraints);
-
+ final String value;
Object nameValue = name.getValue();
if (nameValue instanceof byte[])
{
byte[] nameValueAsByteArray = (byte[]) nameValue;
- lbl
+ value
= getHex(nameValueAsByteArray) + " ("
+ new String(nameValueAsByteArray) + ")";
}
else
- lbl = nameValue.toString();
+ value = nameValue.toString();
- constraints.gridx = 1;
- add(new JLabel(lbl), constraints);
+ addField(sb, lbl, value);
}
}
catch (InvalidNameException ine)
{
- constraints.gridy = currentRow++;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_CN")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(issuer.getName()),
- constraints);
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_CN"),
+ issuer.getName());
}
// validity
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- constraints.insets = titleInsets;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_VALIDITY")),
- constraints);
- constraints.insets = valueInsets;
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_ISSUED_ON")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(dateFormatter.format(certificate.getNotBefore())),
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_EXPIRES_ON")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(dateFormatter.format(certificate.getNotAfter())),
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- constraints.insets = titleInsets;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_FINGERPRINTS")),
- constraints);
- constraints.insets = valueInsets;
+ addTitle(sb, R.getI18NString("service.gui.CERT_INFO_VALIDITY"));
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_ISSUED_ON"),
+ certificate.getNotBefore().toString());
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_EXPIRES_ON"),
+ certificate.getNotAfter().toString());
+ addTitle(sb, R.getI18NString("service.gui.CERT_INFO_FINGERPRINTS"));
try
{
String sha1String = getThumbprint(certificate, "SHA1");
String md5String = getThumbprint(certificate, "MD5");
- JTextArea sha1Area = new JTextArea(sha1String);
- sha1Area.setLineWrap(false);
- sha1Area.setOpaque(false);
- sha1Area.setWrapStyleWord(true);
- sha1Area.setEditable(false);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel("SHA1:"),
- constraints);
-
- constraints.gridx = 1;
- add(
- sha1Area,
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel("MD5:"),
- constraints);
-
- JTextArea md5Area = new JTextArea(md5String);
- md5Area.setLineWrap(false);
- md5Area.setOpaque(false);
- md5Area.setWrapStyleWord(true);
- md5Area.setEditable(false);
-
- constraints.gridx = 1;
- add(
- md5Area,
- constraints);
+ addField(sb, "SHA1:", sha1String);
+ addField(sb, "MD5:", md5String);
}
- catch (Exception e)
+ catch (CertificateException e)
{
// do nothing as we cannot show this value
}
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- constraints.insets = titleInsets;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_CERT_DETAILS")),
- constraints);
- constraints.insets = valueInsets;
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_SER_NUM")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(certificate.getSerialNumber().toString()),
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_VER")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(String.valueOf(certificate.getVersion())),
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_SIGN_ALG")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(String.valueOf(certificate.getSigAlgName())),
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- constraints.insets = titleInsets;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_PUB_KEY_INFO")),
- constraints);
- constraints.insets = valueInsets;
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_ALG")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(certificate.getPublicKey().getAlgorithm()),
- constraints);
+ addTitle(sb, R.getI18NString("service.gui.CERT_INFO_CERT_DETAILS"));
+
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_SER_NUM"),
+ certificate.getSerialNumber().toString());
+
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_VER"),
+ String.valueOf(certificate.getVersion()));
+
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_SIGN_ALG"),
+ String.valueOf(certificate.getSigAlgName()));
+
+ addTitle(sb, R.getI18NString("service.gui.CERT_INFO_PUB_KEY_INFO"));
+
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_ALG"),
+ certificate.getPublicKey().getAlgorithm());
if(certificate.getPublicKey().getAlgorithm().equals("RSA"))
{
RSAPublicKey key = (RSAPublicKey)certificate.getPublicKey();
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_PUB_KEY")),
- constraints);
-
- JTextArea pubkeyArea = new JTextArea(
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_PUB_KEY"),
R.getI18NString(
"service.gui.CERT_INFO_KEY_BYTES_PRINT",
new String[]{
String.valueOf(key.getModulus().toByteArray().length-1),
key.getModulus().toString(16)
}));
- pubkeyArea.setLineWrap(false);
- pubkeyArea.setOpaque(false);
- pubkeyArea.setWrapStyleWord(true);
- pubkeyArea.setEditable(false);
-
- constraints.gridx = 1;
- add(
- pubkeyArea,
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_EXP")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(key.getPublicExponent().toString()),
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_KEY_SIZE")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(R.getI18NString(
+
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_EXP"),
+ key.getPublicExponent().toString());
+
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_KEY_SIZE"),
+ R.getI18NString(
"service.gui.CERT_INFO_KEY_BITS_PRINT",
new String[]{
- String.valueOf(key.getModulus().bitLength())})),
- constraints);
+ String.valueOf(key.getModulus().bitLength())}));
}
else if(certificate.getPublicKey().getAlgorithm().equals("DSA"))
{
DSAPublicKey key =
(DSAPublicKey)certificate.getPublicKey();
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel("Y:"), constraints);
-
- JTextArea yArea = new JTextArea(key.getY().toString(16));
- yArea.setLineWrap(false);
- yArea.setOpaque(false);
- yArea.setWrapStyleWord(true);
- yArea.setEditable(false);
-
- constraints.gridx = 1;
- add(
- yArea,
- constraints);
+ addField(sb, "Y:", key.getY().toString(16));
}
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_SIGN")),
- constraints);
-
- JTextArea signArea = new JTextArea(
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_SIGN"),
R.getI18NString(
"service.gui.CERT_INFO_KEY_BYTES_PRINT",
new String[]{
String.valueOf(certificate.getSignature().length),
getHex(certificate.getSignature())
}));
- signArea.setLineWrap(false);
- signArea.setOpaque(false);
- signArea.setWrapStyleWord(true);
- signArea.setEditable(false);
-
- constraints.gridx = 1;
- add(
- signArea,
- constraints);
+
+ sb.append("</table>\n");
+ }
+
+ /**
+ * Add a title.
+ *
+ * @param sb StringBuilder to append to
+ * @param title to print
+ */
+ private void addTitle(StringBuilder sb, String title)
+ {
+ sb.append("<tr><td colspan='2'")
+ .append(" style='margin-top: 5pt; white-space: nowrap'><p><b>")
+ .append(title).append("</b></p></td></tr>\n");
+ }
+
+ /**
+ * Add a field.
+ * @param sb StringBuilder to append to
+ * @param field name of the certificate field
+ * @param value to print
+ */
+ private void addField(StringBuilder sb, String field, String value)
+ {
+ sb.append("<tr>")
+ .append("<td style='margin-left: 5pt; margin-right: 25pt;")
+ .append(" white-space: nowrap'>")
+ .append(field).append("</td>")
+ .append("<td>").append(value).append("</td>")
+ .append("</tr>\n");
}
/**
@@ -450,4 +432,62 @@ public class X509CertificatePanel
}
return sb.toString();
}
+
+ /**
+ * Construct a "simplified name" based on the subject DN from the
+ * certificate. The purpose is to have something shorter to display in the
+ * list. The name used is one of the following DN parts, if
+ * available, otherwise the complete DN:
+ * 'CN', 'OU' or else 'O'.
+ * @param cert to read subject DN from
+ * @return the simplified name
+ */
+ private static String getSimplifiedName(X509Certificate cert)
+ {
+ final HashMap<String, String> parts = new HashMap<String, String>();
+ try
+ {
+ for (Rdn name : new LdapName(
+ cert.getSubjectX500Principal().getName()).getRdns())
+ {
+ if (name.getType() != null && name.getValue() != null)
+ {
+ parts.put(name.getType(), name.getValue().toString());
+ }
+ }
+ }
+ catch (InvalidNameException ignored) // NOPMD
+ {
+ }
+
+ String result = parts.get("CN");
+ if (result == null)
+ {
+ result = parts.get("OU");
+ }
+ if (result == null)
+ {
+ result = parts.get("O");
+ }
+ if (result == null)
+ {
+ result = cert.getSubjectX500Principal().getName();
+ }
+ return result;
+ }
+
+ /**
+ * Called when the selection changed in the tree.
+ * Loads the selected certificate.
+ * @param e the event
+ */
+ private void valueChangedPerformed(TreeSelectionEvent e)
+ {
+ Object o = e.getNewLeadSelectionPath().getLastPathComponent();
+ if (o instanceof DefaultMutableTreeNode)
+ {
+ DefaultMutableTreeNode node = (DefaultMutableTreeNode) o;
+ infoTextPane.setText(toString(node.getUserObject()));
+ }
+ }
}
diff --git a/src/net/java/sip/communicator/plugin/desktoputil/presence/GlobalStatusMessageMenu.java b/src/net/java/sip/communicator/plugin/desktoputil/presence/GlobalStatusMessageMenu.java
index 7710157..ab160e7 100644
--- a/src/net/java/sip/communicator/plugin/desktoputil/presence/GlobalStatusMessageMenu.java
+++ b/src/net/java/sip/communicator/plugin/desktoputil/presence/GlobalStatusMessageMenu.java
@@ -127,7 +127,8 @@ public class GlobalStatusMessageMenu
= protocolProvider.getOperationSet(
OperationSetPresence.class);
- if(presenceOpSet == null)
+ if(presenceOpSet == null
+ || !protocolProvider.isRegistered())
continue;
presenceOpSet.publishPresenceStatus(
diff --git a/src/net/java/sip/communicator/plugin/otr/OtrActivator.java b/src/net/java/sip/communicator/plugin/otr/OtrActivator.java
index e69d9cf..6908778 100644
--- a/src/net/java/sip/communicator/plugin/otr/OtrActivator.java
+++ b/src/net/java/sip/communicator/plugin/otr/OtrActivator.java
@@ -428,8 +428,12 @@ public class OtrActivator
// Unregister transformation layer.
// start listening for newly register or removed protocol providers
bundleContext.removeServiceListener(this);
- bundleContext.removeServiceListener(scOtrEngine);
- bundleContext.removeServiceListener(otrContactManager);
+
+ if(scOtrEngine != null)
+ bundleContext.removeServiceListener(scOtrEngine);
+
+ if(otrContactManager != null)
+ bundleContext.removeServiceListener(otrContactManager);
ServiceReference[] protocolProviderRefs;
try
diff --git a/src/net/java/sip/communicator/plugin/otr/OtrConfigurator.java b/src/net/java/sip/communicator/plugin/otr/OtrConfigurator.java
index a4c47e4..e4b91e8 100644
--- a/src/net/java/sip/communicator/plugin/otr/OtrConfigurator.java
+++ b/src/net/java/sip/communicator/plugin/otr/OtrConfigurator.java
@@ -8,7 +8,7 @@ package net.java.sip.communicator.plugin.otr;
import java.util.*;
-import org.bouncycastle.util.encoders.*;
+import org.bouncycastle.util.encoders.Base64; // disambiguation
import org.jitsi.service.configuration.*;
/**
diff --git a/src/net/java/sip/communicator/service/protocol/AccountManager.java b/src/net/java/sip/communicator/service/protocol/AccountManager.java
index 07baed3..6cf7c5b 100644
--- a/src/net/java/sip/communicator/service/protocol/AccountManager.java
+++ b/src/net/java/sip/communicator/service/protocol/AccountManager.java
@@ -11,6 +11,7 @@ import java.util.*;
import net.java.sip.communicator.service.credentialsstorage.*;
import net.java.sip.communicator.service.protocol.event.*;
import net.java.sip.communicator.util.*;
+import net.java.sip.communicator.util.Base64; // disambiguation
import org.jitsi.service.configuration.*;
import org.osgi.framework.*;
diff --git a/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java b/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java
index 1a1d27e..f9344bf 100644
--- a/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java
+++ b/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java
@@ -476,6 +476,13 @@ public class TestMetaContactList
assertEquals("Source meta contact."
, newMetaContact, evt.getSourceMetaContact());
+ MclSlickFixture.mockPresOpSet.createVolatileContact(
+ newSubscriptionName + "1");
+ MclSlickFixture.mockPresOpSet.createVolatileContact(
+ newSubscriptionName + "2");
+ // and now clear volatile
+ MclSlickFixture.mockPresOpSet.removeServerStoredContactGroup(
+ MclSlickFixture.mockPresOpSet.getNonPersistentGroup());
}
diff --git a/test/net/java/sip/communicator/slick/protocol/sip/TestOperationSetServerStoredInfo.java b/test/net/java/sip/communicator/slick/protocol/sip/TestOperationSetServerStoredInfo.java
index f419881..2136f37 100644
--- a/test/net/java/sip/communicator/slick/protocol/sip/TestOperationSetServerStoredInfo.java
+++ b/test/net/java/sip/communicator/slick/protocol/sip/TestOperationSetServerStoredInfo.java
@@ -16,7 +16,7 @@ import net.java.sip.communicator.impl.protocol.sip.*;
import net.java.sip.communicator.impl.protocol.sip.xcap.*;
import net.java.sip.communicator.impl.protocol.sip.xcap.model.prescontent.*;
import net.java.sip.communicator.service.protocol.*;
-import net.java.sip.communicator.util.*;
+import net.java.sip.communicator.util.Base64; // disambiguation
/**
* Testing of the user and account info. Tests for reading, adding, removing,
diff --git a/test/net/java/sip/communicator/slick/slickless/util/TestBase64.java b/test/net/java/sip/communicator/slick/slickless/util/TestBase64.java
index 20d1fa6..7133651 100644
--- a/test/net/java/sip/communicator/slick/slickless/util/TestBase64.java
+++ b/test/net/java/sip/communicator/slick/slickless/util/TestBase64.java
@@ -9,7 +9,7 @@ package net.java.sip.communicator.slick.slickless.util;
import java.util.*;
import junit.framework.*;
-import net.java.sip.communicator.util.*;
+import net.java.sip.communicator.util.Base64; // disambiguation
/**
* Tests the methods of the Base64 class.