Documentation
¶
Index ¶
Constants ¶
View Source
const ( CompressionNone = CompressionType(0) CompressionZlib = CompressionType(1) CompressionOodle = CompressionType(2) )
View Source
const ( RegionGlobal = Region("Global") RegionChina = Region("CN") RegionKorea = Region("KR") )
View Source
const ( ServerZoneIpcType = IpcType("ServerZoneIpcType") ClientZoneIpcType = IpcType("ClientZoneIpcType") ServerLobbyIpcType = IpcType("ServerLobbyIpcType") ClientLobbyIpcType = IpcType("ClientLobbyIpcType") ServerChatIpcType = IpcType("ServerChatIpcType") ClientChatIpcType = IpcType("ClientChatIpcType") )
View Source
const ( SegmentIpc = SegmentType(3) SegmentClientKeepAlive = SegmentType(7) SegmentServerKeepAlive = SegmentType(8) )
Variables ¶
View Source
var ( // Magic bytes indicating that a Bundle contains IPC segments. IpcMagicBytes = []byte("\x52\x52\xa0\x41\xff\x5d\x46\xe2\x7f\x2a\x64\x4d\x7b\x99\xc4\x75") // Magic bytes indicating that a Bundle contains keep-alive segments. KeepAliveMagicBytes = []byte("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00") )
View Source
var ( ErrBadMagicBytes = errors.New("ffxiv: bad magic bytes") ErrBadCompression = errors.New("ffxiv: bad compression type") ErrBadSegmentType = errors.New("ffxiv: bad segment type") ErrNotEnoughData = errors.New("ffxiv: not enough data") )
View Source
var DataCenterCIDRs = [...]string{
"80.239.145.79/32",
"80.239.145.80/29",
"80.239.145.88/31",
"80.239.145.91/32",
"80.239.145.92/30",
"80.239.145.96/30",
"80.239.145.100/31",
"124.150.157.23/32",
"124.150.157.24/29",
"124.150.157.32/32",
"124.150.157.38/31",
"124.150.157.40/29",
"124.150.157.49/32",
"124.150.157.50/31",
"124.150.157.52/30",
"124.150.157.56/31",
"124.150.157.58/32",
"153.254.80.75/32",
"153.254.80.76/30",
"153.254.80.80/31",
"153.254.80.82/32",
"202.67.52.205/32",
"202.67.52.206/31",
"202.67.52.208/30",
"202.67.52.212/31",
"202.67.52.214/32",
"204.2.229.84/32",
"204.2.229.86/32",
"204.2.229.88/30",
"204.2.229.92/32",
"204.2.229.95/32",
"204.2.229.96/30",
"204.2.229.101/32",
"204.2.229.102/31",
"204.2.229.106/31",
"204.2.229.108/32",
"204.2.229.110/31",
"204.2.229.112/31",
"204.2.229.114/32",
}
DataCenterCIDRs is an array of all theorized public FINAL FANTASY XIV data center IP networks, in string CIDR notation.
Based on data provided by https://is.xivup.com/adv.
View Source
var DataCenterNets = func() []net.IPNet { nets := make([]net.IPNet, len(DataCenterCIDRs)) for i, s := range DataCenterCIDRs { _, net, err := net.ParseCIDR(s) if err != nil { panic(err) } nets[i] = *net } return nets }()
DataCenterNets is a list of all theorized public FINAL FANTASY XIV data center IP networks, as IPNets.
View Source
var ErrUnknownRegion = errors.New("ffxiv: unknown region")
Functions ¶
func IsFinalFantasyIP ¶
Returns whether ip is a known FINAL FANTASY XIV address.
func PeekBundleLength ¶
Types ¶
type Bundle ¶
type Bundle struct {
// Magic bytes header - all IPC bundles share the same magic bytes
// and all keep-alive bundles have a magic string of all null bytes.
Magic [16]byte `json:"-"`
// The number of milliseconds since the Unix epoch time.
Epoch uint64 `json:"epoch"`
// The total length of the bundle, in bytes (including the header).
Length uint32 `json:"length"`
UncompressedLength uint32 `json:"uncompressedLength"`
// The connection type. Usually 0.
ConnectionType uint16 `json:"connectionType"`
// The encoding type of the bundle payload.
Encoding EncodingType `json:"-"`
// The compression type of the bundle payload.
Compression CompressionType `json:"-"`
Segments []Segment `json:"segments"`
}
func (*Bundle) IsCompressed ¶
func (*Bundle) UnmarshalBinary ¶
type CompressionType ¶
type CompressionType uint8
type EncodingType ¶
type EncodingType uint8
type Ipc ¶
type Ipc struct {
Magic uint16 `json:"-"`
Type uint16 `json:"type"`
ServerID uint16 `json:"serverId"`
Epoch uint32 `json:"epoch"`
Data []byte `json:"data"`
}
func (*Ipc) UnmarshalBinary ¶
type KeepAlive ¶
func (*KeepAlive) UnmarshalBinary ¶
type OpcodeTable ¶
func GetOpcodes ¶
func GetOpcodes(region Region) (OpcodeTable, error)
func (*OpcodeTable) GetOpcodeName ¶
func (t *OpcodeTable) GetOpcodeName(ipcType IpcType, opcode int) string
type Segment ¶
type Segment struct {
// The total length of the segment, in bytes (including the header).
Length uint32 `json:"-"`
// The ID of the actor that sent the segment.
Source uint32 `json:"source"`
// The ID of the actor that received the segment.
Target uint32 `json:"target"`
// The segment type. Usually SegmentIpc.
Type SegmentType `json:"type"`
Payload interface{} `json:"payload"`
}
func (*Segment) UnmarshalBinary ¶
type SegmentType ¶
type SegmentType uint16
func (SegmentType) String ¶
func (s SegmentType) String() string
Click to show internal directories.
Click to hide internal directories.