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);
}
}