wspr: Move WSPR and Browspr toward the new runtime API.
Also, remove Logger from the runtime.
MultiPart: 2/2
Change-Id: I3748946770b0ee521bb79b851c13e8cd040dd741
diff --git a/services/wsprd/account/account.go b/services/wsprd/account/account.go
index acba958..4eba8e1 100644
--- a/services/wsprd/account/account.go
+++ b/services/wsprd/account/account.go
@@ -18,13 +18,13 @@
}
type bs struct {
- client ipc.Client
- name string
+ name string
}
func (s *bs) BlessUsingAccessToken(ctx *context.T, token string, opts ...ipc.CallOpt) (blessingObj security.WireBlessings, account string, err error) {
+ client := veyron2.GetClient(ctx)
var call ipc.Call
- if call, err = s.client.StartCall(ctx, s.name, "BlessUsingAccessToken", []interface{}{token}, opts...); err != nil {
+ if call, err = client.StartCall(ctx, s.name, "BlessUsingAccessToken", []interface{}{token}, opts...); err != nil {
return
}
var email string
@@ -40,22 +40,21 @@
}
type AccountManager struct {
- rt veyron2.Runtime
+ ctx *context.T
blesser BlesserService
principalManager *principal.PrincipalManager
}
-func NewAccountManager(rt veyron2.Runtime, identitydEndpoint string, principalManager *principal.PrincipalManager) *AccountManager {
+func NewAccountManager(identitydEndpoint string, principalManager *principal.PrincipalManager) *AccountManager {
return &AccountManager{
- rt: rt,
- blesser: &bs{client: rt.Client(), name: identitydEndpoint},
+ blesser: &bs{name: identitydEndpoint},
principalManager: principalManager,
}
}
-func (am *AccountManager) CreateAccount(accessToken string) (string, error) {
+func (am *AccountManager) CreateAccount(ctx *context.T, accessToken string) (string, error) {
// Get a blessing for the access token from blessing server.
- ctx, cancel := context.WithTimeout(am.rt.NewContext(), time.Minute)
+ ctx, cancel := context.WithTimeout(ctx, time.Minute)
defer cancel()
blessings, account, err := am.blesser.BlessUsingAccessToken(ctx, accessToken)
if err != nil {
diff --git a/services/wsprd/app/app.go b/services/wsprd/app/app.go
index 3421ab7..a4fd68a 100644
--- a/services/wsprd/app/app.go
+++ b/services/wsprd/app/app.go
@@ -93,10 +93,11 @@
// TODO(bjornick): We need to split this up.
sync.Mutex
- logger vlog.Logger
+ // The context of this controller.
+ ctx *context.T
- // The runtime to use to create new clients.
- rt veyron2.Runtime
+ // The cleanup function for this controller.
+ cancel context.CancelFunc
// The ipc.ListenSpec to use with server.Listen
listenSpec *ipc.ListenSpec
@@ -153,8 +154,8 @@
}
controller := &Controller{
- rt: r,
- logger: r.Logger(),
+ ctx: r.NewContext(),
+ cancel: r.Cleanup,
client: client,
writerCreator: writerCreator,
listenSpec: listenSpec,
@@ -271,12 +272,12 @@
// GetLogger returns a Veyron logger to use.
func (c *Controller) GetLogger() vlog.Logger {
- return c.logger
+ return veyron2.GetLogger(c.ctx)
}
// RT returns the runtime of the app.
-func (c *Controller) RT() veyron2.Runtime {
- return c.rt
+func (c *Controller) Context() *context.T {
+ return c.ctx
}
// AddBlessings adds the Blessings to the local blessings store and returns
@@ -289,7 +290,7 @@
// Cleanup cleans up any outstanding rpcs.
func (c *Controller) Cleanup() {
- c.logger.VI(0).Info("Cleaning up pipe")
+ c.GetLogger().VI(0).Info("Cleaning up pipe")
c.Lock()
defer c.Unlock()
@@ -306,7 +307,7 @@
server.Stop()
}
- c.RT().Cleanup()
+ c.cancel()
}
func (c *Controller) setup() {
@@ -427,7 +428,7 @@
request.stream.end()
return
}
- c.logger.Errorf("close called on non-existent call: %v", id)
+ c.GetLogger().Errorf("close called on non-existent call: %v", id)
}
func (c *Controller) maybeCreateServer(serverId uint32) (*server.Server, error) {
@@ -464,7 +465,7 @@
w.Error(verror2.Convert(verror2.Internal, nil, err))
}
- c.logger.VI(2).Infof("serving under name: %q", serveRequest.Name)
+ c.GetLogger().VI(2).Infof("serving under name: %q", serveRequest.Name)
if err := server.Serve(serveRequest.Name); err != nil {
w.Error(verror2.Convert(verror2.Internal, nil, err))
@@ -496,7 +497,7 @@
server := c.flowMap[id]
c.Unlock()
if server == nil {
- c.logger.Errorf("unexpected result from JavaScript. No channel "+
+ c.GetLogger().Errorf("unexpected result from JavaScript. No channel "+
"for MessageId: %d exists. Ignoring the results.", id)
//Ignore unknown responses that don't belong to any channel
return
@@ -511,7 +512,7 @@
server := c.flowMap[id]
c.Unlock()
if server == nil {
- c.logger.Errorf("unexpected result from JavaScript. No channel "+
+ c.GetLogger().Errorf("unexpected result from JavaScript. No channel "+
"for MessageId: %d exists. Ignoring the results.", id)
//Ignore unknown responses that don't belong to any channel
return
@@ -602,7 +603,7 @@
server := c.flowMap[id]
c.Unlock()
if server == nil {
- c.logger.Errorf("unexpected result from JavaScript. No channel "+
+ c.GetLogger().Errorf("unexpected result from JavaScript. No channel "+
"for MessageId: %d exists. Ignoring the results.", id)
//Ignore unknown responses that don't belong to any channel
return
@@ -616,7 +617,7 @@
if err := lib.VomDecode(data, &msg); err != nil {
return nil, err
}
- c.logger.VI(2).Infof("VeyronRPC: %s.%s(..., streaming=%v)", msg.Name, msg.Method, msg.IsStreaming)
+ c.GetLogger().VI(2).Infof("VeyronRPC: %s.%s(..., streaming=%v)", msg.Name, msg.Method, msg.IsStreaming)
return &msg, nil
}
@@ -638,7 +639,7 @@
return
}
- c.logger.VI(2).Infof("requesting Signature for %q", request.Name)
+ c.GetLogger().VI(2).Infof("requesting Signature for %q", request.Name)
sig, err := c.getSignature(ctx, request.Name)
if err != nil {
w.Error(err)
@@ -716,7 +717,8 @@
// out using the Default blessing in this principal's blessings store. We
// should change this so that the JS blessing request can also specify the
// blessing to be used for the Bless operation.
- blessings, err := c.rt.Principal().Bless(blessee.PublicKey(), c.rt.Principal().BlessingStore().Default(), request.Extension, caveats[0], caveats[1:]...)
+ p := veyron2.GetPrincipal(c.ctx)
+ blessings, err := p.Bless(blessee.PublicKey(), p.BlessingStore().Default(), request.Extension, caveats[0], caveats[1:]...)
if err != nil {
return nil, err
}
@@ -771,5 +773,5 @@
// HandleNamespaceRequest uses the namespace client to respond to namespace specific requests such as glob
func (c *Controller) HandleNamespaceRequest(ctx *context.T, data string, w lib.ClientWriter) {
- namespace.HandleRequest(ctx, c.rt, data, w)
+ namespace.HandleRequest(ctx, data, w)
}
diff --git a/services/wsprd/app/app_test.go b/services/wsprd/app/app_test.go
index bdfca88..93849b7 100644
--- a/services/wsprd/app/app_test.go
+++ b/services/wsprd/app/app_test.go
@@ -331,7 +331,7 @@
if err != nil {
return nil, err
}
- controller.rt.Namespace().SetRoots("/" + endpoint.String())
+ veyron2.GetNamespace(controller.Context()).SetRoots("/" + endpoint.String())
controller.serve(serveRequest{
Name: "adder",
@@ -464,14 +464,15 @@
return mock
}
- // Create a client using app's runtime so it points to the right mounttable.
- client, err := rt.controller.rt.NewClient()
+ // Get the client that is relevant to the controller so it talks
+ // to the right mounttable.
+ client := veyron2.GetClient(rt.controller.Context())
if err != nil {
t.Errorf("unable to create client: %v", err)
}
- call, err := client.StartCall(rt.controller.rt.NewContext(), "adder/adder", test.method, test.inArgs)
+ call, err := client.StartCall(rt.controller.Context(), "adder/adder", test.method, test.inArgs)
if err != nil {
t.Errorf("failed to start call: %v", err)
}
diff --git a/services/wsprd/app/messaging.go b/services/wsprd/app/messaging.go
index 8b6eecd..59960b9 100644
--- a/services/wsprd/app/messaging.go
+++ b/services/wsprd/app/messaging.go
@@ -9,6 +9,7 @@
verror "v.io/core/veyron2/verror2"
"v.io/core/veyron2/vlog"
"v.io/core/veyron2/vom2"
+ "v.io/core/veyron2/vtrace"
"v.io/wspr/veyron/services/wsprd/lib"
)
@@ -90,7 +91,8 @@
// HandleIncomingMessage handles most incoming messages from JS and calls the appropriate handler.
func (c *Controller) HandleIncomingMessage(msg Message, w lib.ClientWriter) {
// TODO(mattr): Get the proper context information from javascript.
- ctx := c.RT().NewContext()
+ ctx, _ := vtrace.SetNewTrace(c.Context())
+
switch msg.Type {
case VeyronRequestMessage:
c.HandleVeyronRequest(ctx, msg.Id, msg.Data, w)
diff --git a/services/wsprd/browspr/browspr.go b/services/wsprd/browspr/browspr.go
index 7d9f6b3..3328447 100644
--- a/services/wsprd/browspr/browspr.go
+++ b/services/wsprd/browspr/browspr.go
@@ -6,10 +6,12 @@
"sync"
"v.io/core/veyron2"
+ "v.io/core/veyron2/context"
"v.io/core/veyron2/ipc"
"v.io/core/veyron2/vdl"
"v.io/core/veyron2/vdl/valconv"
"v.io/core/veyron2/vlog"
+ "v.io/core/veyron2/vtrace"
"v.io/wspr/veyron/services/wsprd/account"
"v.io/wspr/veyron/services/wsprd/lib"
"v.io/wspr/veyron/services/wsprd/namespace"
@@ -23,14 +25,14 @@
// Browspr is an intermediary between our javascript code and the veyron
// network that allows our javascript library to use veyron.
type Browspr struct {
- rt veyron2.Runtime
+ ctx *context.T
profileFactory func() veyron2.Profile
listenSpec *ipc.ListenSpec
namespaceRoots []string
- logger vlog.Logger
accountManager *account.AccountManager
postMessage func(instanceId int32, ty, msg string)
principalManager *principal.PrincipalManager
+ logger vlog.Logger
// Locks activeInstances
mu sync.Mutex
@@ -38,7 +40,7 @@
}
// Create a new Browspr instance.
-func NewBrowspr(runtime veyron2.Runtime,
+func NewBrowspr(ctx *context.T,
postMessage func(instanceId int32, ty, msg string),
profileFactory func() veyron2.Profile,
listenSpec *ipc.ListenSpec,
@@ -56,18 +58,19 @@
listenSpec: listenSpec,
namespaceRoots: wsNamespaceRoots,
postMessage: postMessage,
- rt: runtime,
- logger: runtime.Logger(),
+ ctx: ctx,
+ logger: veyron2.GetLogger(ctx),
activeInstances: make(map[int32]*pipe),
}
// TODO(nlacasse, bjornick) use a serializer that can actually persist.
var err error
- if browspr.principalManager, err = principal.NewPrincipalManager(runtime.Principal(), &principal.InMemorySerializer{}); err != nil {
+ p := veyron2.GetPrincipal(ctx)
+ if browspr.principalManager, err = principal.NewPrincipalManager(p, &principal.InMemorySerializer{}); err != nil {
vlog.Fatalf("principal.NewPrincipalManager failed: %s", err)
}
- browspr.accountManager = account.NewAccountManager(runtime, identd, browspr.principalManager)
+ browspr.accountManager = account.NewAccountManager(identd, browspr.principalManager)
return browspr
}
@@ -133,7 +136,8 @@
return nil, err
}
- account, err := b.accountManager.CreateAccount(msg.Token)
+ ctx, _ := vtrace.SetNewTrace(b.ctx)
+ account, err := b.accountManager.CreateAccount(ctx, msg.Token)
if err != nil {
return nil, err
}
diff --git a/services/wsprd/browspr/browspr_account_test.go b/services/wsprd/browspr/browspr_account_test.go
index e98a15d..7bbe5e5 100644
--- a/services/wsprd/browspr/browspr_account_test.go
+++ b/services/wsprd/browspr/browspr_account_test.go
@@ -4,6 +4,7 @@
"fmt"
"testing"
+ "v.io/core/veyron2"
"v.io/core/veyron2/context"
"v.io/core/veyron2/ipc"
"v.io/core/veyron2/rt"
@@ -47,8 +48,9 @@
t.Fatal(err)
}
mockPostMessage := func(_ int32, _, _ string) {}
- browspr := NewBrowspr(r, mockPostMessage, nil, &spec, "/mock:1234/identd", nil)
- browspr.accountManager.SetMockBlesser(newMockBlesserService(browspr.rt.Principal()))
+ browspr := NewBrowspr(r.NewContext(), mockPostMessage, nil, &spec, "/mock:1234/identd", nil)
+ principal := veyron2.GetPrincipal(browspr.ctx)
+ browspr.accountManager.SetMockBlesser(newMockBlesserService(principal))
return browspr, func() {
browspr.Shutdown()
@@ -104,7 +106,8 @@
// First create an account.
account := "mock-account"
- blessing, err := browspr.rt.Principal().BlessSelf(account)
+ principal := veyron2.GetPrincipal(browspr.ctx)
+ blessing, err := principal.BlessSelf(account)
if err != nil {
t.Fatalf("browspr.rt.Principal.BlessSelf(%v) failed: %v", account, err)
}
diff --git a/services/wsprd/browspr/browspr_test.go b/services/wsprd/browspr/browspr_test.go
index f9bcfda..da66a3c 100644
--- a/services/wsprd/browspr/browspr_test.go
+++ b/services/wsprd/browspr/browspr_test.go
@@ -153,12 +153,14 @@
vlog.Fatalf("rt.New failed: %s", err)
}
defer runtime.Cleanup()
+ ctx := runtime.NewContext()
+
wsNamespaceRoots, err := lib.EndpointsToWs([]string{tcpNamespaceRoot})
if err != nil {
vlog.Fatal(err)
}
- runtime.Namespace().SetRoots(wsNamespaceRoots...)
- browspr := NewBrowspr(runtime, postMessageHandler, nil, &spec, "/mock:1234/identd", wsNamespaceRoots)
+ veyron2.GetNamespace(ctx).SetRoots(wsNamespaceRoots...)
+ browspr := NewBrowspr(ctx, postMessageHandler, nil, &spec, "/mock:1234/identd", wsNamespaceRoots)
// browspr sets its namespace root to use the "ws" protocol, but we want to force "tcp" here.
browspr.namespaceRoots = []string{tcpNamespaceRoot}
@@ -172,7 +174,8 @@
// Associate the origin with the root accounts' blessings, otherwise a
// dummy account will be used and will be rejected by the authorizer.
accountName := "test-account"
- if err := browspr.principalManager.AddAccount(accountName, browspr.rt.Principal().BlessingStore().Default()); err != nil {
+ bp := veyron2.GetPrincipal(browspr.ctx)
+ if err := browspr.principalManager.AddAccount(accountName, bp.BlessingStore().Default()); err != nil {
t.Fatalf("Failed to add account: %v")
}
if err := browspr.accountManager.AssociateAccount(msgOrigin, accountName, nil); err != nil {
diff --git a/services/wsprd/browspr/main/main_nacl.go b/services/wsprd/browspr/main/main_nacl.go
index 7e6c736..4f046e7 100644
--- a/services/wsprd/browspr/main/main_nacl.go
+++ b/services/wsprd/browspr/main/main_nacl.go
@@ -228,7 +228,7 @@
runtime.Namespace().SetRoots(wsNamespaceRoots...)
fmt.Printf("Starting browspr with config: proxy=%q mounttable=%q identityd=%q identitydBlessingRoot=%q ", msg.Proxy, msg.NamespaceRoot, msg.Identityd, msg.IdentitydBlessingRoot)
- inst.browspr = browspr.NewBrowspr(runtime,
+ inst.browspr = browspr.NewBrowspr(runtime.NewContext(),
inst.BrowsprOutgoingPostMessage,
chrome.New,
&listenSpec,
diff --git a/services/wsprd/browspr/pipe.go b/services/wsprd/browspr/pipe.go
index 83e8b90..fbcc10f 100644
--- a/services/wsprd/browspr/pipe.go
+++ b/services/wsprd/browspr/pipe.go
@@ -31,16 +31,16 @@
// TODO(nlacasse, bjornick): This code should go away once we
// start requiring authentication. At that point, we should
// just return an error to the client.
- b.rt.Logger().Errorf("No principal associated with origin %v, creating a new principal with self-signed blessing from browspr: %v", origin, err)
+ b.logger.Errorf("No principal associated with origin %v, creating a new principal with self-signed blessing from browspr: %v", origin, err)
dummyAccount, err := b.principalManager.DummyAccount()
if err != nil {
- b.rt.Logger().Errorf("principalManager.DummyAccount() failed: %v", err)
+ b.logger.Errorf("principalManager.DummyAccount() failed: %v", err)
return nil
}
if err := b.accountManager.AssociateAccount(origin, dummyAccount, nil); err != nil {
- b.rt.Logger().Errorf("accountManager.AssociateAccount(%v, %v, %v) failed: %v", origin, dummyAccount, nil, err)
+ b.logger.Errorf("accountManager.AssociateAccount(%v, %v, %v) failed: %v", origin, dummyAccount, nil, err)
return nil
}
p, err = b.accountManager.LookupPrincipal(origin)
@@ -55,7 +55,7 @@
}
pipe.controller, err = app.NewController(pipe.createWriter, profile, b.listenSpec, b.namespaceRoots, options.RuntimePrincipal{p})
if err != nil {
- b.rt.Logger().Errorf("Could not create controller: %v", err)
+ b.logger.Errorf("Could not create controller: %v", err)
return nil
}
diff --git a/services/wsprd/ipc/server/dispatcher_test.go b/services/wsprd/ipc/server/dispatcher_test.go
index 0d5cacd..72b7293 100644
--- a/services/wsprd/ipc/server/dispatcher_test.go
+++ b/services/wsprd/ipc/server/dispatcher_test.go
@@ -6,6 +6,7 @@
"testing"
_ "v.io/core/veyron/profiles"
+ "v.io/core/veyron2"
"v.io/core/veyron2/ipc"
"v.io/core/veyron2/rt"
"v.io/core/veyron2/security"
@@ -80,7 +81,8 @@
defer runtime.Cleanup()
flowFactory := &mockFlowFactory{}
- d := newDispatcher(0, flowFactory, mockInvokerFactory{}, mockAuthorizerFactory{}, runtime.Logger())
+ logger := veyron2.GetLogger(runtime.NewContext())
+ d := newDispatcher(0, flowFactory, mockInvokerFactory{}, mockAuthorizerFactory{}, logger)
expectedSig := []signature.Interface{
{Name: "AName"},
}
@@ -131,7 +133,8 @@
defer runtime.Cleanup()
flowFactory := &mockFlowFactory{}
- d := newDispatcher(0, flowFactory, mockInvokerFactory{}, mockAuthorizerFactory{}, runtime.Logger())
+ logger := veyron2.GetLogger(runtime.NewContext())
+ d := newDispatcher(0, flowFactory, mockInvokerFactory{}, mockAuthorizerFactory{}, logger)
expectedSig := []signature.Interface{
{Name: "AName"},
}
@@ -182,7 +185,8 @@
defer runtime.Cleanup()
flowFactory := &mockFlowFactory{}
- d := newDispatcher(0, flowFactory, mockInvokerFactory{}, mockAuthorizerFactory{}, runtime.Logger())
+ logger := veyron2.GetLogger(runtime.NewContext())
+ d := newDispatcher(0, flowFactory, mockInvokerFactory{}, mockAuthorizerFactory{}, logger)
go func() {
if err := flowFactory.writer.WaitForMessage(1); err != nil {
t.Errorf("failed to get dispatch request %v", err)
diff --git a/services/wsprd/ipc/server/server.go b/services/wsprd/ipc/server/server.go
index ee36b4e..1fdea44 100644
--- a/services/wsprd/ipc/server/server.go
+++ b/services/wsprd/ipc/server/server.go
@@ -11,6 +11,7 @@
"v.io/wspr/veyron/services/wsprd/principal"
"v.io/core/veyron2"
+ "v.io/core/veyron2/context"
"v.io/core/veyron2/ipc"
"v.io/core/veyron2/security"
"v.io/core/veyron2/vdl/vdlroot/src/signature"
@@ -53,8 +54,7 @@
HandleStore
GetLogger() vlog.Logger
-
- RT() veyron2.Runtime
+ Context() *context.T
}
type authReply struct {
@@ -119,7 +119,7 @@
outstandingAuthRequests: make(map[int32]chan error),
}
var err error
- if server.server, err = helper.RT().NewServer(); err != nil {
+ if server.server, err = veyron2.NewServer(helper.Context()); err != nil {
return nil, err
}
return server, nil
diff --git a/services/wsprd/namespace/request_handler.go b/services/wsprd/namespace/request_handler.go
index 6753ddd..863d7c1 100644
--- a/services/wsprd/namespace/request_handler.go
+++ b/services/wsprd/namespace/request_handler.go
@@ -81,7 +81,7 @@
}
// handleRequest uses the namespace client to respond to namespace specific requests such as glob
-func HandleRequest(ctx *context.T, rt veyron2.Runtime, data string, w lib.ClientWriter) {
+func HandleRequest(ctx *context.T, data string, w lib.ClientWriter) {
// Decode the request
var req request
if err := json.Unmarshal([]byte(data), &req); err != nil {
@@ -90,7 +90,7 @@
}
// Get the runtime's Namespace client
- var ns = rt.Namespace()
+ var ns = veyron2.GetNamespace(ctx)
switch req.Method {
case methodGlob:
diff --git a/services/wsprd/wspr.go b/services/wsprd/wspr.go
index b984322..f225fde 100644
--- a/services/wsprd/wspr.go
+++ b/services/wsprd/wspr.go
@@ -25,7 +25,7 @@
ctx := r.NewContext()
- proxy := wspr.NewWSPR(r, *port, roaming.New, &roaming.ListenSpec, *identd, nil)
+ proxy := wspr.NewWSPR(ctx, *port, roaming.New, &roaming.ListenSpec, *identd, nil)
defer proxy.Shutdown()
proxy.Listen()
diff --git a/services/wsprd/wspr/pipe.go b/services/wsprd/wspr/pipe.go
index b70680f..8d15529 100644
--- a/services/wsprd/wspr/pipe.go
+++ b/services/wsprd/wspr/pipe.go
@@ -47,7 +47,7 @@
}
func newPipe(w http.ResponseWriter, req *http.Request, wspr *WSPR, creator func(id int32) lib.ClientWriter) *pipe {
- pipe := &pipe{logger: wspr.rt.Logger(), wspr: wspr, req: req}
+ pipe := &pipe{logger: wspr.logger, wspr: wspr, req: req}
if creator == nil {
creator = func(id int32) lib.ClientWriter {
@@ -57,15 +57,15 @@
pipe.writerCreator = creator
origin := req.Header.Get("Origin")
if origin == "" {
- wspr.rt.Logger().Errorf("Could not read origin from the request")
+ wspr.logger.Errorf("Could not read origin from the request")
http.Error(w, "Could not read origin from the request", http.StatusBadRequest)
return nil
}
p, err := wspr.principalManager.Principal(origin)
if err != nil {
- p = wspr.rt.Principal()
- wspr.rt.Logger().Errorf("no principal associated with origin %s: %v", origin, err)
+ p = veyron2.GetPrincipal(wspr.ctx)
+ wspr.logger.Errorf("no principal associated with origin %s: %v", origin, err)
// TODO(bjornick): Send an error to the client when all of the principal stuff is set up.
}
@@ -75,7 +75,7 @@
}
pipe.controller, err = app.NewController(creator, profile, wspr.listenSpec, wspr.namespaceRoots, options.RuntimePrincipal{p})
if err != nil {
- wspr.rt.Logger().Errorf("Could not create controller: %v", err)
+ wspr.logger.Errorf("Could not create controller: %v", err)
http.Error(w, fmt.Sprintf("Failed to create controller: %v", err), http.StatusInternalServerError)
return nil
}
diff --git a/services/wsprd/wspr/wspr.go b/services/wsprd/wspr/wspr.go
index 821309d..f6b56b3 100644
--- a/services/wsprd/wspr/wspr.go
+++ b/services/wsprd/wspr/wspr.go
@@ -26,6 +26,7 @@
"time"
"v.io/core/veyron2"
+ "v.io/core/veyron2/context"
"v.io/core/veyron2/ipc"
"v.io/core/veyron2/vlog"
@@ -41,11 +42,11 @@
type WSPR struct {
mu sync.Mutex
tlsCert *tls.Certificate
- rt veyron2.Runtime
+ logger vlog.Logger
+ ctx *context.T
// HTTP port for WSPR to serve on. Note, WSPR always serves on localhost.
httpPort int
ln *net.TCPListener // HTTP listener
- logger vlog.Logger
profileFactory func() veyron2.Profile
listenSpec *ipc.ListenSpec
namespaceRoots []string
@@ -54,8 +55,6 @@
pipes map[*http.Request]*pipe
}
-var logger vlog.Logger
-
func readFromRequest(r *http.Request) (*bytes.Buffer, error) {
var buf bytes.Buffer
if readBytes, err := io.Copy(&buf, r.Body); err != nil {
@@ -123,7 +122,7 @@
}
// Creates a new WebSocket Proxy object.
-func NewWSPR(runtime veyron2.Runtime, httpPort int, profileFactory func() veyron2.Profile, listenSpec *ipc.ListenSpec, identdEP string, namespaceRoots []string) *WSPR {
+func NewWSPR(ctx *context.T, httpPort int, profileFactory func() veyron2.Profile, listenSpec *ipc.ListenSpec, identdEP string, namespaceRoots []string) *WSPR {
if listenSpec.Proxy == "" {
vlog.Fatalf("a veyron proxy must be set")
}
@@ -133,18 +132,18 @@
profileFactory: profileFactory,
listenSpec: listenSpec,
namespaceRoots: namespaceRoots,
- rt: runtime,
- logger: runtime.Logger(),
+ logger: veyron2.GetLogger(ctx),
pipes: map[*http.Request]*pipe{},
}
// TODO(nlacasse, bjornick) use a serializer that can actually persist.
+ p := veyron2.GetPrincipal(ctx)
var err error
- if wspr.principalManager, err = principal.NewPrincipalManager(runtime.Principal(), &principal.InMemorySerializer{}); err != nil {
+ if wspr.principalManager, err = principal.NewPrincipalManager(p, &principal.InMemorySerializer{}); err != nil {
vlog.Fatalf("principal.NewPrincipalManager failed: %s", err)
}
- wspr.accountManager = account.NewAccountManager(runtime, identdEP, wspr.principalManager)
+ wspr.accountManager = account.NewAccountManager(identdEP, wspr.principalManager)
return wspr
}