NewRequest() now takes method as first param
diff --git a/request-server_test.go b/request-server_test.go
index 1c3055e..53172c6 100644
--- a/request-server_test.go
+++ b/request-server_test.go
@@ -73,14 +73,13 @@
r := p.testHandler()
f, _ := r.fetch("/foo")
assert.Equal(t, contents, string(f.content))
- fmt.Println(string(f.content))
}
func TestRequestCache(t *testing.T) {
p := clientRequestServerPair(t)
defer p.Close()
- foo := NewRequest("foo")
- bar := NewRequest("bar")
+ foo := NewRequest("", "foo")
+ bar := NewRequest("", "bar")
fh := p.svr.nextRequest(foo)
bh := p.svr.nextRequest(bar)
assert.Len(t, p.svr.openRequests, 2)
diff --git a/request.go b/request.go
index 5408825..950861a 100644
--- a/request.go
+++ b/request.go
@@ -42,14 +42,23 @@
// New Request initialized based on packet data
func requestFromPacket(pkt hasPath) Request {
- request := NewRequest(pkt.getPath())
- request.init(pkt)
+ method := requestMethod(pkt)
+ request := NewRequest(method, pkt.getPath())
+ request.pkt_id = pkt.id()
+ switch p := pkt.(type) {
+ case *sshFxpSetstatPacket:
+ request.Attrs = p.Attrs.([]byte)
+ case *sshFxpRenamePacket:
+ request.Target = filepath.Clean(p.Newpath)
+ case *sshFxpSymlinkPacket:
+ request.Target = filepath.Clean(p.Linkpath)
+ }
return request
}
// NewRequest creates a new Request object.
-func NewRequest(path string) Request {
- request := Request{Filepath: filepath.Clean(path)}
+func NewRequest(method, path string) Request {
+ request := Request{Method: method, Filepath: filepath.Clean(path)}
request.packets = make(chan packet_data, sftpServerWorkerCount)
request.state = &state{}
request.stateLock = &sync.RWMutex{}
@@ -270,30 +279,26 @@
}
// init attributes of request object from packet data
-func (r *Request) init(p hasPath) {
- r.pkt_id = p.id()
- switch p := p.(type) {
+func requestMethod(p hasPath) (method string) {
+ switch p.(type) {
case *sshFxpOpenPacket, *sshFxpOpendirPacket:
- r.Method = "Open"
+ method = "Open"
case *sshFxpSetstatPacket:
- r.Method = "Setstat"
- r.Attrs = p.Attrs.([]byte)
+ method = "Setstat"
case *sshFxpRenamePacket:
- r.Method = "Rename"
- r.Target = filepath.Clean(p.Newpath)
+ method = "Rename"
case *sshFxpSymlinkPacket:
- r.Method = "Symlink"
- r.Target = filepath.Clean(p.Linkpath)
+ method = "Symlink"
case *sshFxpRemovePacket:
- r.Method = "Remove"
+ method = "Remove"
case *sshFxpStatPacket, *sshFxpLstatPacket:
- r.Method = "Stat"
+ method = "Stat"
case *sshFxpRmdirPacket:
- r.Method = "Rmdir"
+ method = "Rmdir"
case *sshFxpReadlinkPacket:
- r.Method = "Readlink"
+ method = "Readlink"
case *sshFxpMkdirPacket:
- r.Method = "Mkdir"
- //r.Attrs are ignored in ./packet.go
+ method = "Mkdir"
}
+ return method
}