mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03:00 
			
		
		
		
	possibly fix admin socket getnodeinfo
This commit is contained in:
		
							parent
							
								
									fad071ffe9
								
							
						
					
					
						commit
						eb4a22724f
					
				
					 2 changed files with 7 additions and 27 deletions
				
			
		| 
						 | 
					@ -23,7 +23,6 @@ type nodeinfo struct {
 | 
				
			||||||
	tun        *TunAdapter
 | 
						tun        *TunAdapter
 | 
				
			||||||
	myNodeInfo NodeInfoPayload
 | 
						myNodeInfo NodeInfoPayload
 | 
				
			||||||
	callbacks  map[keyArray]nodeinfoCallback
 | 
						callbacks  map[keyArray]nodeinfoCallback
 | 
				
			||||||
	cache      map[keyArray]nodeinfoCached
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type nodeinfoCached struct {
 | 
					type nodeinfoCached struct {
 | 
				
			||||||
| 
						 | 
					@ -54,8 +53,6 @@ func (m *nodeinfo) init(tun *TunAdapter) {
 | 
				
			||||||
func (m *nodeinfo) _init(tun *TunAdapter) {
 | 
					func (m *nodeinfo) _init(tun *TunAdapter) {
 | 
				
			||||||
	m.tun = tun
 | 
						m.tun = tun
 | 
				
			||||||
	m.callbacks = make(map[keyArray]nodeinfoCallback)
 | 
						m.callbacks = make(map[keyArray]nodeinfoCallback)
 | 
				
			||||||
	m.cache = make(map[keyArray]nodeinfoCached)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	m._cleanup()
 | 
						m._cleanup()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,11 +62,6 @@ func (m *nodeinfo) _cleanup() {
 | 
				
			||||||
			delete(m.callbacks, boxPubKey)
 | 
								delete(m.callbacks, boxPubKey)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for boxPubKey, cache := range m.cache {
 | 
					 | 
				
			||||||
		if time.Since(cache.created) > time.Hour {
 | 
					 | 
				
			||||||
			delete(m.cache, boxPubKey)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	time.AfterFunc(time.Second*30, func() {
 | 
						time.AfterFunc(time.Second*30, func() {
 | 
				
			||||||
		m.Act(nil, m._cleanup)
 | 
							m.Act(nil, m._cleanup)
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
| 
						 | 
					@ -152,22 +144,6 @@ func (m *nodeinfo) _setNodeInfo(given interface{}, privacy bool) error {
 | 
				
			||||||
	return err
 | 
						return err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Add nodeinfo into the cache for a node
 | 
					 | 
				
			||||||
func (m *nodeinfo) _addCachedNodeInfo(key keyArray, payload NodeInfoPayload) {
 | 
					 | 
				
			||||||
	m.cache[key] = nodeinfoCached{
 | 
					 | 
				
			||||||
		created: time.Now(),
 | 
					 | 
				
			||||||
		payload: payload,
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Get a nodeinfo entry from the cache
 | 
					 | 
				
			||||||
func (m *nodeinfo) _getCachedNodeInfo(key keyArray) (NodeInfoPayload, error) {
 | 
					 | 
				
			||||||
	if nodeinfo, ok := m.cache[key]; ok {
 | 
					 | 
				
			||||||
		return nodeinfo.payload, nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return NodeInfoPayload{}, errors.New("No cache entry found")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (m *nodeinfo) sendReq(from phony.Actor, key keyArray, callback func(nodeinfo NodeInfoPayload)) {
 | 
					func (m *nodeinfo) sendReq(from phony.Actor, key keyArray, callback func(nodeinfo NodeInfoPayload)) {
 | 
				
			||||||
	m.Act(from, func() {
 | 
						m.Act(from, func() {
 | 
				
			||||||
		m._sendReq(key, callback)
 | 
							m._sendReq(key, callback)
 | 
				
			||||||
| 
						 | 
					@ -190,7 +166,6 @@ func (m *nodeinfo) handleReq(from phony.Actor, key keyArray) {
 | 
				
			||||||
func (m *nodeinfo) handleRes(from phony.Actor, key keyArray, info NodeInfoPayload) {
 | 
					func (m *nodeinfo) handleRes(from phony.Actor, key keyArray, info NodeInfoPayload) {
 | 
				
			||||||
	m.Act(from, func() {
 | 
						m.Act(from, func() {
 | 
				
			||||||
		m._callback(key, info)
 | 
							m._callback(key, info)
 | 
				
			||||||
		m._addCachedNodeInfo(key, info)
 | 
					 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -204,7 +179,7 @@ func (m *nodeinfo) _sendRes(key keyArray) {
 | 
				
			||||||
type GetNodeInfoRequest struct {
 | 
					type GetNodeInfoRequest struct {
 | 
				
			||||||
	Key string `json:"key"`
 | 
						Key string `json:"key"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
type GetNodeInfoResponse map[string]NodeInfoPayload
 | 
					type GetNodeInfoResponse map[string]interface{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *nodeinfo) nodeInfoAdminHandler(in json.RawMessage) (interface{}, error) {
 | 
					func (m *nodeinfo) nodeInfoAdminHandler(in json.RawMessage) (interface{}, error) {
 | 
				
			||||||
	var req GetNodeInfoRequest
 | 
						var req GetNodeInfoRequest
 | 
				
			||||||
| 
						 | 
					@ -228,7 +203,11 @@ func (m *nodeinfo) nodeInfoAdminHandler(in json.RawMessage) (interface{}, error)
 | 
				
			||||||
	case <-timer.C:
 | 
						case <-timer.C:
 | 
				
			||||||
		return nil, errors.New("timeout")
 | 
							return nil, errors.New("timeout")
 | 
				
			||||||
	case info := <-ch:
 | 
						case info := <-ch:
 | 
				
			||||||
		res := GetNodeInfoResponse{req.Key: info}
 | 
							var msg json.RawMessage
 | 
				
			||||||
 | 
							if err := msg.UnmarshalJSON(info); err != nil {
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							res := GetNodeInfoResponse{req.Key: msg}
 | 
				
			||||||
		return res, nil
 | 
							return res, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -109,6 +109,7 @@ func (tun *TunAdapter) Init(core *yggdrasil.Core, config *config.NodeState, log
 | 
				
			||||||
	tun.config = config
 | 
						tun.config = config
 | 
				
			||||||
	tun.log = log
 | 
						tun.log = log
 | 
				
			||||||
	tun.nodeinfo.init(tun)
 | 
						tun.nodeinfo.init(tun)
 | 
				
			||||||
 | 
						tun.nodeinfo.setNodeInfo(config.Current.NodeInfo, config.Current.NodeInfoPrivacy)
 | 
				
			||||||
	if err := tun.core.SetOutOfBandHandler(tun.oobHandler); err != nil {
 | 
						if err := tun.core.SetOutOfBandHandler(tun.oobHandler); err != nil {
 | 
				
			||||||
		return fmt.Errorf("tun.core.SetOutOfBandHander: %w", err)
 | 
							return fmt.Errorf("tun.core.SetOutOfBandHander: %w", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue