aboutsummaryrefslogtreecommitdiff
path: root/hotline
diff options
context:
space:
mode:
authorJeff Halter <868228+jhalter@users.noreply.github.com>2023-01-18 14:56:58 -0800
committerJeff Halter <868228+jhalter@users.noreply.github.com>2023-01-18 14:56:58 -0800
commit5853654f0a618dc89f893992a7f0d211456483f8 (patch)
tree5b3b7ef656102e3354c896bf654c30e23267a495 /hotline
parent0ac5e4e7943c4aa795b9e9300b397ce1debebbcb (diff)
Improve third party client compatability
Diffstat (limited to 'hotline')
-rw-r--r--hotline/client_conn.go3
-rw-r--r--hotline/server.go39
-rw-r--r--hotline/transaction_handlers.go2
-rw-r--r--hotline/transaction_handlers_test.go3
4 files changed, 13 insertions, 34 deletions
diff --git a/hotline/client_conn.go b/hotline/client_conn.go
index 8c95aeb..14aef9e 100644
--- a/hotline/client_conn.go
+++ b/hotline/client_conn.go
@@ -44,7 +44,6 @@ type ClientConn struct {
transfersMU sync.Mutex
transfers map[int]map[[4]byte]*FileTransfer
- Agreed bool
logger *zap.SugaredLogger
}
@@ -157,7 +156,7 @@ func (cc *ClientConn) Disconnect() {
// notifyOthers sends transaction t to other clients connected to the server
func (cc *ClientConn) notifyOthers(t Transaction) (trans []Transaction) {
for _, c := range sortedClients(cc.Server.Clients) {
- if c.ID != cc.ID && c.Agreed {
+ if c.ID != cc.ID {
t.clientID = c.ID
trans = append(trans, t)
}
diff --git a/hotline/server.go b/hotline/server.go
index d87ddb9..b17102e 100644
--- a/hotline/server.go
+++ b/hotline/server.go
@@ -2,7 +2,6 @@ package hotline
import (
"bufio"
- "bytes"
"context"
"encoding/binary"
"errors"
@@ -33,13 +32,6 @@ type requestCtx struct {
name string
}
-var nostalgiaVersion = []byte{0, 0, 2, 0x2c} // version ID used by the Nostalgia client
-var frogblastVersion = []byte{0, 0, 0, 0xb9} // version ID used by the Frogblast 1.2.4 client
-
-var heildrun = []byte{0, 0x97}
-
-var obsessionVersion = []byte{0xbe, 0x00} // version ID used by the Obsession client
-
type Server struct {
Port int
Accounts map[string]*Account
@@ -385,7 +377,6 @@ func (s *Server) NewClientConn(conn io.ReadWriteCloser, remoteAddr string) *Clie
Version: []byte{},
AutoReply: []byte{},
transfers: map[int]map[[4]byte]*FileTransfer{},
- Agreed: false,
RemoteAddr: remoteAddr,
}
clientConn.transfers = map[int]map[[4]byte]*FileTransfer{
@@ -472,9 +463,6 @@ func (s *Server) connectedUsers() []Field {
var connectedUsers []Field
for _, c := range sortedClients(s.Clients) {
- if !c.Agreed {
- continue
- }
user := User{
ID: *c.ID,
Icon: c.Icon,
@@ -678,22 +666,19 @@ func (s *Server) handleNewConnection(ctx context.Context, rwc io.ReadWriteCloser
// Used simplified hotline v1.2.3 login flow for clients that do not send login info in tranAgreed
// TODO: figure out a generalized solution that doesn't require playing whack-a-mole for specific client versions
- if c.Version == nil || bytes.Equal(c.Version, nostalgiaVersion) || bytes.Equal(c.Version, frogblastVersion) || bytes.Equal(c.Version, obsessionVersion) || bytes.Equal(c.Version, heildrun) {
- c.Agreed = true
- c.logger = c.logger.With("name", string(c.UserName))
- c.logger.Infow("Login successful", "clientVersion", fmt.Sprintf("%v", func() int { i, _ := byteToInt(c.Version); return i }()))
+ c.logger = c.logger.With("name", string(c.UserName))
+ c.logger.Infow("Login successful", "clientVersion", fmt.Sprintf("%v", func() int { i, _ := byteToInt(c.Version); return i }()))
- for _, t := range c.notifyOthers(
- *NewTransaction(
- tranNotifyChangeUser, nil,
- NewField(fieldUserName, c.UserName),
- NewField(fieldUserID, *c.ID),
- NewField(fieldUserIconID, c.Icon),
- NewField(fieldUserFlags, c.Flags),
- ),
- ) {
- c.Server.outbox <- t
- }
+ for _, t := range c.notifyOthers(
+ *NewTransaction(
+ tranNotifyChangeUser, nil,
+ NewField(fieldUserName, c.UserName),
+ NewField(fieldUserID, *c.ID),
+ NewField(fieldUserIconID, c.Icon),
+ NewField(fieldUserFlags, c.Flags),
+ ),
+ ) {
+ c.Server.outbox <- t
}
c.Server.Stats.ConnectionCounter += 1
diff --git a/hotline/transaction_handlers.go b/hotline/transaction_handlers.go
index acc8fe4..d3238f4 100644
--- a/hotline/transaction_handlers.go
+++ b/hotline/transaction_handlers.go
@@ -933,8 +933,6 @@ func HandleGetUserNameList(cc *ClientConn, t *Transaction) (res []Transaction, e
}
func HandleTranAgreed(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
- cc.Agreed = true
-
if t.GetField(fieldUserName).Data != nil {
if cc.Authorize(accessAnyName) {
cc.UserName = t.GetField(fieldUserName).Data
diff --git a/hotline/transaction_handlers_test.go b/hotline/transaction_handlers_test.go
index 2720cdd..69dedf9 100644
--- a/hotline/transaction_handlers_test.go
+++ b/hotline/transaction_handlers_test.go
@@ -232,21 +232,18 @@ func TestHandleGetUserNameList(t *testing.T) {
Icon: []byte{0, 2},
Flags: []byte{0, 3},
UserName: []byte{0, 4},
- Agreed: true,
},
uint16(2): {
ID: &[]byte{0, 2},
Icon: []byte{0, 2},
Flags: []byte{0, 3},
UserName: []byte{0, 4},
- Agreed: true,
},
uint16(3): {
ID: &[]byte{0, 3},
Icon: []byte{0, 2},
Flags: []byte{0, 3},
UserName: []byte{0, 4},
- Agreed: false,
},
},
},