Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 1 | package static |
| 2 | |
| 3 | import ( |
| 4 | "flag" |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 5 | "os" |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 6 | |
| 7 | "v.io/core/veyron2" |
| 8 | "v.io/core/veyron2/context" |
| 9 | "v.io/core/veyron2/ipc" |
Nicolas LaCasse | 0a22b45 | 2015-01-22 09:57:15 -0800 | [diff] [blame] | 10 | "v.io/core/veyron2/ipc/stream" |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 11 | "v.io/core/veyron2/vlog" |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 12 | |
| 13 | "v.io/core/veyron/lib/appcycle" |
| 14 | "v.io/core/veyron/lib/flags" |
| 15 | "v.io/core/veyron/lib/netstate" |
Nicolas LaCasse | 0a22b45 | 2015-01-22 09:57:15 -0800 | [diff] [blame] | 16 | "v.io/core/veyron/lib/websocket" |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 17 | "v.io/core/veyron/profiles/internal" |
| 18 | _ "v.io/core/veyron/runtimes/google/ipc/protocols/tcp" |
| 19 | _ "v.io/core/veyron/runtimes/google/ipc/protocols/ws" |
| 20 | _ "v.io/core/veyron/runtimes/google/ipc/protocols/wsh" |
| 21 | grt "v.io/core/veyron/runtimes/google/rt" |
| 22 | "v.io/core/veyron/services/mgmt/debug" |
| 23 | |
| 24 | // TODO(cnicolaou,ashankar): move this into flags. |
| 25 | sflag "v.io/core/veyron/security/flag" |
| 26 | ) |
| 27 | |
| 28 | var ( |
| 29 | commonFlags *flags.Flags |
| 30 | ) |
| 31 | |
| 32 | func init() { |
| 33 | commonFlags = flags.CreateAndRegister(flag.CommandLine, flags.Listen) |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 34 | veyron2.RegisterProfileInit(Init) |
Nicolas LaCasse | 0a22b45 | 2015-01-22 09:57:15 -0800 | [diff] [blame] | 35 | stream.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener) |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 36 | } |
| 37 | |
Matt Rosencrantz | aeed5d5 | 2015-01-14 15:18:34 -0800 | [diff] [blame] | 38 | func Init(ctx *context.T) (veyron2.RuntimeX, *context.T, veyron2.Shutdown, error) { |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 39 | log := vlog.Log |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 40 | |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 41 | reservedDispatcher := debug.NewDispatcher(log.LogDir(), sflag.NewAuthorizerOrDie()) |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 42 | |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 43 | commonFlags.Parse(os.Args[1:], nil) |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 44 | lf := commonFlags.ListenFlags() |
| 45 | listenSpec := ipc.ListenSpec{ |
| 46 | Addrs: ipc.ListenAddrs(lf.Addrs), |
| 47 | Proxy: lf.ListenProxy, |
| 48 | } |
| 49 | |
| 50 | ac := appcycle.New() |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 51 | |
| 52 | // Our address is private, so we test for running on GCE and for its 1:1 NAT |
| 53 | // configuration. GCEPublicAddress returns a non-nil addr if we are running on GCE. |
| 54 | if !internal.HasPublicIP(log) { |
| 55 | if addr := internal.GCEPublicAddress(log); addr != nil { |
| 56 | listenSpec.AddressChooser = func(string, []ipc.Address) ([]ipc.Address, error) { |
| 57 | return []ipc.Address{&netstate.AddrIfc{addr, "nat", nil}}, nil |
| 58 | } |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 59 | runtime, ctx, shutdown, err := grt.Init(ctx, ac, nil, &listenSpec, reservedDispatcher) |
| 60 | if err != nil { |
| 61 | return nil, nil, nil, err |
| 62 | } |
Matt Rosencrantz | fa3082c | 2015-01-22 21:39:04 -0800 | [diff] [blame^] | 63 | profileShutdown := func() { |
| 64 | ac.Shutdown() |
| 65 | shutdown() |
| 66 | } |
| 67 | return runtime, ctx, profileShutdown, nil |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 68 | } |
| 69 | } |
| 70 | listenSpec.AddressChooser = internal.IPAddressChooser |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 71 | |
| 72 | runtime, ctx, shutdown, err := grt.Init(ctx, ac, nil, &listenSpec, reservedDispatcher) |
| 73 | if err != nil { |
| 74 | return nil, nil, shutdown, err |
| 75 | } |
Matt Rosencrantz | aeed5d5 | 2015-01-14 15:18:34 -0800 | [diff] [blame] | 76 | |
| 77 | profileShutdown := func() { |
Matt Rosencrantz | aeed5d5 | 2015-01-14 15:18:34 -0800 | [diff] [blame] | 78 | ac.Shutdown() |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 79 | shutdown() |
Matt Rosencrantz | aeed5d5 | 2015-01-14 15:18:34 -0800 | [diff] [blame] | 80 | } |
| 81 | return runtime, ctx, profileShutdown, nil |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 82 | } |