mirror of https://github.com/v2ray/v2ray-core
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.3 KiB
64 lines
1.3 KiB
package log |
|
|
|
import ( |
|
"context" |
|
"strings" |
|
|
|
"v2ray.com/core/common/serial" |
|
) |
|
|
|
type logKey int |
|
|
|
const ( |
|
accessMessageKey logKey = iota |
|
) |
|
|
|
type AccessStatus string |
|
|
|
const ( |
|
AccessAccepted = AccessStatus("accepted") |
|
AccessRejected = AccessStatus("rejected") |
|
) |
|
|
|
type AccessMessage struct { |
|
From interface{} |
|
To interface{} |
|
Status AccessStatus |
|
Reason interface{} |
|
Email string |
|
Detour string |
|
} |
|
|
|
func (m *AccessMessage) String() string { |
|
builder := strings.Builder{} |
|
builder.WriteString(serial.ToString(m.From)) |
|
builder.WriteByte(' ') |
|
builder.WriteString(string(m.Status)) |
|
builder.WriteByte(' ') |
|
builder.WriteString(serial.ToString(m.To)) |
|
builder.WriteByte(' ') |
|
if len(m.Detour) > 0 { |
|
builder.WriteByte('[') |
|
builder.WriteString(m.Detour) |
|
builder.WriteString("] ") |
|
} |
|
builder.WriteString(serial.ToString(m.Reason)) |
|
|
|
if len(m.Email) > 0 { |
|
builder.WriteString("email:") |
|
builder.WriteString(m.Email) |
|
builder.WriteByte(' ') |
|
} |
|
return builder.String() |
|
} |
|
|
|
func ContextWithAccessMessage(ctx context.Context, accessMessage *AccessMessage) context.Context { |
|
return context.WithValue(ctx, accessMessageKey, accessMessage) |
|
} |
|
|
|
func AccessMessageFromContext(ctx context.Context) *AccessMessage { |
|
if accessMessage, ok := ctx.Value(accessMessageKey).(*AccessMessage); ok { |
|
return accessMessage |
|
} |
|
return nil |
|
}
|
|
|