This commit is contained in:
7x11x13 2024-07-12 13:44:24 -04:00
parent 729460b1ea
commit 723a426203
3 changed files with 57 additions and 69 deletions

View File

@ -84,4 +84,4 @@ func (b *Bsoulseek) handleDM(msg privateMessageReceive) {
b.doDisconnect() b.doDisconnect()
} }
} }
} }

View File

@ -10,8 +10,9 @@ import (
"reflect" "reflect"
) )
type soulseekMessage interface {} type soulseekMessage interface{}
type soulseekMessageResponse interface {}
type soulseekMessageResponse interface{}
const ( const (
loginMessageCode uint32 = 1 loginMessageCode uint32 = 1
@ -21,31 +22,30 @@ const (
userLeftRoomMessageCode uint32 = 17 userLeftRoomMessageCode uint32 = 17
privateMessageCode uint32 = 22 privateMessageCode uint32 = 22
kickedMessageCode uint32 = 41 kickedMessageCode uint32 = 41
changePasswordMessageCode uint32 = 142 changePasswordMessageCode uint32 = 142
) )
var ignoreMessageCodes = map[uint32]bool { var ignoreMessageCodes = map[uint32]bool{
7: true, 7: true,
64: true, 64: true,
69: true, 69: true,
83: true, 83: true,
84: true, 84: true,
104: true, 104: true,
113: true, 113: true,
114: true, 114: true,
115: true, 115: true,
130: true, 130: true,
133: true, 133: true,
139: true, 139: true,
140: true, 140: true,
145: true, 145: true,
146: true, 146: true,
148: true, 148: true,
160: true, 160: true,
1003: true, 1003: true,
} }
// 1: Login // 1: Login
type loginMessage struct { type loginMessage struct {
Code uint32 Code uint32
@ -67,21 +67,19 @@ type loginMessageResponseFailure struct {
Reason string Reason string
} }
// 13: Say in chatroom // 13: Say in chatroom
type sayChatroomMessage struct { type sayChatroomMessage struct {
Code uint32 Code uint32
Room string Room string
Message string Message string
} }
type sayChatroomMessageReceive struct { type sayChatroomMessageReceive struct {
Room string Room string
Username string Username string
Message string Message string
} }
// 14: Join room // 14: Join room
type joinRoomMessage struct { type joinRoomMessage struct {
Code uint32 Code uint32
@ -107,45 +105,40 @@ type joinRoomMessageResponse struct {
Operators []string Operators []string
} }
// 16: User joined room // 16: User joined room
type userJoinedRoomMessage struct { type userJoinedRoomMessage struct {
Room string Room string
Username string Username string
Status uint32 Status uint32
AvgSpeed uint32 AvgSpeed uint32
UploadNum uint64 UploadNum uint64
Files uint32 Files uint32
Dirs uint32 Dirs uint32
SlotsFree uint32 SlotsFree uint32
CountryCode string CountryCode string
} }
// 16: User left room // 16: User left room
type userLeftRoomMessage struct { type userLeftRoomMessage struct {
Room string Room string
Username string Username string
} }
// 22: Private message (sometimes used by server to tell us errors) // 22: Private message (sometimes used by server to tell us errors)
type privateMessageReceive struct { type privateMessageReceive struct {
ID uint32 ID uint32
Timestamp uint32 Timestamp uint32
Username string Username string
Message string Message string
NewMessage bool NewMessage bool
} }
// 41: Kicked from server (relogged) // 41: Kicked from server (relogged)
type kickedMessageResponse struct {} type kickedMessageResponse struct{}
// 142: Change password // 142: Change password
type changePasswordMessage struct { type changePasswordMessage struct {
Code uint32 Code uint32
Password string Password string
} }
@ -153,7 +146,6 @@ type changePasswordMessageResponse struct {
Password string Password string
} }
func packMessage(message soulseekMessage) ([]byte, error) { func packMessage(message soulseekMessage) ([]byte, error) {
buf := &bytes.Buffer{} buf := &bytes.Buffer{}
var length uint32 = 0 var length uint32 = 0
@ -363,4 +355,4 @@ func makeSayChatroomMessage(room string, text string) sayChatroomMessage {
room, room,
text, text,
} }
} }

View File

@ -10,14 +10,14 @@ import (
) )
type Bsoulseek struct { type Bsoulseek struct {
conn net.Conn conn net.Conn
messagesToSend chan soulseekMessage messagesToSend chan soulseekMessage
local chan config.Message local chan config.Message
loginResponse chan soulseekMessageResponse loginResponse chan soulseekMessageResponse
joinRoomResponse chan joinRoomMessageResponse joinRoomResponse chan joinRoomMessageResponse
fatalErrors chan error fatalErrors chan error
disconnect chan bool disconnect chan bool
firstConnectResponse chan error firstConnectResponse chan error
*bridge.Config *bridge.Config
} }
@ -51,7 +51,7 @@ func sliceEqual(s []string) bool {
if len(s) <= 1 { if len(s) <= 1 {
return true return true
} }
for _, x := range(s) { for _, x := range s {
if x != s[0] { if x != s[0] {
return false return false
} }
@ -60,7 +60,7 @@ func sliceEqual(s []string) bool {
} }
func (b *Bsoulseek) sendMessages() { func (b *Bsoulseek) sendMessages() {
lastFourChatMessages := []string {"1", "2", "3", ""} lastFourChatMessages := []string{"1", "2", "3", ""}
for { for {
message, more := <-b.messagesToSend message, more := <-b.messagesToSend
if !more { if !more {
@ -69,7 +69,7 @@ func (b *Bsoulseek) sendMessages() {
msg, is_say := message.(sayChatroomMessage) msg, is_say := message.(sayChatroomMessage)
if is_say { if is_say {
// can't send 5 of the same message in a row or we get banned // can't send 5 of the same message in a row or we get banned
if (sliceEqual(append(lastFourChatMessages, msg.Message))) { if sliceEqual(append(lastFourChatMessages, msg.Message)) {
b.Log.Warnf("Dropping message: %s", msg.Message) b.Log.Warnf("Dropping message: %s", msg.Message)
continue continue
} }
@ -174,11 +174,11 @@ func (b *Bsoulseek) loginLoop() {
// Now we are connected // Now we are connected
select { select {
case err = <- b.fatalErrors: case err = <-b.fatalErrors:
b.Log.Errorf("%s", err) b.Log.Errorf("%s", err)
// Retry connect // Retry connect
continue continue
case <- b.disconnect: case <-b.disconnect:
// We are done // We are done
return return
} }
@ -191,7 +191,6 @@ func (b *Bsoulseek) Connect() error {
return err return err
} }
func (b *Bsoulseek) JoinChannel(channel config.ChannelInfo) error { func (b *Bsoulseek) JoinChannel(channel config.ChannelInfo) error {
b.messagesToSend <- makeJoinRoomMessage(channel.Name) b.messagesToSend <- makeJoinRoomMessage(channel.Name)
select { select {
@ -203,18 +202,16 @@ func (b *Bsoulseek) JoinChannel(channel config.ChannelInfo) error {
} }
} }
func (b *Bsoulseek) Send(msg config.Message) (string, error) { func (b *Bsoulseek) Send(msg config.Message) (string, error) {
// Only process text messages // Only process text messages
b.Log.Debugf("=> Received local message %v", msg) b.Log.Debugf("=> Received local message %v", msg)
if msg.Event != "" && msg.Event != config.EventUserAction && msg.Event != config.EventJoinLeave { if msg.Event != "" && msg.Event != config.EventUserAction && msg.Event != config.EventJoinLeave {
return "", nil return "", nil
} }
b.messagesToSend <- makeSayChatroomMessage(msg.Channel, msg.Username + msg.Text) b.messagesToSend <- makeSayChatroomMessage(msg.Channel, msg.Username+msg.Text)
return "", nil return "", nil
} }
func (b *Bsoulseek) doDisconnect() error { func (b *Bsoulseek) doDisconnect() error {
b.disconnect <- true b.disconnect <- true
close(b.messagesToSend) close(b.messagesToSend)
@ -224,8 +221,7 @@ func (b *Bsoulseek) doDisconnect() error {
return nil return nil
} }
func (b *Bsoulseek) Disconnect() error { func (b *Bsoulseek) Disconnect() error {
b.doDisconnect() b.doDisconnect()
return nil return nil
} }