Documentation ¶
Overview ¶
Package psiphon/server/psinet implements psinet database services. The psinet database is a JSON-format file containing information about the Psiphon network, including sponsors, home pages, stats regexes, available upgrades, and other servers for discovery. This package also implements the Psiphon discovery algorithm.
Index ¶
- type ClientVersion
- type Database
- func (db *Database) DiscoverServers(discoveryValue int) []string
- func (db *Database) GetHomepages(sponsorID, clientRegion string, isMobilePlatform bool) []string
- func (db *Database) GetHttpsRequestRegexes(sponsorID string) []map[string]string
- func (db *Database) GetRandomHomepage(sponsorID, clientRegion string, isMobilePlatform bool) []string
- func (db *Database) GetUpgradeClientVersion(clientVersion, clientPlatform string) string
- type HomePage
- type Host
- type HttpsRequestRegex
- type MobileHomePage
- type PageViewRegex
- type Server
- type Sponsor
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ClientVersion ¶
type ClientVersion struct {
Version string `json:"version"`
}
type Database ¶
type Database struct { common.ReloadableFile Hosts map[string]Host `json:"hosts"` Servers []Server `json:"servers"` Sponsors map[string]Sponsor `json:"sponsors"` Versions map[string][]ClientVersion `json:"client_versions"` }
Database serves Psiphon API data requests. It's safe for concurrent usage. The Reload function supports hot reloading of Psiphon network data while the server is running.
func NewDatabase ¶
NewDatabase initializes a Database, calling Reload on the specified filename.
func (*Database) DiscoverServers ¶
DiscoverServers selects new encoded server entries to be "discovered" by the client, using the discoveryValue as the input into the discovery algorithm. The server list (db.Servers) loaded from JSON is stored as an array instead of a map to ensure servers are discovered deterministically. Each iteration over a map in go is seeded with a random value which causes non-deterministic ordering.
func (*Database) GetHomepages ¶
GetHomepages returns a list of home pages for the specified sponsor, region, and platform.
func (*Database) GetHttpsRequestRegexes ¶
GetHttpsRequestRegexes returns bytes transferred stats regexes for the specified sponsor. The result is nil when an unknown sponsorID is provided.
func (*Database) GetRandomHomepage ¶
func (db *Database) GetRandomHomepage(sponsorID, clientRegion string, isMobilePlatform bool) []string
GetRandomHomepage returns a random home page from a set of home pages for the specified sponsor, region, and platform.
func (*Database) GetUpgradeClientVersion ¶
GetUpgradeClientVersion returns a new client version when an upgrade is indicated for the specified client current version. The result is "" when no upgrade is available. Caller should normalize clientPlatform.
type Host ¶
type Host struct { DatacenterName string `json:"datacenter_name"` Id string `json:"id"` IpAddress string `json:"ip_address"` IsTCS bool `json:"is_TCS"` MeekCookieEncryptionPublicKey string `json:"meek_cookie_encryption_public_key"` MeekServerObfuscatedKey string `json:"meek_server_obfuscated_key"` MeekServerPort int `json:"meek_server_port"` Region string `json:"region"` }
type HttpsRequestRegex ¶
type MobileHomePage ¶
type PageViewRegex ¶
type Server ¶
type Server struct { AlternateSshObfuscatedPorts []string `json:"alternate_ssh_obfuscated_ports"` Capabilities map[string]bool `json:"capabilities"` DiscoveryDateRange []string `json:"discovery_date_range"` EgressIpAddress string `json:"egress_ip_address"` HostId string `json:"host_id"` Id string `json:"id"` InternalIpAddress string `json:"internal_ip_address"` IpAddress string `json:"ip_address"` IsEmbedded bool `json:"is_embedded"` IsPermanent bool `json:"is_permanent"` PropogationChannelId string `json:"propagation_channel_id"` SshHostKey string `json:"ssh_host_key"` SshObfuscatedKey string `json:"ssh_obfuscated_key"` SshObfuscatedPort int `json:"ssh_obfuscated_port"` SshPassword string `json:"ssh_password"` SshPort string `json:"ssh_port"` SshUsername string `json:"ssh_username"` WebServerCertificate string `json:"web_server_certificate"` WebServerPort string `json:"web_server_port"` WebServerSecret string `json:"web_server_secret"` }
type Sponsor ¶
type Sponsor struct { Banner string HomePages map[string][]HomePage `json:"home_pages"` HttpsRequestRegexes []HttpsRequestRegex `json:"https_request_regexes"` Id string `json:"id"` MobileHomePages map[string][]HomePage `json:"mobile_home_pages"` Name string `json:"name"` PageViewRegexes []PageViewRegex `json:"page_view_regexes"` WebsiteBanner string `json:"website_banner"` WebsiteBannerLink string `json:"website_banner_link"` }