Age | Commit message (Collapse) | Author |
|
|
|
|
|
This was removed for refactoring.
|
|
This prevents collisions.
|
|
Was broken because of switch to new RX concept.
|
|
|
|
This helps to avoid duplicated code when new XML elements are described
as custom structs.
|
|
|
|
|
|
|
|
|
|
This uses xml.Decoder.DecodeElement() which makes parsing way easier.
This first step is just able to parse stream features partially.
|
|
The new router will be so trivial that it is not worth a unit test.
|
|
This is more suitable for the new RX concept.
|
|
This was empty and has no benefit.
|
|
This will not be used in the new RX concept.
|
|
The new RX concept will not need such an element buffer and uses the
xml.Decoder.DecodeElement() function instead.
|
|
This was not really necessary because it was all related to the
xmpp.session and should thus be implemented there.
Using the context package further reduced the complexity for
cancelation.
|
|
The encoderDecoder sub-struct of the session struct should be removed in
little steps. This is the first one.
|
|
This is way shorter and serves the same purpose: It reflects the
responsibility of encoding and decoding XML. The encoderDecoder struct
should be removed soon.
|
|
The fact that it is actually about a pair of XML streams is obvious and
not that relevant. A shorter name has a higher priority.
|
|
This required the trick of defining an empty struct as `presence` type
but works pretty well. For sending data EncodeElement instead of token
handling should always work. Since it is simpler it should be used.
|
|
|
|
|
|
Gio started to use releases. LimoX should take advantage of this.
|
|
This fixes a race condition which was discovered during testing with a
bad network connection. Good network connections seem to hide this
error.
|
|
This removes the injected broken code which made the race condition
reproducible.
|
|
To make message passing to the XMPP session channel non-blocking short
living Goroutines are used. Before this commit they were executing
closures which capture l as xengineering.eu/limox.Limox pointer and used
it to get the channel where the message should be passed to.
While channels are safe with respect to race conditions, structs are
not. Thus the member access of the Limox struct was a race condition in
certain side cases like bad network connection where those Goroutines
lived for a longer time.
The solution is to make a copy of the l.sessionIn channel and use this
copy in the closures. This is valid since channels do not need pointers
to them and furthermore are thread safe.
|
|
This should make the race appear reliable if a second connection attempt
is made. It is important to have a reliable error to fix it reliably.
|
|
Logging used to re-encode tokens for receive logging and double-encode
tokens for send logging. This had the flexibility to pretty-print the
XML. Furthermore it was trivial to prepend a prefix like `S: ` and `C: `
for server and client.
This merge moves away from logging based on re-encoding XML tokens.
Instead the received or sent bytes are multiplexed to a logger which
uses the log module of the standard library to log the XML code.
These advantages come with this merge:
- [TX] / [RX] instead of C: / S: as prefixes (direction instead of node)
- encoding issues can be debugged via the log
- everything is now logged via the log module and has timestamps
The only disadvantage is that the logged XML is not pretty-printed
anymore. This is choosen for the RX stream to not accidentally hide
encoding issues and show what is really on the wire. That argument is
true for TX aswell and consistency is appreciated anyway.
|
|
LimoX does not care about these XML tokens at least for now. The issued
error messages on other levels.
Dropping those tokens on the encoderDecoder level asserts that the rest
of the xmpp code has only `clean` XML content to process.
|
|
The prefix has now more visual contrast to the XML content due to its
own bracket style.
Furthermore the indent for the TX stream was disabled. Indent is a nice
thing but it just makes sense if both streams are indented identically.
Since the RX stream received from the current development server has no
indent and also no newlines it is better to turn it of completely.
This might change in the future with structured logging (with the new
slog package) or command line flags to toggle this behaviour.
Re-encoding of the RX stream could also be an option but should stay one
because it alters the RX stream and might hide errors during debugging.
|
|
The prefix is re-implemented with this commit to distinguish between RX
and TX XML. Furthermore the logging is now based on the log module to
have the same (e.g. timestamp) prefix as other log messages.
|
|
This commit uses an io.TeeReader to achieve the same goal for RX like in
the previous commit for TX.
|
|
Using an io.MultiWriter it is trivially possible to write encoded tokens
to the TCP channel aswell as to stdout.
The disadvantage is that it is not possible to inject prefix data like
the so far used `C: ` only for stdout and not for the TCP channel. Such
a prefix is not wanted in the TCP channel and thus not wanted for both.
The solution to get a nice log is to implement a transparent logging
middleware which gets the raw TX stream and inserts a prefix at each
line before sending to stdout.
|
|
The ROADMAP should cover user-visible changes and not internal ones.
|
|
It is not required for a minimal single user chat demo if the user
enters the recipient address manually.
Leaving that out removes a feature from the list of tasks for a minimal
viable product and thus makes the path to the next refactoring / quality
gate shorter.
|
|
This broadcasts that the LimoX client is ready for communication.
|
|
|
|
This completes the connection process.
|
|
This adds some really basic resource binding implementation which will
work for now but has to be improved for a first release.
|
|
|
|
|
|
This handler is just a placeholder for a more extensive IQ handling but
already writes to the log so that it is obvious what is happening.
|
|
This is the first step of resource binding which is a mandatory part of
establishing an XMPP connection.
|
|
This allows to trigger resource binding if the stream supports it.
|
|
The added code provides a structured way to handle features offered by
the server.
|
|
|
|
Writing to the log is still better than doing nothing ...
|
|
The new structure allows to check for different stream features and act
according to them or - if nothing matches - do nothing apart from an
error message to the log.
|