throbber
The underlying peer-to-peer communications protocol may send multiple
`
`messages in a single message stream. The traditional technique for retrieving messages from
`
`a stream has been to repeatedly invoke an operating system routine to retrieve the next
`
`message in the stream. The retrieval of each message may require two calls to the operating
`
`system: one to retrieve the size of the next message and the other to retrieve the number of
`
`bytes indicated by the retrieved size. Such calls to the operating system can, however, be
`
`very slow in comparison to the invocations of local routines. To overcome the inefficiencies
`
`of such repeated calls, the broadcast technique in one embodiment, uses XDR to identify the
`
`message boundaries in a stream of messages. The broadcast technique may request the
`
`10
`
`operating system to provide the next, for example, 1,024 bytes from the stream?“ The
`broadcast technique can then repeatedly invoke the XDR routines to retrieve the messages
`
`and use the success or failure of each invocation to determine whether another block of 1,024
`
`bytes needs to be retrieved from the operating system. The invocation of XDR routines do
`
`not involve system calls and are thus more efi'icient than repeated system calls.
`
`15
`
`M-Regular
`
`In the embodiment described above, each fully connected computer has four
`
`20
`
`25
`
`internal connections. The broadcast technique can be used with other numbers of internal
`
`connections. For example, each computer could have 6, 8, or any even number of internal
`
`connections. As the number of internal connections increase, the diameter of the broadcast
`
`channel tends to decrease, and thus propagation time for a message tends to decrease. The
`
`time that it takes to connect a seeking computer to the broadcast channel may, however,
`
`increase as the number of internal connections increases. When the number of internal
`
`connectors is even,
`
`then the broadcast channel can be maintained as m-regular and
`
`m-connected (in the steady state).
`
`If the number of internal connections is odd, then when
`
`the broadcast channel has an odd number of computers connected, one of the computers will
`
`have less than that odd number of internal connections.
`
`In such a situation, the broadcast
`
`network is neither m-regular nor m-connected. When the next computer connects to the
`
`broadcast channel,
`
`it can again become m-regular and m-connected. Thus, with an odd
`
`number of internal connections, the broadcast channel toggles between being and not being
`m-regular and m-connected.
`
`30
`
`[03004-8001/Documa1t1268]
`
`-21-
`
`701/00
`
`BUNGIE - EXHIBIT 1002 P211“: 2 0f 5
`
`0274
`
`0274
`
`BUNGIE - EXHIBIT 1002 Part 2 of 5
`
`

`

`Components
`
`Figure 6 is a block diagram illustrating components of a computer that is
`
`connected to a broadcast charmel. The above description generally assumed that there was
`
`only one broadcast channel and that each computer had only one connection to that broadcast
`
`channel. More generally, a network of computers may have multiple broadcast channels,
`
`each computer may be connected to more than one broadcast channel, and each computer
`
`can have multiple connections to the same broadcast channel. The broadcast channel is well
`
`suited for computer processes (e.g., application programs) that execute collaboratively, such
`
`as network meeting programs. Each computer process can connect to one or more broadcast
`
`10
`
`' channels.
`
`The broadcast channels can be identified by channel
`
`type (e. g., application
`
`program channel instance that represents separate broadcast channels for that
`
`l5
`
`20
`
`channel type. When a process attempts to connect to a broadcast channel, it seeks a process
`
`currently connected to that broadcast channel that is executing on a portal computer. The
`
`seeking process identifies the broadcast channel by channel type and channel instance.
`
`Computer 600 includes multiple application programs 601 executing as
`
`separate processes. Each application program interfaces with a broadcaster component 602
`
`for each broadcast channel to which it is connected. The broadcaster component may be
`implement as an object that is instantiated within the process space of the application
`
`program. Alternatively, the broadcaster component may execute as a separate process or
`
`thread from the application program.
`
`In one embodiment,
`
`the broadcaster component
`
`provides functions (e.g., methods of class) that can be invoked by the application programs.
`
`The primary functions provided may include a connect function that an application program
`
`invokes passing an indication of the broadcast channel to which the application program
`
`wants to connect.
`
`The application program may provide a callback routine that
`
`the
`
`broadcaster component invokes to notify the application program that the connection has
`been completed, that is the process enters the fully connected state.
`The broadcaster
`
`component may also provide an acquire message function that the application program can
`invoke to retrieve the next message that is broadcast on the broadcast channel. Alternatively,
`the application program may provide a callback routine (which may be a virtual function
`provided by the application program) that the broadcaster component invokes to notify the
`application program that a broadcast message has been received.
`Each broadcaster
`
`30
`
`component allocates a call-in port using the hashing algorithm. When calls are answered at
`7/31/00
`[03004-800lIDocumentl.268}
`-22-
`
`0275
`
`0275
`
`

`

`10
`
`15
`
`20
`
`the call-in port, they are transferred to other ports that serve as the external and internal
`
`ports.
`
`The computers connecting to the broadcast channel may include a central
`
`processing unit, memory, input devices (e.g., keyboard and pointing device), output devices
`
`(e.g., display devices), and storage devices (e.g., disk drives). The memory and storage
`
`devices are computer-readable medium that may contain computer
`
`instructions that
`
`implement
`
`the broadcaster component.
`
`In addition,
`
`the data structures and message
`
`structures may be stored or transmitted via a signal transmitted on a computer-readable
`
`media, such as a communications link.
`
`Figure 7 is a block diagram illustrating the sub-components of the broadcaster
`
`component in one embodiment. The broadcaster component includes a connect component
`
`701, an external dispatcher 702, an internal dispatcher 703 for each internal connection, an
`
`acquire message component 704 and a broadcast component 712. The application program
`
`may provide a connect callback component 710 and a receive response component 711 that
`
`are invoked by the broadcaster component. The application program invokes the connect
`
`component to establish a connection to a designated broadcast channel.
`
`The connect
`
`component identifies the external port and installs the external dispatcher for handling
`
`messages that are received on the external port. The connect component invokes the seek
`
`portal computer component 705 to identify a portal computer that
`
`is connected to the
`
`broadcast channel and invokes the connect request component 706 to ask the portal computer
`
`(if fully connected) to select neighbor processes for the newly connecting process. The
`
`external dispatcher receives external messages, identifies the type of message, and invokes
`
`the appropriate handling routine 707. The internal dispatcher receives the internal messages,
`
`identifies the type of message, and invokes the appropriate handling routine 708. The
`
`received broadcast messages are stored in the broadcast message queue 709. The acquire
`
`message component
`is invoked to retrieve messages from the broadcast queue.
`broadcast component is invoked by the application program to broadcast messages in the
`broadcast channel.
`
`The
`
`The following tables list messages sent by the broadcaster components.
`
`[03004-8001m0mmmt1168]
`
`-23-
`
`7131/00
`
`0276
`
`0276
`
`

`

`EXTERNAL MESSAGES
`
`Message Type
`
`Description
`
`seeking_connection_call
`
`Indicates that a seeking process would like to know whether the
`receiving process is fully connected to the broadcast channel
`
`
`
`
`
`
`
`connection_request_call
`
`
`
`edge_proposal_call
`
`
`
`
`
`
`
`Indicates that the sending process would like the receiving
`process to initiate a connection of the sending process to the
`
`broadcast channel
`
`Indicates that the sending process is proposing an edge through
`which the receiving process can connect to the broadcast
`channel (i.e., edge pinning)
` Indicates that the sending process is proposing a port through
`port_connection_call
`
`which the receiving process can connect to the broadcast
`
`channel
`
`
`
`
`
`
`
`connected_stmt
`
`Indicates that the sending process is connected to the broadcast
`channel
`
`condition_repair_stmt
`
`Indicates that the receiving process should disconnect from one
`of its neighbors and connect to one of the processes involved in
`the neighbors with empty port condition
`
`INTERNAL MESSAGES
`
`
`
`
`
`
`
`
`Indicates a message that is being broadcast through the
`broadcast channel for the application programs
`
`Indicates that the designated process is looking for a port
`through which it can connect to the broadcast channel
`
`Indicates that the requesting process is looking for an edge
`through which it can connect to the broadcast channel
`
`Indicates whether the edge between this process and the
`sending neighbor has been accepted by the requesting
`Party
`
`Indicates to reset the estimated diameter to indicated
`diameter
`
`Indicates that the sending neighbor is disconnecting from
`the broadcast channel
`
`Indicates that neighbors with empty port condition have
`
`
`
` Message Type
`I broadcast_stmt
`
`
`I connection_port_search_stmt
`
`connection_edge_search_ch
`
`connection_edge_search_resp
`
`
`
`
`
`
`
`
`
`diameter reset strnt
`_
`_
`
`disconnect_stmt
`
`
`
`
`
`condition_check_stmt
`
`[03004-ROOI/Dounnenll168]
`
`-24-
`
`7/31/00
`
`0277
`
`0277
`
`

`

`condition_double_check_stmt
`
` — been detected
`
`
`Indicates that the neighbors with empty ports have the
`same set of neighbors
`Indicates that the broadcast channel is being shutdown
`
`
`
`
`Flow Diagrams
`
`Figures 8-34 are flow diagrams illustrating the processing of the broadcaster
`
`component in one embodiment. Figure 8 is a flow diagram illustrating the processing of the
`
`connect routine in one embodiment. This routine is passed a channel type (e.g., application
`
`name) and channel instance (e. g., session identifier), that identifies the broadcast channel to
`
`which this process wants to connect. The routine is also passed auxiliary information that
`
`includes the list of portal computers and a connection callback routine. When the connection
`
`is established, the connection callback routine is invoked to notify the application program.
`
`When this process invokes this routine, it is in the seeking connection state. When a portal
`
`computer is located that is connected and this routine connects to at least one neighbor, this
`
`process enters the partially connected state, and when the process eventually connects to four
`
`neighbors, it enters the fully connected state. When in the small regime, a fully connected
`process may have less than four neighbors.
`In block 801, the routine opens the call-in port
`through which the process is to communicate with other processes when establishing external
`
`and internal connections. The port is selected as the first available port using the hashing
`
`algorithm described above.
`
`In block 802, the routine sets the connect time to the current
`
`time. The connect time is used to identify the instance of the process that is connected
`
`through this external port. One process may connect to a broadcast channel of a certain
`
`channel type and channel instance using one call-in port and then disconnects, and another
`
`process may then connect to that same broadcast channel using the same call-in port. Before
`
`the other process becomes fully connected, another process may try to communicate with it
`
`thinking it is the fully connected old process.
`
`In such a case, the connect time can be used to
`
`In block 803, the routine invokes the seek portal computer routine
`identify this situation.
`passing the channel type and channel instance. The seek portal computer routine attempts to
`locate a portal computer through which this process can connect to the broadcast channel for
`
`the passed type and instance.
`
`In decision block 804, if the seek portal computer routine is
`
`IO
`
`15
`
`20
`
`25
`
`[03004.soomocumenuzea]
`
`-25-
`
`7/3l/00
`
`0278
`
`0278
`
`

`

`successful in locating a fully connected process on that portal computer, then the routine
`
`continues at block 805, else the routine returns an unsuccessful indication. In decision block
`
`805, if no portal computer other than the portal computer on which the process is executing
`
`was located, then this is the first process to fully connect to-broadcast channel and the
`
`routine continues at block 806, else the routine continues at block 808.
`
`In block 806, the
`
`routine invokes the achieve connection routine to change the state of this process to fully
`
`connected.
`
`In block 807, the routine installs the external dispatcher for processing messages
`
`received through this process’ external port for the passed channel type and channel instance.
`
`When a message is received through that external port, the external dispatcher is invoked.
`The routine then returns.
`In block 808, the routine installs an external dispatcher.
`In block
`
`10
`
`809,
`
`the routine invokes the connect request routine to initiate the process of identifying
`
`15
`
`20
`
`25
`
`30
`
`neighbors for the seeking computer. The routine then returns.
`
`Figure 9 is a flow diagram illustrating the processing of the seek portal
`
`computer routine in one embodiment. This routine is passed the channel type and channel
`
`instance of the broadcast channel to which this process wishes to connect. This routine, for
`
`each search depth (e.g., port number), checks the portal computers at that search depth.
`
`If a
`
`portal computer is located at that search depth with a process that is fully connected to the
`
`broadcast channel, then the routine returns an indication of success.
`
`In blocks 902-911, the
`
`routine loops selecting each search depth until a process is located. In block 902, the routine
`
`selects the next search depth using a port number ordering algorithm.
`
`In decision block 903,
`
`if all the search depths have already been selected during this execution of the loop, that is
`
`for the currently selected depth, then the routine returns a failure indication, else the routine
`
`continues at block 904.
`
`In blocks 904-911, the routine loops selecting each portal computer
`
`and determining whether a process of that portal computer is connected to (or attempting to
`
`connect to) the broadcast channel with the passed channel type and channel instance.
`
`In
`
`block 904, the routine selects the next portal computer.
`
`In decision block 905, if all the
`
`portal computers have already been selected, then the routine loops to block 902 to select the
`
`next search depth, else the routine continues at block 906.
`
`In block 906, the routine dials the
`
`In decision block
`selected portal computer through the port represented by the search depth.
`907, if the dialing was successful, then the routine continues at block 908, else the routine
`loops to block 904 to select the next portal computer. The dialing will be successful if the
`dialed port is the call-in port of the broadcast channel of the passed channel type and channel
`[03004-800lfl)ocumnl.268]
`-26-
`7/31/00
`
`0279
`
`0279
`
`

`

`instance of a process executing on that portal computer.
`
`In block 908, the routine invokes a
`
`contact process routine, which contacts the answering process of the portal computer through
`
`the dialed port and determines whether that process is fully connected to the broadcast
`
`channel.
`
`In block 909, the routine hangs up on the selected portal computer.
`
`In decision
`
`block 910, if the answering process is fully connected to the broadcast channel,
`
`then the
`
`routine returns a success indicator, else the routine continues at block 911.
`
`In block 911, the
`
`routine invokes the check for external call routine to detenninewhether an external call has
`
`been made to this process as a portal computer and processes that call. The routine then
`
`loops to block 904 to select the next portal computer.
`
`Figure 10 is a flow diagram illustrating the processing of the contact process
`
`routine in one embodiment. This routine determines whether the process of the selected
`
`portal computer that answered the call-in to the selected port is fully connected to the
`
`broadcast channel.
`
`In block 1001,
`
`the routine sends an external message
`
`(i.e.,
`
`seeking_connection_call) to the answering process indicating that a seeking process wants to
`
`know whether the answering process is fully connected to the broadcast channel.
`
`In block
`
`1002, the routine receives the external response message from the answering process.
`
`In
`
`decision block 1003,
`
`if the external
`
`response message is successfully received (i.e.,
`
`seeking_connection_resp), then the routine continues at block 1004, else the routine retums.
`
`Wherever the broadcast component requests to receive an external message, it sets a time out
`
`period.
`
`If the external message is not received within that time out period, the broadcaster
`
`component checks its own call-in port to see if another process is calling it.
`
`In particular, the
`
`dialed process may be calling the dialing process, which may result in a deadlock situation.
`
`The broadcaster component may repeat the receive request several times.
`
`If the expected
`
`message is not received, then the broadcaster component handles the error as appropriate.
`
`In
`
`decision block 1004, if the answering process indicates in its response message that it is fully
`connected to the broadcast channel, then the routine continues at block 1005, else the routine
`
`In block 1005, the routine adds the selected portal computer to a
`continues at block 1006.
`list of connected portal computers and then returns.
`In block 1006, the routine adds the
`
`answering process to a list of fellow seeking processes and then returns.
`
`Figure 11 is a flow diagram illustrating the processing of the connect request
`routine in one embodiment. This routine requests a process of a portal computer that was
`identified as being fully connected to the broadcast channel to initiate the connection of this
`[03004-8001/Documanl168]
`~27-
`71'] 1/00
`
`'J-
`
`10
`
`15
`
`20
`
`25
`
`30
`
`0280
`
`0280
`
`

`

`process to the broadcast channel.
`
`In decision block 1101, if at least one process of a portal
`
`computer was located that is fully connected to the broadcast channel,
`
`then the routine
`
`continues at block 1103, else the routine continues at block 1102. A process of the portal
`
`computer may no longer be in the list if it recently disconnected from the broadcast channel.
`
`In one embodiment, a seeking computer may always search its entire search depth and find
`
`multiple portal computers through which it can connect to the broadcast channel.
`
`In block
`
`1102, the routine restarts the process of connecting to the broadcast channel and returns.
`
`In
`
`block 1103, the routine dials the process of one of the found portal computers through the
`
`call-in port.
`
`In decision block 1104, if the dialing is successful, then the routine continues at
`
`block 1105, else the routine continues at block 1113. The dialing may be unsuccessful if, for
`
`example, the dialed process recently disconnected from the broadcast channel.
`
`In block
`
`1105, the routine sends an external message to the dialed process requesting a connection to
`
`the broadcast channel (i. e., connection_request_call).
`
`In block 1106, the routine receives the
`
`response message (i.e., connection_request__resp).
`
`In decision block 1107, if the response
`
`message is successfully received, then the routine continues at block 1108, else the routine
`
`continues at block 1113.
`
`In block 1108, the routine sets the expected number of holes (i.e.,
`
`empty internal connections) for this process based on the received response. When in the
`
`large regime, the expected number of holes is zero. When
`
`the small regime, the expected
`
`number of holes varies from one to three.
`
`In block 1109, the routine sets the estimated
`
`diameter of the broadcast channel based on the received response.
`
`In decision block 1111, if
`
`the dialed process is ready to connect to this process as indicated by the response message,
`
`then the routine continues at block 1112, else the routine continues at block 1113.
`
`In block
`
`1112,
`
`the routine invokes the add neighbor routine to add the answering process as a
`
`neighbor to this process. This adding of the answering process typically occurs when the
`
`broadcast channel is in the small regime. When in the large regime, the random walk search
`
`for a neighbor is performed.
`
`In block 1113, the routine hangs up the external connection
`
`with the answering process computer and then retums.
`
`Figure 12 is a flow diagram of the processing of the check for external call
`
`routine in one embodiment. This routine is invoked to identify whether a fellow seeking
`process is attempting to establish a connection to the broadcast channel through this process.
`In block 1201, the routine attempts to answer a call on the call-in port.
`In decision block
`
`1202, if the answer is successful, then the routine continues at block 1203, else the routine
`[03004-8001/Documem1268]
`-28-
`7/31/00
`
`10
`
`15
`
`20
`
`25
`
`30
`
`0281
`
`0281
`
`

`

`returns.
`
`In block 1203, the routine receives the external message from the external port.
`
`In
`
`decision block 1204, if the type of the message indicates that a seeking process is calling
`
`(i.e., seeking_connection_call), then the routine continues at block 1205, else the routine
`
`returns. In block 1205, the routine sends an external message (i. e., seeking_connection_resp)
`
`to the other seeking process indicating that this process is also is seeking a connection.
`
`In
`
`decision block 1206, if the sending of the external message is successful, then the routine
`
`continues at block 1207, else the routine returns.
`
`In block 1207, the routine adds the other
`
`seeking process to a list of fellow seeking processes and then returns. This list may be used
`
`if this process can find no process that is fully connected to the broadcast channel.
`
`In which
`
`case,
`
`this process may check to see if any fellow seeking process were successful
`
`in
`
`connecting to the broadcast channel. For example, a fellow seeking process may become the
`
`first process fully connected to the broadcast channel.
`
`Figure 13 is a flow diagram of the processing of the achieve connection routine
`
`in one embodiment. This routine sets the state of this process to fully connected to the
`
`broadcast charmel and invokes a callback routine to notify the application program that the
`
`process is now fully connected to the requested broadcast channel.
`
`In block 1301, the
`
`routine sets the connection state of this process to fully connected.
`
`In block 1302, the
`
`routine notifies fellow seeking processes that it is fully connected by sending a connected
`
`external message to them (i.e., connected_stmt).
`
`In block 1303,
`
`the routine invokes the
`
`connect callback routine to notify the application program and then returns.
`
`Figure 14 is a flow diagram illustrating the processing of the external
`
`dispatcher routine in one embodiment. This routine is invoked when the external port
`
`receives a message. This routine retrieves the message, identifies the external message type,
`
`and invokes the appropriate routine to handle that message. This routine loops processing
`
`each message until all the received messages have been handled.
`
`In block 1401, the routine
`
`In decision
`answers (e.g., picks up) the external port and retrieves an external message.
`block 1402, if a message was retrieved, then the routine continues at block 1403, else the
`routine hangs up on the external port in block 1415 and returns.
`In decision block 1403, if
`
`IO
`
`15
`
`20
`
`30
`
`the message type is for a process seeking a connection (i.e., seeking_connection_call), then
`the routine invokes the handle seeking connection call routine in block 1404, else the routine
`continues at block 1405.
`In decision block 1405, if the message type is for a connection
`
`request call (i. e., connection_request_call), then the routine invokes the handle connection
`-29-
`
`|03004-800|/Documentl.268]
`
`7/31/00
`
`0282
`
`0282
`
`

`

`request call routine in block 1406, else the routine continues at block 1407.
`
`In decision
`
`block 1407, if the message type is edge proposal call (1'.e., edge_proposal_call), then the
`
`routine invokes the handle edge proposal call routine in block 1408, else the routine
`
`continues at block 1409.
`
`In decision block 1409, if the message type is port connect call
`
`(i. e., port_c’onnect_call), then the routine invokes the handle port connection call routine in
`
`block 1410, else the routine continues at block 1411.
`
`In decision block 1411, if the message
`
`type is a connected statement (i.e., connected_stmt),
`
`the routine invokes the handle
`
`connected statement in block 1112, else the routine continues at block 1212.
`
`In decision
`
`block 1412, if the message type is a condition repair statement (i.e., condition_repair_stmt),
`then the routine invokes the handle condition repair routine in block 1413, else the routine
`
`10
`
`loops to block 1414 to process the next message.”After each handling routine is invoked, the
`
`routine loops to block 1414.
`
`In block 1414, the routine hangs up on the external port and
`
`continues at block 1401 to receive the next message.
`
`l5
`
`20
`
`Figure 15 is a flow diagram illustrating the processing of the handle seeking
`
`connection call routine in one embodiment. This routine is invoked when a seeking process
`
`is calling to identify a portal computer through which it can connect to the broadcast channel.
`
`In decision block 1501, if this process is currently fully connected to the broadcast channel
`
`identified in the message, then the routine continues at block 1502, else the routine continues
`
`at block 1503.
`
`In block 1502, the routine sets a message to indicate that this process is fully
`
`connected to the broadcast channel and continues at block 1505.
`
`In block 1503, the routine
`
`sets a message to indicate that this process is not fully connected.
`
`In block 1504, the routine
`
`adds the identification of the seeking process to a list of fellow seeking processes.
`
`If this
`
`process is not fully connected, then it is attempting to connect to the broadcast channel.
`
`In
`
`block 1505, the routine sends the external message response (i.e., seeking_connection_resp)
`
`to the seeking process and then returns.
`
`Figure 16 is a flow diagram illustrating processing of the handle connection
`
`request call routine in one embodiment. This routine is invoked when the calling process
`
`wants this process to initiate the connection of the process to the broadcast channel. This
`
`30
`
`routine either allows the calling process to establish an internal connection with this process
`(e. g., if in the small regime) or starts the process of identifying a process to which the calling
`process can connect.
`In decision block 1601, if this process is currently fully connected to
`the broadcast channel, then the routine continues at block 1603, else the routine hangs up on
`[03004-800l/Documentl.268]
`-30-
`7/31/00
`
`0283
`
`0283
`
`

`

`the extemal port in block 1602 and returns.
`
`In block 1603, the routine sets the number of
`
`holes that the calling process should expect in the response message.
`
`In block 1604, the
`
`routine sets the estimated diameter in the response message.
`
`In block 1605,
`
`the routine
`
`indicates whether this process is ready to connect to the calling process. This process is
`
`ready to connect when the number of its holes is greater than ‘zero and the calling process is
`
`not a neighbor of this process.
`I
`that
`is
`
`external message
`
`In block 1606, the routine sends to the calling process an
`the
`(i.e.,
`
`request
`
`call
`
`responsive
`
`to
`
`connection
`
`10
`
`15
`
`20
`
`25
`
`30
`
`connection_request_resp).
`
`In block 1607, the routine notes the number of holes that the
`
`calling process needs to fill as indicated in the request message.
`
`In decision block 1608, if
`
`this process is ready to connect to the calling process, then the routine continues at block
`
`In block 1609, the routine invokes the add
`1609, else the routine continues at block 1611.
`neighbor routine to add the calling process as a neighbor.
`In block 1610,
`the routine
`
`decrements the number of holes that the calling process needs to fill and continues at block
`
`1611.
`
`In block 1611, the routine hangs up on the external port.
`
`In decision block 1612, if
`
`this process has no holes or the estimated diameter is greater than one (i.e., in the large
`
`regime), then the routine continues at block 1613, else the routine continues at block 1616.
`
`In blocks 1613-1615, the routine loops forwarding a request for an edge through which to
`
`connect to the calling process to the broadcast channel. One request is forwarded for each
`
`pair of holes of the calling process that needs to be filled.
`
`In decision block 1613, if the
`
`number of holes of the calling process to be filled is greater than or equal to two, then the
`
`routine continues at block 1614, else the routine continues at block 1616.
`
`In block 1614, the
`
`routine invokes the forward connection edge search routine. The invoked routine is passed
`
`to an indication of the calling process and the random walk distance.
`
`In one embodiment, the
`
`distance is twice in the estimated diameter of the broadcast channel.
`
`In block 1614, the
`
`routine decrements the holes left to fill by two and loops to block 1613.
`
`In decision block
`
`1616, if there is still a hole to fill, then the routine continues at block 1617, else the routine
`
`returns.
`In block 1617, the routine invokes the fill hole routine passing the identification of
`the calling process. The fill hole routine broadcasts a connection port search statement (i.e.,
`connection_port_search_stmt) for a hole of a connected process through which the calling
`process can connect to the broadcast channel. The routine then returns.
`
`Figure 17 is a flow diagram illustrating the processing of the add neighbor
`routine in one embodiment. This routine adds the process calling on the external port as a
`[03004-8001/Documenll .268)
`-3 l -
`7/31/00
`
`0284
`
`0284
`
`

`

`neighbor to this process.
`
`In block‘1701, the routine identifies the calling process on the
`
`external port.
`
`In block 1702, the routine sets a flag to indicate that the neighbor has not yet
`
`received the broadcast messages from this process. This flag is used to ensure that there are
`
`no gaps in the messages initially sent to the new neighbor. The external port becomes the
`
`internal port for this connection.
`
`In decision block 1703, if this process is in the seeking
`
`connection state,
`
`then this process is connecting to its first neighbor and the routine
`
`continues at block 1704, else the routine continues at block 1705.
`
`In block 1704, the routine
`
`sets the connection state of this process to partially connected.
`adds the calling process to the list of neighbors of this process.
`
`In block 1705, the routine
`In block 1706, the routine
`
`installs an internal dispatcher for the new neighbor. The internal dispatcher is invoked when
`
`a message is received from that new neighbor through the internal port of that new neighbor.
`
`In decision block 1707, if this process buffered up messages while not fully connected, then
`
`the routine continues at block 1708, else the routine continues at block 1709.
`
`In one
`
`embodiment, a process that is partially connected may buffer the messages that it receives
`
`through an internal connection so that it can send these messages as it connects to new
`
`neighbors.
`
`In block 1708,
`
`the routine sends the buffered messages to the new neighbor
`
`through the internal port.
`
`In decision block 1709, if the number of holes of this process
`
`equals the expected number of holes, then this process is fully connected and the routine
`
`continues at block 1710, else the routine continues at block 1711.
`
`In block 1710, the routine
`
`invokes the achieve connected routine to indicate that this process is fully connected.
`
`In
`
`decision block 1711,
`
`if the number of holes for this process is zero,
`
`then the routine
`
`In block 1712, the routine deletes any
`continues at block 1712, else the routine returns.
`pending edges and then returns. A pending edge is an edge that has been proposed to this
`process for edge pinning, which in this case is no longer needed.
`
`Figure 18 is a flow diagram illustrating the processing of the forward
`connection edge search routine in one embodiment. This routine is responsible for passing
`along a request to connect a requesting p

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket