Browse Source

Don't use writeMergeConn with Conjure decoy registration

Rod Hynes 1 year ago
parent
commit
36a4b87ff2
1 changed files with 14 additions and 4 deletions
  1. 14 4
      psiphon/common/refraction/refraction.go

+ 14 - 4
psiphon/common/refraction/refraction.go

@@ -416,8 +416,15 @@ func dial(
 			refractionDialer.Transport = transport.ID()
 			refractionDialer.TransportConfig = config
 			refractionDialer.DisableRegistrarOverrides = disableOverrides
-			refractionDialer.DialerWithLaddr = newWriteMergeDialer(
-				refractionDialer.DialerWithLaddr, false, 32)
+			if !conjureConfig.DoDecoyRegistration {
+				// Limitation: the writeMergeConn wrapping is skipped when
+				// using decoy registration, since the refraction package
+				// uses DialerWithLaddr for both the decoy registration step
+				// as well as the following phantom dial, and the
+				// writeMergeConn is only appropriate for the phantom dial.
+				refractionDialer.DialerWithLaddr = newWriteMergeDialer(
+					refractionDialer.DialerWithLaddr, false, 32)
+			}
 
 		case protocol.CONJURE_TRANSPORT_PREFIX_OSSH:
 
@@ -442,8 +449,11 @@ func dial(
 			refractionDialer.Transport = transport.ID()
 			refractionDialer.TransportConfig = config
 			refractionDialer.DisableRegistrarOverrides = disableOverrides
-			refractionDialer.DialerWithLaddr = newWriteMergeDialer(
-				refractionDialer.DialerWithLaddr, true, 64)
+			if !conjureConfig.DoDecoyRegistration {
+				// See limitation comment above.
+				refractionDialer.DialerWithLaddr = newWriteMergeDialer(
+					refractionDialer.DialerWithLaddr, true, 64)
+			}
 
 		case protocol.CONJURE_TRANSPORT_DTLS_OSSH: