Blame


1 e342de7d 2015-11-11 adrien package p9p
2 e342de7d 2015-11-11 adrien
3 e342de7d 2015-11-11 adrien import (
4 e342de7d 2015-11-11 adrien "net"
5 e342de7d 2015-11-11 adrien
6 e342de7d 2015-11-11 adrien "golang.org/x/net/context"
7 e342de7d 2015-11-11 adrien )
8 e342de7d 2015-11-11 adrien
9 e342de7d 2015-11-11 adrien // Session provides the central abstraction for a 9p connection. Clients
10 e342de7d 2015-11-11 adrien // implement sessions and servers serve sessions. Sessions can be proxied by
11 e342de7d 2015-11-11 adrien // serving up a client session.
12 e342de7d 2015-11-11 adrien //
13 e342de7d 2015-11-11 adrien // The interface is also wired up with full context support to manage timeouts
14 e342de7d 2015-11-11 adrien // and resource clean up.
15 e342de7d 2015-11-11 adrien //
16 e342de7d 2015-11-11 adrien // Session represents the operations covered in section 5 of the plan 9 manual
17 e342de7d 2015-11-11 adrien // (http://man.cat-v.org/plan_9/5/). Requests are managed internally, so the
18 e342de7d 2015-11-11 adrien // Flush method is handled by the internal implementation. Consider preceeding
19 e342de7d 2015-11-11 adrien // these all with context to control request timeout.
20 e342de7d 2015-11-11 adrien type Session interface {
21 e342de7d 2015-11-11 adrien Auth(ctx context.Context, afid Fid, uname, aname string) (Qid, error)
22 e342de7d 2015-11-11 adrien Attach(ctx context.Context, fid, afid Fid, uname, aname string) (Qid, error)
23 e342de7d 2015-11-11 adrien Clunk(ctx context.Context, fid Fid) error
24 e342de7d 2015-11-11 adrien Remove(ctx context.Context, fid Fid) error
25 e342de7d 2015-11-11 adrien Walk(ctx context.Context, fid Fid, newfid Fid, names ...string) ([]Qid, error)
26 e342de7d 2015-11-11 adrien Read(ctx context.Context, fid Fid, p []byte, offset int64) (n int, err error)
27 e342de7d 2015-11-11 adrien Write(ctx context.Context, fid Fid, p []byte, offset int64) (n int, err error)
28 e342de7d 2015-11-11 adrien Open(ctx context.Context, fid Fid, mode Flag) (Qid, uint32, error)
29 e342de7d 2015-11-11 adrien Create(ctx context.Context, parent Fid, name string, perm uint32, mode Flag) (Qid, uint32, error)
30 e342de7d 2015-11-11 adrien Stat(ctx context.Context, fid Fid) (Dir, error)
31 e342de7d 2015-11-11 adrien WStat(ctx context.Context, fid Fid, dir Dir) error
32 e342de7d 2015-11-11 adrien
33 e342de7d 2015-11-11 adrien // Version returns the supported version and msize of the session. This
34 e342de7d 2015-11-11 adrien // can be affected by negotiating or the level of support provided by the
35 e342de7d 2015-11-11 adrien // session implementation.
36 e342de7d 2015-11-11 adrien Version() (msize int, version string)
37 e342de7d 2015-11-11 adrien }
38 e342de7d 2015-11-11 adrien
39 e342de7d 2015-11-11 adrien func Dial(ctx context.Context, addr string) (Session, error) {
40 e342de7d 2015-11-11 adrien c, err := net.Dial("tcp", addr)
41 e342de7d 2015-11-11 adrien if err != nil {
42 e342de7d 2015-11-11 adrien return nil, err
43 e342de7d 2015-11-11 adrien }
44 e342de7d 2015-11-11 adrien
45 e342de7d 2015-11-11 adrien // BUG(stevvooe): Session doesn't actually close connection. Dial might
46 e342de7d 2015-11-11 adrien // not be the right interface.
47 e342de7d 2015-11-11 adrien
48 e342de7d 2015-11-11 adrien return NewSession(ctx, c)
49 e342de7d 2015-11-11 adrien }