jni: Add flow manager ListenStatus.
MultiPart: 2/4
Change-Id: I4878bff4e9c3a0ccdad0894684ef32c852f3bfec
diff --git a/impl/google/rpc/util.go b/impl/google/rpc/util.go
index a7c7ead..b87812a 100644
--- a/impl/google/rpc/util.go
+++ b/impl/google/rpc/util.go
@@ -122,23 +122,39 @@
eps[i] = ep.String()
}
- // Create Java array of proxies.
- proxarr := make([]jutil.Object, len(status.Proxies))
- for i, proxy := range status.Proxies {
- var err error
- if proxarr[i], err = JavaProxyStatus(env, proxy); err != nil {
+ lnErrors := make(map[jutil.Object]jutil.Object)
+ for addr, lerr := range status.ListenErrors {
+ jAddr, err := JavaListenAddr(env, addr.Protocol, addr.Address)
+ if err != nil {
return jutil.NullObject, err
}
+ jVExp, err := jutil.JVException(env, lerr)
+ if err != nil {
+ return jutil.NullObject, err
+ }
+ lnErrors[jAddr] = jVExp
}
- jProxies, err := jutil.JObjectArray(env, proxarr, jProxyStatusClass)
+ jLnErrors, err := jutil.JObjectMap(env, lnErrors)
+ if err != nil {
+ return jutil.NullObject, err
+ }
+
+ proxyErrors := make(map[jutil.Object]jutil.Object)
+ for s, perr := range status.ProxyErrors {
+ jVExp, err := jutil.JVException(env, perr)
+ if err != nil {
+ return jutil.NullObject, err
+ }
+ proxyErrors[jutil.JString(env, s)] = jVExp
+ }
+ jProxyErrors, err := jutil.JObjectMap(env, proxyErrors)
if err != nil {
return jutil.NullObject, err
}
// Create final server status.
mountStatusSign := jutil.ClassSign("io.v.v23.rpc.MountStatus")
- proxyStatusSign := jutil.ClassSign("io.v.v23.rpc.ProxyStatus")
- jServerStatus, err := jutil.NewObject(env, jServerStatusClass, []jutil.Sign{serverStateSign, jutil.BoolSign, jutil.ArraySign(mountStatusSign), jutil.ArraySign(jutil.StringSign), jutil.ArraySign(proxyStatusSign)}, jState, status.ServesMountTable, jMounts, eps, jProxies)
+ jServerStatus, err := jutil.NewObject(env, jServerStatusClass, []jutil.Sign{serverStateSign, jutil.BoolSign, jutil.ArraySign(mountStatusSign), jutil.ArraySign(jutil.StringSign), jutil.MapSign, jutil.MapSign}, jState, status.ServesMountTable, jMounts, eps, jLnErrors, jProxyErrors)
if err != nil {
return jutil.NullObject, err
}
@@ -176,16 +192,6 @@
return jStatus, nil
}
-// JavaProxyStatus converts the provided rpc.ProxyStatus value into a Java
-// ProxyStatus object.
-func JavaProxyStatus(env jutil.Env, status rpc.ProxyStatus) (jutil.Object, error) {
- jStatus, err := jutil.NewObject(env, jProxyStatusClass, []jutil.Sign{jutil.StringSign, jutil.StringSign, jutil.VExceptionSign}, status.Proxy, status.Endpoint.String(), status.Error)
- if err != nil {
- return jutil.NullObject, err
- }
- return jStatus, nil
-}
-
// GoListenSpec converts the provided Java ListenSpec into a Go ListenSpec.
func GoListenSpec(env jutil.Env, jSpec jutil.Object) (rpc.ListenSpec, error) {
jAddrs, err := jutil.CallObjectMethod(env, jSpec, "getAddresses", nil, jutil.ArraySign(listenAddrSign))
@@ -230,13 +236,17 @@
return jSpec, nil
}
+func JavaListenAddr(env jutil.Env, protocol, address string) (jutil.Object, error) {
+ return jutil.NewObject(env, jListenSpecAddressClass, []jutil.Sign{jutil.StringSign, jutil.StringSign}, protocol, address)
+}
+
// JavaListenAddrArray converts Go rpc.ListenAddrs into a Java
// ListenSpec$Address array.
func JavaListenAddrArray(env jutil.Env, addrs rpc.ListenAddrs) (jutil.Object, error) {
addrarr := make([]jutil.Object, len(addrs))
for i, addr := range addrs {
var err error
- if addrarr[i], err = jutil.NewObject(env, jListenSpecAddressClass, []jutil.Sign{jutil.StringSign, jutil.StringSign}, addr.Protocol, addr.Address); err != nil {
+ if addrarr[i], err = JavaListenAddr(env, addr.Protocol, addr.Address); err != nil {
return jutil.NullObject, err
}
}