func (c *client) dialServer(server string, useRandomIdentity bool) (*transport.Conn, error) { identity := &c.identity identityPublic := &c.identityPublic if useRandomIdentity { var randomIdentity [32]byte c.randBytes(randomIdentity[:]) var randomIdentityPublic [32]byte curve25519.ScalarBaseMult(&randomIdentityPublic, &randomIdentity) identity = &randomIdentity identityPublic = &randomIdentityPublic } serverIdentity, host, err := parseServer(server, c.testing) if err != nil { return nil, err } var tor proxy.Dialer if c.testing { tor = proxy.Direct } else { tor = c.torDialer() } rawConn, err := tor.Dial("tcp", host) if err != nil { return nil, err } conn := transport.NewClient(rawConn, identity, identityPublic, serverIdentity) if err := conn.Handshake(); err != nil { return nil, err } return conn, nil }
func (t *TestServer) Dial(identity, identityPublic *[32]byte) *transport.Conn { rawConn, err := net.DialTCP("tcp", nil, t.addr) if err != nil { panic(err) } conn := transport.NewClient(rawConn, identity, identityPublic, &t.identityPublic) if err := conn.Handshake(); err != nil { panic(err) } return conn }
func (c *client) dialServer(server string, useRandomIdentity bool) (*transport.Conn, error) { identity := &c.identity identityPublic := &c.identityPublic if useRandomIdentity { var randomIdentity [32]byte c.randBytes(randomIdentity[:]) var randomIdentityPublic [32]byte curve25519.ScalarBaseMult(&randomIdentityPublic, &randomIdentity) identity = &randomIdentity identityPublic = &randomIdentityPublic } serverIdentity, host, err := parseServer(server, c.dev) if err != nil { return nil, err } var tor proxy.Dialer if c.dev { tor = proxy.Direct } else { tor = c.torDialer() } rawConn, err := tor.Dial("tcp", host) if err != nil { return nil, err } // Sometimes Tor holds the connection open but we never receive // anything so we add a 60 second deadline. rawConn.SetDeadline(time.Now().Add(60 * time.Second)) conn := transport.NewClient(rawConn, identity, identityPublic, serverIdentity) if err := conn.Handshake(); err != nil { return nil, err } return conn, nil }