summaryrefslogtreecommitdiffstats
path: root/irc
diff options
context:
space:
mode:
Diffstat (limited to 'irc')
-rw-r--r--irc/irc.go27
-rw-r--r--irc/message.go5
2 files changed, 12 insertions, 20 deletions
diff --git a/irc/irc.go b/irc/irc.go
index b4505af..cbcc337 100644
--- a/irc/irc.go
+++ b/irc/irc.go
@@ -11,7 +11,6 @@ import (
"net"
"sync"
"time"
- "unicode/utf8"
"github.com/arachnist/dyncfg"
)
@@ -40,27 +39,15 @@ type Connection struct {
func (c *Connection) Sender(msg Message) {
c.l.Lock()
defer c.l.Unlock()
+ c.writer.WriteString(msg.String() + endline)
+ log.Println(c.network, "-->", msg.String())
+ c.writer.Flush()
if msg.WireLen() > maxLength {
- currLen := 0
- for i, ch := range msg.String() {
- currLen += utf8.RuneLen(ch)
- if currLen > maxLength {
- c.writer.WriteString(msg.String()[:i] + endline)
- log.Println(c.network, "-->", msg.String())
- c.writer.Flush()
- // eh, it is a bit naive to assume that we won't explode again…
- if msg.Command == "PRIVMSG" { // we don't care otherwise
- newMsg := msg
- newMsg.Trailing = "Message truncated"
- go c.Sender(newMsg)
- }
- return
- }
+ if msg.Command == "PRIVMSG" { // we don't care otherwise
+ newMsg := msg
+ newMsg.Trailing = "Message truncated"
+ go c.Sender(newMsg)
}
- } else {
- c.writer.WriteString(msg.String() + endline)
- log.Println(c.network, "-->", msg.String())
- c.writer.Flush()
}
}
diff --git a/irc/message.go b/irc/message.go
index e1d448b..8d98ae8 100644
--- a/irc/message.go
+++ b/irc/message.go
@@ -288,6 +288,11 @@ func (m *Message) Bytes() []byte {
buffer.WriteString(m.Trailing)
}
+ // We need the limit the buffer length.
+ if buffer.Len() > (maxLength) {
+ buffer.Truncate(maxLength)
+ }
+
return buffer.Bytes()
}