Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( // NotStartedLegacyForgeHandshakeBackendPhase indicates that the handshake has not started, used for UnknownBackendPhase. NotStartedLegacyForgeHandshakeBackendPhase BackendConnectionPhase = ¬StartedBackend{} // HelloLegacyForgeHandshakeBackendPhase sent a hello to the client, waiting for a hello back before sending the mod list. HelloLegacyForgeHandshakeBackendPhase backendConnectionPhase = &helloBackend{} // SentModListLegacyForgeHandshakeBackendPhase is the mod list from the client has been accepted and a server mod list // has been sent. Waiting for the client to acknowledge. SentModListLegacyForgeHandshakeBackendPhase backendConnectionPhase = &sentModListBackend{} // SentServerDataLegacyForgeHandshakeBackendPhase is the server data is being sent or has been sent, and is waiting for // the client to acknowledge it has processed this. SentServerDataLegacyForgeHandshakeBackendPhase backendConnectionPhase = &sentServerDataBackend{} // WaitingAckLegacyForgeHandshakeBackendPhase is waiting for the client to acknowledge before completing handshake. WaitingAckLegacyForgeHandshakeBackendPhase backendConnectionPhase = &waitingAckBackend{} // CompleteLegacyForgeHandshakeBackendPhase is the server has completed the handshake and will continue after the client ACK. CompleteLegacyForgeHandshakeBackendPhase backendConnectionPhase = &completeBackend{} )
View Source
var ( // NotStartedLegacyForgeHandshakeClientPhase no handshake packets have yet been sent. // Transition HelloLegacyForgeHandshakeClientPhase when the ClientHello is sent. NotStartedLegacyForgeHandshakeClientPhase ClientConnectionPhase = ¬StartedClient{} // HelloLegacyForgeHandshakeClientPhase Client and Server exchange pleasantries. // Transition to ModListLegacyForgeHandshakeClientPhase when the ModList is sent. HelloLegacyForgeHandshakeClientPhase clientConnectionPhase = &helloClient{} // ModListLegacyForgeHandshakeClientPhase the Mod list is sent to the server, captured by the proxy. // Transition to WaitingServerDataLegacyForgeHandshakeClientPhase when an ACK is sent, which // indicates to the server to start sending state data. ModListLegacyForgeHandshakeClientPhase clientConnectionPhase = &modListClient{} // WaitingServerDataLegacyForgeHandshakeClientPhase Waiting for state data to be received. // Transition to WaitingServerCompleteLegacyForgeHandshakeClientPhase when this is complete // and the client sends an ACK packet to confirm WaitingServerDataLegacyForgeHandshakeClientPhase clientConnectionPhase = &waitingServerDataClient{} // WaitingServerCompleteLegacyForgeHandshakeClientPhase Waiting on the server to send another ACK. // Transition to PendingCompleteLegacyForgeHandshakeClientPhase when client sends another ACK. WaitingServerCompleteLegacyForgeHandshakeClientPhase clientConnectionPhase = &waitingServerCompleteClient{} // PendingCompleteLegacyForgeHandshakeClientPhase Waiting on the server to send yet another ACK. // Transition to {@link #COMPLETE} when client sends another ACK PendingCompleteLegacyForgeHandshakeClientPhase clientConnectionPhase = &pendingCompleteClient{} // CompleteLegacyForgeHandshakeClientPhase the handshake is complete. // The handshake can be reset. // // Note that a successful connection to a server does not mean that // we will be in this state. After a handshake reset, if the next server // is vanilla we will still be in the NOT_STARTED phase, // which means we must NOT send a reset packet. This is handled by // overriding the resetConnectionPhase(*connectedPlayer) in this // element (it is usually a no-op). CompleteLegacyForgeHandshakeClientPhase clientConnectionPhase = &completeClient{} )
Functions ¶
This section is empty.
Types ¶
type BackendConn ¶
type BackendConn interface { PacketWriter FlushQueuedPluginMessages() }
type BackendConnectionPhase ¶
type BackendConnectionPhase interface { // Handle a plugin message in the context of this phase. Handle( player PacketWriter, backend BackendConnectionPhaseSetter, server ConnectionTypeSetter, resetter LegacyForgeHandshakeResetter, msg *plugin.Message, ) bool // ConsideredComplete indicates whether the connection is considered complete. ConsideredComplete() bool // OnDepartForNewServer fired when the provided server connection is about to be terminated // because the provided player is connecting to a new server. OnDepartForNewServer( player PacketWriter, phase ClientConnectionPhase, setter ClientConnectionPhaseSetter, ) }
BackendConnectionPhase allows for simple tracking of the phase that the Legacy Forge handshake is in (server side).
var ( // VanillaBackendPhase is a vanilla backend connection. VanillaBackendPhase BackendConnectionPhase = &unimplementedBackendPhase{} // UnknownBackendPhase indicated the backend connection is unknown at this time. UnknownBackendPhase BackendConnectionPhase = &unknownBackendPhase{} // InTransitionBackendPhase is a special backend phase used to indicate that this connection is about to become // obsolete (transfer to a new server, for instance) and that Forge messages ought to be // forwarded on to an in-flight connection instead. InTransitionBackendPhase BackendConnectionPhase = &inTransitionBackendPhase{} )
type BackendConnectionPhaseSetter ¶
type BackendConnectionPhaseSetter interface {
SetPhase(BackendConnectionPhase)
}
type ClientConnectionPhase ¶
type ClientConnectionPhase interface { // Handle a plugin message in the context of this phase. // Returns true if handled, false otherwise. Handle( mi ModInfo, client ClientConnectionPhaseSetter, player KeepAlive, backendConn BackendConn, msg *plugin.Message, ) bool // OnFirstJoin performs actions just as the player joins the server. OnFirstJoin(setter ClientConnectionPhaseSetter) // ConsideredComplete indicates whether the connection is considered complete. ConsideredComplete() bool Resetter }
ClientConnectionPhase allows for simple tracking of the phase that the Legacy Forge handshake is in.
var (
VanillaClientPhase ClientConnectionPhase = &unimplementedClient{}
)
type ClientConnectionPhaseSetter ¶
type ClientConnectionPhaseSetter interface {
SetPhase(ClientConnectionPhase)
}
type ConnectionType ¶
type ConnectionType interface { InitialClientPhase() ClientConnectionPhase InitialBackendPhase() BackendConnectionPhase AddGameProfileTokensIfRequired( original *profile.GameProfile, forwardingType config.ForwardingMode, ) *profile.GameProfile }
ConnectionType is a connection type.
var ( // Undetermined indicates that the connection has yet to reach the // point where we have a definitive answer as to what type of connection we have. Undetermined ConnectionType = &connType{ initialClientPhase: VanillaClientPhase, initialBackendPhase: UnknownBackendPhase, } // Vanilla indicates that a connection is a vanilla connection. Vanilla ConnectionType = &connType{ initialClientPhase: VanillaClientPhase, initialBackendPhase: VanillaBackendPhase, } // Undetermined17 is a 1.7 version connection type. Undetermined17 ConnectionType = &connType{ initialClientPhase: NotStartedLegacyForgeHandshakeClientPhase, initialBackendPhase: UnknownBackendPhase, } // LegacyForge indicates that the connection is a 1.8-1.12 Forge connection. LegacyForge ConnectionType = &legacyForgeConnType{ connType: &connType{ initialClientPhase: NotStartedLegacyForgeHandshakeClientPhase, initialBackendPhase: NotStartedLegacyForgeHandshakeBackendPhase, }, } ModernForge ConnectionType = &connType{ initialClientPhase: VanillaClientPhase, initialBackendPhase: VanillaBackendPhase, } )
The connection types supported.
type ConnectionTypeSetter ¶
type ConnectionTypeSetter interface {
SetType(ConnectionType)
}
type LegacyForgeHandshakeResetter ¶
type LegacyForgeHandshakeResetter interface {
SendLegacyForgeHandshakeResetPacket()
}
type PacketWriter ¶
type Resetter ¶
type Resetter interface { // ResetConnectionPhase instructs the proxy to reset the connection phase // back to its default for the connection type. ResetConnectionPhase(PacketWriter, ClientConnectionPhaseSetter) }
Resetter can reset the connection phase.
Click to show internal directories.
Click to hide internal directories.