github.com/psiphon-labs/psiphon-tunnel-core@v2.0.28+incompatible/psiphon/common/refraction/config.go (about)

     1  /*
     2   * Copyright (c) 2021, Psiphon Inc.
     3   * All rights reserved.
     4   *
     5   * This program is free software: you can redistribute it and/or modify
     6   * it under the terms of the GNU General Public License as published by
     7   * the Free Software Foundation, either version 3 of the License, or
     8   * (at your option) any later version.
     9   *
    10   * This program is distributed in the hope that it will be useful,
    11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
    12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13   * GNU General Public License for more details.
    14   *
    15   * You should have received a copy of the GNU General Public License
    16   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    17   *
    18   */
    19  
    20  package refraction
    21  
    22  import (
    23  	"net/http"
    24  	"time"
    25  
    26  	"github.com/Psiphon-Labs/psiphon-tunnel-core/psiphon/common"
    27  )
    28  
    29  // ConjureConfig specifies the additional configuration for a Conjure dial.
    30  type ConjureConfig struct {
    31  
    32  	// RegistrationCacheTTL specifies how long to retain a successful Conjure
    33  	// registration for reuse in a subsequent dial. This value should be
    34  	// synchronized with the Conjure station configuration. When
    35  	// RegistrationCacheTTL is 0, registrations are not cached.
    36  	RegistrationCacheTTL time.Duration
    37  
    38  	// RegistrationCacheKey defines a scope or affinity for cached Conjure
    39  	// registrations. For example, the key can reflect the target Psiphon server
    40  	// as well as the current network ID. This ensures that any replay will
    41  	// always use the same cached registration, including its phantom IP(s). And
    42  	// ensures that the cache scope is restricted to the current network: when
    43  	// the network changes, the client's public IP changes, and previous
    44  	// registrations will become invalid. When the client returns to the original
    45  	// network, the previous registrations may be valid once again (assuming
    46  	// the client reverts back to its original public IP).
    47  	RegistrationCacheKey string
    48  
    49  	// APIRegistrarBidirectionalURL specifies the bidirectional API
    50  	// registration endpoint. Setting APIRegistrarBidirectionalURL enables
    51  	// API registration. The domain fronting configuration provided by
    52  	// APIRegistrarHTTPClient may ignore the host portion of this URL,
    53  	// implicitly providing another value; the path portion is always used in
    54  	// the request. Only one of API registration or decoy registration can be
    55  	// enabled for a single dial.
    56  	APIRegistrarBidirectionalURL string
    57  
    58  	// APIRegistrarHTTPClient specifies a custom HTTP client (and underlying
    59  	// dialers) to be used for Conjure API registration. The
    60  	// APIRegistrarHTTPClient enables domain fronting of API registration web
    61  	// requests. This parameter is required when API registration is enabled.
    62  	APIRegistrarHTTPClient *http.Client
    63  
    64  	// APIRegistrarDelay specifies how long to wait after a successful API
    65  	// registration before initiating the phantom dial(s), as required by the
    66  	// Conjure protocol. This value depends on Conjure station operations and
    67  	// should be synchronized with the Conjure station configuration.
    68  	APIRegistrarDelay time.Duration
    69  
    70  	// DecoyRegistrarDialer specifies a custom dialer to be used for decoy
    71  	// registration. Only one of API registration or decoy registration can be
    72  	// enabled for a single dial.
    73  	DecoyRegistrarDialer common.NetDialer
    74  
    75  	// DecoyRegistrarWidth specifies how many decoys to use per registration.
    76  	DecoyRegistrarWidth int
    77  
    78  	// DecoyRegistrarDelay specifies how long to wait after a successful API
    79  	// registration before initiating the phantom dial(s), as required by the
    80  	// Conjure protocol.
    81  	//
    82  	// Limitation: this value is not exposed by gotapdance and is currently
    83  	// ignored.
    84  	DecoyRegistrarDelay time.Duration
    85  
    86  	// Transport may be protocol.CONJURE_TRANSPORT_MIN_OSSH or
    87  	// protocol.CONJURE_TRANSPORT_OBFS4_OSSH.
    88  	Transport string
    89  
    90  	// DiagnosticID identifies this dial in diagnostics.
    91  	DiagnosticID string
    92  
    93  	// Logger is used for logging diagnostics.
    94  	Logger common.Logger
    95  }