mirror of
https://github.com/XTLS/Xray-core.git
synced 2025-04-29 16:58:34 +00:00
Fix context api and document (#727)
* Fix Dial function crash instance when there is no instance context in the ctx * check ctx to fix. (#841) * Feat: core.ToContext(ctx, v) for ctx initialization (#852) * remove exported API: toContext * Remove unnecessary API * rework document for API * fix: make sure the ctx is propagated to connections by detached connection Co-authored-by: Shelikhoo <xiaokangwang@outlook.com> Co-authored-by: rurirei <72071920+rurirei@users.noreply.github.com>
This commit is contained in:
parent
cf1ee095a2
commit
496b2c02c5
4 changed files with 35 additions and 3 deletions
|
@ -25,3 +25,28 @@ func MustFromContext(ctx context.Context) *Instance {
|
|||
}
|
||||
return x
|
||||
}
|
||||
|
||||
/* toContext returns ctx from the given context, or creates an Instance if the context doesn't find that.
|
||||
|
||||
It is unsupported to use this function to create a context that is suitable to invoke Xray's internal component
|
||||
in third party code, you shouldn't use //go:linkname to alias of this function into your own package and
|
||||
use this function in your third party code.
|
||||
|
||||
For third party code, usage enabled by creating a context to interact with Xray's internal component is unsupported,
|
||||
and may break at any time.
|
||||
|
||||
*/
|
||||
func toContext(ctx context.Context, v *Instance) context.Context {
|
||||
if FromContext(ctx) != v {
|
||||
ctx = context.WithValue(ctx, xrayKey, v)
|
||||
}
|
||||
return ctx
|
||||
}
|
||||
|
||||
/*ToBackgroundDetachedContext create a detached context from another context
|
||||
Internal API
|
||||
*/
|
||||
func ToBackgroundDetachedContext(ctx context.Context) context.Context {
|
||||
instance := MustFromContext(ctx)
|
||||
return toContext(context.Background(), instance)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue