From: Jeff Halter Date: Sun, 23 Apr 2023 19:25:15 +0000 (-0700) Subject: Make UserFlags public X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/commitdiff_plain/b1658a46aebe8aceb23af187de956ef91452f48a Make UserFlags public --- diff --git a/hotline/client.go b/hotline/client.go index f978c16..ffd0fb3 100644 --- a/hotline/client.go +++ b/hotline/client.go @@ -423,7 +423,7 @@ func (c *Client) renderUserList() { c.UI.userList.Clear() for _, u := range c.UserList { flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(u.Flags))) - if flagBitmap.Bit(userFlagAdmin) == 1 { + if flagBitmap.Bit(UserFlagAdmin) == 1 { _, _ = fmt.Fprintf(c.UI.userList, "[red::b]%s[-:-:-]\n", u.Name) } else { _, _ = fmt.Fprintf(c.UI.userList, "%s\n", u.Name) diff --git a/hotline/client_conn.go b/hotline/client_conn.go index 0a5a108..48a6947 100644 --- a/hotline/client_conn.go +++ b/hotline/client_conn.go @@ -102,7 +102,7 @@ func (cc *ClientConn) handleTransaction(transaction Transaction) error { // the user is no longer away if cc.Idle { flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(cc.Flags))) - flagBitmap.SetBit(flagBitmap, userFlagAway, 0) + flagBitmap.SetBit(flagBitmap, UserFlagAway, 0) binary.BigEndian.PutUint16(cc.Flags, uint16(flagBitmap.Int64())) cc.Idle = false diff --git a/hotline/server.go b/hotline/server.go index 500087a..386562b 100644 --- a/hotline/server.go +++ b/hotline/server.go @@ -313,7 +313,7 @@ func (s *Server) keepaliveHandler() { c.Idle = true flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(c.Flags))) - flagBitmap.SetBit(flagBitmap, userFlagAway, 1) + flagBitmap.SetBit(flagBitmap, UserFlagAway, 1) binary.BigEndian.PutUint16(c.Flags, uint16(flagBitmap.Int64())) c.sendAll( diff --git a/hotline/transaction_handlers.go b/hotline/transaction_handlers.go index 7864e19..5de2b45 100644 --- a/hotline/transaction_handlers.go +++ b/hotline/transaction_handlers.go @@ -334,7 +334,7 @@ func HandleSendInstantMsg(cc *ClientConn, t *Transaction) (res []Transaction, er // Check if target user has "Refuse private messages" flag flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(otherClient.Flags))) - if flagBitmap.Bit(userFLagRefusePChat) == 1 { + if flagBitmap.Bit(UserFlagRefusePChat) == 1 { res = append(res, *NewTransaction( TranServerMsg, @@ -671,9 +671,9 @@ func HandleSetUser(cc *ClientConn, t *Transaction) (res []Transaction, err error flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(c.Flags))) if c.Authorize(accessDisconUser) { - flagBitmap.SetBit(flagBitmap, userFlagAdmin, 1) + flagBitmap.SetBit(flagBitmap, UserFlagAdmin, 1) } else { - flagBitmap.SetBit(flagBitmap, userFlagAdmin, 0) + flagBitmap.SetBit(flagBitmap, UserFlagAdmin, 0) } binary.BigEndian.PutUint16(c.Flags, uint16(flagBitmap.Int64())) @@ -955,13 +955,13 @@ func HandleTranAgreed(cc *ClientConn, t *Transaction) (res []Transaction, err er // Check refuse private PM option if optBitmap.Bit(refusePM) == 1 { - flagBitmap.SetBit(flagBitmap, userFlagRefusePM, 1) + flagBitmap.SetBit(flagBitmap, UserFlagRefusePM, 1) binary.BigEndian.PutUint16(cc.Flags, uint16(flagBitmap.Int64())) } // Check refuse private chat option if optBitmap.Bit(refuseChat) == 1 { - flagBitmap.SetBit(flagBitmap, userFLagRefusePChat, 1) + flagBitmap.SetBit(flagBitmap, UserFlagRefusePChat, 1) binary.BigEndian.PutUint16(cc.Flags, uint16(flagBitmap.Int64())) } @@ -1066,7 +1066,6 @@ func HandleDisconnectUser(cc *ClientConn, t *Transaction) (res []Transaction, er banUntil := time.Now().Add(tempBanDuration) cc.Server.banList[strings.Split(clientConn.RemoteAddr, ":")[0]] = &banUntil - cc.Server.writeBanList() case 2: // send message: "You are permanently banned on this server" cc.logger.Infow("Disconnect & ban " + string(clientConn.UserName)) @@ -1079,7 +1078,11 @@ func HandleDisconnectUser(cc *ClientConn, t *Transaction) (res []Transaction, er )) cc.Server.banList[strings.Split(clientConn.RemoteAddr, ":")[0]] = nil - cc.Server.writeBanList() + } + + err := cc.Server.writeBanList() + if err != nil { + return res, err } } @@ -1644,10 +1647,10 @@ func HandleSetClientUserInfo(cc *ClientConn, t *Transaction) (res []Transaction, optBitmap := big.NewInt(int64(binary.BigEndian.Uint16(options))) flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(cc.Flags))) - flagBitmap.SetBit(flagBitmap, userFlagRefusePM, optBitmap.Bit(refusePM)) + flagBitmap.SetBit(flagBitmap, UserFlagRefusePM, optBitmap.Bit(refusePM)) binary.BigEndian.PutUint16(cc.Flags, uint16(flagBitmap.Int64())) - flagBitmap.SetBit(flagBitmap, userFLagRefusePChat, optBitmap.Bit(refuseChat)) + flagBitmap.SetBit(flagBitmap, UserFlagRefusePChat, optBitmap.Bit(refuseChat)) binary.BigEndian.PutUint16(cc.Flags, uint16(flagBitmap.Int64())) // Check auto response @@ -1742,7 +1745,7 @@ func HandleInviteNewChat(cc *ClientConn, t *Transaction) (res []Transaction, err targetClient := cc.Server.Clients[binary.BigEndian.Uint16(targetID)] flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(targetClient.Flags))) - if flagBitmap.Bit(userFLagRefusePChat) == 1 { + if flagBitmap.Bit(UserFlagRefusePChat) == 1 { res = append(res, *NewTransaction( TranServerMsg, diff --git a/hotline/user.go b/hotline/user.go index a86aeba..34fe1ab 100644 --- a/hotline/user.go +++ b/hotline/user.go @@ -4,12 +4,12 @@ import ( "encoding/binary" ) -// User flags are stored as a 2 byte bitmap with the following values: +// User flags are stored as a 2 byte bitmap and represent various user states const ( - userFlagAway = 0 // User is away - userFlagAdmin = 1 // User is admin - userFlagRefusePM = 2 // User refuses private messages - userFLagRefusePChat = 3 // User refuses private chat + UserFlagAway = 0 // User is away + UserFlagAdmin = 1 // User is admin + UserFlagRefusePM = 2 // User refuses private messages + UserFlagRefusePChat = 3 // User refuses private chat ) // FieldOptions flags are sent from v1.5+ clients as part of TranAgreed