From 1775c691af73821865b177e2ea48b97e94aa7059 Mon Sep 17 00:00:00 2001 From: vanitasvitae Date: Thu, 8 Jun 2017 01:59:38 +0200 Subject: [PATCH] Create JingleTransportManager framework --- .../JingleFileTransferManager.java | 2 +- ...ingleInBandBytestreamTransportManager.java | 29 ++++---- .../JingleInBandBytestreamTransport.java | 3 +- ...ingleSocks5BytestreamTransportManager.java | 49 ++++++++++++- .../JingleSocks5BytestreamTransport.java | 16 +++++ ...gleSocks5BytestreamTransportCandidate.java | 20 +++++- ...ocks5BytestreamTransportCandidateUsed.java | 8 --- .../JingleSocks5BytestreamTransportInfo.java | 24 +++++-- ...ngleSocks5BytestreamTransportProvider.java | 16 +++++ .../JingleInBandByteStreamTransportTest.java | 3 +- .../JingleSocks5BytestreamTransportTest.java | 16 +++++ ...AbstractJingleContentTransportManager.java | 47 +++++++++++++ .../JingleContentProviderManager.java | 5 +- .../smackx/jingle/JingleManager.java | 2 - .../smackx/jingle/JingleTransportManager.java | 68 +++++++++++++++++++ .../element/JingleContentTransportInfo.java | 16 +++++ .../UnsupportedJingleTransportException.java} | 16 ++--- .../smackx/jingle/exception/package-info.java | 22 ++++++ .../jingle/provider/JingleProvider.java | 1 + 19 files changed, 315 insertions(+), 48 deletions(-) delete mode 100644 smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportCandidateUsed.java create mode 100644 smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/AbstractJingleContentTransportManager.java rename smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/{provider => }/JingleContentProviderManager.java (90%) create mode 100644 smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleTransportManager.java rename smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/{JingleContentTransportManager.java => exception/UnsupportedJingleTransportException.java} (61%) create mode 100644 smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/exception/package-info.java diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/JingleFileTransferManager.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/JingleFileTransferManager.java index 9c8990520..3bd2d863d 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/JingleFileTransferManager.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/JingleFileTransferManager.java @@ -37,7 +37,7 @@ import org.jivesoftware.smackx.jingle.JingleManager; import org.jivesoftware.smackx.jingle.element.Jingle; import org.jivesoftware.smackx.jingle.element.JingleContent; import org.jivesoftware.smackx.jingle.element.JingleContentDescriptionChildElement; -import org.jivesoftware.smackx.jingle.provider.JingleContentProviderManager; +import org.jivesoftware.smackx.jingle.JingleContentProviderManager; import org.jivesoftware.smackx.jingle_filetransfer.callback.IncomingJingleFileTransferCallback; import org.jivesoftware.smackx.jingle_filetransfer.element.JingleFileTransferChildElement; import org.jivesoftware.smackx.jingle_filetransfer.element.JingleFileTransferContentDescription; diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_ibb/JingleInBandBytestreamTransportManager.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_ibb/JingleInBandBytestreamTransportManager.java index e8f79364b..2ee4232ae 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_ibb/JingleInBandBytestreamTransportManager.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_ibb/JingleInBandBytestreamTransportManager.java @@ -22,30 +22,27 @@ import java.util.WeakHashMap; import java.util.logging.Level; import java.util.logging.Logger; -import org.jivesoftware.smack.Manager; import org.jivesoftware.smack.SmackException; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; -import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamListener; import org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamManager; import org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamRequest; import org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamSession; -import org.jivesoftware.smackx.disco.ServiceDiscoveryManager; -import org.jivesoftware.smackx.jingle.JingleContentTransportManager; +import org.jivesoftware.smackx.jingle.AbstractJingleContentTransportManager; import org.jivesoftware.smackx.jingle.JingleInputStream; import org.jivesoftware.smackx.jingle.JingleTransportInputStreamCallback; import org.jivesoftware.smackx.jingle.element.Jingle; import org.jivesoftware.smackx.jingle.element.JingleContent; import org.jivesoftware.smackx.jingle.element.JingleContentTransport; -import org.jivesoftware.smackx.jingle.provider.JingleContentProviderManager; +import org.jivesoftware.smackx.jingle.provider.JingleContentTransportProvider; import org.jivesoftware.smackx.jingle_ibb.element.JingleInBandBytestreamTransport; import org.jivesoftware.smackx.jingle_ibb.provider.JingleInBandByteStreamTransportProvider; /** * Manager for Jingle In-Band-Bytestreams. */ -public final class JingleInBandBytestreamTransportManager extends Manager implements JingleContentTransportManager { +public final class JingleInBandBytestreamTransportManager extends AbstractJingleContentTransportManager { private static final Logger LOGGER = Logger.getLogger(JingleInBandBytestreamTransportManager.class.getName()); public static final String NAMESPACE_V1 = "urn:xmpp:jingle:transports:ibb:1"; @@ -54,8 +51,11 @@ public final class JingleInBandBytestreamTransportManager extends Manager implem private JingleInBandBytestreamTransportManager(XMPPConnection connection) { super(connection); - JingleContentProviderManager.addJingleContentTransportProvider(NAMESPACE_V1, new JingleInBandByteStreamTransportProvider()); - ServiceDiscoveryManager.getInstanceFor(connection).addFeature(NAMESPACE_V1); + } + + @Override + protected JingleContentTransportProvider createJingleContentTransportProvider() { + return new JingleInBandByteStreamTransportProvider(); } public static JingleInBandBytestreamTransportManager getInstanceFor(XMPPConnection connection) { @@ -67,6 +67,11 @@ public final class JingleInBandBytestreamTransportManager extends Manager implem return manager; } + @Override + public String getNamespace() { + return NAMESPACE_V1; + } + @Override public void acceptInputStream(final Jingle jingle, final JingleTransportInputStreamCallback callback) { final int blockSize = ((JingleInBandBytestreamTransport) @@ -117,12 +122,4 @@ public final class JingleInBandBytestreamTransportManager extends Manager implem return ibs.getOutputStream(); } - - /** - * Generate a random session id. - * @return - */ - public static String generateSessionId() { - return StringUtils.randomString(24); - } } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_ibb/element/JingleInBandBytestreamTransport.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_ibb/element/JingleInBandBytestreamTransport.java index 3bf6ff779..1fd0c498f 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_ibb/element/JingleInBandBytestreamTransport.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_ibb/element/JingleInBandBytestreamTransport.java @@ -17,6 +17,7 @@ package org.jivesoftware.smackx.jingle_ibb.element; import org.jivesoftware.smack.util.XmlStringBuilder; +import org.jivesoftware.smackx.jingle.JingleTransportManager; import org.jivesoftware.smackx.jingle.element.JingleContentTransport; import org.jivesoftware.smackx.jingle_ibb.JingleInBandBytestreamTransportManager; @@ -37,7 +38,7 @@ public class JingleInBandBytestreamTransport extends JingleContentTransport { } public JingleInBandBytestreamTransport(short blockSize) { - this(blockSize, JingleInBandBytestreamTransportManager.generateSessionId()); + this(blockSize, JingleTransportManager.generateSessionId()); } public JingleInBandBytestreamTransport(short blockSize, String sid) { diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/JingleSocks5BytestreamTransportManager.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/JingleSocks5BytestreamTransportManager.java index efafe5e70..8014a1752 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/JingleSocks5BytestreamTransportManager.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/JingleSocks5BytestreamTransportManager.java @@ -1,14 +1,57 @@ +/** + * + * Copyright 2017 Paul Schaub + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.jivesoftware.smackx.jingle_s5b; -import org.jivesoftware.smack.Manager; +import java.io.OutputStream; + import org.jivesoftware.smack.XMPPConnection; +import org.jivesoftware.smackx.jingle.AbstractJingleContentTransportManager; +import org.jivesoftware.smackx.jingle.JingleTransportInputStreamCallback; +import org.jivesoftware.smackx.jingle.element.Jingle; +import org.jivesoftware.smackx.jingle.provider.JingleContentTransportProvider; +import org.jivesoftware.smackx.jingle_s5b.elements.JingleSocks5BytestreamTransport; +import org.jivesoftware.smackx.jingle_s5b.provider.JingleSocks5BytestreamTransportProvider; /** - * Created by vanitas on 07.06.17. + * Manager for JingleSocks5BytestreamTransports. */ -public class JingleSocks5BytestreamTransportManager extends Manager { +public final class JingleSocks5BytestreamTransportManager extends AbstractJingleContentTransportManager { private JingleSocks5BytestreamTransportManager(XMPPConnection connection) { super(connection); } + + @Override + protected JingleContentTransportProvider createJingleContentTransportProvider() { + return new JingleSocks5BytestreamTransportProvider(); + } + + @Override + public String getNamespace() { + return JingleSocks5BytestreamTransport.NAMESPACE_V1; + } + + @Override + public void acceptInputStream(Jingle jingle, JingleTransportInputStreamCallback callback) { + + } + + @Override + public OutputStream createOutputStream(Jingle jingle) { + return null; + } } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransport.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransport.java index 44c856ecc..ff08decf3 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransport.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransport.java @@ -1,3 +1,19 @@ +/** + * + * Copyright 2017 Paul Schaub + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.jivesoftware.smackx.jingle_s5b.elements; import java.util.ArrayList; diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportCandidate.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportCandidate.java index b84ac38ad..a0b76112b 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportCandidate.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportCandidate.java @@ -1,3 +1,19 @@ +/** + * + * Copyright 2017 Paul Schaub + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.jivesoftware.smackx.jingle_s5b.elements; import java.util.logging.Logger; @@ -12,7 +28,7 @@ import org.jxmpp.stringprep.XmppStringprepException; /** * TransportCandidate for Jingle Socks5Bytestream transports. */ -public class JingleSocks5BytestreamTransportCandidate extends JingleContentTransportCandidate { +public final class JingleSocks5BytestreamTransportCandidate extends JingleContentTransportCandidate { private static final Logger LOGGER = Logger.getLogger(JingleSocks5BytestreamTransportCandidate.class.getName()); @@ -111,7 +127,7 @@ public class JingleSocks5BytestreamTransportCandidate extends JingleContentTrans return new Builder(); } - public static class Builder { + public static final class Builder { private String cid; private String host; private Jid jid; diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportCandidateUsed.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportCandidateUsed.java deleted file mode 100644 index 467c33f67..000000000 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportCandidateUsed.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.jivesoftware.smackx.jingle_s5b.elements; - -import org.jivesoftware.smack.util.XmlStringBuilder; -import org.jivesoftware.smackx.jingle.element.JingleContentTransportCandidate; - -/** - * Created by vanitas on 07.06.17. - */ diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportInfo.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportInfo.java index e3c2e6080..bf05f9b23 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportInfo.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportInfo.java @@ -1,3 +1,19 @@ +/** + * + * Copyright 2017 Paul Schaub + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.jivesoftware.smackx.jingle_s5b.elements; import org.jivesoftware.smack.util.XmlStringBuilder; @@ -33,7 +49,7 @@ public abstract class JingleSocks5BytestreamTransportInfo extends JingleContentT return PEI; } - public static class CandidateActivated extends JingleSocks5BytestreamTransportInfo { + public static final class CandidateActivated extends JingleSocks5BytestreamTransportInfo { public static final String ELEMENT = "candidate-activated"; public static final String ATTR_CID = "cid"; @@ -73,7 +89,7 @@ public abstract class JingleSocks5BytestreamTransportInfo extends JingleContentT } } - public static class CandidateUsed extends JingleSocks5BytestreamTransportInfo { + public static final class CandidateUsed extends JingleSocks5BytestreamTransportInfo { public static final String ELEMENT = "candidate-used"; public static final String ATTR_CID = "cid"; @@ -113,7 +129,7 @@ public abstract class JingleSocks5BytestreamTransportInfo extends JingleContentT } } - public static class CandidateError extends JingleSocks5BytestreamTransportInfo { + public static final class CandidateError extends JingleSocks5BytestreamTransportInfo { public static final String ELEMENT = "candidate-error"; private CandidateError() { @@ -144,7 +160,7 @@ public abstract class JingleSocks5BytestreamTransportInfo extends JingleContentT } } - public static class ProxyError extends JingleSocks5BytestreamTransportInfo { + public static final class ProxyError extends JingleSocks5BytestreamTransportInfo { public static final String ELEMENT = "proxy-error"; private ProxyError() { diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/provider/JingleSocks5BytestreamTransportProvider.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/provider/JingleSocks5BytestreamTransportProvider.java index 4575bbdc8..a6bb64e2e 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/provider/JingleSocks5BytestreamTransportProvider.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/provider/JingleSocks5BytestreamTransportProvider.java @@ -1,3 +1,19 @@ +/** + * + * Copyright 2017 Paul Schaub + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.jivesoftware.smackx.jingle_s5b.provider; import static org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream.Mode.tcp; diff --git a/smack-experimental/src/test/java/org/jivesoftware/smackx/jingle_ibb/JingleInBandByteStreamTransportTest.java b/smack-experimental/src/test/java/org/jivesoftware/smackx/jingle_ibb/JingleInBandByteStreamTransportTest.java index 1ebbaf12b..0c11386b8 100644 --- a/smack-experimental/src/test/java/org/jivesoftware/smackx/jingle_ibb/JingleInBandByteStreamTransportTest.java +++ b/smack-experimental/src/test/java/org/jivesoftware/smackx/jingle_ibb/JingleInBandByteStreamTransportTest.java @@ -23,6 +23,7 @@ import static junit.framework.TestCase.assertTrue; import org.jivesoftware.smack.test.util.SmackTestSuite; import org.jivesoftware.smack.test.util.TestUtils; +import org.jivesoftware.smackx.jingle.JingleTransportManager; import org.jivesoftware.smackx.jingle_ibb.element.JingleInBandBytestreamTransport; import org.jivesoftware.smackx.jingle_ibb.provider.JingleInBandByteStreamTransportProvider; import org.junit.Test; @@ -34,7 +35,7 @@ public class JingleInBandByteStreamTransportTest extends SmackTestSuite { @Test public void parserTest() throws Exception { - String sid = JingleInBandBytestreamTransportManager.generateSessionId(); + String sid = JingleTransportManager.generateSessionId(); short size = 8192; String xml = ""; diff --git a/smack-experimental/src/test/java/org/jivesoftware/smackx/jingle_s5b/JingleSocks5BytestreamTransportTest.java b/smack-experimental/src/test/java/org/jivesoftware/smackx/jingle_s5b/JingleSocks5BytestreamTransportTest.java index 6d919fd8c..730844471 100644 --- a/smack-experimental/src/test/java/org/jivesoftware/smackx/jingle_s5b/JingleSocks5BytestreamTransportTest.java +++ b/smack-experimental/src/test/java/org/jivesoftware/smackx/jingle_s5b/JingleSocks5BytestreamTransportTest.java @@ -1,3 +1,19 @@ +/** + * + * Copyright 2017 Paul Schaub + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.jivesoftware.smackx.jingle_s5b; import static junit.framework.TestCase.assertNull; diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/AbstractJingleContentTransportManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/AbstractJingleContentTransportManager.java new file mode 100644 index 000000000..57ac4a735 --- /dev/null +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/AbstractJingleContentTransportManager.java @@ -0,0 +1,47 @@ +/** + * + * Copyright 2017 Paul Schaub + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jivesoftware.smackx.jingle; + +import java.io.OutputStream; + +import org.jivesoftware.smack.Manager; +import org.jivesoftware.smack.XMPPConnection; +import org.jivesoftware.smackx.disco.ServiceDiscoveryManager; +import org.jivesoftware.smackx.jingle.element.Jingle; +import org.jivesoftware.smackx.jingle.element.JingleContentTransport; +import org.jivesoftware.smackx.jingle.provider.JingleContentTransportProvider; + +/** + * Interface with methods that JingleContentTransportManagers must implement. + */ +public abstract class AbstractJingleContentTransportManager extends Manager { + + public AbstractJingleContentTransportManager(XMPPConnection connection) { + super(connection); + JingleTransportManager.getInstanceFor(connection).registerJingleContentTransportManager(this); + JingleContentProviderManager.addJingleContentTransportProvider(getNamespace(), createJingleContentTransportProvider()); + ServiceDiscoveryManager.getInstanceFor(connection).addFeature(getNamespace()); + } + + protected abstract JingleContentTransportProvider createJingleContentTransportProvider(); + + public abstract String getNamespace(); + + public abstract void acceptInputStream(Jingle jingle, JingleTransportInputStreamCallback callback); + + public abstract OutputStream createOutputStream(Jingle jingle); +} diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/provider/JingleContentProviderManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleContentProviderManager.java similarity index 90% rename from smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/provider/JingleContentProviderManager.java rename to smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleContentProviderManager.java index 2144d1d01..7d1d0de85 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/provider/JingleContentProviderManager.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleContentProviderManager.java @@ -14,11 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jivesoftware.smackx.jingle.provider; +package org.jivesoftware.smackx.jingle; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import org.jivesoftware.smackx.jingle.provider.JingleContentDescriptionProvider; +import org.jivesoftware.smackx.jingle.provider.JingleContentTransportProvider; + public class JingleContentProviderManager { private static final Map> jingleContentDescriptionProviders = new ConcurrentHashMap<>(); diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleManager.java index 1fccadf27..0a63dd66b 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleManager.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleManager.java @@ -17,7 +17,6 @@ package org.jivesoftware.smackx.jingle; import java.util.Collections; -import java.util.HashMap; import java.util.Map; import java.util.WeakHashMap; import java.util.concurrent.ConcurrentHashMap; @@ -56,7 +55,6 @@ public final class JingleManager extends Manager { private final Map descriptionHandlers = new ConcurrentHashMap<>(); private final Map jingleSessions = new ConcurrentHashMap<>(); - private final Map transportManagers = new HashMap<>(); private JingleManager(final XMPPConnection connection) { super(connection); diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleTransportManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleTransportManager.java new file mode 100644 index 000000000..5c8ef365d --- /dev/null +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleTransportManager.java @@ -0,0 +1,68 @@ +/** + * + * Copyright 2017 Paul Schaub + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jivesoftware.smackx.jingle; + +import java.util.HashMap; +import java.util.WeakHashMap; + +import org.jivesoftware.smack.Manager; +import org.jivesoftware.smack.XMPPConnection; +import org.jivesoftware.smack.util.StringUtils; +import org.jivesoftware.smackx.jingle.exception.UnsupportedJingleTransportException; + +/** + * Manager for JingleContentTransportManagers. + */ +public final class JingleTransportManager extends Manager { + + public static final WeakHashMap INSTANCES = new WeakHashMap<>(); + + private final HashMap> contentTransportManagers = new HashMap<>(); + + private JingleTransportManager(XMPPConnection connection) { + super(connection); + } + + public static JingleTransportManager getInstanceFor(XMPPConnection connection) { + JingleTransportManager manager = INSTANCES.get(connection); + if (manager == null) { + manager = new JingleTransportManager(connection); + INSTANCES.put(connection, manager); + } + return manager; + } + + public AbstractJingleContentTransportManager getJingleContentTransportManager(String namespace) throws UnsupportedJingleTransportException { + AbstractJingleContentTransportManager manager = contentTransportManagers.get(namespace); + if (manager == null) { + throw new UnsupportedJingleTransportException("Cannot find registered JingleContentTransportManager for " + namespace); + } + return manager; + } + + public void registerJingleContentTransportManager(AbstractJingleContentTransportManager manager) { + contentTransportManagers.put(manager.getNamespace(), manager); + } + + public void unregisterJingleContentTransportManager(AbstractJingleContentTransportManager manager) { + contentTransportManagers.remove(manager.getNamespace()); + } + + public static String generateSessionId() { + return StringUtils.randomString(24); + } +} diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransportInfo.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransportInfo.java index d1e5f365c..6e1680046 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransportInfo.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransportInfo.java @@ -1,3 +1,19 @@ +/** + * + * Copyright 2017 Paul Schaub + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.jivesoftware.smackx.jingle.element; import org.jivesoftware.smack.packet.NamedElement; diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleContentTransportManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/exception/UnsupportedJingleTransportException.java similarity index 61% rename from smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleContentTransportManager.java rename to smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/exception/UnsupportedJingleTransportException.java index 80236f63d..fa1b74380 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleContentTransportManager.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/exception/UnsupportedJingleTransportException.java @@ -14,18 +14,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jivesoftware.smackx.jingle; - -import java.io.OutputStream; - -import org.jivesoftware.smackx.jingle.element.Jingle; +package org.jivesoftware.smackx.jingle.exception; /** - * Interface with methods that JingleContentTransportManagers must implement. + * Exception gets thrown when we miss a JingleContentTransportManager for a certain transport namespace. */ -public interface JingleContentTransportManager { +public class UnsupportedJingleTransportException extends Exception { - void acceptInputStream(Jingle jingle, JingleTransportInputStreamCallback callback); + private static final long serialVersionUID = 1L; - OutputStream createOutputStream(Jingle jingle); + public UnsupportedJingleTransportException(String message) { + super(message); + } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/exception/package-info.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/exception/package-info.java new file mode 100644 index 000000000..756d14837 --- /dev/null +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/exception/package-info.java @@ -0,0 +1,22 @@ +/** + * + * Copyright 2017 Florian Schmaus + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Stanzas and Extension Elements for XEP-0166: Jingle. + * Exceptions. + */ +package org.jivesoftware.smackx.jingle.exception; diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/provider/JingleProvider.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/provider/JingleProvider.java index f00ebfc0b..722a55786 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/provider/JingleProvider.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/provider/JingleProvider.java @@ -20,6 +20,7 @@ import java.util.logging.Logger; import org.jivesoftware.smack.provider.IQProvider; import org.jivesoftware.smack.util.ParserUtils; +import org.jivesoftware.smackx.jingle.JingleContentProviderManager; import org.jivesoftware.smackx.jingle.element.Jingle; import org.jivesoftware.smackx.jingle.element.JingleAction; import org.jivesoftware.smackx.jingle.element.JingleContent;