Jiri Simsa | d7616c9 | 2015-03-24 23:44:30 -0700 | [diff] [blame] | 1 | // Copyright 2015 The Vanadium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
Suharsh Sivakumar | 3f0eaf9 | 2015-01-15 09:48:44 -0800 | [diff] [blame] | 5 | // +build linux darwin |
| 6 | |
Suharsh Sivakumar | 40e52e9 | 2015-05-11 15:37:00 -0700 | [diff] [blame] | 7 | // Package roaming implements a RuntimeFactory suitable for a variety of network |
Todd Wang | 8c4e5cc | 2015-04-09 11:30:52 -0700 | [diff] [blame] | 8 | // configurations, including 1-1 NATs, dhcp auto-configuration, and Google |
| 9 | // Compute Engine. |
Suharsh Sivakumar | 3f0eaf9 | 2015-01-15 09:48:44 -0800 | [diff] [blame] | 10 | // |
Cosmos Nicolaou | 11c0ca1 | 2015-04-23 16:23:43 -0700 | [diff] [blame] | 11 | // The pubsub.Publisher mechanism is used for communicating networking |
Matt Rosencrantz | 94502cf | 2015-03-18 09:43:44 -0700 | [diff] [blame] | 12 | // settings to the rpc.Server implementation of the runtime and publishes |
Suharsh Sivakumar | 3f0eaf9 | 2015-01-15 09:48:44 -0800 | [diff] [blame] | 13 | // the Settings it expects. |
Suharsh Sivakumar | 98aa48c | 2015-01-14 16:11:30 -0800 | [diff] [blame] | 14 | package roaming |
| 15 | |
| 16 | import ( |
| 17 | "flag" |
Cosmos Nicolaou | aa87e29 | 2015-04-21 22:15:50 -0700 | [diff] [blame] | 18 | |
Jiri Simsa | 6ac9522 | 2015-02-23 16:11:49 -0800 | [diff] [blame] | 19 | "v.io/v23" |
Jiri Simsa | 6ac9522 | 2015-02-23 16:11:49 -0800 | [diff] [blame] | 20 | "v.io/v23/context" |
Matt Rosencrantz | c1490fe | 2015-10-06 14:02:32 -0700 | [diff] [blame] | 21 | "v.io/v23/flow" |
Matt Rosencrantz | 94502cf | 2015-03-18 09:43:44 -0700 | [diff] [blame] | 22 | "v.io/v23/rpc" |
Cosmos Nicolaou | aa87e29 | 2015-04-21 22:15:50 -0700 | [diff] [blame] | 23 | |
Cosmos Nicolaou | 0e4e392 | 2015-06-10 16:30:09 -0700 | [diff] [blame] | 24 | "v.io/x/ref/internal/logger" |
Jungho Ahn | 1eb602f | 2015-10-08 14:54:30 -0700 | [diff] [blame] | 25 | dfactory "v.io/x/ref/lib/discovery/factory" |
Jiri Simsa | ffceefa | 2015-02-28 11:03:34 -0800 | [diff] [blame] | 26 | "v.io/x/ref/lib/flags" |
Jiri Simsa | 574ec4b | 2015-08-11 09:31:37 -0700 | [diff] [blame] | 27 | "v.io/x/ref/lib/pubsub" |
Todd Wang | b351149 | 2015-04-07 23:32:34 -0700 | [diff] [blame] | 28 | "v.io/x/ref/lib/security/securityflag" |
Suharsh Sivakumar | dcc11d7 | 2015-05-11 12:19:20 -0700 | [diff] [blame] | 29 | "v.io/x/ref/runtime/internal" |
| 30 | "v.io/x/ref/runtime/internal/lib/appcycle" |
Suharsh Sivakumar | a6ba641 | 2015-10-26 22:06:43 -0700 | [diff] [blame] | 31 | "v.io/x/ref/runtime/internal/lib/roaming" |
Suharsh Sivakumar | 0219ebb | 2015-08-27 15:04:00 -0700 | [diff] [blame] | 32 | "v.io/x/ref/runtime/internal/rt" |
Suharsh Sivakumar | 73e2ee3 | 2016-03-22 14:19:10 -0700 | [diff] [blame] | 33 | "v.io/x/ref/runtime/protocols/lib/websocket" |
Suharsh Sivakumar | c9432b1 | 2015-12-04 18:32:07 -0800 | [diff] [blame] | 34 | _ "v.io/x/ref/runtime/protocols/tcp" |
| 35 | _ "v.io/x/ref/runtime/protocols/ws" |
| 36 | _ "v.io/x/ref/runtime/protocols/wsh" |
Suharsh Sivakumar | 0219ebb | 2015-08-27 15:04:00 -0700 | [diff] [blame] | 37 | "v.io/x/ref/services/debug/debuglib" |
Suharsh Sivakumar | 98aa48c | 2015-01-14 16:11:30 -0800 | [diff] [blame] | 38 | ) |
| 39 | |
Suharsh Sivakumar | d68949c | 2015-01-26 10:32:23 -0800 | [diff] [blame] | 40 | var commonFlags *flags.Flags |
Suharsh Sivakumar | 98aa48c | 2015-01-14 16:11:30 -0800 | [diff] [blame] | 41 | |
| 42 | func init() { |
Suharsh Sivakumar | 40e52e9 | 2015-05-11 15:37:00 -0700 | [diff] [blame] | 43 | v23.RegisterRuntimeFactory(Init) |
Suharsh Sivakumar | 73e2ee3 | 2016-03-22 14:19:10 -0700 | [diff] [blame] | 44 | flow.RegisterUnknownProtocol("wsh", websocket.WSH{}) |
Suharsh Sivakumar | d68949c | 2015-01-26 10:32:23 -0800 | [diff] [blame] | 45 | commonFlags = flags.CreateAndRegister(flag.CommandLine, flags.Runtime, flags.Listen) |
Suharsh Sivakumar | 98aa48c | 2015-01-14 16:11:30 -0800 | [diff] [blame] | 46 | } |
| 47 | |
Jiri Simsa | 6ac9522 | 2015-02-23 16:11:49 -0800 | [diff] [blame] | 48 | func Init(ctx *context.T) (v23.Runtime, *context.T, v23.Shutdown, error) { |
Nicolas Lacasse | 7c45dd3 | 2015-08-28 11:09:24 -0700 | [diff] [blame] | 49 | if err := internal.ParseFlagsAndConfigureGlobalLogger(commonFlags); err != nil { |
Matt Rosencrantz | 1b79391 | 2015-01-23 13:32:53 -0800 | [diff] [blame] | 50 | return nil, nil, nil, err |
| 51 | } |
Suharsh Sivakumar | d68949c | 2015-01-26 10:32:23 -0800 | [diff] [blame] | 52 | |
Robin Thellend | aeffbf3 | 2016-04-09 20:39:07 -0700 | [diff] [blame] | 53 | if err := internal.InitCloudVM(); err != nil { |
| 54 | return nil, nil, nil, err |
| 55 | } |
| 56 | |
Jungho Ahn | 1eb602f | 2015-10-08 14:54:30 -0700 | [diff] [blame] | 57 | ac := appcycle.New() |
Jungho Ahn | ad3677e | 2016-01-29 16:12:05 -0800 | [diff] [blame] | 58 | discoveryFactory, err := dfactory.New(ctx) |
Jungho Ahn | 1eb602f | 2015-10-08 14:54:30 -0700 | [diff] [blame] | 59 | if err != nil { |
| 60 | ac.Shutdown() |
| 61 | return nil, nil, nil, err |
| 62 | } |
| 63 | |
Suharsh Sivakumar | 98aa48c | 2015-01-14 16:11:30 -0800 | [diff] [blame] | 64 | lf := commonFlags.ListenFlags() |
Matt Rosencrantz | 94502cf | 2015-03-18 09:43:44 -0700 | [diff] [blame] | 65 | listenSpec := rpc.ListenSpec{ |
Asim Shankar | 1443db6 | 2015-10-15 18:20:45 -0400 | [diff] [blame] | 66 | Addrs: rpc.ListenAddrs(lf.Addrs), |
| 67 | Proxy: lf.Proxy, |
| 68 | AddressChooser: internal.NewAddressChooser(logger.Global()), |
Suharsh Sivakumar | 98aa48c | 2015-01-14 16:11:30 -0800 | [diff] [blame] | 69 | } |
Cosmos Nicolaou | 64d573d | 2015-07-13 16:22:18 -0700 | [diff] [blame] | 70 | reservedDispatcher := debuglib.NewDispatcher(securityflag.NewAuthorizerOrDie()) |
Suharsh Sivakumar | 98aa48c | 2015-01-14 16:11:30 -0800 | [diff] [blame] | 71 | |
Jungho Ahn | 1eb602f | 2015-10-08 14:54:30 -0700 | [diff] [blame] | 72 | ishutdown := func() { |
| 73 | ac.Shutdown() |
Jungho Ahn | ad3677e | 2016-01-29 16:12:05 -0800 | [diff] [blame] | 74 | discoveryFactory.Shutdown() |
Jungho Ahn | 1eb602f | 2015-10-08 14:54:30 -0700 | [diff] [blame] | 75 | } |
Suharsh Sivakumar | eb0e296 | 2015-01-15 11:24:11 -0800 | [diff] [blame] | 76 | |
Cosmos Nicolaou | 11c0ca1 | 2015-04-23 16:23:43 -0700 | [diff] [blame] | 77 | publisher := pubsub.NewPublisher() |
Suharsh Sivakumar | 98aa48c | 2015-01-14 16:11:30 -0800 | [diff] [blame] | 78 | |
Srdjan Petrovic | 6cd55c7 | 2016-02-29 10:12:16 -0800 | [diff] [blame] | 79 | runtime, ctx, shutdown, err := rt.Init(ctx, ac, discoveryFactory, nil, nil, &listenSpec, publisher, commonFlags.RuntimeFlags(), reservedDispatcher, 0) |
Suharsh Sivakumar | 98aa48c | 2015-01-14 16:11:30 -0800 | [diff] [blame] | 80 | if err != nil { |
Jungho Ahn | 1eb602f | 2015-10-08 14:54:30 -0700 | [diff] [blame] | 81 | ishutdown() |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 82 | return nil, nil, nil, err |
Suharsh Sivakumar | 98aa48c | 2015-01-14 16:11:30 -0800 | [diff] [blame] | 83 | } |
| 84 | |
Suharsh Sivakumar | a6ba641 | 2015-10-26 22:06:43 -0700 | [diff] [blame] | 85 | stopRoaming, err := roaming.CreateRoamingStream(ctx, publisher, listenSpec) |
Suharsh Sivakumar | 98aa48c | 2015-01-14 16:11:30 -0800 | [diff] [blame] | 86 | if err != nil { |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 87 | return nil, nil, nil, err |
Suharsh Sivakumar | 98aa48c | 2015-01-14 16:11:30 -0800 | [diff] [blame] | 88 | } |
| 89 | |
Suharsh Sivakumar | 40e52e9 | 2015-05-11 15:37:00 -0700 | [diff] [blame] | 90 | runtimeFactoryShutdown := func() { |
Jungho Ahn | 1eb602f | 2015-10-08 14:54:30 -0700 | [diff] [blame] | 91 | ishutdown() |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 92 | shutdown() |
Suharsh Sivakumar | a6ba641 | 2015-10-26 22:06:43 -0700 | [diff] [blame] | 93 | stopRoaming() |
Suharsh Sivakumar | 98aa48c | 2015-01-14 16:11:30 -0800 | [diff] [blame] | 94 | } |
Suharsh Sivakumar | 40e52e9 | 2015-05-11 15:37:00 -0700 | [diff] [blame] | 95 | return runtime, ctx, runtimeFactoryShutdown, nil |
Suharsh Sivakumar | 98aa48c | 2015-01-14 16:11:30 -0800 | [diff] [blame] | 96 | } |