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 da295cede46d95848348292e04e54fa5a5713ae3 release-1.0.0
34892054c34384edeafa2b04a483697d7d8a73a3 release-1.1.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= =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. 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: Everything works:
@@ -65,6 +67,17 @@ Unusable:
=CHANGELOG= =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 2016-08-27 1.2.0
- Feature: Support WHOIS (display NMDC user's description + client software) - Feature: Support WHOIS (display NMDC user's description + client software)
- Feature: `-version` command-line option - Feature: `-version` command-line option

0
godist.sh Normal file → Executable file
View File

View File

@@ -1,7 +1,7 @@
package main package main
/* /*
Copyright (C) 2016 The `nmdc-ircfrontend' author(s) Copyright (C) 2016-2017 The `nmdc-ircfrontend' author(s)
Copyright (C) 2013 Harry Jeffery Copyright (C) 2013 Harry Jeffery
This program is free software: you can redistribute it and/or modify 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 ( import (
"flag" "flag"
"libnmdc"
"log" "log"
"net" "net"
"code.ivysaur.me/libnmdc"
) )
func main() { func main() {

View File

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

View File

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