mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03:00 
			
		
		
		
	get rid of old buffered session packets
This commit is contained in:
		
							parent
							
								
									e7cb76cea3
								
							
						
					
					
						commit
						e88bef35c0
					
				
					 3 changed files with 3 additions and 15 deletions
				
			
		| 
						 | 
				
			
			@ -215,7 +215,7 @@ func (c *Conn) Write(b []byte) (bytesWritten int, err error) {
 | 
			
		|||
		}
 | 
			
		||||
		switch {
 | 
			
		||||
		case !sinfo.init:
 | 
			
		||||
			doSearch()
 | 
			
		||||
			sinfo.core.sessions.ping(sinfo)
 | 
			
		||||
		case time.Since(sinfo.time) > 6*time.Second:
 | 
			
		||||
			if sinfo.time.Before(sinfo.pingTime) && time.Since(sinfo.pingTime) > 6*time.Second {
 | 
			
		||||
				// TODO double check that the above condition is correct
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,6 @@ type searchInfo struct {
 | 
			
		|||
	dest     crypto.NodeID
 | 
			
		||||
	mask     crypto.NodeID
 | 
			
		||||
	time     time.Time
 | 
			
		||||
	packet   []byte
 | 
			
		||||
	toVisit  []*dhtInfo
 | 
			
		||||
	visited  map[crypto.NodeID]bool
 | 
			
		||||
	callback func(*sessionInfo, error)
 | 
			
		||||
| 
						 | 
				
			
			@ -215,7 +214,6 @@ func (sinfo *searchInfo) checkDHTRes(res *dhtRes) bool {
 | 
			
		|||
	}
 | 
			
		||||
	// FIXME (!) replay attacks could mess with coords? Give it a handle (tstamp)?
 | 
			
		||||
	sess.coords = res.Coords
 | 
			
		||||
	sess.packet = sinfo.packet
 | 
			
		||||
	sinfo.core.sessions.ping(sess)
 | 
			
		||||
	sinfo.callback(sess, nil)
 | 
			
		||||
	// Cleanup
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,7 +39,6 @@ type sessionInfo struct {
 | 
			
		|||
	pingTime       time.Time                // time the first ping was sent since the last received packet
 | 
			
		||||
	pingSend       time.Time                // time the last ping was sent
 | 
			
		||||
	coords         []byte                   // coords of destination
 | 
			
		||||
	packet         []byte                   // a buffered packet, sent immediately on ping/pong
 | 
			
		||||
	init           bool                     // Reset if coords change
 | 
			
		||||
	tstamp         int64                    // ATOMIC - tstamp from their last session ping, replay attack mitigation
 | 
			
		||||
	bytesSent      uint64                   // Bytes of real traffic sent in this session
 | 
			
		||||
| 
						 | 
				
			
			@ -325,8 +324,8 @@ func (ss *sessions) sendPingPong(sinfo *sessionInfo, isPong bool) {
 | 
			
		|||
	}
 | 
			
		||||
	packet := p.encode()
 | 
			
		||||
	ss.core.router.out(packet)
 | 
			
		||||
	if !isPong {
 | 
			
		||||
		sinfo.pingSend = time.Now()
 | 
			
		||||
	if sinfo.pingTime.Before(sinfo.time) {
 | 
			
		||||
		sinfo.pingTime = time.Now()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -367,15 +366,6 @@ func (ss *sessions) handlePing(ping *sessionPing) {
 | 
			
		|||
		if !ping.IsPong {
 | 
			
		||||
			ss.sendPingPong(sinfo, true)
 | 
			
		||||
		}
 | 
			
		||||
		if sinfo.packet != nil {
 | 
			
		||||
			/* FIXME this needs to live in the net.Conn or something, needs work in Write
 | 
			
		||||
			// send
 | 
			
		||||
			var bs []byte
 | 
			
		||||
			bs, sinfo.packet = sinfo.packet, nil
 | 
			
		||||
			ss.core.router.sendPacket(bs) // FIXME this needs to live in the net.Conn or something, needs work in Write
 | 
			
		||||
			*/
 | 
			
		||||
			sinfo.packet = nil
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue