|
8 | 8 | "log/slog"
|
9 | 9 | "net"
|
10 | 10 | "net/netip"
|
| 11 | + "os" |
| 12 | + "os/user" |
11 | 13 | "sync"
|
12 | 14 | "time"
|
13 | 15 |
|
@@ -68,19 +70,12 @@ func (s *Send) ListenOverlaySTUN(ctx context.Context) error {
|
68 | 70 | _ = conn.Close()
|
69 | 71 | }()
|
70 | 72 |
|
71 |
| - raw, err := json.Marshal(overlayMessage{ |
72 |
| - Typ: messageTypeHello, |
73 |
| - }) |
74 |
| - if err != nil { |
75 |
| - panic("marshal node: " + err.Error()) |
76 |
| - } |
77 |
| - |
| 73 | + sealed := s.newHelloPacket() |
78 | 74 | receiverAddr := s.Auth.ReceiverStunAddr
|
79 | 75 | if s.STUNIPOverride.IsValid() {
|
80 | 76 | receiverAddr = netip.AddrPortFrom(s.STUNIPOverride, s.Auth.ReceiverStunAddr.Port())
|
81 | 77 | }
|
82 | 78 |
|
83 |
| - sealed := s.Auth.OverlayPrivateKey.SealTo(s.Auth.ReceiverPublicKey, raw) |
84 | 79 | _, err = conn.WriteToUDPAddrPort(sealed, receiverAddr)
|
85 | 80 | if err != nil {
|
86 | 81 | return fmt.Errorf("send overlay hello over STUN: %w", err)
|
@@ -168,14 +163,7 @@ func (s *Send) ListenOverlayDERP(ctx context.Context) error {
|
168 | 163 | return err
|
169 | 164 | }
|
170 | 165 |
|
171 |
| - raw, err := json.Marshal(overlayMessage{ |
172 |
| - Typ: messageTypeHello, |
173 |
| - }) |
174 |
| - if err != nil { |
175 |
| - panic("marshal node: " + err.Error()) |
176 |
| - } |
177 |
| - |
178 |
| - sealed := s.Auth.OverlayPrivateKey.SealTo(s.Auth.ReceiverPublicKey, raw) |
| 166 | + sealed := s.newHelloPacket() |
179 | 167 | err = c.Send(s.Auth.ReceiverPublicKey, sealed)
|
180 | 168 | if err != nil {
|
181 | 169 | return fmt.Errorf("send overlay hello over derp: %w", err)
|
@@ -236,6 +224,34 @@ func (s *Send) ListenOverlayDERP(ctx context.Context) error {
|
236 | 224 | }
|
237 | 225 | }
|
238 | 226 |
|
| 227 | +func (s *Send) newHelloPacket() []byte { |
| 228 | + var ( |
| 229 | + username, |
| 230 | + hostname string |
| 231 | + ) |
| 232 | + |
| 233 | + cu, _ := user.Current() |
| 234 | + if cu != nil { |
| 235 | + username = cu.Username |
| 236 | + } |
| 237 | + hostname, _ = os.Hostname() |
| 238 | + |
| 239 | + raw, err := json.Marshal(overlayMessage{ |
| 240 | + Typ: messageTypeHello, |
| 241 | + HostInfo: HostInfo{ |
| 242 | + Username: username, |
| 243 | + Hostname: hostname, |
| 244 | + }, |
| 245 | + }) |
| 246 | + if err != nil { |
| 247 | + panic("marshal node: " + err.Error()) |
| 248 | + } |
| 249 | + |
| 250 | + fmt.Println("sending", string(raw)) |
| 251 | + sealed := s.Auth.OverlayPrivateKey.SealTo(s.Auth.ReceiverPublicKey, raw) |
| 252 | + return sealed |
| 253 | +} |
| 254 | + |
239 | 255 | func (s *Send) handleNextMessage(msg []byte) (resRaw []byte, _ error) {
|
240 | 256 | cleartext, ok := s.Auth.OverlayPrivateKey.OpenFrom(s.Auth.ReceiverPublicKey, msg)
|
241 | 257 | if !ok {
|
|
0 commit comments