3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-12-22 18:52:41 +01:00

Merge pull request #1164 from slingamn/updateidle

fix #1155
This commit is contained in:
Shivaram Lingamneni 2020-06-30 17:43:03 -07:00 committed by GitHub
commit a8476f4e46
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 30 deletions

View File

@ -723,16 +723,11 @@ func (client *Client) playReattachMessages(session *Session) {
//
// Touch indicates that we received a line from the client (so the connection is healthy
// at this time, modulo network latency and fakelag). `active` means not a PING or suchlike
// (i.e. the user should be sitting in front of their client).
func (client *Client) Touch(active bool, session *Session) {
// at this time, modulo network latency and fakelag).
func (client *Client) Touch(session *Session) {
var markDirty bool
now := time.Now().UTC()
client.stateMutex.Lock()
if active {
client.lastActive = now
session.lastActive = now
}
if client.accountSettings.AutoreplayMissed || session.deviceID != "" {
client.setLastSeen(now, session.deviceID)
if now.Sub(client.lastSeenLastWrite) > lastSeenWriteInterval {

View File

@ -12,13 +12,12 @@ import (
// Command represents a command accepted from a client.
type Command struct {
handler func(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool
oper bool
usablePreReg bool
leaveClientIdle bool // if true, leaves the client active time alone
allowedInBatch bool // allowed in client-to-server batches
minParams int
capabs []string
handler func(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool
oper bool
usablePreReg bool
allowedInBatch bool // allowed in client-to-server batches
minParams int
capabs []string
}
// Run runs this command with the given client/message.
@ -67,7 +66,7 @@ func (cmd *Command) Run(server *Server, client *Client, session *Session, msg ir
// TODO: eliminate idletimer entirely in favor of this measurement
if client.registered {
client.Touch(!cmd.leaveClientIdle, session)
client.Touch(session)
}
return exiting
@ -159,9 +158,8 @@ func init() {
minParams: 2,
},
"ISON": {
handler: isonHandler,
minParams: 1,
leaveClientIdle: true,
handler: isonHandler,
minParams: 1,
},
"JOIN": {
handler: joinHandler,
@ -243,16 +241,14 @@ func init() {
minParams: 1,
},
"PING": {
handler: pingHandler,
usablePreReg: true,
minParams: 1,
leaveClientIdle: true,
handler: pingHandler,
usablePreReg: true,
minParams: 1,
},
"PONG": {
handler: pongHandler,
usablePreReg: true,
minParams: 1,
leaveClientIdle: true,
handler: pongHandler,
usablePreReg: true,
minParams: 1,
},
"PRIVMSG": {
handler: messageHandler,
@ -349,9 +345,8 @@ func init() {
minParams: 4,
},
"WHO": {
handler: whoHandler,
minParams: 1,
leaveClientIdle: true,
handler: whoHandler,
minParams: 1,
},
"WHOIS": {
handler: whoisHandler,

View File

@ -418,6 +418,14 @@ func (client *Client) detailsNoMutex() (result ClientDetails) {
return
}
func (client *Client) UpdateActive(session *Session) {
now := time.Now().UTC()
client.stateMutex.Lock()
defer client.stateMutex.Unlock()
client.lastActive = now
session.lastActive = now
}
func (channel *Channel) Name() string {
channel.stateMutex.RLock()
defer channel.stateMutex.RUnlock()

View File

@ -1955,7 +1955,12 @@ func messageHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *R
return false
}
if rb.session.isTor && utils.IsRestrictedCTCPMessage(message) {
isCTCP := utils.IsRestrictedCTCPMessage(message)
if histType == history.Privmsg && !isCTCP {
client.UpdateActive(rb.session)
}
if rb.session.isTor && isCTCP {
// note that error replies are never sent for NOTICE
if histType != history.Notice {
rb.Notice(client.t("CTCP messages are disabled over Tor"))