MCPcopy Index your code
hub / github.com/coder/coder / ProtoToNode

Function ProtoToNode

tailnet/convert.go:68–109  ·  view source on GitHub ↗
(p *proto.Node)

Source from the content-addressed store, hash-verified

66}
67
68func ProtoToNode(p *proto.Node) (*Node, error) {
69 k := key.NodePublic{}
70 err := k.UnmarshalBinary(p.GetKey())
71 if err != nil {
72 return nil, err
73 }
74 disco := key.DiscoPublic{}
75 err = disco.UnmarshalText([]byte(p.GetDisco()))
76 if err != nil {
77 return nil, err
78 }
79 derpForcedWebsocket := make(map[int]string)
80 for i, s := range p.GetDerpForcedWebsocket() {
81 derpForcedWebsocket[int(i)] = s
82 }
83 addresses := make([]netip.Prefix, len(p.GetAddresses()))
84 for i, prefix := range p.GetAddresses() {
85 err = addresses[i].UnmarshalText([]byte(prefix))
86 if err != nil {
87 return nil, err
88 }
89 }
90 allowedIPs := make([]netip.Prefix, len(p.GetAllowedIps()))
91 for i, prefix := range p.GetAllowedIps() {
92 err = allowedIPs[i].UnmarshalText([]byte(prefix))
93 if err != nil {
94 return nil, err
95 }
96 }
97 return &Node{
98 ID: tailcfg.NodeID(p.GetId()),
99 AsOf: p.GetAsOf().AsTime(),
100 Key: k,
101 DiscoKey: disco,
102 PreferredDERP: int(p.GetPreferredDerp()),
103 DERPLatency: p.GetDerpLatency(),
104 DERPForcedWebsocket: derpForcedWebsocket,
105 Addresses: addresses,
106 AllowedIPs: allowedIPs,
107 Endpoints: p.Endpoints,
108 }, nil
109}
110
111func OnlyNodeUpdates(resp *proto.CoordinateResponse) ([]*Node, error) {
112 nodes := make([]*Node, 0, len(resp.GetPeerUpdates()))

Callers 4

TestNodeFunction · 0.92
OnlyNodeUpdatesFunction · 0.85
nodeMethod · 0.85
protoNodeToTailcfgMethod · 0.85

Calls 10

UnmarshalTextMethod · 0.80
GetDiscoMethod · 0.80
GetAddressesMethod · 0.80
GetAllowedIpsMethod · 0.80
GetAsOfMethod · 0.80
GetKeyMethod · 0.45
GetIdMethod · 0.45
GetPreferredDerpMethod · 0.45
GetDerpLatencyMethod · 0.45

Tested by 1

TestNodeFunction · 0.74