write4BE() публичный Метод

public write4BE ( long n ) : void
n long
Результат void
Пример #1
0
 private void  sendExit(int tag, Erlang.Pid from, Erlang.Pid dest, System.String reason)
 {
     if (!connected)
     {
         throw new System.IO.IOException("Not connected");
     }
     OtpOutputStream header = new OtpOutputStream(headerLen);
     
     // preamble: 4 byte length + "passthrough" tag
     header.write4BE(0); // reserve space for length
     header.write1(passThrough);
     header.write1(version);
     
     // header
     header.write_tuple_head(4);
     header.write_long(tag);
     header.write_any(from);
     header.write_any(dest);
     header.write_string(reason);
     
     // fix up length in preamble
     header.poke4BE(0, header.count() - 4);
     
     do_send(header);
 }
Пример #2
0
 /*
 * Remove a link between the local node and the specified process on
 * the remote node. This method deactivates links created with
 * {@link #sendLink link()}.
 *
 * @param dest the Erlang PID of the remote process.
 *
 * @exception C#.io.IOException if the connection is not active or
 * a communication error occurs.
 **/
 protected internal virtual void  sendUnlink(Erlang.Pid from, Erlang.Pid dest)
 {
     if (!connected)
     {
         throw new System.IO.IOException("Not connected");
     }
     OtpOutputStream header = new OtpOutputStream(headerLen);
     
     // preamble: 4 byte length + "passthrough" tag
     header.write4BE(0); // reserve space for length
     header.write1(passThrough);
     header.write1(version);
     
     // header
     header.write_tuple_head(3);
     header.write_long((long)OtpMsg.Tag.unlinkTag);
     header.write_any(from);
     header.write_any(dest);
     
     // fix up length in preamble
     header.poke4BE(0, header.count() - 4);
     
     do_send(header);
 }
Пример #3
0
 /*Send an auth error to peer because he sent a bad cookie.
 * The auth error uses his cookie (not revealing ours).
 * This is just like send_reg otherwise
 */
 private void  cookieError(OtpLocalNode local, Erlang.Atom cookie)
 {
     try
     {
         OtpOutputStream header = new OtpOutputStream(headerLen);
         
         // preamble: 4 byte length + "passthrough" tag + version
         header.write4BE(0); // reserve space for length
         header.write1(passThrough);
         header.write1(version);
         
         header.write_tuple_head(4);
         header.write_long((long)OtpMsg.Tag.regSendTag);
         header.write_any(local.createPid()); // disposable pid
         header.write_atom(cookie.atomValue()); // important: his cookie, not mine...
         header.write_atom("auth");
         
         // version for payload
         header.write1(version);
         
         // the payload
         
         // the no_auth message (copied from Erlang) Don't change this (Erlang will crash)
         // {$gen_cast, {print, "~n** Unauthorized cookie ~w **~n", [foo@aule]}}
         Erlang.Object[] msg = new Erlang.Object[2];
         Erlang.Object[] msgbody = new Erlang.Object[3];
         
         msgbody[0] = new Erlang.Atom("print");
         msgbody[1] = new Erlang.String("~n** Bad cookie sent to " + local + " **~n");
         // Erlang will crash and burn if there is no third argument here...
         msgbody[2] = new Erlang.List(); // empty list
         
         msg[0] = new Erlang.Atom("$gen_cast");
         msg[1] = new Erlang.Tuple(msgbody);
         
         OtpOutputStream payload = new OtpOutputStream(new Erlang.Tuple(msg));
         
         // fix up length in preamble
         header.poke4BE(0, header.count() + payload.count() - 4);
         
         try
         {
             do_send(header, payload);
         }
         catch (System.IO.IOException)
         {
         } // ignore
     }
     finally
     {
         close();
         throw new OtpAuthException("Remote cookie not authorized: " + cookie.atomValue());
     }
 }
Пример #4
0
 /*
 * Send a pre-encoded message to a process on a remote node.
 *
 * @param dest the Erlang PID of the remote process.
 * @param msg the encoded message to send.
 *
 * @exception C#.io.IOException if the connection is not active
 * or a communication error occurs.
 **/
 protected internal virtual void  sendBuf(Erlang.Pid from, Erlang.Pid dest, OtpOutputStream payload)
 {
     if (!connected)
     {
         throw new System.IO.IOException("Not connected");
     }
     OtpOutputStream header = new OtpOutputStream(headerLen);
     
     // preamble: 4 byte length + "passthrough" tag + version
     header.write4BE(0); // reserve space for length
     header.write1(passThrough);
     header.write1(version);
     
     // header info
     header.write_tuple_head(3);
     header.write_long((long)OtpMsg.Tag.sendTag);
     if (sendCookie)
         header.write_atom(auth_cookie);
     else
         header.write_atom("");
     header.write_any(dest);
     
     // version for payload
     header.write1(version);
     
     // fix up length in preamble
     header.poke4BE(0, header.count() + payload.count() - 4);
     
     do_send(header, payload);
 }
Пример #5
0
 protected internal virtual void  sendChallengeReply(int challenge, byte[] digest)
 {
     
     OtpOutputStream obuf = new OtpOutputStream();
     obuf.write2BE(21);
     obuf.write1(ChallengeReply);
     obuf.write4BE(challenge);
     obuf.write(digest);
     obuf.writeTo((System.IO.Stream) socket.GetStream());
     
     if (traceLevel >= OtpTrace.Type.handshakeThreshold)
     {
         OtpTrace.TraceEvent("-> " + "HANDSHAKE sendChallengeReply" + " challenge=" + challenge + " digest=" + hex(digest) + " local=" + self);
     }
 }
Пример #6
0
 protected internal virtual void  sendChallenge(int dist, int flags, int challenge)
 {
     
     OtpOutputStream obuf = new OtpOutputStream();
     System.String str = self.node();
     obuf.write2BE(str.Length + 11); // 11 bytes + nodename
     obuf.write1(AbstractNode.NTYPE_R6);
     obuf.write2BE(dist);
     obuf.write4BE(flags);
     obuf.write4BE(challenge);
     //UPGRADE_NOTE: This code will be optimized in the future;
     byte[] tmpBytes;
     int i;
     string tmpStr;
     tmpStr = str;
     tmpBytes = new byte[tmpStr.Length];
     i = 0;
     while (i < tmpStr.Length)
     {
         tmpBytes[i] = (byte) tmpStr[i];
         i++;
     }
     obuf.write(tmpBytes);
     
     obuf.writeTo((System.IO.Stream) socket.GetStream());
     
     if (traceLevel >= OtpTrace.Type.handshakeThreshold)
     {
         OtpTrace.TraceEvent("-> " + "HANDSHAKE sendChallenge" + " flags=" + flags + " dist=" + dist + " challenge=" + challenge + " local=" + self);
     }
 }