private ObjectPrx getPeerProxy(HostAndPort peerHostAndPort, Identity proxyIdentity)
        {
            log("getPeerProxy called");
            string protocol = communicator.getProperties().getProperty(PROTOCOL_PROPERTY_KEY);

            if (protocol == null || protocol.Length == 0)
            {
                protocol = DEFAULT_PROTOCOL;
            }
            string port;

            if (peerHostAndPort.getPort() != null)
            {
                port = peerHostAndPort.getPort();
            }
            else
            {
                port = communicator.getProperties().getProperty(PORT_PROPERTY_KEY);
            }
            if (port == null || port.Length == 0)
            {
                port = DEFAULT_PORT;
            }

            StringBuilder proxyString = new StringBuilder("'");

            proxyString.Append(Util.identityToString(proxyIdentity));
            proxyString.Append("':");
            proxyString.Append(protocol);
            proxyString.Append(" -h ");
            proxyString.Append(peerHostAndPort.getHost());
            proxyString.Append(" -p ");
            proxyString.Append(port);

            log("Calling stringToProxy on: " + proxyString);
            ObjectPrx objectPrx = communicator.stringToProxy(proxyString.ToString());

            log("stringToProxy returned");

            // ensure that our custom context entries are passed along with every call on the proxy
            Context context = new Context();

            context.Add(CONTEXT_MAP_KEY_PEER_IDENTITY, Util.identityToString(objectPrx.ice_getIdentity()));
            context.Add(CONTEXT_MAP_KEY_PEER_USERID, getMyUserId(objectPrx));
            context.Add(CONTEXT_MAP_KEY_IS_DIRECT_CONNECT, "true");

            return(objectPrx.ice_context(context));
        }
        private ObjectPrx getPeerProxy(HostAndPort peerHostAndPort, Identity proxyIdentity)
        {
            log("getPeerProxy called");
            string protocol = communicator.getProperties().getProperty(PROTOCOL_PROPERTY_KEY);

            if (protocol == null || protocol.Length == 0)
            {
                protocol = DEFAULT_PROTOCOL;
            }
            string port;
            if (peerHostAndPort.getPort() != null)
            {
                port = peerHostAndPort.getPort();
            }
            else
            {
                port = communicator.getProperties().getProperty(PORT_PROPERTY_KEY);
            }
            if (port == null || port.Length == 0)
            {
                port = DEFAULT_PORT;
            }

            StringBuilder proxyString = new StringBuilder("'");
            proxyString.Append(Util.identityToString(proxyIdentity));
            proxyString.Append("':");
            proxyString.Append(protocol);
            proxyString.Append(" -h ");
            proxyString.Append(peerHostAndPort.getHost());
            proxyString.Append(" -p ");
            proxyString.Append(port);

            log("Calling stringToProxy on: "+proxyString);
            ObjectPrx objectPrx = communicator.stringToProxy(proxyString.ToString());
            log("stringToProxy returned");

            // ensure that our custom context entries are passed along with every call on the proxy
            Context context = new Context();
            context.Add(CONTEXT_MAP_KEY_PEER_IDENTITY, Util.identityToString(objectPrx.ice_getIdentity()));
            context.Add(CONTEXT_MAP_KEY_PEER_USERID, getMyUserId(objectPrx));
            context.Add(CONTEXT_MAP_KEY_IS_DIRECT_CONNECT, "true");

            return objectPrx.ice_context(context);
        }