summaryrefslogtreecommitdiffstats
path: root/core/data.go
diff options
context:
space:
mode:
authorbt <bt@rctt.net>2026-04-19 21:32:53 +0200
committerbt <bt@rctt.net>2026-05-03 17:52:37 +0200
commiteec10d41af62fb9a93cd5fd79dcf94616701cc2a (patch)
treed72068dcc4cb1aa43c2e0a2fae8ff094d41ed9c6 /core/data.go
parentc00e7dd589921e6be45918d4cd589e52e2b77036 (diff)
downloadsolec-0.3.0.tar.gz
solec-0.3.0.zip
[common] Basic group channels supportv0.3.0
Diffstat (limited to 'core/data.go')
-rw-r--r--core/data.go51
1 files changed, 44 insertions, 7 deletions
diff --git a/core/data.go b/core/data.go
index dd2777f..2a98347 100644
--- a/core/data.go
+++ b/core/data.go
@@ -23,15 +23,17 @@ const (
PayloadUserAuth = 0x04
PayloadMessage = 0x05
PayloadServerAuth = 0x06
+ PayloadUsermode = 0x07
PayloadTest = 0xFF
)
type ErrorType uint8
const (
- ErrorUnknown ErrorType = 0x00
- ErrorAuthFailed = 0x01
- ErrorNotFound = 0x02
+ ErrorUnknown ErrorType = 0x00
+ ErrorAuthFailed = 0x01
+ ErrorNotFound = 0x02
+ ErrorUnauthorized = 0x03
)
type ConnType uint8
@@ -42,6 +44,13 @@ const (
ConnTypeServer = 0x02
)
+type UsermodeType uint8
+
+const (
+ UsermodeNone UsermodeType = 0x00
+ UsermodeInChannel = 0x01
+)
+
type Frame struct {
Length uint16
Type PayloadType
@@ -132,6 +141,8 @@ func Decode(buf io.Reader) (any, error) {
return DecodeServerAuth(buf)
case PayloadMessage:
return DecodeMessage(buf)
+ case PayloadUsermode:
+ return DecodeUsermode(buf)
case PayloadTest:
return DecodeTest(buf)
default:
@@ -190,11 +201,37 @@ func decodeString(buf io.Reader, ptr *string) error {
return nil
}
-func ReadAddr(addr string) (string, string, error) {
- channel, host, ok := strings.Cut(addr, "@")
+type Addr struct {
+ Channel string
+ Host string
+ Type AddrType
+}
+
+type AddrType string
+
+const (
+ AddrUser AddrType = "user"
+ AddrGroup = "group"
+)
+
+func ReadAddr(addrStr string) (Addr, error) {
+ var (
+ addr Addr
+ ok bool
+ )
+
+ addr.Channel, addr.Host, ok = strings.Cut(addrStr, "@")
if !ok {
- return "", "", ErrInvalidAddress
+ return addr, ErrInvalidAddress
+ }
+
+ rest, ok := strings.CutPrefix(addr.Channel, "#")
+ if ok {
+ addr.Channel = rest
+ addr.Type = AddrGroup
+ } else {
+ addr.Type = AddrUser
}
- return channel, host, nil
+ return addr, nil
}