Exemplo n.º 1
0
        /// <exception cref="System.IO.IOException"/>
        private void FetchServerMethods(MethodInfo method)
        {
            long clientVersion;

            clientVersion = RPC.GetProtocolVersion(method.DeclaringType);
            int clientMethodsHash = ProtocolSignature.GetFingerprint(method.DeclaringType.GetMethods
                                                                         ());
            ProtocolSignature serverInfo = ((VersionedProtocol)proxy).GetProtocolSignature(RPC
                                                                                           .GetProtocolName(protocol), clientVersion, clientMethodsHash);
            long serverVersion = serverInfo.GetVersion();

            if (serverVersion != clientVersion)
            {
                throw new RPC.VersionMismatch(protocol.FullName, clientVersion, serverVersion);
            }
            int[] serverMethodsCodes = serverInfo.GetMethods();
            if (serverMethodsCodes != null)
            {
                serverMethods = new HashSet <int>(serverMethodsCodes.Length);
                foreach (int m in serverMethodsCodes)
                {
                    this.serverMethods.AddItem(Extensions.ValueOf(m));
                }
            }
            serverMethodsFetched = true;
        }
Exemplo n.º 2
0
        private static bool MethodExists(int methodHash, long version, IDictionary <long,
                                                                                    ProtocolSignature> versionMap)
        {
            ProtocolSignature sig = versionMap[version];

            if (sig != null)
            {
                foreach (int m in sig.GetMethods())
                {
                    if (m == methodHash)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Exemplo n.º 3
0
        /// <exception cref="Com.Google.Protobuf.ServiceException"/>
        public virtual ProtocolInfoProtos.GetProtocolSignatureResponseProto GetProtocolSignature
            (RpcController controller, ProtocolInfoProtos.GetProtocolSignatureRequestProto request
            )
        {
            ProtocolInfoProtos.GetProtocolSignatureResponseProto.Builder builder = ProtocolInfoProtos.GetProtocolSignatureResponseProto
                                                                                   .NewBuilder();
            string protocol = request.GetProtocol();
            string rpcKind  = request.GetRpcKind();

            long[] versions;
            try
            {
                versions = GetProtocolVersionForRpcKind(RPC.RpcKind.ValueOf(rpcKind), protocol);
            }
            catch (TypeLoadException e1)
            {
                throw new ServiceException(e1);
            }
            if (versions == null)
            {
                return((ProtocolInfoProtos.GetProtocolSignatureResponseProto)builder.Build());
            }
            foreach (long v in versions)
            {
                ProtocolInfoProtos.ProtocolSignatureProto.Builder sigBuilder = ProtocolInfoProtos.ProtocolSignatureProto
                                                                               .NewBuilder();
                sigBuilder.SetVersion(v);
                try
                {
                    ProtocolSignature signature = ProtocolSignature.GetProtocolSignature(protocol, v);
                    foreach (int m in signature.GetMethods())
                    {
                        sigBuilder.AddMethods(m);
                    }
                }
                catch (TypeLoadException e)
                {
                    throw new ServiceException(e);
                }
                builder.AddProtocolSignature(((ProtocolInfoProtos.ProtocolSignatureProto)sigBuilder
                                              .Build()));
            }
            return((ProtocolInfoProtos.GetProtocolSignatureResponseProto)builder.Build());
        }