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 | |
Todd Wang | 555097f | 2015-04-21 10:49:06 -0700 | [diff] [blame] | 5 | // +build wspr |
| 6 | // |
| 7 | // We restrict to a special build-tag in order to enable |
| 8 | // security.OverrideCaveatValidation, which isn't generally available. |
| 9 | |
Cosmos Nicolaou | c80820b | 2015-03-13 10:34:04 -0700 | [diff] [blame] | 10 | package main |
Adam Sadovsky | d21d95a | 2014-10-29 09:56:59 -0700 | [diff] [blame] | 11 | |
| 12 | import ( |
| 13 | "flag" |
| 14 | "fmt" |
| 15 | "io" |
Adam Sadovsky | d21d95a | 2014-10-29 09:56:59 -0700 | [diff] [blame] | 16 | |
Cosmos Nicolaou | c80820b | 2015-03-13 10:34:04 -0700 | [diff] [blame] | 17 | "v.io/v23" |
| 18 | |
Todd Wang | 5b77a34 | 2015-04-06 18:31:37 -0700 | [diff] [blame] | 19 | "v.io/x/ref/services/wspr/wsprlib" |
Cosmos Nicolaou | 1381f8a | 2015-03-13 09:40:34 -0700 | [diff] [blame] | 20 | "v.io/x/ref/test/modules" |
Adam Sadovsky | d21d95a | 2014-10-29 09:56:59 -0700 | [diff] [blame] | 21 | ) |
| 22 | |
| 23 | var ( |
Suharsh Sivakumar | 9d17e4a | 2015-02-02 22:42:16 -0800 | [diff] [blame] | 24 | port *int = flag.CommandLine.Int("port", 0, "Port to listen on.") |
| 25 | identd *string = flag.CommandLine.String("identd", "", "identd server name. Must be set.") |
Adam Sadovsky | d21d95a | 2014-10-29 09:56:59 -0700 | [diff] [blame] | 26 | ) |
| 27 | |
Todd Wang | 5b77a34 | 2015-04-06 18:31:37 -0700 | [diff] [blame] | 28 | const WSPRDCommand = "wsprd" |
Cosmos Nicolaou | c80820b | 2015-03-13 10:34:04 -0700 | [diff] [blame] | 29 | |
Adam Sadovsky | d21d95a | 2014-10-29 09:56:59 -0700 | [diff] [blame] | 30 | func init() { |
Todd Wang | 555097f | 2015-04-21 10:49:06 -0700 | [diff] [blame] | 31 | wsprlib.OverrideCaveatValidation() |
Todd Wang | 5b77a34 | 2015-04-06 18:31:37 -0700 | [diff] [blame] | 32 | modules.RegisterChild(WSPRDCommand, modules.Usage(flag.CommandLine), startWSPR) |
Adam Sadovsky | d21d95a | 2014-10-29 09:56:59 -0700 | [diff] [blame] | 33 | } |
| 34 | |
| 35 | func startWSPR(stdin io.Reader, stdout, stderr io.Writer, env map[string]string, args ...string) error { |
Jiri Simsa | 6ac9522 | 2015-02-23 16:11:49 -0800 | [diff] [blame] | 36 | ctx, shutdown := v23.Init() |
Suharsh Sivakumar | 6bbd99c | 2015-01-16 10:57:02 -0800 | [diff] [blame] | 37 | defer shutdown() |
| 38 | |
Jiri Simsa | 6ac9522 | 2015-02-23 16:11:49 -0800 | [diff] [blame] | 39 | l := v23.GetListenSpec(ctx) |
Todd Wang | 5b77a34 | 2015-04-06 18:31:37 -0700 | [diff] [blame] | 40 | proxy := wsprlib.NewWSPR(ctx, *port, &l, *identd, nil) |
Adam Sadovsky | d21d95a | 2014-10-29 09:56:59 -0700 | [diff] [blame] | 41 | defer proxy.Shutdown() |
| 42 | |
| 43 | addr := proxy.Listen() |
| 44 | go func() { |
| 45 | proxy.Serve() |
| 46 | }() |
| 47 | |
Cosmos Nicolaou | 8bd8e10 | 2015-01-13 21:52:53 -0800 | [diff] [blame] | 48 | fmt.Fprintf(stdout, "WSPR_ADDR=%s\n", addr) |
Adam Sadovsky | d21d95a | 2014-10-29 09:56:59 -0700 | [diff] [blame] | 49 | modules.WaitForEOF(stdin) |
| 50 | return nil |
| 51 | } |