Commit Graph

390 Commits (1822089db65677c9b7cc418bae66b5b5afcee31d)
 

Author SHA1 Message Date
remicorniere 1822089db6 Tests for Component and code style fixes (#129)
* Tests for Component and code style fixes
5 years ago
remicorniere 7d89353156 Fix SIGSEGV in xmpp_component (#126)
* SIGSEGV in xmpp_component example with Prosody #126
5 years ago
Mickael Remond 6aa1e668ee
Fix issues after refactor
Relates to #126
5 years ago
Mickael Remond 47976624c9
Preparing v0.2.0 Changelog before version release 5 years ago
Mickael Remond 4efde692a2
Add placeholder in README for routing packets and get IQ responses 5 years ago
Mickael Remond 08878ed4a2
Update go.sum file 5 years ago
Mickael Remond ce05c3226c
Fix failing tests 5 years ago
Mickael Remond 3e94880916
Merge branch 'master' of https://github.com/FluuxIO/go-xmpp 5 years ago
Wichert Akkerman eda5c23c54 Add SendIQ to StreamClient and Sender
This makes it possible to use SendIQ from PostConnect and route handlers.
5 years ago
Wichert Akkerman a0e74051fd Use a channel based API for SendIQ
This makes sending IQ more idiomatic Go, but more importantly it solves
a problem with contexts that were not being cancelled correctly with
the previous API.

As a side-effect of this change `Route.route` must now be invoked in a
go-routine to prevent deadlocks. This also allows for stanzas to be processed
in parallel, which can result in a nice performance win.
5 years ago
Wichert Akkerman 83bc8581fd Cleanup the IQ result route API
Simplify the API in several ways:

- provide the context to the IQ result handler, making it possible to pass in
  extra context and handle timeouts within the handler.
- pass the stanza in as an IQ type, removing the need to always type-cast it
  in the handler
- remove Router.HandleIqResult and Router.HandleFuncIqResult. Since the router
  is private to Client nobody would ever use these, and they do not really make
  things simpler anyway.
5 years ago
Wichert Akkerman 8088e3fa7e Add Client.SendIQ method 5 years ago
Wichert Akkerman 070934743f Add tests for iq result routes 5 years ago
Wichert Akkerman 6a25856e85 We need to lock isResultRoutes
The map is updated from multiple goroutines, so it needs to be locked.
5 years ago
Wichert Akkerman 8e1dac6ffa Add IQ result routes to the Router
These are used to quickly match IQ result stanzas and invoke a handler
for them. IQ result routes take precendence of normal routes.
5 years ago
Wichert Akkerman 21f6a549db Always add an id to IQ queries 5 years ago
Mickael Remond 1d7db9ceee
Comments clean-up 5 years ago
Wichert Akkerman 0227596f90 Increase size of XML decoder internal buffers
Since a transport (and a streamlogger) does not implement io.ByteReader
xml.Decoder wraps it using `bufio.NewReader(transport)` so it can easily read
bytes one at a time. This has the unfortuante effect of resulting in a panic if
we try to parse a stanza that is larger than the default buffer size of 4096
bytes.

To fix this we wrap the transport using `bufio.NewReaderSize()` with a much
larger buffer size.
5 years ago
Mickael Remond ebb6e845bf
Update requirements to go1.13 as required by new websockets dependencies 5 years ago
Mickael Remond a16483397d
Update test platform to go1.13 5 years ago
Mickael Remond ef2c0b465e
Update examples 5 years ago
Wichert Akkerman 2f8ec7b36f Only try startTls if the connection is not secure 5 years ago
Wichert Akkerman 6da1962962 Correctly open new streams after StartTLS and auth 5 years ago
Wichert Akkerman 33446ad0ba Create a new stream after StartTLS 5 years ago
Wichert Akkerman 390f9b065e Replace readWriter and decoder after StartTLS 5 years ago
Wichert Akkerman 60e2cdd088 Close the transport if NewSession fails
The makes sure we always send the `</stream:stream>` or `<close/>` correctly.
5 years ago
Wichert Akkerman a6709a1f71 Do not try to create a stream logger before we have a net.Conn 5 years ago
Wichert Akkerman 38bdcaec36 Do not copy more bytes than were read 5 years ago
Wichert Akkerman ffadd331dd Add a go function to always read websockets
Websocket need to have a Reader running at all times in order to
allow Ping to work (because a Reader is the only thing that will
correctly handle control frames). To faciliate this a go function
is introduced that will always read from the websocket until it
is cancelled. Read data is passed to the transport via a channel.
5 years ago
Wichert Akkerman 92329b48e6 Transports need to handle open/close stanzas
XMPP and WebSocket transports require different open and close stanzas. To
handle this the responsibility handling those and creating the XML decoder is
moved to the Transport.
5 years ago
Wichert Akkerman 25fd476328 Negotiate xmpp websocket subprotocol 5 years ago
Wichert Akkerman 36e153f981 Allow transports to define their own ping mechanism 5 years ago
Wichert Akkerman d0f2b492ac Fix XMPP TLS config 5 years ago
Wichert Akkerman 87ff01ac68 Fix websocket connect timeout 5 years ago
Wichert Akkerman 01d78a1e5c Fix error result from Transport.Connect errors 5 years ago
Wichert Akkerman 8fb3e33a1f Only do ensurePort for XMPP transport
If we always do this the address gets mangled, breaking the transport
selection.
5 years ago
Wichert Akkerman a189748b9c Fix test for ws connection 5 years ago
Wichert Akkerman 06a76160c8 Use transport factory function 5 years ago
Wichert Akkerman 8db608ccc1 Add IsSecure() to Transport 5 years ago
Wichert Akkerman 7fa4b06705 Move address into transport config
This makes it possible to use a factory function to create a transport of the right type and not having to repeat the address when calling Transport.Connect()
5 years ago
Wichert Akkerman f8d0e99696 Move XMPP transport to separate file 5 years ago
Wichert Akkerman e97d290e2b Use Transport in Component 5 years ago
Wichert Akkerman 96fccbd399 Split out TransportConfiguration
This allows using the same transport configuration from both clients and components.
5 years ago
Wichert Akkerman 66e219844b Add a websocket transport 5 years ago
Wichert Akkerman a3c62e515e Introduce Transport interface 5 years ago
Mickael Remond 2781563ea7 Update go.sum file 5 years ago
Mickael Remond 4f68c5eee2 Add X-OAUTH2 authentication and example 5 years ago
Mickael Remond 9c8353d081 Introduce Credential structure to define auth type
For now we are planning to support Password and OAuthToken.
In the future, we would like to add certificate-based authentication.
5 years ago
Mickael Remond 3b66e31888 We do not need the Content to be innerxml. cdata is enough.
Fixes #110
5 years ago
Mickael Remond 005c8823d9 Fixes issue with unescaped character %
Fixes #113
5 years ago