-
Improvement
-
Resolution: Unresolved
-
Minor
-
None
-
ircbot-plugin 2.36 (prototype snapshot)
ngircd-22-2.1 (old RPM on old system)
While testing recent fixes for the plugin, one of my installations refused to connect to the IRC server:
2020-12-10 09:38:45.316+0000 [id=45] INFO h.p.ircbot.v2.IRCConnection#connect: Connecting to 10.1.2.3:6667 as jenkins-bot using charset UTF-8
2020-12-10 09:38:45.326+0000 [id=1003] INFO org.pircbotx.PircBotX#connect: Connected to server.
2020-12-10 09:38:45.327+0000 [id=1003] INFO org.pircbotx.output.OutputRaw#rawLineNow: NICK jenkins-bot
2020-12-10 09:38:45.328+0000 [id=1003] INFO org.pircbotx.output.OutputRaw#rawLineNow: USER jenkins-bot 8 * :PircBotX 2.0.1, a fork of PircBot, the Java IRC bot - pircbotx.googlecode.com
2020-12-10 09:38:45.330+0000 [id=1003] SEVERE org.pircbotx.PircBotX#startLineProcessing: Exception encountered when reading next line from server
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:210)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at org.pircbotx.PircBotX.startLineProcessing(PircBotX.java:250)
at org.pircbotx.PircBotX.connect(PircBotX.java:236)
at org.pircbotx.PircBotX.startBot(PircBotX.java:151)
at hudson.plugins.ircbot.v2.IRCConnection$2.run(IRCConnection.java:221)
2020-12-10 09:38:45.330+0000 [id=1003] INFO org.pircbotx.dcc.DccHandler#close: Terminating all transfers waiting to be accepted
2020-12-10 09:40:45.117+0000 [id=45] WARNING h.p.ircbot.v2.IRCConnection#connect: Time out waiting for connecting to irc
2020-12-10 09:40:45.117+0000 [id=45] WARNING h.p.im.IMConnectionProvider#create: Could not create IM connection
hudson.plugins.im.IMException: Connection failed
at hudson.plugins.ircbot.v2.IRCConnectionProvider.createConnection(IRCConnectionProvider.java:42)
at hudson.plugins.im.IMConnectionProvider.create(IMConnectionProvider.java:60)
at hudson.plugins.im.IMConnectionProvider.access$500(IMConnectionProvider.java:17)
at hudson.plugins.im.IMConnectionProvider$ConnectorRunnable.run(IMConnectionProvider.java:167)
at java.lang.Thread.run(Thread.java:748)
2020-12-10 09:40:45.207+0000 [id=45] INFO h.p.i.IMConnectionProvider$ConnectorRunnable#run: Reconnect failed. Next connection attempt in 16 minutes
I assumed it was because of VPNs and firewalls enroute so did not drill into it so much, but now re-created the situation from the LAN with the server:
$ telnet 10.1.2.3 6667 Trying 10.1.2.3... Connected to 10.1.2.3. Escape character is '^]'. NICK jenkins-bot :ngircd.localdomain 432 * jenkins-bot :Nickname too long, max. 9 characters USER jenkins-bot Connection to 10.1.2.3 closed by foreign host.
Oops, so the name is too long... Would have been nice to see that hint in the stacktrace of the aborted connection attempt!
The server's config file /etc/ngircd.conf has something to say on this:
# Maximum length of an user nickname (Default: 9, as in RFC 2812).
;MaxNickLength = 9
So there are things to amend in the plugin:
1) Constrain the default nickname for new installations to 9 chars
- mention the standard limit in the help message for the nickname field;
- (optional) pop up a warning for names that are longer
- do not forbid the longer names in code - e.g. freenode allows them
2) If there are some bytes read from the server connection if we get a "java.net.SocketException: Connection reset" at org.pircbotx.PircBotX.startLineProcessing(PircBotX.java:250) at org.pircbotx.PircBotX.connect(PircBotX.java:236) - flush them into the log with the stack trace, they might help deployers fix their issue
3) (would be nice) Expose somehow (in global config page?) the current connection status, whether the bot is logged into a server at all and into the channels in particular; and if there was such a connection reset with an error message.