mirror of
				https://github.com/ergochat/ergo.git
				synced 2025-11-03 23:37:22 +01:00 
			
		
		
		
	fix #1155
This commit is contained in:
		
							parent
							
								
									a7107bfb67
								
							
						
					
					
						commit
						70f533ee07
					
				@ -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 {
 | 
			
		||||
 | 
			
		||||
@ -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,
 | 
			
		||||
 | 
			
		||||
@ -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()
 | 
			
		||||
 | 
			
		||||
@ -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"))
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user