Example #1
0
            public override void run()
            {
                TcpClient newsock = null;
                OtpCookedConnection conn = null;

                node.localStatus(node.Node, true, null);

                accept_loop: while (!done)
                {
                    conn = null;

                    try
                    {
                        newsock = sock.AcceptTcpClient();
                    }
                    catch (Exception e)
                    {
                        // Problem in java1.2.2: accept throws SocketException
                        // when socket is closed. This will happen when
                        // acceptor.quit()
                        // is called. acceptor.quit() will call localStatus(...), so
                        // we have to check if that's where we come from.
                        if (!done)
                        {
                            node.localStatus(node.Node, false, e);
                        }
                        goto accept_loop;
                    }

                    try
                    {
                        lock (node.Connections)
                        {
                            conn = new OtpCookedConnection(node, new BufferedTcpClient(newsock));
                            conn.setFlags(node.Flags);
                            node.addConnection(conn);
                        }
                    }
                    catch (OtpAuthException e)
                    {
                        if (conn != null && conn.Name != null)
                        {
                            node.connAttempt(conn.Name, true, e);
                        }
                        else
                        {
                            node.connAttempt("unknown", true, e);
                        }
                        closeSock(newsock);
                    }
                    catch (IOException e)
                    {
                        if (conn != null && conn.Name != null)
                        {
                            node.connAttempt(conn.Name, true, e);
                        }
                        else
                        {
                            node.connAttempt("unknown", true, e);
                        }
                        closeSock(newsock);
                    }
                    catch (Exception e)
                    {
                        closeSock(newsock);
                        closeSock(sock);
                        node.localStatus(node.Node, false, e);
                        goto accept_loop;
                    }
                } // while

                // if we have exited loop we must do this too
                unPublishPort();
            }
Example #2
0
        /*
         * find or create a connection to the given node
         */
        public OtpCookedConnection getConnection(String node)
        {
            OtpPeer peer = null;
            OtpCookedConnection conn = null;

            lock (connections)
            {
                // first just try looking up the name as-is

                if (connections.ContainsKey(node))
                {
                    conn = connections[node];
                }
                else
                {
                    // in case node had no '@' add localhost info and try again
                    peer = new OtpPeer(node);

                    if (connections.ContainsKey(peer.Node))
                    {
                        conn = connections[peer.Node];
                    }
                    else
                    {
                        try
                        {
                            conn = new OtpCookedConnection(this, peer);
                            conn.setFlags(flags);
                            addConnection(conn);
                        }
                        catch (Exception e)
                        {
                            /* false = outgoing */
                            connAttempt(peer.Node, false, e);
                        }
                    }
                }
                return conn;
            }
        }