Otp.AbstractConnection.recvName C# (CSharp) Method

recvName() protected method

protected recvName ( OtpPeer peer ) : void
peer OtpPeer
return void
        protected internal virtual void  recvName(OtpPeer peer)
        {
            
            System.String hisname = "";
            
            try
            {
                byte[] tmpbuf = read2BytePackage();
                OtpInputStream ibuf = new OtpInputStream(tmpbuf);
                byte[] tmpname;
                int len = (int) (tmpbuf.Length);
                peer.ntype = ibuf.read1();
                if (peer.ntype != AbstractNode.NTYPE_R6)
                {
                    throw new System.IO.IOException("Unknown remote node type");
                }
                peer._distLow = (peer._distHigh = ibuf.read2BE());
                if (peer._distLow < 5)
                {
                    throw new System.IO.IOException("Unknown remote node type");
                }
                peer.flags = ibuf.read4BE();
                tmpname = new byte[len - 7];
                ibuf.readN(tmpname);
                char[] tmpChar;
                tmpChar = new char[tmpname.Length];
                tmpname.CopyTo(tmpChar, 0);
                hisname = new System.String(tmpChar);
                // Set the old nodetype parameter to indicate hidden/normal status
                // When the old handshake is removed, the ntype should also be.
                if ((peer.flags & AbstractNode.dFlagPublished) != 0)
                    peer.ntype = AbstractNode.NTYPE_R4_ERLANG;
                else
                    peer.ntype = AbstractNode.NTYPE_R4_HIDDEN;


                if ((peer.flags & AbstractNode.dFlagExtendedReferences) == 0) 
                {
                    throw new System.IO.IOException("Handshake failed - peer cannot handle extended references");
                }
                  
                if (OtpSystem.useExtendedPidsPorts() && (peer.flags & AbstractNode.dFlagExtendedPidsPorts) == 0) 
                if (true && (peer.flags & AbstractNode.dFlagExtendedPidsPorts) == 0) 
                {
                    throw new System.IO.IOException("Handshake failed - peer cannot handle extended pids and ports");
                }
            }
            catch (Erlang.Exception)
            {
                throw new System.IO.IOException("Handshake failed - not enough data");
            }
            
            
            int i = hisname.IndexOf((System.Char) '@', 0);
            peer._node = hisname;
            peer._alive = hisname.Substring(0, (i) - (0));
            peer._host = hisname.Substring(i + 1, (hisname.Length) - (i + 1));
            
            if (traceLevel >= OtpTrace.Type.handshakeThreshold)
            {
                OtpTrace.TraceEvent("<- " + "HANDSHAKE" + " ntype=" + peer.ntype + " dist=" + peer._distHigh + " remote=" + peer);
            }
        }