mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03:00 
			
		
		
		
	add remote debugGetSelf and fix some return type things in the other debug functions
This commit is contained in:
		
							parent
							
								
									c7b004d36f
								
							
						
					
					
						commit
						233cf0c962
					
				
					 2 changed files with 73 additions and 5 deletions
				
			
		| 
						 | 
					@ -35,6 +35,7 @@ func (t *TunAdapter) SetupAdminHandlers(a *admin.AdminSocket) {
 | 
				
			||||||
		return res, nil
 | 
							return res, nil
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	_ = a.AddHandler("getNodeInfo", []string{"key"}, t.nodeinfo.nodeInfoAdminHandler)
 | 
						_ = a.AddHandler("getNodeInfo", []string{"key"}, t.nodeinfo.nodeInfoAdminHandler)
 | 
				
			||||||
 | 
						_ = a.AddHandler("debugGetSelf", []string{"key"}, t.debug.getSelfHandler)
 | 
				
			||||||
	_ = a.AddHandler("debugGetPeers", []string{"key"}, t.debug.getPeersHandler)
 | 
						_ = a.AddHandler("debugGetPeers", []string{"key"}, t.debug.getPeersHandler)
 | 
				
			||||||
	_ = a.AddHandler("debugGetDHT", []string{"key"}, t.debug.getDHTHandler)
 | 
						_ = a.AddHandler("debugGetDHT", []string{"key"}, t.debug.getDHTHandler)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,13 +28,14 @@ type reqInfo struct {
 | 
				
			||||||
type debugHandler struct {
 | 
					type debugHandler struct {
 | 
				
			||||||
	phony.Inbox
 | 
						phony.Inbox
 | 
				
			||||||
	tun   *TunAdapter
 | 
						tun   *TunAdapter
 | 
				
			||||||
	sreqs struct{} // TODO
 | 
						sreqs map[keyArray]*reqInfo
 | 
				
			||||||
	preqs map[keyArray]*reqInfo
 | 
						preqs map[keyArray]*reqInfo
 | 
				
			||||||
	dreqs map[keyArray]*reqInfo
 | 
						dreqs map[keyArray]*reqInfo
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (d *debugHandler) init(tun *TunAdapter) {
 | 
					func (d *debugHandler) init(tun *TunAdapter) {
 | 
				
			||||||
	d.tun = tun
 | 
						d.tun = tun
 | 
				
			||||||
 | 
						d.sreqs = make(map[keyArray]*reqInfo)
 | 
				
			||||||
	d.preqs = make(map[keyArray]*reqInfo)
 | 
						d.preqs = make(map[keyArray]*reqInfo)
 | 
				
			||||||
	d.dreqs = make(map[keyArray]*reqInfo)
 | 
						d.dreqs = make(map[keyArray]*reqInfo)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -67,12 +68,41 @@ func (d *debugHandler) _handleDebug(key keyArray, bs []byte) {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *debugHandler) sendGetSelfRequest(key keyArray, callback func([]byte)) {
 | 
				
			||||||
 | 
						d.Act(nil, func() {
 | 
				
			||||||
 | 
							if info := d.sreqs[key]; info != nil {
 | 
				
			||||||
 | 
								info.timer.Stop()
 | 
				
			||||||
 | 
								delete(d.sreqs, key)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							info := new(reqInfo)
 | 
				
			||||||
 | 
							info.callback = callback
 | 
				
			||||||
 | 
							info.timer = time.AfterFunc(time.Minute, func() {
 | 
				
			||||||
 | 
								d.Act(nil, func() {
 | 
				
			||||||
 | 
									if d.sreqs[key] == info {
 | 
				
			||||||
 | 
										delete(d.sreqs, key)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							d.sreqs[key] = info
 | 
				
			||||||
 | 
							d._sendDebug(key, typeDebugGetSelfRequest, nil)
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (d *debugHandler) _handleGetSelfRequest(key keyArray) {
 | 
					func (d *debugHandler) _handleGetSelfRequest(key keyArray) {
 | 
				
			||||||
	// TODO
 | 
						self := d.tun.core.GetSelf()
 | 
				
			||||||
 | 
						bs, err := json.Marshal(self)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						d._sendDebug(key, typeDebugGetSelfResponse, bs)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (d *debugHandler) _handleGetSelfResponse(key keyArray, bs []byte) {
 | 
					func (d *debugHandler) _handleGetSelfResponse(key keyArray, bs []byte) {
 | 
				
			||||||
	// TODO
 | 
						if info := d.sreqs[key]; info != nil {
 | 
				
			||||||
 | 
							info.timer.Stop()
 | 
				
			||||||
 | 
							info.callback(bs)
 | 
				
			||||||
 | 
							delete(d.sreqs, key)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (d *debugHandler) sendGetPeersRequest(key keyArray, callback func([]byte)) {
 | 
					func (d *debugHandler) sendGetPeersRequest(key keyArray, callback func([]byte)) {
 | 
				
			||||||
| 
						 | 
					@ -166,6 +196,43 @@ func (d *debugHandler) _sendDebug(key keyArray, dType uint8, data []byte) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Admin socket stuff
 | 
					// Admin socket stuff
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type DebugGetSelfRequest struct {
 | 
				
			||||||
 | 
						Key string `json:"key"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type DebugGetSelfResponse map[string]interface{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *debugHandler) getSelfHandler(in json.RawMessage) (interface{}, error) {
 | 
				
			||||||
 | 
						var req DebugGetSelfRequest
 | 
				
			||||||
 | 
						if err := json.Unmarshal(in, &req); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						var key keyArray
 | 
				
			||||||
 | 
						var kbs []byte
 | 
				
			||||||
 | 
						var err error
 | 
				
			||||||
 | 
						if kbs, err = hex.DecodeString(req.Key); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						copy(key[:], kbs)
 | 
				
			||||||
 | 
						ch := make(chan []byte, 1)
 | 
				
			||||||
 | 
						d.sendGetSelfRequest(key, func(info []byte) {
 | 
				
			||||||
 | 
							ch <- info
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						timer := time.NewTimer(6 * time.Second)
 | 
				
			||||||
 | 
						defer timer.Stop()
 | 
				
			||||||
 | 
						select {
 | 
				
			||||||
 | 
						case <-timer.C:
 | 
				
			||||||
 | 
							return nil, errors.New("timeout")
 | 
				
			||||||
 | 
						case info := <-ch:
 | 
				
			||||||
 | 
							var msg json.RawMessage
 | 
				
			||||||
 | 
							if err := msg.UnmarshalJSON(info); err != nil {
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							res := DebugGetSelfResponse{req.Key: msg}
 | 
				
			||||||
 | 
							return res, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type DebugGetPeersRequest struct {
 | 
					type DebugGetPeersRequest struct {
 | 
				
			||||||
	Key string `json:"key"`
 | 
						Key string `json:"key"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -208,7 +275,7 @@ func (d *debugHandler) getPeersHandler(in json.RawMessage) (interface{}, error)
 | 
				
			||||||
		if err := msg.UnmarshalJSON(js); err != nil {
 | 
							if err := msg.UnmarshalJSON(js); err != nil {
 | 
				
			||||||
			return nil, err
 | 
								return nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		res := GetNodeInfoResponse{req.Key: msg}
 | 
							res := DebugGetPeersResponse{req.Key: msg}
 | 
				
			||||||
		return res, nil
 | 
							return res, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -255,7 +322,7 @@ func (d *debugHandler) getDHTHandler(in json.RawMessage) (interface{}, error) {
 | 
				
			||||||
		if err := msg.UnmarshalJSON(js); err != nil {
 | 
							if err := msg.UnmarshalJSON(js); err != nil {
 | 
				
			||||||
			return nil, err
 | 
								return nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		res := GetNodeInfoResponse{req.Key: msg}
 | 
							res := DebugGetDHTResponse{req.Key: msg}
 | 
				
			||||||
		return res, nil
 | 
							return res, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue