[jitsi-dev] Today's enhancements for IRC protocol support


#1

Hi all,

TL;DR: New IRC stuff. Go play with upcoming nightly!

So here's another update on IRC protocol-support development. I've just
pushed a few new features into the nightly. It has taken a lot longer
than planned, but here it is.

New features:
* Custom SocketChannel implementation (Java does not have SocketChannels
with proxy support ...) in order to support SOCKS proxy in SocketChannel
connections.
* Proxy-support for IRC, consisting of the use of Global Proxy settings
from Jitsi and an option (configurable per IRC account) to let DNS names
be resolved through the SOCKS proxy instead of by DNS server configured
on your computer.
* Improved client-side error handling, by which I mean errors that
signal bad connection that occur in irc-api - instead of on the IRC
server. This consists of 2 parts:
  1. Better implementation/use of available error handling,
  2. Improved client-side error propagation in irc-api library. (Main
motivator was the ease with which you can interrupt your connection if
you kill your proxy server :wink:
* Decent start with support for IRCv3 features. This is implemented in a
number of parts:
  1. Improved irc-api client to accept a parameter that is a
"negotiator". The negotiator knows how to do IRCv3 specified Capability
Negotiation in order to ask for additional features.
  2. A number of negotiators, 1 "noop" negotiator that only signals the
IRC that we understand IRCv3 but does not negotiate for any IRCv3
features, and 1 that is capable of negotiating the SASL capability as
well as doing the actual SASL authentication before continuing server
registration.
  3. A "Composite" negotiator which can combine a few Capabilities,
negotiate for all of them and if necessary give conversation time with
the IRC server to a Capability that needs this. An example of this is
the SASL capability, which needs to do the actual authentication.
  4. Note that currently Jitsi only supports the following:
  -- If SASL authentication is needed: SASL negotiation, or
  -- If SASL authentication is not needed: Immediately finish
negotiation (NOOP).
  This does however open up possibilities with more advanced IRC
features, such as away-notifications and account-notifications. As soon
as these are implemented, we can negotiate to enable these such that the
IRC server will be able to provide more updates for events at the moment
that they happen.
* Some GUI improvements to IRC account registration wizard, including UI
for new options: SASL authentication and DNS resolving through SOCKS
proxy. (And some consistency ...)
* A number of improvements to the IRC client library. I'm still working
on getting these changes upstream. In the mean time this can function as
a test for the improvements themselves. (Please note that the irc-api
sources have recently moved to https://github.com/migzai/irc-api, as
they were on code.google.com before.)

In case you missed it. Recently, after the latest bug fix release was
finalized, IRC contact presence support was merged into nightly, which
means that you can now add IRC contacts and get availability updates for
these contacts as you would with other IM protocols. This includes
real-time updates if your favorite IRC server supports MONITOR/WATCH
lists. The lists are used transparently with a polling mechanism as
fall-back once the list limit is reached.

There are a number of features that are still quite fresh, so any
feedback, bug reports, error logs with stack traces, is/are welcome!

Kind regards,
Danny


#2

Wow! That's quite a batch!

Thanks for the hard work Danny! Looking forward to trying them all!

···

On Friday, April 3, 2015, Danny van Heumen <danny@dannyvanheumen.nl> wrote:

Hi all,

TL;DR: New IRC stuff. Go play with upcoming nightly!

So here's another update on IRC protocol-support development. I've just
pushed a few new features into the nightly. It has taken a lot longer
than planned, but here it is.

New features:
* Custom SocketChannel implementation (Java does not have SocketChannels
with proxy support ...) in order to support SOCKS proxy in SocketChannel
connections.
* Proxy-support for IRC, consisting of the use of Global Proxy settings
from Jitsi and an option (configurable per IRC account) to let DNS names
be resolved through the SOCKS proxy instead of by DNS server configured
on your computer.
* Improved client-side error handling, by which I mean errors that
signal bad connection that occur in irc-api - instead of on the IRC
server. This consists of 2 parts:
  1. Better implementation/use of available error handling,
  2. Improved client-side error propagation in irc-api library. (Main
motivator was the ease with which you can interrupt your connection if
you kill your proxy server :wink:
* Decent start with support for IRCv3 features. This is implemented in a
number of parts:
  1. Improved irc-api client to accept a parameter that is a
"negotiator". The negotiator knows how to do IRCv3 specified Capability
Negotiation in order to ask for additional features.
  2. A number of negotiators, 1 "noop" negotiator that only signals the
IRC that we understand IRCv3 but does not negotiate for any IRCv3
features, and 1 that is capable of negotiating the SASL capability as
well as doing the actual SASL authentication before continuing server
registration.
  3. A "Composite" negotiator which can combine a few Capabilities,
negotiate for all of them and if necessary give conversation time with
the IRC server to a Capability that needs this. An example of this is
the SASL capability, which needs to do the actual authentication.
  4. Note that currently Jitsi only supports the following:
  -- If SASL authentication is needed: SASL negotiation, or
  -- If SASL authentication is not needed: Immediately finish
negotiation (NOOP).
  This does however open up possibilities with more advanced IRC
features, such as away-notifications and account-notifications. As soon
as these are implemented, we can negotiate to enable these such that the
IRC server will be able to provide more updates for events at the moment
that they happen.
* Some GUI improvements to IRC account registration wizard, including UI
for new options: SASL authentication and DNS resolving through SOCKS
proxy. (And some consistency ...)
* A number of improvements to the IRC client library. I'm still working
on getting these changes upstream. In the mean time this can function as
a test for the improvements themselves. (Please note that the irc-api
sources have recently moved to https://github.com/migzai/irc-api, as
they were on code.google.com before.)

In case you missed it. Recently, after the latest bug fix release was
finalized, IRC contact presence support was merged into nightly, which
means that you can now add IRC contacts and get availability updates for
these contacts as you would with other IM protocols. This includes
real-time updates if your favorite IRC server supports MONITOR/WATCH
lists. The lists are used transparently with a polling mechanism as
fall-back once the list limit is reached.

There are a number of features that are still quite fresh, so any
feedback, bug reports, error logs with stack traces, is/are welcome!

Kind regards,
Danny

--
--sent from my mobile