From 9f0cdb69c9065d28c8defeeb22b2b49ee397f031 Mon Sep 17 00:00:00 2001 From: Benoit Foucher Date: Tue, 6 Feb 2018 15:08:23 +0100 Subject: Removed explicit from CommunicatorHolder(shared_ptr) constructor (ICE-8633) --- cpp/include/Ice/Initialize.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'cpp') diff --git a/cpp/include/Ice/Initialize.h b/cpp/include/Ice/Initialize.h index 15964d54998..9d546587e06 100644 --- a/cpp/include/Ice/Initialize.h +++ b/cpp/include/Ice/Initialize.h @@ -659,7 +659,7 @@ public: * Adopts the given communicator. * @param communicator The new communicator instance to hold. */ - explicit CommunicatorHolder(std::shared_ptr communicator); + CommunicatorHolder(std::shared_ptr communicator); /** * Adopts the given communicator. If this holder currently holds a communicator, -- cgit v1.2.3 From 8c6b147af1324f2d3135e711009f1bb983c5d9f7 Mon Sep 17 00:00:00 2001 From: Benoit Foucher Date: Tue, 6 Feb 2018 15:25:40 +0100 Subject: Removed explicit from CommunicatorHolder(const Ice::CommunicatorPtr&>) constructor (ICE-8633) --- cpp/include/Ice/Initialize.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'cpp') diff --git a/cpp/include/Ice/Initialize.h b/cpp/include/Ice/Initialize.h index 9d546587e06..f595b126194 100644 --- a/cpp/include/Ice/Initialize.h +++ b/cpp/include/Ice/Initialize.h @@ -869,7 +869,7 @@ public: * Adopts the given communicator. * @param communicator The new communicator instance to hold. */ - explicit CommunicatorHolder(const CommunicatorPtr& communicator); + CommunicatorHolder(const CommunicatorPtr& communicator); /** * Adopts the given communicator. If this holder currently holds a communicator, -- cgit v1.2.3 From 08179f1bfd7b900ca086985c0034ed9c98f71df0 Mon Sep 17 00:00:00 2001 From: Benoit Foucher Date: Tue, 6 Feb 2018 15:32:56 +0100 Subject: Added loopback addresses to published endpoints if no other adresses are available (ICE-8622) --- cpp/src/Ice/Network.cpp | 5 +++++ csharp/src/Ice/Network.cs | 5 +++++ .../src/Ice/src/main/java/IceInternal/Network.java | 24 ++++++++-------------- .../main/java/com/zeroc/IceInternal/Network.java | 24 ++++++++-------------- 4 files changed, 26 insertions(+), 32 deletions(-) (limited to 'cpp') diff --git a/cpp/src/Ice/Network.cpp b/cpp/src/Ice/Network.cpp index 09508a02737..b97c8834bcf 100755 --- a/cpp/src/Ice/Network.cpp +++ b/cpp/src/Ice/Network.cpp @@ -1686,6 +1686,11 @@ IceInternal::getHostsForEndpointExpand(const string& host, ProtocolSupport proto hosts.push_back(inetAddrToString(*p)); } } + if(hosts.empty() && !includeLoopback) + { + // Return loopback if only loopback is available no other local addresses are available. + return getHostsForEndpointExpand(host, protocolSupport, true); + } } return hosts; // An empty host list indicates to just use the given host. } diff --git a/csharp/src/Ice/Network.cs b/csharp/src/Ice/Network.cs index 59f88fa3e17..247b88b0405 100644 --- a/csharp/src/Ice/Network.cs +++ b/csharp/src/Ice/Network.cs @@ -950,6 +950,11 @@ namespace IceInternal hosts.Add(a.ToString()); } } + if(hosts.Count == 0 && !includeLoopback) + { + // Return loopback if only loopback is available no other local addresses are available. + return getHostsForEndpointExpand(host, protocol, true); + } } return hosts; } diff --git a/java-compat/src/Ice/src/main/java/IceInternal/Network.java b/java-compat/src/Ice/src/main/java/IceInternal/Network.java index 14c50c52e40..62fff1554b8 100644 --- a/java-compat/src/Ice/src/main/java/IceInternal/Network.java +++ b/java-compat/src/Ice/src/main/java/IceInternal/Network.java @@ -880,7 +880,7 @@ public final class Network // Iterate over the network interfaces and pick an IP // address (preferably not the loopback address). // - java.util.ArrayList addrs = getLocalAddresses(protocol); + java.util.ArrayList addrs = getLocalAddresses(protocol, false); java.util.Iterator iter = addrs.iterator(); while(addr == null && iter.hasNext()) { @@ -983,7 +983,7 @@ public final class Network } public static java.util.ArrayList - getLocalAddresses(int protocol) + getLocalAddresses(int protocol, boolean includeLoopback) { java.util.ArrayList result = new java.util.ArrayList(); try @@ -996,7 +996,7 @@ public final class Network while(addrs.hasMoreElements()) { java.net.InetAddress addr = addrs.nextElement(); - if(!addr.isLoopbackAddress()) + if(includeLoopback || !addr.isLoopbackAddress()) { if(protocol == EnableBoth || isValidAddr(addr, protocol)) { @@ -1047,7 +1047,7 @@ public final class Network java.util.ArrayList hosts = new java.util.ArrayList(); if(isWildcard(host)) { - java.util.ArrayList addrs = getLocalAddresses(protocolSupport); + java.util.ArrayList addrs = getLocalAddresses(protocolSupport, includeLoopback); for(java.net.InetAddress addr : addrs) { // @@ -1059,18 +1059,10 @@ public final class Network hosts.add(addr.getHostAddress()); } } - - if(includeLoopback || hosts.isEmpty()) + if(hosts.isEmpty() && !includeLoopback) { - if(protocolSupport != EnableIPv6) - { - hosts.add("127.0.0.1"); - } - - if(protocolSupport != EnableIPv4) - { - hosts.add("0:0:0:0:0:0:0:1"); - } + // Return loopback if only loopback is available no other local addresses are available. + return getHostsForEndpointExpand(host, protocolSupport, true); } } return hosts; @@ -1082,7 +1074,7 @@ public final class Network java.util.ArrayList interfaces = new java.util.ArrayList<>(); if(isWildcard(intf)) { - java.util.ArrayList addrs = getLocalAddresses(protocolSupport); + java.util.ArrayList addrs = getLocalAddresses(protocolSupport, true); for(java.net.InetAddress addr : addrs) { interfaces.add(addr.getHostAddress()); diff --git a/java/src/Ice/src/main/java/com/zeroc/IceInternal/Network.java b/java/src/Ice/src/main/java/com/zeroc/IceInternal/Network.java index cb56f0bb9e1..d9469220608 100644 --- a/java/src/Ice/src/main/java/com/zeroc/IceInternal/Network.java +++ b/java/src/Ice/src/main/java/com/zeroc/IceInternal/Network.java @@ -885,7 +885,7 @@ public final class Network // Iterate over the network interfaces and pick an IP // address (preferably not the loopback address). // - java.util.ArrayList addrs = getLocalAddresses(protocol); + java.util.ArrayList addrs = getLocalAddresses(protocol, false); java.util.Iterator iter = addrs.iterator(); while(addr == null && iter.hasNext()) { @@ -988,7 +988,7 @@ public final class Network } public static java.util.ArrayList - getLocalAddresses(int protocol) + getLocalAddresses(int protocol, boolean includeLoopback) { java.util.ArrayList result = new java.util.ArrayList<>(); try @@ -1001,7 +1001,7 @@ public final class Network while(addrs.hasMoreElements()) { java.net.InetAddress addr = addrs.nextElement(); - if(!addr.isLoopbackAddress()) + if(includeLoopback || !addr.isLoopbackAddress()) { if(protocol == EnableBoth || isValidAddr(addr, protocol)) { @@ -1052,7 +1052,7 @@ public final class Network java.util.ArrayList hosts = new java.util.ArrayList<>(); if(isWildcard(host)) { - java.util.ArrayList addrs = getLocalAddresses(protocolSupport); + java.util.ArrayList addrs = getLocalAddresses(protocolSupport, includeLoopback); for(java.net.InetAddress addr : addrs) { // @@ -1064,18 +1064,10 @@ public final class Network hosts.add(addr.getHostAddress()); } } - - if(includeLoopback || hosts.isEmpty()) + if(hosts.isEmpty() && !includeLoopback) { - if(protocolSupport != EnableIPv6) - { - hosts.add("127.0.0.1"); - } - - if(protocolSupport != EnableIPv4) - { - hosts.add("0:0:0:0:0:0:0:1"); - } + // Return loopback if only loopback is available no other local addresses are available. + return getHostsForEndpointExpand(host, protocolSupport, true); } } return hosts; @@ -1087,7 +1079,7 @@ public final class Network java.util.ArrayList interfaces = new java.util.ArrayList<>(); if(isWildcard(intf)) { - java.util.ArrayList addrs = getLocalAddresses(protocolSupport); + java.util.ArrayList addrs = getLocalAddresses(protocolSupport, true); for(java.net.InetAddress addr : addrs) { interfaces.add(addr.getHostAddress()); -- cgit v1.2.3 From ec19831c2f76305ee8e259ac0469d615f14b5c3b Mon Sep 17 00:00:00 2001 From: Benoit Foucher Date: Wed, 7 Feb 2018 09:51:18 +0100 Subject: Better fix for publishing loopback addresses when no other addresses are available (ICE-8622) --- cpp/src/Ice/Network.cpp | 65 ++++++++++++++-------- csharp/src/Ice/Network.cs | 43 ++++++++++---- .../src/Ice/src/main/java/IceInternal/Network.java | 23 +++----- .../main/java/com/zeroc/IceInternal/Network.java | 23 +++----- 4 files changed, 91 insertions(+), 63 deletions(-) (limited to 'cpp') diff --git a/cpp/src/Ice/Network.cpp b/cpp/src/Ice/Network.cpp index b97c8834bcf..9b1b186d56d 100755 --- a/cpp/src/Ice/Network.cpp +++ b/cpp/src/Ice/Network.cpp @@ -780,6 +780,35 @@ getAddressStorageSize(const Address& addr) return size; } +vector
+getLoopbackAddresses(ProtocolSupport protocol, int port = 0) +{ + vector
result; + + Address addr; + memset(&addr.saStorage, 0, sizeof(sockaddr_storage)); + + // + // We don't use getaddrinfo when host is empty as it's not portable (some old Linux + // versions don't support it). + // + if(protocol != EnableIPv4) + { + addr.saIn6.sin6_family = AF_INET6; + addr.saIn6.sin6_port = htons(port); + addr.saIn6.sin6_addr = in6addr_loopback; + result.push_back(addr); + } + if(protocol != EnableIPv6) + { + addr.saIn.sin_family = AF_INET; + addr.saIn.sin_port = htons(port); + addr.saIn.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + result.push_back(addr); + } + return result; +} + #endif // #ifndef ICE_OS_UWP } @@ -1055,9 +1084,6 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol bool preferIPv6, bool canBlock) { vector
result; - Address addr; - - memset(&addr.saStorage, 0, sizeof(sockaddr_storage)); // // We don't use getaddrinfo when host is empty as it's not portable (some old Linux @@ -1065,24 +1091,14 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol // if(host.empty()) { - if(protocol != EnableIPv4) - { - addr.saIn6.sin6_family = AF_INET6; - addr.saIn6.sin6_port = htons(port); - addr.saIn6.sin6_addr = in6addr_loopback; - result.push_back(addr); - } - if(protocol != EnableIPv6) - { - addr.saIn.sin_family = AF_INET; - addr.saIn.sin_port = htons(port); - addr.saIn.sin_addr.s_addr = htonl(INADDR_LOOPBACK); - result.push_back(addr); - } + result = getLoopbackAddresses(protocol, port); sortAddresses(result, protocol, selType, preferIPv6); return result; } + Address addr; + memset(&addr.saStorage, 0, sizeof(sockaddr_storage)); + struct addrinfo* info = 0; int retry = 5; @@ -1218,7 +1234,8 @@ IceInternal::getAddressForServer(const string& host, int port, ProtocolSupport p #endif return addr; } - vector
addrs = getAddresses(host, port, protocol, Ice::ICE_ENUM(EndpointSelectionType, Ordered), preferIPv6, canBlock); + vector
addrs = getAddresses(host, port, protocol, Ice::ICE_ENUM(EndpointSelectionType, Ordered), + preferIPv6, canBlock); return addrs.empty() ? Address() : addrs[0]; } @@ -1640,7 +1657,7 @@ IceInternal::getHostsForEndpointExpand(const string& host, ProtocolSupport proto hosts.push_back(wstringToString(h->CanonicalName->Data(), getProcessStringConverter())); } } - if(includeLoopback) + if(hosts.empty() || includeLoopback) { if(protocolSupport != EnableIPv6) { @@ -1686,10 +1703,14 @@ IceInternal::getHostsForEndpointExpand(const string& host, ProtocolSupport proto hosts.push_back(inetAddrToString(*p)); } } - if(hosts.empty() && !includeLoopback) + if(hosts.empty()) { - // Return loopback if only loopback is available no other local addresses are available. - return getHostsForEndpointExpand(host, protocolSupport, true); + // Return loopback if no other local addresses are available. + addrs = getLoopbackAddresses(protocolSupport); + for(vector
::const_iterator p = addrs.begin(); p != addrs.end(); ++p) + { + hosts.push_back(inetAddrToString(*p)); + } } } return hosts; // An empty host list indicates to just use the given host. diff --git a/csharp/src/Ice/Network.cs b/csharp/src/Ice/Network.cs index 247b88b0405..0cb2c29d14d 100644 --- a/csharp/src/Ice/Network.cs +++ b/csharp/src/Ice/Network.cs @@ -713,14 +713,20 @@ namespace IceInternal List addresses = new List(); if(host.Length == 0) { - if(protocol != EnableIPv4) + foreach(IPAddress a in getLoopbackAddresses(protocol)) { - addresses.Add(new IPEndPoint(IPAddress.IPv6Loopback, port)); + addresses.Add(new IPEndPoint(a, port)); } - - if(protocol != EnableIPv6) + if(protocol == EnableBoth) { - addresses.Add(new IPEndPoint(IPAddress.Loopback, port)); + if(preferIPv6) + { + IceUtilInternal.Collections.Sort(ref addresses, _preferIPv6Comparator); + } + else + { + IceUtilInternal.Collections.Sort(ref addresses, _preferIPv4Comparator); + } } return addresses; } @@ -942,18 +948,20 @@ namespace IceInternal bool ipv4Wildcard = false; if(isWildcard(host, out ipv4Wildcard)) { - IPAddress[] addrs = getLocalAddresses(ipv4Wildcard ? EnableIPv4 : protocol, includeLoopback); - foreach(IPAddress a in addrs) + foreach(IPAddress a in getLocalAddresses(ipv4Wildcard ? EnableIPv4 : protocol, includeLoopback)) { if(!isLinklocal(a)) { hosts.Add(a.ToString()); } } - if(hosts.Count == 0 && !includeLoopback) + if(hosts.Count == 0) { // Return loopback if only loopback is available no other local addresses are available. - return getHostsForEndpointExpand(host, protocol, true); + foreach(IPAddress a in getLoopbackAddresses(protocol)) + { + hosts.Add(a.ToString()); + } } } return hosts; @@ -965,8 +973,7 @@ namespace IceInternal bool ipv4Wildcard = false; if(isWildcard(intf, out ipv4Wildcard)) { - IPAddress[] addrs = getLocalAddresses(ipv4Wildcard ? EnableIPv4 : protocol, true); - foreach(IPAddress a in addrs) + foreach(IPAddress a in getLocalAddresses(ipv4Wildcard ? EnableIPv4 : protocol, true)) { interfaces.Add(a.ToString()); } @@ -1219,6 +1226,20 @@ namespace IceInternal return false; } + public static List getLoopbackAddresses(int protocol) + { + List addresses = new List(); + if(protocol != EnableIPv4) + { + addresses.Add(IPAddress.IPv6Loopback); + } + if(protocol != EnableIPv6) + { + addresses.Add(IPAddress.Loopback); + } + return addresses; + } + public static bool addressEquals(EndPoint addr1, EndPoint addr2) { diff --git a/java-compat/src/Ice/src/main/java/IceInternal/Network.java b/java-compat/src/Ice/src/main/java/IceInternal/Network.java index 62fff1554b8..a58df9bcf5c 100644 --- a/java-compat/src/Ice/src/main/java/IceInternal/Network.java +++ b/java-compat/src/Ice/src/main/java/IceInternal/Network.java @@ -1047,8 +1047,7 @@ public final class Network java.util.ArrayList hosts = new java.util.ArrayList(); if(isWildcard(host)) { - java.util.ArrayList addrs = getLocalAddresses(protocolSupport, includeLoopback); - for(java.net.InetAddress addr : addrs) + for(java.net.InetAddress addr : getLocalAddresses(protocolSupport, includeLoopback)) { // // NOTE: We don't publish link-local IPv6 addresses as these addresses can only @@ -1059,10 +1058,13 @@ public final class Network hosts.add(addr.getHostAddress()); } } - if(hosts.isEmpty() && !includeLoopback) + if(hosts.isEmpty()) { - // Return loopback if only loopback is available no other local addresses are available. - return getHostsForEndpointExpand(host, protocolSupport, true); + // Return loopback if no other local addresses are available. + for(java.net.InetAddress addr : getLoopbackAddresses(protocolSupport)) + { + hosts.add(addr.getHostAddress()); + } } } return hosts; @@ -1074,19 +1076,10 @@ public final class Network java.util.ArrayList interfaces = new java.util.ArrayList<>(); if(isWildcard(intf)) { - java.util.ArrayList addrs = getLocalAddresses(protocolSupport, true); - for(java.net.InetAddress addr : addrs) + for(java.net.InetAddress addr : getLocalAddresses(protocolSupport, true)) { interfaces.add(addr.getHostAddress()); } - if(protocolSupport != EnableIPv6) - { - interfaces.add("127.0.0.1"); - } - if(protocolSupport != EnableIPv4) - { - interfaces.add("0:0:0:0:0:0:0:1"); - } } if(interfaces.isEmpty()) { diff --git a/java/src/Ice/src/main/java/com/zeroc/IceInternal/Network.java b/java/src/Ice/src/main/java/com/zeroc/IceInternal/Network.java index d9469220608..0a66898acf5 100644 --- a/java/src/Ice/src/main/java/com/zeroc/IceInternal/Network.java +++ b/java/src/Ice/src/main/java/com/zeroc/IceInternal/Network.java @@ -1052,8 +1052,7 @@ public final class Network java.util.ArrayList hosts = new java.util.ArrayList<>(); if(isWildcard(host)) { - java.util.ArrayList addrs = getLocalAddresses(protocolSupport, includeLoopback); - for(java.net.InetAddress addr : addrs) + for(java.net.InetAddress addr : getLocalAddresses(protocolSupport, includeLoopback)) { // // NOTE: We don't publish link-local IPv6 addresses as these addresses can only @@ -1064,10 +1063,13 @@ public final class Network hosts.add(addr.getHostAddress()); } } - if(hosts.isEmpty() && !includeLoopback) + if(hosts.isEmpty()) { - // Return loopback if only loopback is available no other local addresses are available. - return getHostsForEndpointExpand(host, protocolSupport, true); + // Return loopback if no other local addresses are available. + for(java.net.InetAddress addr : getLoopbackAddresses(protocolSupport)) + { + hosts.add(addr.getHostAddress()); + } } } return hosts; @@ -1079,19 +1081,10 @@ public final class Network java.util.ArrayList interfaces = new java.util.ArrayList<>(); if(isWildcard(intf)) { - java.util.ArrayList addrs = getLocalAddresses(protocolSupport, true); - for(java.net.InetAddress addr : addrs) + for(java.net.InetAddress addr : getLocalAddresses(protocolSupport, true)) { interfaces.add(addr.getHostAddress()); } - if(protocolSupport != EnableIPv6) - { - interfaces.add("127.0.0.1"); - } - if(protocolSupport != EnableIPv4) - { - interfaces.add("0:0:0:0:0:0:0:1"); - } } if(interfaces.isEmpty()) { -- cgit v1.2.3 From 0272bd6a34f3b01528e21e1682f1be4387c5f023 Mon Sep 17 00:00:00 2001 From: Benoit Foucher Date: Wed, 7 Feb 2018 15:03:49 +0100 Subject: Fixed Glacier2 potential NullHandleException (ICE-8575) --- cpp/src/Glacier2/SessionRouterI.cpp | 7 ++++++- cpp/test/Glacier2/router/Client.cpp | 13 +++++++++++++ csharp/test/Glacier2/router/Client.cs | 13 +++++++++++++ .../test/src/main/java/test/Glacier2/router/Client.java | 14 ++++++++++++++ java/test/src/main/java/test/Glacier2/router/Client.java | 14 ++++++++++++++ js/test/Glacier2/router/Client.js | 13 +++++++++++++ 6 files changed, 73 insertions(+), 1 deletion(-) (limited to 'cpp') diff --git a/cpp/src/Glacier2/SessionRouterI.cpp b/cpp/src/Glacier2/SessionRouterI.cpp index e485f76c921..d97f55bcde0 100644 --- a/cpp/src/Glacier2/SessionRouterI.cpp +++ b/cpp/src/Glacier2/SessionRouterI.cpp @@ -1125,7 +1125,12 @@ SessionRouterI::expireSessions() RouterIPtr SessionRouterI::getRouterImpl(const ConnectionPtr& connection, const Ice::Identity& id, bool close) const { - if(_destroy) + // + // The connection can be null if the client tries to forward requests to + // a proxy which points to the client endpoints (in which case the request + // is forwarded with collocation optimization). + // + if(_destroy || !connection) { throw ObjectNotExistException(__FILE__, __LINE__); } diff --git a/cpp/test/Glacier2/router/Client.cpp b/cpp/test/Glacier2/router/Client.cpp index 778e02ea4ea..afa70d92013 100644 --- a/cpp/test/Glacier2/router/Client.cpp +++ b/cpp/test/Glacier2/router/Client.cpp @@ -554,6 +554,19 @@ CallbackClient::run(int argc, char* argv[]) cout << "ok" << endl; } + { + cout << "pinging object with client endpoint... " << flush; + Ice::ObjectPrx baseC = communicator()->stringToProxy("collocated:" + getTestEndpoint(communicator(), 50)); + try + { + baseC->ice_ping(); + } + catch(const Ice::ObjectNotExistException&) + { + } + cout << "ok" << endl; + } + CallbackPrx twoway; { diff --git a/csharp/test/Glacier2/router/Client.cs b/csharp/test/Glacier2/router/Client.cs index a996bb0275a..795aaeb730a 100644 --- a/csharp/test/Glacier2/router/Client.cs +++ b/csharp/test/Glacier2/router/Client.cs @@ -165,6 +165,19 @@ public class Client : TestCommon.Application Console.Out.WriteLine("ok"); } + { + Console.Out.Write("pinging object with client endpoint... "); + Ice.ObjectPrx baseC = communicator().stringToProxy("collocated:" + getTestEndpoint(50)); + try + { + baseC.ice_ping(); + } + catch(Ice.ObjectNotExistException) + { + } + Console.Out.WriteLine("ok"); + } + CallbackPrx twoway; { diff --git a/java-compat/test/src/main/java/test/Glacier2/router/Client.java b/java-compat/test/src/main/java/test/Glacier2/router/Client.java index 7d932ab0465..15bd713e670 100644 --- a/java-compat/test/src/main/java/test/Glacier2/router/Client.java +++ b/java-compat/test/src/main/java/test/Glacier2/router/Client.java @@ -189,6 +189,20 @@ public class Client extends test.Util.Application out.println("ok"); } + { + out.print("pinging object with client endpoint... "); + out.flush(); + Ice.ObjectPrx baseC = communicator().stringToProxy("collocated:" + getTestEndpoint(50)); + try + { + baseC.ice_ping(); + } + catch(Ice.ObjectNotExistException ex) + { + } + out.println("ok"); + } + CallbackPrx twoway; { diff --git a/java/test/src/main/java/test/Glacier2/router/Client.java b/java/test/src/main/java/test/Glacier2/router/Client.java index a083c860c3b..0ffbeabee2c 100644 --- a/java/test/src/main/java/test/Glacier2/router/Client.java +++ b/java/test/src/main/java/test/Glacier2/router/Client.java @@ -186,6 +186,20 @@ public class Client extends test.Util.Application out.println("ok"); } + { + out.print("pinging object with client endpoint... "); + out.flush(); + com.zeroc.Ice.ObjectPrx baseC = communicator().stringToProxy("collocated:" + getTestEndpoint(50)); + try + { + baseC.ice_ping(); + } + catch(com.zeroc.Ice.ObjectNotExistException ex) + { + } + out.println("ok"); + } + CallbackPrx twoway; { diff --git a/js/test/Glacier2/router/Client.js b/js/test/Glacier2/router/Client.js index 76db6a620db..9ea97bf1ec5 100644 --- a/js/test/Glacier2/router/Client.js +++ b/js/test/Glacier2/router/Client.js @@ -141,6 +141,19 @@ await base.ice_ping(); out.writeLine("ok"); + { + out.write("pinging object with client endpoint... "); + const baseC = communicator.stringToProxy("collocated:default -p 12060"); + try + { + await baseC.ice_ping(); + } + catch(ex) + { + } + out.writeLine("ok"); + } + out.write("testing checked cast for server object... "); let twoway = await Test.CallbackPrx.checkedCast(base); test(twoway !== null); -- cgit v1.2.3 From 5a937ede89579d88f294094165633cc120e10a97 Mon Sep 17 00:00:00 2001 From: Benoit Foucher Date: Thu, 8 Feb 2018 11:40:30 +0100 Subject: Fixed UWP controller to also run when in the background (ICE-8305) --- cpp/test/uwp/controller/App.xaml.cpp | 34 +++++++++++++++++++++++++--- cpp/test/uwp/controller/App.xaml.h | 2 ++ cpp/test/uwp/controller/Package.appxmanifest | 4 +++- 3 files changed, 36 insertions(+), 4 deletions(-) (limited to 'cpp') diff --git a/cpp/test/uwp/controller/App.xaml.cpp b/cpp/test/uwp/controller/App.xaml.cpp index ea67c113cc6..dfb97c7000d 100644 --- a/cpp/test/uwp/controller/App.xaml.cpp +++ b/cpp/test/uwp/controller/App.xaml.cpp @@ -9,6 +9,7 @@ #include "pch.h" #include "ViewController.xaml.h" +#include using namespace Controller; @@ -25,6 +26,7 @@ using namespace Windows::UI::Xaml::Input; using namespace Windows::UI::Xaml::Interop; using namespace Windows::UI::Xaml::Media; using namespace Windows::UI::Xaml::Navigation; +using namespace Windows::ApplicationModel::ExtendedExecution::Foreground; // The Blank Application template is documented at http://go.microsoft.com/fwlink/?LinkId=234227 @@ -48,20 +50,20 @@ void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEvent { // Do not repeat app initialization when already running, just ensure that // the window is active - if (pArgs->PreviousExecutionState == ApplicationExecutionState::Running) + if(pArgs->PreviousExecutionState == ApplicationExecutionState::Running) { Window::Current->Activate(); return; } - if (pArgs->PreviousExecutionState == ApplicationExecutionState::Terminated) + if(pArgs->PreviousExecutionState == ApplicationExecutionState::Terminated) { //TODO: Load state from previously suspended application } // Create a Frame to act navigation context and navigate to the first page auto rootFrame = ref new Frame(); - if (!rootFrame->Navigate(TypeName(ViewController::typeid))) + if(!rootFrame->Navigate(TypeName(ViewController::typeid))) { throw ref new FailureException("Failed to create initial page"); } @@ -69,6 +71,32 @@ void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEvent // Place the frame in the current Window and ensure that it is active Window::Current->Content = rootFrame; Window::Current->Activate(); + + if(!_session) + { + ExtendedExecutionForegroundSession^ session = ref new ExtendedExecutionForegroundSession(); + session->Reason = ExtendedExecutionForegroundReason::Unconstrained; + session->Revoked += ref new TypedEventHandler(this, &App::SessionRevoked); + concurrency::create_task(session->RequestExtensionAsync()).then([this, session](ExtendedExecutionForegroundResult result) + { + switch(result) + { + case ExtendedExecutionForegroundResult::Allowed: + _session = session; + break; + case ExtendedExecutionForegroundResult::Denied: + break; + } + }); + } +} + +void App::SessionRevoked(Object^ sender, ExtendedExecutionForegroundRevokedEventArgs^ args) +{ + if(_session != nullptr) + { + _session = nullptr; + } } /// diff --git a/cpp/test/uwp/controller/App.xaml.h b/cpp/test/uwp/controller/App.xaml.h index 354d2726504..2305d464a81 100644 --- a/cpp/test/uwp/controller/App.xaml.h +++ b/cpp/test/uwp/controller/App.xaml.h @@ -24,5 +24,7 @@ public: private: void OnSuspending(Platform::Object^ sender, Windows::ApplicationModel::SuspendingEventArgs^ e); + void SessionRevoked(Platform::Object^, Windows::ApplicationModel::ExtendedExecution::Foreground::ExtendedExecutionForegroundRevokedEventArgs^); + Windows::ApplicationModel::ExtendedExecution::Foreground::ExtendedExecutionForegroundSession^ _session; }; } diff --git a/cpp/test/uwp/controller/Package.appxmanifest b/cpp/test/uwp/controller/Package.appxmanifest index e5a1aa1d6f5..85f47d15719 100644 --- a/cpp/test/uwp/controller/Package.appxmanifest +++ b/cpp/test/uwp/controller/Package.appxmanifest @@ -1,5 +1,5 @@  - + @@ -26,6 +26,8 @@ + + -- cgit v1.2.3