Hunter0x7c7
2022-08-11 a82f9cb69f63aaeba40c024960deda7d75b9fece
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// Package session provides functions for sessions of incoming requests.
package session
 
import (
    "context"
    "math/rand"
 
    "github.com/v2fly/v2ray-core/v5/common/errors"
    "github.com/v2fly/v2ray-core/v5/common/net"
    "github.com/v2fly/v2ray-core/v5/common/protocol"
)
 
// ID of a session.
type ID uint32
 
// NewID generates a new ID. The generated ID is high likely to be unique, but not cryptographically secure.
// The generated ID will never be 0.
func NewID() ID {
    for {
        id := ID(rand.Uint32())
        if id != 0 {
            return id
        }
    }
}
 
// ExportIDToError transfers session.ID into an error object, for logging purpose.
// This can be used with error.WriteToLog().
func ExportIDToError(ctx context.Context) errors.ExportOption {
    id := IDFromContext(ctx)
    return func(h *errors.ExportOptionHolder) {
        h.SessionID = uint32(id)
    }
}
 
// Inbound is the metadata of an inbound connection.
type Inbound struct {
    // Source address of the inbound connection.
    Source net.Destination
    // Gateway address
    Gateway net.Destination
    // Tag of the inbound proxy that handles the connection.
    Tag string
    // User is the user that authencates for the inbound. May be nil if the protocol allows anounymous traffic.
    User *protocol.MemoryUser
}
 
// Outbound is the metadata of an outbound connection.
type Outbound struct {
    // Target address of the outbound connection.
    Target net.Destination
    // Gateway address
    Gateway net.Address
}
 
// SniffingRequest controls the behavior of content sniffing.
type SniffingRequest struct {
    OverrideDestinationForProtocol []string
    Enabled                        bool
    MetadataOnly                   bool
}
 
// Content is the metadata of the connection content.
type Content struct {
    // Protocol of current content.
    Protocol string
 
    SniffingRequest SniffingRequest
 
    Attributes map[string]string
 
    SkipDNSResolve bool
}
 
// Sockopt is the settings for socket connection.
type Sockopt struct {
    // Mark of the socket connection.
    Mark uint32
}
 
// SetAttribute attachs additional string attributes to content.
func (c *Content) SetAttribute(name string, value string) {
    if c.Attributes == nil {
        c.Attributes = make(map[string]string)
    }
    c.Attributes[name] = value
}
 
// Attribute retrieves additional string attributes from content.
func (c *Content) Attribute(name string) string {
    if c.Attributes == nil {
        return ""
    }
    return c.Attributes[name]
}