14 Commits

Author SHA1 Message Date
a555dbd563 readme
--HG--
branch : nmdc-ircfrontend
2017-05-28 17:43:52 +12:00
f076aeaeda quirks support
--HG--
branch : nmdc-ircfrontend
2017-05-28 17:36:31 +12:00
1056493211 bump copyright year
--HG--
branch : nmdc-ircfrontend
2017-05-28 13:45:05 +12:00
ddcd65fa47 Added tag release-1.2.2 for changeset 111d6e41507d
--HG--
branch : nmdc-ircfrontend
2017-05-28 13:39:48 +12:00
d21b18fc75 fix bad patch for bounds check in previous
--HG--
branch : nmdc-ircfrontend
2017-05-28 13:38:56 +12:00
53b72e0cb0 readme
--HG--
branch : nmdc-ircfrontend
2017-05-27 14:00:25 +12:00
839dea016a chmod +x godist.sh
--HG--
branch : nmdc-ircfrontend
2017-05-27 13:58:12 +12:00
e235ee014e fix wrong bounds check causing panic when server gets scanned by weird clients
--HG--
branch : nmdc-ircfrontend
2017-05-27 13:57:37 +12:00
.
c54a271f17 Added tag release-1.2.1 for changeset 49dcc63e80e9
--HG--
branch : nmdc-ircfrontend
2016-11-29 20:21:29 +13:00
.
264ee8c61c readme
--HG--
branch : nmdc-ircfrontend
2016-11-29 20:21:22 +13:00
.
85e44756e3 libnmdc compatibility updates
--HG--
branch : nmdc-ircfrontend
2016-11-29 19:58:12 +13:00
.
e628bdcf91 update libnmdc import path
--HG--
branch : nmdc-ircfrontend
2016-11-29 19:55:50 +13:00
.
f929379569 fix build script not overwriting app_version
--HG--
branch : nmdc-ircfrontend
2016-08-27 17:53:04 +12:00
.
d5f331ec7c Added tag release-1.2.0 for changeset 3586b48a5abf
--HG--
branch : nmdc-ircfrontend
2016-08-27 17:42:34 +12:00
6 changed files with 63 additions and 10 deletions

View File

@@ -1,2 +1,5 @@
da295cede46d95848348292e04e54fa5a5713ae3 release-1.0.0
34892054c34384edeafa2b04a483697d7d8a73a3 release-1.1.0
3586b48a5abfdbdeef310f2e154b06f4d16d38bb release-1.2.0
49dcc63e80e98f8c2ce3bb029fe0c41a6426678f release-1.2.1
111d6e41507dd0f374860b936d18a651a7cb09ce release-1.2.2

View File

@@ -43,6 +43,8 @@ Tags: nmdc, AGPLv3
=COMPATIBILITY=
*This section was last updated on or around the release of 1.2.0. Current compatibility may differ.*
NMDC's smaller community has standardised around comparatively few protocol implementations by means of necessity. In comparison, there are a lot of IRC client implementations with slightly differing interpretations of the protocol.
Everything works:
@@ -65,6 +67,17 @@ Unusable:
=CHANGELOG=
2017-05-28 1.2.3
- Fix a regression with userlist display on HexChat (other IRC client compatibility unknown)
2017-05-27 1.2.2
- Update libnmdc to 0.14
- Fix a crash that could occur if the server is scanned by a non-irc client
2016-11-29 1.2.1
- Update libnmdc to 0.11
- Fix an issue with -devel version tag in 1.2.0 release binaries
2016-08-27 1.2.0
- Feature: Support WHOIS (display NMDC user's description + client software)
- Feature: `-version` command-line option

0
godist.sh Normal file → Executable file
View File

View File

@@ -1,7 +1,7 @@
package main
/*
Copyright (C) 2016 The `nmdc-ircfrontend' author(s)
Copyright (C) 2016-2017 The `nmdc-ircfrontend' author(s)
Copyright (C) 2013 Harry Jeffery
This program is free software: you can redistribute it and/or modify
@@ -20,9 +20,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import (
"flag"
"libnmdc"
"log"
"net"
"code.ivysaur.me/libnmdc"
)
func main() {

View File

@@ -1,7 +1,7 @@
package main
/*
Copyright (C) 2016 The `nmdc-ircfrontend' author(s)
Copyright (C) 2016-2017 The `nmdc-ircfrontend' author(s)
Copyright (C) 2013 Harry Jeffery
This program is free software: you can redistribute it and/or modify
@@ -22,13 +22,14 @@ import (
"bytes"
"fmt"
"io"
"libnmdc"
"log"
"net"
"regexp"
"strings"
"sync"
"time"
"code.ivysaur.me/libnmdc"
)
type ClientState int
@@ -39,6 +40,30 @@ const (
CSJoined
)
type Quirks struct {
SendNamesOnWho bool
}
func DefaultQuirks() Quirks {
return Quirks{
SendNamesOnWho: false,
}
}
func HexChatQuirks() Quirks {
return Quirks{
SendNamesOnWho: true,
}
}
func GetQuirksForClient(ver string) Quirks {
if strings.Contains(ver, "HexChat") {
return HexChatQuirks()
} else {
return DefaultQuirks()
}
}
type Server struct {
name string
motd string
@@ -58,6 +83,8 @@ type Server struct {
recievedFirstServerMessage bool
recievedCtcpVersion bool
nickChangeAttempt int
quirks Quirks
}
func NewServer(name string, upstream libnmdc.HubAddress, conn net.Conn) *Server {
@@ -76,6 +103,7 @@ func NewServer(name string, upstream libnmdc.HubAddress, conn net.Conn) *Server
SkipAutoReconnect: true,
},
upstreamCloser: make(chan struct{}, 1),
quirks: DefaultQuirks(),
}
}
@@ -113,7 +141,7 @@ func (s *Server) RunWorker() {
}
// If this was a /timeout/, send a KA and continue.
if libnmdc.CheckIsNetTimeout(err) {
if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
s.writeClient("PING :" + s.name)
continue
}
@@ -132,12 +160,12 @@ func (s *Server) RunWorker() {
// Client sent a command
fields := strings.Fields(string(line))
if len(fields) < 1 {
if len(fields) == 0 {
return
}
if strings.HasPrefix(fields[0], ":") {
fields = fields[1:]
fields[0] = fields[0][1:]
}
s.handleCommand(strings.ToUpper(fields[0]), fields[1:])
@@ -240,7 +268,7 @@ func (s *Server) upstreamWorker() {
// description change - no relevance for IRC users
case libnmdc.EVENT_CONNECTION_STATE_CHANGED:
s.postGeneralMessageInRoom("* Upstream: " + hubEvent.StateChange.Format())
s.postGeneralMessageInRoom("* Upstream: " + hubEvent.StateChange.String())
if hubEvent.StateChange == libnmdc.CONNECTIONSTATE_CONNECTED {
s.sendNames() // delay doing this until now
@@ -438,6 +466,7 @@ func (s *Server) handleRegisteredCommand(command string, args []string) {
versionString := message[9:]
versionString = versionString[:len(versionString)-1]
s.SetClientSoftwareVersion(versionString)
s.quirks = GetQuirksForClient(versionString)
return
}
@@ -635,6 +664,10 @@ func (s *Server) handleJoinedCommand(command string, args []string) {
// s.sendWho(args[0])
// s.sendNames() // fixes hexchat, but andchat always sends WHO /immediately/ after NAMES end, causing an infinite loop
if s.quirks.SendNamesOnWho {
s.sendNames()
}
case "MODE":
if len(args) < 1 {
s.reply(errMoreArgs)

View File

@@ -1,7 +1,7 @@
package main
/*
Copyright (C) 2016 The `nmdc-ircfrontend' author(s)
Copyright (C) 2016-2017 The `nmdc-ircfrontend' author(s)
Copyright (C) 2013 Harry Jeffery
This program is free software: you can redistribute it and/or modify
@@ -18,8 +18,11 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
var (
APP_VERSION = "1.x.x-dev" // overridden with build ldflags
)
const (
APP_VERSION = "1.x.x-dev" // override with build ldflags
APP_NAME = "nmdc-ircfrontend"
BLESSED_CHANNEL = "#chat" // must be lowercase
BLESSED_CHANNEL_MODE = "n" // means that you have to be in the channel to chat, but that's it