|
|
@@ -404,6 +404,27 @@ func initialize(c *cli.Context) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+// ipcEndpoint resolves an IPC endpoint based on a configured value, taking into
|
|
|
+// account the set data folders as well as the designated platform we're currently
|
|
|
+// running on.
|
|
|
+func ipcEndpoint(ipcPath, datadir string) string {
|
|
|
+ // On windows we can only use plain top-level pipes
|
|
|
+ if runtime.GOOS == "windows" {
|
|
|
+ if strings.HasPrefix(ipcPath, `\\.\pipe\`) {
|
|
|
+ return ipcPath
|
|
|
+ }
|
|
|
+ return `\\.\pipe\` + ipcPath
|
|
|
+ }
|
|
|
+ // Resolve names into the data directory full paths otherwise
|
|
|
+ if filepath.Base(ipcPath) == ipcPath {
|
|
|
+ if datadir == "" {
|
|
|
+ return filepath.Join(os.TempDir(), ipcPath)
|
|
|
+ }
|
|
|
+ return filepath.Join(datadir, ipcPath)
|
|
|
+ }
|
|
|
+ return ipcPath
|
|
|
+}
|
|
|
+
|
|
|
func signer(c *cli.Context) error {
|
|
|
// If we have some unrecognized command, bail out
|
|
|
if args := c.Args(); len(args) > 0 {
|
|
|
@@ -532,12 +553,8 @@ func signer(c *cli.Context) error {
|
|
|
}()
|
|
|
}
|
|
|
if !c.GlobalBool(utils.IPCDisabledFlag.Name) {
|
|
|
- if c.IsSet(utils.IPCPathFlag.Name) {
|
|
|
- ipcapiURL = c.GlobalString(utils.IPCPathFlag.Name)
|
|
|
- } else {
|
|
|
- ipcapiURL = filepath.Join(configDir, "clef.ipc")
|
|
|
- }
|
|
|
-
|
|
|
+ givenPath := c.GlobalString(utils.IPCPathFlag.Name)
|
|
|
+ ipcapiURL = ipcEndpoint(filepath.Join(givenPath, "clef.ipc"), configDir)
|
|
|
listener, _, err := rpc.StartIPCEndpoint(ipcapiURL, rpcAPI)
|
|
|
if err != nil {
|
|
|
utils.Fatalf("Could not start IPC api: %v", err)
|
|
|
@@ -547,7 +564,6 @@ func signer(c *cli.Context) error {
|
|
|
listener.Close()
|
|
|
log.Info("IPC endpoint closed", "url", ipcapiURL)
|
|
|
}()
|
|
|
-
|
|
|
}
|
|
|
|
|
|
if c.GlobalBool(testFlag.Name) {
|