Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 17 additions & 6 deletions build/conjure.golang.patch
Original file line number Diff line number Diff line change
@@ -1,14 +1,25 @@
diff --git a/psiphon/common/tapdance/tapdance.go b/psiphon/common/tapdance/tapdance.go
index fa7d89ff..269e4e49 100644
index de08e792..d974934f 100644
--- a/psiphon/common/tapdance/tapdance.go
+++ b/psiphon/common/tapdance/tapdance.go
@@ -310,6 +310,9 @@ func Dial(
@@ -327,8 +327,19 @@ func Dial(

manager := newDialManager(netDialer.DialContext)

+ registrar := refraction_networking_tapdance.APIRegistrar{
+ Endpoint: "https://registration.refraction.network/api/register",
+ ConnectionDelay: 750 * time.Millisecond,
+ MaxRetries: 3,
+ SecondaryRegistrar: refraction_networking_tapdance.DecoyRegistrar{},
+ }
+
tapdanceDialer := &refraction_networking_tapdance.Dialer{
TcpDialer: manager.dial,
+ DarkDecoy: true,
+ UseProxyHeader:true,
+ Width: 5,
- TcpDialer: manager.dial,
+ TcpDialer: manager.dial,
+ DarkDecoy: true,
+ UseProxyHeader: true,
+ Width: 5,
+ DarkDecoyRegistrar: registrar,
}

// If the dial context is cancelled, use dialManager to interrupt
18 changes: 14 additions & 4 deletions cli/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"os"
"strings"
"sync"
"time"

"github.com/pkg/profile"
pb "github.com/refraction-networking/gotapdance/protobuf"
Expand All @@ -36,6 +37,7 @@ func main() {
"Default(unset): connects client to \nforwardproxy, to which CONNECT request is yet to be written.")

var td = flag.Bool("td", false, "Enable tapdance cli mode for compatibility")
var APIRegistration = flag.String("api-endpoint", "", "If set, API endpoint to use when performing API registration. If not set, uses decoy registration.")

flag.Usage = func() {
fmt.Fprintf(os.Stderr, "Dark Decoy CLI\n$./cli -connect-addr=<decoy_address> [OPTIONS] \n\nOptions:\n")
Expand Down Expand Up @@ -85,7 +87,7 @@ func main() {
fmt.Printf("Using Station Pubkey: %s\n", hex.EncodeToString(tapdance.Assets().GetConjurePubkey()[:]))
}

err := connectDirect(*td, *connect_target, *port, *proxyHeader, v6Support, *width)
err := connectDirect(*td, *APIRegistration, *connect_target, *port, *proxyHeader, v6Support, *width)
if err != nil {
tapdance.Logger().Println(err)
os.Exit(1)
Expand All @@ -99,19 +101,27 @@ func main() {
}
}

func connectDirect(td bool, connect_target string, localPort int, proxyHeader bool, v6Support bool, width int) error {
func connectDirect(td bool, apiEndpoint string, connect_target string, localPort int, proxyHeader bool, v6Support bool, width int) error {
if _, _, err := net.SplitHostPort(connect_target); err != nil {
return fmt.Errorf("failed to parse host and port from connect_target %s: %v",
connect_target, err)
os.Exit(1)
}

l, err := net.ListenTCP("tcp", &net.TCPAddr{IP: net.ParseIP("127.0.0.1"), Port: localPort})
if err != nil {
return fmt.Errorf("error listening on port %v: %v", localPort, err)
}

tdDialer := tapdance.Dialer{DarkDecoy: !td, UseProxyHeader: proxyHeader, V6Support: v6Support, Width: width}
tdDialer := tapdance.Dialer{DarkDecoy: !td, DarkDecoyRegistrar: tapdance.DecoyRegistrar{}, UseProxyHeader: proxyHeader, V6Support: v6Support, Width: width}

if apiEndpoint != "" {
tdDialer.DarkDecoyRegistrar = tapdance.APIRegistrar{
Endpoint: apiEndpoint,
ConnectionDelay: 750 * time.Millisecond,
MaxRetries: 3,
SecondaryRegistrar: tapdance.DecoyRegistrar{},
}
}

for {
clientConn, err := l.AcceptTCP()
Expand Down
Loading