systemd: merge API/gateway addresses
Instead of letting systemd override the configured addresses, merge them. This is likely the "expected" behavior.
Steven Allen committed
Sep 24, 2019 at 19:56 UTC
a4914a44785304c28ddf7420b03796bf4721a4fd
1 file changed
+45
-31
cmd/ipfs/daemon.go
+45
-31
@@ -443,29 +443,35 @@ func serveHTTPApi(req *cmds.Request, cctx *oldcmds.Context) (<-chan error, error
443
return nil, fmt.Errorf("serveHTTPApi: socket activation failed: %s", err)
444
}
445
446
- if len(listeners) == 0 {
447
- apiAddrs := make([]string, 0, 2)
448
- apiAddr, _ := req.Options[commands.ApiOption].(string)
449
- if apiAddr == "" {
450
- apiAddrs = cfg.Addresses.API
451
- } else {
452
- apiAddrs = append(apiAddrs, apiAddr)
453
- }
446
+ apiAddrs := make([]string, 0, 2)
447
+ apiAddr, _ := req.Options[commands.ApiOption].(string)
448
+ if apiAddr == "" {
449
+ apiAddrs = cfg.Addresses.API
450
+ } else {
451
+ apiAddrs = append(apiAddrs, apiAddr)
452
+ }
453
455
- listeners := make([]manet.Listener, 0, len(apiAddrs))
456
- for _, addr := range apiAddrs {
457
- apiMaddr, err := ma.NewMultiaddr(addr)
458
- if err != nil {
459
- return nil, fmt.Errorf("serveHTTPApi: invalid API address: %q (err: %s)", apiAddr, err)
460
- }
454
+ listenerAddrs := make(map[string]bool, len(listeners))
455
+ for _, listener := range listeners {
456
+ listenerAddrs[string(listener.Multiaddr().Bytes())] = true
457
+ }
458
462
- apiLis, err := manet.Listen(apiMaddr)
463
- if err != nil {
464
- return nil, fmt.Errorf("serveHTTPApi: manet.Listen(%s) failed: %s", apiMaddr, err)
465
- }
459
+ for _, addr := range apiAddrs {
460
+ apiMaddr, err := ma.NewMultiaddr(addr)
461
+ if err != nil {
462
+ return nil, fmt.Errorf("serveHTTPApi: invalid API address: %q (err: %s)", apiAddr, err)
463
+ }
464
+ if listenerAddrs[string(apiMaddr.Bytes())] {
465
+ continue
466
+ }
467
467
- listeners = append(listeners, apiLis)
468
+ apiLis, err := manet.Listen(apiMaddr)
469
+ if err != nil {
470
+ return nil, fmt.Errorf("serveHTTPApi: manet.Listen(%s) failed: %s", apiMaddr, err)
471
}
472
+
473
+ listenerAddrs[string(apiMaddr.Bytes())] = true
474
+ listeners = append(listeners, apiLis)
475
}
476
477
for _, listener := range listeners {
@@ -577,20 +583,28 @@ func serveHTTPGateway(req *cmds.Request, cctx *oldcmds.Context) (<-chan error, e
583
return nil, fmt.Errorf("serveHTTPGateway: socket activation failed: %s", err)
584
}
585
580
- if len(listeners) == 0 {
581
- gatewayAddrs := cfg.Addresses.Gateway
582
- for _, addr := range gatewayAddrs {
583
- gatewayMaddr, err := ma.NewMultiaddr(addr)
584
- if err != nil {
585
- return nil, fmt.Errorf("serveHTTPGateway: invalid gateway address: %q (err: %s)", addr, err)
586
- }
586
+ listenerAddrs := make(map[string]bool, len(listeners))
587
+ for _, listener := range listeners {
588
+ listenerAddrs[string(listener.Multiaddr().Bytes())] = true
589
+ }
590
588
- gwLis, err := manet.Listen(gatewayMaddr)
589
- if err != nil {
590
- return nil, fmt.Errorf("serveHTTPGateway: manet.Listen(%s) failed: %s", gatewayMaddr, err)
591
- }
592
- listeners = append(listeners, gwLis)
591
+ gatewayAddrs := cfg.Addresses.Gateway
592
+ for _, addr := range gatewayAddrs {
593
+ gatewayMaddr, err := ma.NewMultiaddr(addr)
594
+ if err != nil {
595
+ return nil, fmt.Errorf("serveHTTPGateway: invalid gateway address: %q (err: %s)", addr, err)
596
+ }
597
+
598
+ if listenerAddrs[string(gatewayMaddr.Bytes())] {
599
+ continue
600
+ }
601
+
602
+ gwLis, err := manet.Listen(gatewayMaddr)
603
+ if err != nil {
604
+ return nil, fmt.Errorf("serveHTTPGateway: manet.Listen(%s) failed: %s", gatewayMaddr, err)
605
}
606
+ listenerAddrs[string(gatewayMaddr.Bytes())] = true
607
+ listeners = append(listeners, gwLis)
608
}
609
610
// we might have listened to /tcp/0 - lets see what we are listing on