FreePastry/docs/javadoc/rice/pastry/socket/nat/rendezvous/RendezvousJoinProtocol.html
ChronosX88 aaa73fe8b3 Pew
2019-05-13 16:45:05 +04:00

432 lines
30 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_07) on Fri Mar 13 20:01:22 CET 2009 -->
<TITLE>
RendezvousJoinProtocol (Rice Pastry - API Specifications)
</TITLE>
<META NAME="date" CONTENT="2009-03-13">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
<SCRIPT type="text/javascript">
function windowTitle()
{
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="RendezvousJoinProtocol (Rice Pastry - API Specifications)";
}
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<BODY BGCOLOR="white" onload="windowTitle();">
<HR>
<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/RendezvousJoinProtocol.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
Rice Pastry API</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../../rice/pastry/socket/nat/rendezvous/RendezvousContactDirectStrategy.html" title="class in rice.pastry.socket.nat.rendezvous"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../../rice/pastry/socket/nat/rendezvous/RendezvousJoinRequest.html" title="class in rice.pastry.socket.nat.rendezvous"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../../../index.html?rice/pastry/socket/nat/rendezvous/RendezvousJoinProtocol.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RendezvousJoinProtocol.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;<A HREF="#nested_classes_inherited_from_class_rice.pastry.standard.ConsistentJoinProtocol">NESTED</A>&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_rice.pastry.standard.ConsistentJoinProtocol">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->
<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
rice.pastry.socket.nat.rendezvous</FONT>
<BR>
Class RendezvousJoinProtocol</H2>
<PRE>
java.lang.Object
<IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../../rice/pastry/client/PastryAppl.html" title="class in rice.pastry.client">rice.pastry.client.PastryAppl</A>
<IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html" title="class in rice.pastry.standard">rice.pastry.standard.StandardJoinProtocol</A>
<IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html" title="class in rice.pastry.standard">rice.pastry.standard.ConsistentJoinProtocol</A>
<IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>rice.pastry.socket.nat.rendezvous.RendezvousJoinProtocol</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD>java.util.Observer, <A HREF="../../../../../rice/pastry/join/JoinProtocol.html" title="interface in rice.pastry.join">JoinProtocol</A>, <A HREF="../../../../../rice/pastry/NodeSetListener.html" title="interface in rice.pastry">NodeSetListener</A>, <A HREF="../../../../../rice/selector/LoopObserver.html" title="interface in rice.selector">LoopObserver</A></DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>RendezvousJoinProtocol</B><DT>extends <A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html" title="class in rice.pastry.standard">ConsistentJoinProtocol</A></DL>
</PRE>
<P>
The purpose of this class is to allow a NATted node to boot.
Without this class, when the JoinRequest reaches the nearest neighbor of the joiner,
that node can't deliver the Request back to the joiner (because he is NATted).
The class opens a pilot to the bootstrap, then includes this node in the RendezvousJoinRequest.
Note that this class uses both JoinRequests and RendezvousJoinRequests. The latter are only used for
a NATted Joiner.
Overview:
Extend CJPSerializer to also use RendezvousJoinRequest (include the bootstrap, and possibly additional credentials)
pass in constructor
Override handleInitiateJoin():
If local node is NATted:
open a pilot to the bootstrap (make sure to complete this before continuing)
send the RendezvousJoinRequest
else
super.handleInitiateJoin()
TODO:
Override respondToJoiner():
If joiner is NATted:
use the pilot on the bootstrap:
rendezvousLayer.requestSocket(joiner, bootstrap)
Override completeJoin() to close the pilot to the bootstrap before calling super.completeJoin() because that will cause pilots to open.
may need a way to verify that it is closed, or else don't close it if it's in the leafset, b/c it may become busted
<P>
<P>
<DL>
<DT><B>Author:</B></DT>
<DD>Jeff Hoye</DD>
</DL>
<HR>
<P>
<!-- ======== NESTED CLASS SUMMARY ======== -->
<A NAME="nested_class_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Nested Class Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="nested_classes_inherited_from_class_rice.pastry.standard.ConsistentJoinProtocol"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Nested classes/interfaces inherited from class rice.pastry.standard.<A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html" title="class in rice.pastry.standard">ConsistentJoinProtocol</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.CJPDeserializer.html" title="class in rice.pastry.standard">ConsistentJoinProtocol.CJPDeserializer</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<A NAME="nested_classes_inherited_from_class_rice.pastry.standard.StandardJoinProtocol"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Nested classes/interfaces inherited from class rice.pastry.standard.<A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html" title="class in rice.pastry.standard">StandardJoinProtocol</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.SJPDeserializer.html" title="class in rice.pastry.standard">StandardJoinProtocol.SJPDeserializer</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- =========== FIELD SUMMARY =========== -->
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_rice.pastry.standard.ConsistentJoinProtocol"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class rice.pastry.standard.<A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html" title="class in rice.pastry.standard">ConsistentJoinProtocol</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#MAX_NUM_TO_HEAR_FROM">MAX_NUM_TO_HEAR_FROM</A>, <A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#MAX_TIME_TO_BE_SCHEDULED">MAX_TIME_TO_BE_SCHEDULED</A>, <A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#RETRY_INTERVAL">RETRY_INTERVAL</A>, <A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#tryingToGoReady">tryingToGoReady</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_rice.pastry.standard.StandardJoinProtocol"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class rice.pastry.standard.<A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html" title="class in rice.pastry.standard">StandardJoinProtocol</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#joinEvent">joinEvent</A>, <A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#leafSet">leafSet</A>, <A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#localHandle">localHandle</A>, <A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#routeTable">routeTable</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_rice.pastry.client.PastryAppl"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class rice.pastry.client.<A HREF="../../../../../rice/pastry/client/PastryAppl.html" title="class in rice.pastry.client">PastryAppl</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../../rice/pastry/client/PastryAppl.html#address">address</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#deserializer">deserializer</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#instance">instance</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#logger">logger</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#options">options</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#receiver">receiver</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#thePastryNode">thePastryNode</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../../rice/pastry/socket/nat/rendezvous/RendezvousJoinProtocol.html#RendezvousJoinProtocol(rice.pastry.PastryNode, rice.pastry.NodeHandle, rice.pastry.routing.RoutingTable, rice.pastry.leafset.LeafSet, rice.pastry.ReadyStrategy, org.mpisws.p2p.transport.rendezvous.PilotManager)">RendezvousJoinProtocol</A></B>(<A HREF="../../../../../rice/pastry/PastryNode.html" title="class in rice.pastry">PastryNode</A>&nbsp;ln,
<A HREF="../../../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;lh,
<A HREF="../../../../../rice/pastry/routing/RoutingTable.html" title="class in rice.pastry.routing">RoutingTable</A>&nbsp;rt,
<A HREF="../../../../../rice/pastry/leafset/LeafSet.html" title="class in rice.pastry.leafset">LeafSet</A>&nbsp;ls,
<A HREF="../../../../../rice/pastry/ReadyStrategy.html" title="interface in rice.pastry">ReadyStrategy</A>&nbsp;nextReadyStrategy,
<A HREF="../../../../../org/mpisws/p2p/transport/rendezvous/PilotManager.html" title="interface in org.mpisws.p2p.transport.rendezvous">PilotManager</A>&lt;<A HREF="../../../../../rice/pastry/socket/nat/rendezvous/RendezvousSocketNodeHandle.html" title="class in rice.pastry.socket.nat.rendezvous">RendezvousSocketNodeHandle</A>&gt;&nbsp;pilotManager)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../rice/pastry/socket/nat/rendezvous/RendezvousJoinProtocol.html#getJoinRequest(rice.pastry.NodeHandle, rice.Continuation)">getJoinRequest</A></B>(<A HREF="../../../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;b,
<A HREF="../../../../../rice/Continuation.html" title="interface in rice">Continuation</A>&lt;<A HREF="../../../../../rice/pastry/join/JoinRequest.html" title="class in rice.pastry.join">JoinRequest</A>,java.lang.Exception&gt;&nbsp;deliverJRToMe)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Use RendezvousJoinRequest if local node is NATted</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;java.util.Map&lt;java.lang.String,java.lang.Object&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../rice/pastry/socket/nat/rendezvous/RendezvousJoinProtocol.html#getOptions(rice.pastry.join.JoinRequest, java.util.Map)">getOptions</A></B>(<A HREF="../../../../../rice/pastry/join/JoinRequest.html" title="class in rice.pastry.join">JoinRequest</A>&nbsp;jr,
java.util.Map&lt;java.lang.String,java.lang.Object&gt;&nbsp;existing)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This is called from respondToJoiner() and other places, we need to set the OPTION_USE_PILOT
to the intermediate node, so that will queue the RendezvousTL to use the pilot.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_rice.pastry.standard.ConsistentJoinProtocol"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class rice.pastry.standard.<A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html" title="class in rice.pastry.standard">ConsistentJoinProtocol</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#addToLeafSet(rice.pastry.NodeHandle)">addToLeafSet</A>, <A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#delayInterest()">delayInterest</A>, <A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#destroy()">destroy</A>, <A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#loopTime(int)">loopTime</A>, <A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#nodeSetUpdate(rice.pastry.NodeSetEventSource, rice.pastry.NodeHandle, boolean)">nodeSetUpdate</A>, <A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#otherNodesMaySuspectFaulty(int)">otherNodesMaySuspectFaulty</A>, <A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#receiveMessage(rice.pastry.messaging.Message)">receiveMessage</A>, <A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#requestFromEveryoneWeHaventHeardFrom()">requestFromEveryoneWeHaventHeardFrom</A>, <A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#sendTheMessage(rice.pastry.NodeHandle, boolean)">sendTheMessage</A>, <A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#setReady()">setReady</A>, <A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#update(java.util.Observable, java.lang.Object)">update</A>, <A HREF="../../../../../rice/pastry/standard/ConsistentJoinProtocol.html#whoDoWeNeedAResponseFrom()">whoDoWeNeedAResponseFrom</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_rice.pastry.standard.StandardJoinProtocol"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class rice.pastry.standard.<A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html" title="class in rice.pastry.standard">StandardJoinProtocol</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#broadcastRows(rice.pastry.join.JoinRequest)">broadcastRows</A>, <A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#completeJoin(rice.pastry.join.JoinRequest)">completeJoin</A>, <A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#deliverWhenNotReady()">deliverWhenNotReady</A>, <A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#getAddress()">getAddress</A>, <A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#handleInitiateJoin(rice.pastry.join.InitiateJoin)">handleInitiateJoin</A>, <A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#handleIntermediateHop(rice.pastry.routing.RouteMessage)">handleIntermediateHop</A>, <A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#handleJoinRequest(rice.pastry.join.JoinRequest)">handleJoinRequest</A>, <A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#initiateJoin(java.util.Collection)">initiateJoin</A>, <A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#messageForAppl(rice.pastry.messaging.Message)">messageForAppl</A>, <A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#respondToJoiner(rice.pastry.join.JoinRequest)">respondToJoiner</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_rice.pastry.client.PastryAppl"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class rice.pastry.client.<A HREF="../../../../../rice/pastry/client/PastryAppl.html" title="class in rice.pastry.client">PastryAppl</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../../rice/pastry/client/PastryAppl.html#accept(rice.p2p.commonapi.appsocket.AppSocketReceiver)">accept</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#canReceiveSocket()">canReceiveSocket</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#connect(rice.p2p.commonapi.NodeHandle, rice.p2p.commonapi.appsocket.AppSocketReceiver, int)">connect</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#enrouteMessage(rice.pastry.messaging.Message, rice.pastry.Id, rice.pastry.NodeHandle, rice.pastry.routing.SendOptions)">enrouteMessage</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#finishReceiveSocket(rice.p2p.commonapi.appsocket.AppSocket)">finishReceiveSocket</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#getDeserializer()">getDeserializer</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#getLeafSet()">getLeafSet</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#getNodeHandle()">getNodeHandle</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#getNodeId()">getNodeId</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#getRoutingTable()">getRoutingTable</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#isClosest(rice.pastry.Id)">isClosest</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#leafSetChange(rice.pastry.NodeHandle, boolean)">leafSetChange</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#notifyReady()">notifyReady</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#receiveMessageInternal(rice.pastry.messaging.RawMessageDelivery)">receiveMessageInternal</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#register()">register</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#routeMsg(rice.pastry.Id, rice.pastry.messaging.Message, rice.pastry.routing.SendOptions)">routeMsg</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#routeMsg(rice.pastry.Id, rice.pastry.messaging.Message, rice.pastry.routing.SendOptions, rice.p2p.commonapi.DeliveryNotification)">routeMsg</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#routeMsgDirect(rice.pastry.NodeHandle, rice.pastry.messaging.Message, rice.pastry.routing.SendOptions)">routeMsgDirect</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#routeSetChange(rice.pastry.NodeHandle, boolean)">routeSetChange</A>, <A HREF="../../../../../rice/pastry/client/PastryAppl.html#setDeserializer(rice.p2p.commonapi.rawserialization.MessageDeserializer)">setDeserializer</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="RendezvousJoinProtocol(rice.pastry.PastryNode, rice.pastry.NodeHandle, rice.pastry.routing.RoutingTable, rice.pastry.leafset.LeafSet, rice.pastry.ReadyStrategy, org.mpisws.p2p.transport.rendezvous.PilotManager)"><!-- --></A><H3>
RendezvousJoinProtocol</H3>
<PRE>
public <B>RendezvousJoinProtocol</B>(<A HREF="../../../../../rice/pastry/PastryNode.html" title="class in rice.pastry">PastryNode</A>&nbsp;ln,
<A HREF="../../../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;lh,
<A HREF="../../../../../rice/pastry/routing/RoutingTable.html" title="class in rice.pastry.routing">RoutingTable</A>&nbsp;rt,
<A HREF="../../../../../rice/pastry/leafset/LeafSet.html" title="class in rice.pastry.leafset">LeafSet</A>&nbsp;ls,
<A HREF="../../../../../rice/pastry/ReadyStrategy.html" title="interface in rice.pastry">ReadyStrategy</A>&nbsp;nextReadyStrategy,
<A HREF="../../../../../org/mpisws/p2p/transport/rendezvous/PilotManager.html" title="interface in org.mpisws.p2p.transport.rendezvous">PilotManager</A>&lt;<A HREF="../../../../../rice/pastry/socket/nat/rendezvous/RendezvousSocketNodeHandle.html" title="class in rice.pastry.socket.nat.rendezvous">RendezvousSocketNodeHandle</A>&gt;&nbsp;pilotManager)</PRE>
<DL>
</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="getJoinRequest(rice.pastry.NodeHandle, rice.Continuation)"><!-- --></A><H3>
getJoinRequest</H3>
<PRE>
protected void <B>getJoinRequest</B>(<A HREF="../../../../../rice/pastry/NodeHandle.html" title="class in rice.pastry">NodeHandle</A>&nbsp;b,
<A HREF="../../../../../rice/Continuation.html" title="interface in rice">Continuation</A>&lt;<A HREF="../../../../../rice/pastry/join/JoinRequest.html" title="class in rice.pastry.join">JoinRequest</A>,java.lang.Exception&gt;&nbsp;deliverJRToMe)</PRE>
<DL>
<DD>Use RendezvousJoinRequest if local node is NATted
<P>
<DD><DL>
<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#getJoinRequest(rice.pastry.NodeHandle, rice.Continuation)">getJoinRequest</A></CODE> in class <CODE><A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html" title="class in rice.pastry.standard">StandardJoinProtocol</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="getOptions(rice.pastry.join.JoinRequest, java.util.Map)"><!-- --></A><H3>
getOptions</H3>
<PRE>
protected java.util.Map&lt;java.lang.String,java.lang.Object&gt; <B>getOptions</B>(<A HREF="../../../../../rice/pastry/join/JoinRequest.html" title="class in rice.pastry.join">JoinRequest</A>&nbsp;jr,
java.util.Map&lt;java.lang.String,java.lang.Object&gt;&nbsp;existing)</PRE>
<DL>
<DD>This is called from respondToJoiner() and other places, we need to set the OPTION_USE_PILOT
to the intermediate node, so that will queue the RendezvousTL to use the pilot.
<P>
<DD><DL>
<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html#getOptions(rice.pastry.join.JoinRequest, java.util.Map)">getOptions</A></CODE> in class <CODE><A HREF="../../../../../rice/pastry/standard/StandardJoinProtocol.html" title="class in rice.pastry.standard">StandardJoinProtocol</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/RendezvousJoinProtocol.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
Rice Pastry API</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../../rice/pastry/socket/nat/rendezvous/RendezvousContactDirectStrategy.html" title="class in rice.pastry.socket.nat.rendezvous"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../../rice/pastry/socket/nat/rendezvous/RendezvousJoinRequest.html" title="class in rice.pastry.socket.nat.rendezvous"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../../../index.html?rice/pastry/socket/nat/rendezvous/RendezvousJoinProtocol.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="RendezvousJoinProtocol.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;<A HREF="#nested_classes_inherited_from_class_rice.pastry.standard.ConsistentJoinProtocol">NESTED</A>&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_rice.pastry.standard.ConsistentJoinProtocol">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
<i>Copyright &#169; 2001-2005 - Rice Pastry.</i>
</BODY>
</HTML>