Commit Graph

330 Commits

Author SHA1 Message Date
Aditya Borikar 45f75d5ce0 Remove unrequired assignment of value to connectionEndpoint variable
The current code would work just fine for a connection having
multiple endpoints. However, when there is only one endpoint
ConnectionAttemptState.nextAddress() would return null, since
connectionEndpointIterator has already iterated over the only
possible value in the contructor leading to a NullPointerException.
This means that during establishment of a connection having multiple
endpoints, the first value inside connectionEndpointIterator would
always be overlooked.
2020-07-02 01:59:58 +05:30
Florian Schmaus 63f133e68b Set 'running' to true prior starting the reader/writer threads
To ensure the thread starting the reader/writer threads sees them
running and eventually waits until the 'running' boolean is reset to
'false' upon connection termination.
2020-06-17 21:56:45 +02:00
Florian Schmaus c384849532 Set 'running' to false before calling notifyConnectionError()
Since the current variant of notifyConnectionError() does not execute
most of its work in a new thread, especially since instantShutdown()
is called in the invoking thread, we have to mark the connections
reader or writer threads as no longer running prior them invoking
notifyConnectionError(). Otherwise they will end up waiting for
themselves to terminate.
2020-06-17 21:56:45 +02:00
Florian Schmaus 884ee327e1 Remove writerException in XMPPTCPConnection
This delay mechanism is no longer necessary.
2020-06-17 21:56:45 +02:00
Florian Schmaus a05b464032 Do not use waitForConditionOrConnectionException() in XMPPTCPConnection
Since at this point, there will potentially be an active connection
exception, which would cause the call to return immediately.
2020-06-17 21:56:45 +02:00
Florian Schmaus ddc39030d7 Rename waitForCondition() to waitForConditionOrConnectionException()
To make it clear that this will either return if the condition is
true *or* if a connection exception happened.

Also introduce waitFor(), which is deliberately not named
waitForCondition() because it carries a different semantic.
2020-06-17 21:56:45 +02:00
Florian Schmaus f9292a23fb [tcp] Add and improve log of reader/writer thread termination 2020-06-17 21:56:45 +02:00
Florian Schmaus 018cba7f4f [tcp] Log XmlStringBuilder NPEs and the causing class 2020-06-16 21:44:04 +02:00
Florian Schmaus cf1f533fff [tcp] Mark SM sync points as volatile 2020-06-12 21:16:05 +02:00
Florian Schmaus fd1b49ca8f [tcp] Set sync points before they are used, and not in init() 2020-06-12 18:15:40 +02:00
Florian Schmaus 843c8dd7fe [tcp] Add missing notifyWaitingThreads() after receiving SM <failed/> 2020-06-12 16:35:32 +02:00
Florian Schmaus afbe833a97
Merge pull request #395 from adiaholic/docFix
Correct documentation
2020-06-02 22:07:35 +02:00
Florian Schmaus 7d129d6f6c [tcp] Cleanup handling of stream errors in XMPPTCPConnection
There is no need to notify waiting threads, throwing the stream error
will also notify them. Also settings tlsHandled to true is no longer
necessary.
2020-05-31 19:49:42 +02:00
Florian Schmaus b7465e8200 [tcp] Do not needlessly wait for closing stream tag 2020-05-31 19:49:42 +02:00
Florian Schmaus 84b7adb764 [tcp] Remove javadoc throws annotation
This method does no longer throw.
2020-05-31 19:49:42 +02:00
Florian Schmaus 22baa74298 [tcp] Remove flush() in writer thread
We will flush the stream after the closing stream tag has been written
anyway. No need to do it here.
2020-05-31 19:49:42 +02:00
Florian Schmaus 57961a8cc1 Remove SynchronizationPoint
This continues the design started with e98d42790 ("SmackReactor/NIO,
Java8/Android19, Pretty print XML, FSM connections"), where the
exceptions that caused an operation to fail, are not recorded within
SynchronizationPoint but within the connection instance itself.
2020-05-31 19:48:47 +02:00
Aditya Borikar d639e0bc4c Some more docFix es 2020-05-31 01:10:29 +05:30
Aditya Borikar 223d58527b Use correct class name in docs
XMPPConnectionConfiguration/XMPPTCPConnectionConfiguration
2020-05-28 03:29:37 +05:30
Florian Schmaus f5448c5faa [core] Rework TLS logic
This moves the logic in AbstractXMPPConnection.getSmackTlsContext()
into the ConnectionConfiguration constructor.

Also introduce SslContextFactory and use it in
ConnectionConfiguration.
2020-05-25 15:41:57 +02:00
Florian Schmaus d65f2c932e Bump Error Prone version to 2.3.4 and fix new bug patterns 2020-05-24 21:10:01 +02:00
Florian Schmaus c7c5b10c41 Bump MiniDNS version to 0.4.0-alpha5 2020-05-24 13:11:50 +02:00
Florian Schmaus cac874bdc7 [core] Use UInt16 for ConnectionConfiguration 'port' 2020-05-24 13:08:03 +02:00
Florian Schmaus ebe5c49e92 [checkstyle] Tighten JavadocMethod checkstyle rule 2020-05-23 22:43:29 +02:00
Florian Schmaus ab2d3a2b79 [core] Deprecate AbstractConnectionListener 2020-05-13 22:14:43 +02:00
Florian Schmaus b5f9d4d7a3 Introduce test fixtures
This also removes the powermock dependency. Although powermock is a
fine library, it currently prevents dropping Junit4. And since we only
use the Whitebox API of powermock, this simply replaced powermock's
Whitebox with our own.
2020-04-11 22:05:36 +02:00
Florian Schmaus e2d393d00d tcp: add newline for better readability 2020-04-08 14:31:00 +02:00
Florian Schmaus 51b167c0d4 tcp: do not flush after writing the SM ack
There is no need to flush here, as writePackets() will eventually
flush the data out.
2020-04-08 14:31:00 +02:00
Florian Schmaus bfff412112 tcp: increase unack'ed stanza queue size, decrease ack request limit
To reduce the chances of a deadlock between read and writer if SM
unacked stanza queue is full. See SMACK-881.
2020-04-08 14:31:00 +02:00
Florian Schmaus cc636fff21 Introduce Smack's Modular Connection Architecture
This is a complete redesign of what was previously
XmppNioTcpConnection. The new architecture allows to extend an XMPP
client to server (c2s) connection with new transport bindings and
other extensions.
2020-04-04 13:03:31 +02:00
Florian Schmaus be2fc23f41 proxy: make it the caller's reponsibility to close the socket
This makes the code shorter as there is now a single place where the
socket should be closed.
2020-02-23 19:12:54 +01:00
Florian Schmaus eb4c2c5572 s/occured/occurred/ 2019-10-30 12:02:36 +01:00
Florian Schmaus 5db6191110 Introduce StanzaBuilder
As first step to immutable Stanza types.
2019-10-25 21:41:55 +02:00
Florian Schmaus eeb6c52f7e Move SASL logic into AbstractXMPPConnection
Besides the way the transport handles the stream after SASL
<success/>, the SASL logic is independend from the underlying
transport (BOSH, TCP, …). Hence move it up into
AbstractXMPPConnection.

This also has the benefit that we can make some more methods private
or package-private.

Also introduce XmlStringBuilder.optTextChild(), which causes some
associated changes.
2019-09-25 13:49:21 +02:00
Florian Schmaus b1a5509927 smack-tcp: Split dot to png into two makefile steps
Since using a pipe, as we did previously would not error the target if
the first command in the pipe fails.

It is still far from ideal, since the dot file is also generated if
the gradle command fails. At some point, this should probably become
part of gradle build step instead of shelling out to a Makefile.
2019-09-23 16:12:48 +02:00
Florian Schmaus bd4b91fc26 Introduce AbstractXMPPConnection.outgoingStreamXmlEnvironment 2019-09-23 16:12:48 +02:00
Florian Schmaus 002d060584 XmlStringBuilder: Map all XML serialization to appendXmlTo()
this is now the single place where serializatin happens.
2019-09-23 16:12:48 +02:00
Florian Schmaus 65576cf3c2 Rework XML Element hierarchy and XmlStringBuilder
- Reduce the amount of types that are subtypes of NamedElement. See
javadoc of NamedElement for rationale.
- Work more with XmlEnvironment in XmlStringBuilder.
- Some minor changes to XmlStringBuilder API.
2019-09-07 18:17:08 +02:00
Florian Schmaus 1a3067c89b Enable werror for javadoc and fix javadoc issues 2019-08-30 12:08:30 +02:00
Florian Schmaus 4ca2c7cc69 Enable MissingJavadocPackage and UnnecessaryParentheses checkstyle checks 2019-07-24 09:18:39 +02:00
Florian Schmaus 89b64fbf0c Add TODO comment to XmppNioTcpConnection 2019-07-05 09:17:14 +02:00
Florian Schmaus 60c7e0ab76 Fix typo in XmppNioTcpConnection: s/Therfore/Therefore/ 2019-07-05 09:17:14 +02:00
Florian Schmaus 7e25c3ada5 Merge branch '4.3' 2019-05-16 20:52:27 +02:00
Florian Schmaus 2ceadc0de1 Introduce verificationSuccessful boolean 2019-05-16 16:51:31 +02:00
Florian Schmaus f60e4055ec Use ACE representation of XMPP domain on certificate verification
This is based on the patch provided by Georg Lukas, modified to take
XMPP domain names that can not be represented as DNS names into
account. See c42d2eea24 (r269250137)

Fixes SMACK-870.
2019-05-16 14:14:10 +02:00
Florian Schmaus 68b7eb26f3 Fix PacketWriterTest: Expect also InterruptedException
which is thrown in case the queue was shut down.
2019-05-08 15:19:48 +02:00
Florian Schmaus 7f0dc72dab Update errorprone(-plugin) and make Unused(Variable|Method) an error 2019-05-07 23:09:00 +02:00
Florian Schmaus 575364cc1f Print exception's stacktrace in PacketWriterTest 2019-05-07 21:02:07 +02:00
Florian Schmaus 4133eb175c Replace XPP3 by XmlPullParser interface wrapping StAX and XPP3
Introducing Smack's own XmlPullParser interface which tries to stay as
compatible as possible to XPP3. The interface is used to either wrap
StAX's XMLStreamReader if Smack is used on Java SE, and XPP3's
XmlPullParser if Smack is used on on Android.

Fixes SMACK-591.

Also introduce JUnit 5 and non-strict javadoc projects.
2019-05-06 22:10:50 +02:00
Florian Schmaus b3646abecd XMPPTCPConnection: Move openStream() call from writer into reader thread
and also call notifyConnectionError() on exception thrown by
openStream().

In hindsight I wonder why openStream() was ever called in the writer
thread, as it only caused unnecessary synchronization overhead, as can
be seen by the initialOpenStreamSend synchronization point.
2019-04-30 13:55:55 +02:00