mirror of
https://github.com/ergochat/ergo.git
synced 2024-12-22 18:52:41 +01:00
commit
a8476f4e46
@ -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
|
// 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
|
// at this time, modulo network latency and fakelag).
|
||||||
// (i.e. the user should be sitting in front of their client).
|
func (client *Client) Touch(session *Session) {
|
||||||
func (client *Client) Touch(active bool, session *Session) {
|
|
||||||
var markDirty bool
|
var markDirty bool
|
||||||
now := time.Now().UTC()
|
now := time.Now().UTC()
|
||||||
client.stateMutex.Lock()
|
client.stateMutex.Lock()
|
||||||
if active {
|
|
||||||
client.lastActive = now
|
|
||||||
session.lastActive = now
|
|
||||||
}
|
|
||||||
if client.accountSettings.AutoreplayMissed || session.deviceID != "" {
|
if client.accountSettings.AutoreplayMissed || session.deviceID != "" {
|
||||||
client.setLastSeen(now, session.deviceID)
|
client.setLastSeen(now, session.deviceID)
|
||||||
if now.Sub(client.lastSeenLastWrite) > lastSeenWriteInterval {
|
if now.Sub(client.lastSeenLastWrite) > lastSeenWriteInterval {
|
||||||
|
@ -12,13 +12,12 @@ import (
|
|||||||
|
|
||||||
// Command represents a command accepted from a client.
|
// Command represents a command accepted from a client.
|
||||||
type Command struct {
|
type Command struct {
|
||||||
handler func(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool
|
handler func(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool
|
||||||
oper bool
|
oper bool
|
||||||
usablePreReg bool
|
usablePreReg bool
|
||||||
leaveClientIdle bool // if true, leaves the client active time alone
|
allowedInBatch bool // allowed in client-to-server batches
|
||||||
allowedInBatch bool // allowed in client-to-server batches
|
minParams int
|
||||||
minParams int
|
capabs []string
|
||||||
capabs []string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run runs this command with the given client/message.
|
// 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
|
// TODO: eliminate idletimer entirely in favor of this measurement
|
||||||
if client.registered {
|
if client.registered {
|
||||||
client.Touch(!cmd.leaveClientIdle, session)
|
client.Touch(session)
|
||||||
}
|
}
|
||||||
|
|
||||||
return exiting
|
return exiting
|
||||||
@ -159,9 +158,8 @@ func init() {
|
|||||||
minParams: 2,
|
minParams: 2,
|
||||||
},
|
},
|
||||||
"ISON": {
|
"ISON": {
|
||||||
handler: isonHandler,
|
handler: isonHandler,
|
||||||
minParams: 1,
|
minParams: 1,
|
||||||
leaveClientIdle: true,
|
|
||||||
},
|
},
|
||||||
"JOIN": {
|
"JOIN": {
|
||||||
handler: joinHandler,
|
handler: joinHandler,
|
||||||
@ -243,16 +241,14 @@ func init() {
|
|||||||
minParams: 1,
|
minParams: 1,
|
||||||
},
|
},
|
||||||
"PING": {
|
"PING": {
|
||||||
handler: pingHandler,
|
handler: pingHandler,
|
||||||
usablePreReg: true,
|
usablePreReg: true,
|
||||||
minParams: 1,
|
minParams: 1,
|
||||||
leaveClientIdle: true,
|
|
||||||
},
|
},
|
||||||
"PONG": {
|
"PONG": {
|
||||||
handler: pongHandler,
|
handler: pongHandler,
|
||||||
usablePreReg: true,
|
usablePreReg: true,
|
||||||
minParams: 1,
|
minParams: 1,
|
||||||
leaveClientIdle: true,
|
|
||||||
},
|
},
|
||||||
"PRIVMSG": {
|
"PRIVMSG": {
|
||||||
handler: messageHandler,
|
handler: messageHandler,
|
||||||
@ -349,9 +345,8 @@ func init() {
|
|||||||
minParams: 4,
|
minParams: 4,
|
||||||
},
|
},
|
||||||
"WHO": {
|
"WHO": {
|
||||||
handler: whoHandler,
|
handler: whoHandler,
|
||||||
minParams: 1,
|
minParams: 1,
|
||||||
leaveClientIdle: true,
|
|
||||||
},
|
},
|
||||||
"WHOIS": {
|
"WHOIS": {
|
||||||
handler: whoisHandler,
|
handler: whoisHandler,
|
||||||
|
@ -418,6 +418,14 @@ func (client *Client) detailsNoMutex() (result ClientDetails) {
|
|||||||
return
|
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 {
|
func (channel *Channel) Name() string {
|
||||||
channel.stateMutex.RLock()
|
channel.stateMutex.RLock()
|
||||||
defer channel.stateMutex.RUnlock()
|
defer channel.stateMutex.RUnlock()
|
||||||
|
@ -1955,7 +1955,12 @@ func messageHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *R
|
|||||||
return false
|
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
|
// note that error replies are never sent for NOTICE
|
||||||
if histType != history.Notice {
|
if histType != history.Notice {
|
||||||
rb.Notice(client.t("CTCP messages are disabled over Tor"))
|
rb.Notice(client.t("CTCP messages are disabled over Tor"))
|
||||||
|
Loading…
Reference in New Issue
Block a user