public static OtpErlangObject call(OtpNode host, String server,
String node, OtpErlangObject call, long timeout)
throws OtpErlangException {
OtpMbox caller = host.createMbox();
OtpErlangTuple from = new OtpErlangTuple(new OtpErlangObject[] {
caller.self(), host.createRef() });
OtpErlangObject msg = new OtpErlangTuple(new OtpErlangObject[] {
new OtpErlangAtom("$gen_call"), from, call });
caller.send(server, node, msg);
OtpErlangObject res = timeout == 0 ? caller.receive() : caller
.receive(timeout);