@cryptotaxi247 / kubo / commits / a4914a447

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