Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
bc07f631
Commit
bc07f631
authored
Aug 03, 2015
by
Eric Paris
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update github.com/docker/spdystream
parent
2ea0e484
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
1138 additions
and
7 deletions
+1138
-7
Godeps.json
Godeps/Godeps.json
+1
-1
connection.go
..._workspace/src/github.com/docker/spdystream/connection.go
+6
-3
priority.go
...s/_workspace/src/github.com/docker/spdystream/priority.go
+1
-1
priority_test.go
...rkspace/src/github.com/docker/spdystream/priority_test.go
+1
-1
dictionary.go
...space/src/github.com/docker/spdystream/spdy/dictionary.go
+187
-0
read.go
.../_workspace/src/github.com/docker/spdystream/spdy/read.go
+348
-0
spdy_test.go
...kspace/src/github.com/docker/spdystream/spdy/spdy_test.go
+0
-0
types.go
..._workspace/src/github.com/docker/spdystream/spdy/types.go
+275
-0
write.go
..._workspace/src/github.com/docker/spdystream/spdy/write.go
+318
-0
stream.go
Godeps/_workspace/src/github.com/docker/spdystream/stream.go
+1
-1
No files found.
Godeps/Godeps.json
View file @
bc07f631
...
...
@@ -195,7 +195,7 @@
},
{
"ImportPath"
:
"github.com/docker/spdystream"
,
"Rev"
:
"
83ae67e694a4ab5cbaee4d3126f25118712b26e6
"
"Rev"
:
"
b2c3287865f3ad6aa22821ddb7b4692b896ac207
"
},
{
"ImportPath"
:
"github.com/elazarl/go-bindata-assetfs"
,
...
...
Godeps/_workspace/src/github.com/docker/spdystream/connection.go
View file @
bc07f631
...
...
@@ -9,7 +9,7 @@ import (
"sync"
"time"
"g
olang.org/x/net
/spdy"
"g
ithub.com/docker/spdystream
/spdy"
)
var
(
...
...
@@ -593,6 +593,11 @@ func (s *Connection) remoteStreamFinish(stream *Stream) {
// the stream Wait or WaitTimeout function on the stream returned
// by this function.
func
(
s
*
Connection
)
CreateStream
(
headers
http
.
Header
,
parent
*
Stream
,
fin
bool
)
(
*
Stream
,
error
)
{
// MUST synchronize stream creation (all the way to writing the frame)
// as stream IDs **MUST** increase monotonically.
s
.
nextIdLock
.
Lock
()
defer
s
.
nextIdLock
.
Unlock
()
streamId
:=
s
.
getNextStreamId
()
if
streamId
==
0
{
return
nil
,
fmt
.
Errorf
(
"Unable to get new stream id"
)
...
...
@@ -833,8 +838,6 @@ func (s *Connection) sendStream(stream *Stream, fin bool) error {
// getNextStreamId returns the next sequential id
// every call should produce a unique value or an error
func
(
s
*
Connection
)
getNextStreamId
()
spdy
.
StreamId
{
s
.
nextIdLock
.
Lock
()
defer
s
.
nextIdLock
.
Unlock
()
sid
:=
s
.
nextStreamId
if
sid
>
0x7fffffff
{
return
0
...
...
Godeps/_workspace/src/github.com/docker/spdystream/priority.go
View file @
bc07f631
...
...
@@ -4,7 +4,7 @@ import (
"container/heap"
"sync"
"g
olang.org/x/net
/spdy"
"g
ithub.com/docker/spdystream
/spdy"
)
type
prioritizedFrame
struct
{
...
...
Godeps/_workspace/src/github.com/docker/spdystream/priority_test.go
View file @
bc07f631
...
...
@@ -5,7 +5,7 @@ import (
"testing"
"time"
"g
olang.org/x/net
/spdy"
"g
ithub.com/docker/spdystream
/spdy"
)
func
TestPriorityQueueOrdering
(
t
*
testing
.
T
)
{
...
...
Godeps/_workspace/src/github.com/docker/spdystream/spdy/dictionary.go
0 → 100644
View file @
bc07f631
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
spdy
// headerDictionary is the dictionary sent to the zlib compressor/decompressor.
var
headerDictionary
=
[]
byte
{
0x00
,
0x00
,
0x00
,
0x07
,
0x6f
,
0x70
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x73
,
0x00
,
0x00
,
0x00
,
0x04
,
0x68
,
0x65
,
0x61
,
0x64
,
0x00
,
0x00
,
0x00
,
0x04
,
0x70
,
0x6f
,
0x73
,
0x74
,
0x00
,
0x00
,
0x00
,
0x03
,
0x70
,
0x75
,
0x74
,
0x00
,
0x00
,
0x00
,
0x06
,
0x64
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x00
,
0x00
,
0x00
,
0x05
,
0x74
,
0x72
,
0x61
,
0x63
,
0x65
,
0x00
,
0x00
,
0x00
,
0x06
,
0x61
,
0x63
,
0x63
,
0x65
,
0x70
,
0x74
,
0x00
,
0x00
,
0x00
,
0x0e
,
0x61
,
0x63
,
0x63
,
0x65
,
0x70
,
0x74
,
0x2d
,
0x63
,
0x68
,
0x61
,
0x72
,
0x73
,
0x65
,
0x74
,
0x00
,
0x00
,
0x00
,
0x0f
,
0x61
,
0x63
,
0x63
,
0x65
,
0x70
,
0x74
,
0x2d
,
0x65
,
0x6e
,
0x63
,
0x6f
,
0x64
,
0x69
,
0x6e
,
0x67
,
0x00
,
0x00
,
0x00
,
0x0f
,
0x61
,
0x63
,
0x63
,
0x65
,
0x70
,
0x74
,
0x2d
,
0x6c
,
0x61
,
0x6e
,
0x67
,
0x75
,
0x61
,
0x67
,
0x65
,
0x00
,
0x00
,
0x00
,
0x0d
,
0x61
,
0x63
,
0x63
,
0x65
,
0x70
,
0x74
,
0x2d
,
0x72
,
0x61
,
0x6e
,
0x67
,
0x65
,
0x73
,
0x00
,
0x00
,
0x00
,
0x03
,
0x61
,
0x67
,
0x65
,
0x00
,
0x00
,
0x00
,
0x05
,
0x61
,
0x6c
,
0x6c
,
0x6f
,
0x77
,
0x00
,
0x00
,
0x00
,
0x0d
,
0x61
,
0x75
,
0x74
,
0x68
,
0x6f
,
0x72
,
0x69
,
0x7a
,
0x61
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x00
,
0x00
,
0x00
,
0x0d
,
0x63
,
0x61
,
0x63
,
0x68
,
0x65
,
0x2d
,
0x63
,
0x6f
,
0x6e
,
0x74
,
0x72
,
0x6f
,
0x6c
,
0x00
,
0x00
,
0x00
,
0x0a
,
0x63
,
0x6f
,
0x6e
,
0x6e
,
0x65
,
0x63
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x00
,
0x00
,
0x00
,
0x0c
,
0x63
,
0x6f
,
0x6e
,
0x74
,
0x65
,
0x6e
,
0x74
,
0x2d
,
0x62
,
0x61
,
0x73
,
0x65
,
0x00
,
0x00
,
0x00
,
0x10
,
0x63
,
0x6f
,
0x6e
,
0x74
,
0x65
,
0x6e
,
0x74
,
0x2d
,
0x65
,
0x6e
,
0x63
,
0x6f
,
0x64
,
0x69
,
0x6e
,
0x67
,
0x00
,
0x00
,
0x00
,
0x10
,
0x63
,
0x6f
,
0x6e
,
0x74
,
0x65
,
0x6e
,
0x74
,
0x2d
,
0x6c
,
0x61
,
0x6e
,
0x67
,
0x75
,
0x61
,
0x67
,
0x65
,
0x00
,
0x00
,
0x00
,
0x0e
,
0x63
,
0x6f
,
0x6e
,
0x74
,
0x65
,
0x6e
,
0x74
,
0x2d
,
0x6c
,
0x65
,
0x6e
,
0x67
,
0x74
,
0x68
,
0x00
,
0x00
,
0x00
,
0x10
,
0x63
,
0x6f
,
0x6e
,
0x74
,
0x65
,
0x6e
,
0x74
,
0x2d
,
0x6c
,
0x6f
,
0x63
,
0x61
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x00
,
0x00
,
0x00
,
0x0b
,
0x63
,
0x6f
,
0x6e
,
0x74
,
0x65
,
0x6e
,
0x74
,
0x2d
,
0x6d
,
0x64
,
0x35
,
0x00
,
0x00
,
0x00
,
0x0d
,
0x63
,
0x6f
,
0x6e
,
0x74
,
0x65
,
0x6e
,
0x74
,
0x2d
,
0x72
,
0x61
,
0x6e
,
0x67
,
0x65
,
0x00
,
0x00
,
0x00
,
0x0c
,
0x63
,
0x6f
,
0x6e
,
0x74
,
0x65
,
0x6e
,
0x74
,
0x2d
,
0x74
,
0x79
,
0x70
,
0x65
,
0x00
,
0x00
,
0x00
,
0x04
,
0x64
,
0x61
,
0x74
,
0x65
,
0x00
,
0x00
,
0x00
,
0x04
,
0x65
,
0x74
,
0x61
,
0x67
,
0x00
,
0x00
,
0x00
,
0x06
,
0x65
,
0x78
,
0x70
,
0x65
,
0x63
,
0x74
,
0x00
,
0x00
,
0x00
,
0x07
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x00
,
0x00
,
0x00
,
0x04
,
0x66
,
0x72
,
0x6f
,
0x6d
,
0x00
,
0x00
,
0x00
,
0x04
,
0x68
,
0x6f
,
0x73
,
0x74
,
0x00
,
0x00
,
0x00
,
0x08
,
0x69
,
0x66
,
0x2d
,
0x6d
,
0x61
,
0x74
,
0x63
,
0x68
,
0x00
,
0x00
,
0x00
,
0x11
,
0x69
,
0x66
,
0x2d
,
0x6d
,
0x6f
,
0x64
,
0x69
,
0x66
,
0x69
,
0x65
,
0x64
,
0x2d
,
0x73
,
0x69
,
0x6e
,
0x63
,
0x65
,
0x00
,
0x00
,
0x00
,
0x0d
,
0x69
,
0x66
,
0x2d
,
0x6e
,
0x6f
,
0x6e
,
0x65
,
0x2d
,
0x6d
,
0x61
,
0x74
,
0x63
,
0x68
,
0x00
,
0x00
,
0x00
,
0x08
,
0x69
,
0x66
,
0x2d
,
0x72
,
0x61
,
0x6e
,
0x67
,
0x65
,
0x00
,
0x00
,
0x00
,
0x13
,
0x69
,
0x66
,
0x2d
,
0x75
,
0x6e
,
0x6d
,
0x6f
,
0x64
,
0x69
,
0x66
,
0x69
,
0x65
,
0x64
,
0x2d
,
0x73
,
0x69
,
0x6e
,
0x63
,
0x65
,
0x00
,
0x00
,
0x00
,
0x0d
,
0x6c
,
0x61
,
0x73
,
0x74
,
0x2d
,
0x6d
,
0x6f
,
0x64
,
0x69
,
0x66
,
0x69
,
0x65
,
0x64
,
0x00
,
0x00
,
0x00
,
0x08
,
0x6c
,
0x6f
,
0x63
,
0x61
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x00
,
0x00
,
0x00
,
0x0c
,
0x6d
,
0x61
,
0x78
,
0x2d
,
0x66
,
0x6f
,
0x72
,
0x77
,
0x61
,
0x72
,
0x64
,
0x73
,
0x00
,
0x00
,
0x00
,
0x06
,
0x70
,
0x72
,
0x61
,
0x67
,
0x6d
,
0x61
,
0x00
,
0x00
,
0x00
,
0x12
,
0x70
,
0x72
,
0x6f
,
0x78
,
0x79
,
0x2d
,
0x61
,
0x75
,
0x74
,
0x68
,
0x65
,
0x6e
,
0x74
,
0x69
,
0x63
,
0x61
,
0x74
,
0x65
,
0x00
,
0x00
,
0x00
,
0x13
,
0x70
,
0x72
,
0x6f
,
0x78
,
0x79
,
0x2d
,
0x61
,
0x75
,
0x74
,
0x68
,
0x6f
,
0x72
,
0x69
,
0x7a
,
0x61
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x00
,
0x00
,
0x00
,
0x05
,
0x72
,
0x61
,
0x6e
,
0x67
,
0x65
,
0x00
,
0x00
,
0x00
,
0x07
,
0x72
,
0x65
,
0x66
,
0x65
,
0x72
,
0x65
,
0x72
,
0x00
,
0x00
,
0x00
,
0x0b
,
0x72
,
0x65
,
0x74
,
0x72
,
0x79
,
0x2d
,
0x61
,
0x66
,
0x74
,
0x65
,
0x72
,
0x00
,
0x00
,
0x00
,
0x06
,
0x73
,
0x65
,
0x72
,
0x76
,
0x65
,
0x72
,
0x00
,
0x00
,
0x00
,
0x02
,
0x74
,
0x65
,
0x00
,
0x00
,
0x00
,
0x07
,
0x74
,
0x72
,
0x61
,
0x69
,
0x6c
,
0x65
,
0x72
,
0x00
,
0x00
,
0x00
,
0x11
,
0x74
,
0x72
,
0x61
,
0x6e
,
0x73
,
0x66
,
0x65
,
0x72
,
0x2d
,
0x65
,
0x6e
,
0x63
,
0x6f
,
0x64
,
0x69
,
0x6e
,
0x67
,
0x00
,
0x00
,
0x00
,
0x07
,
0x75
,
0x70
,
0x67
,
0x72
,
0x61
,
0x64
,
0x65
,
0x00
,
0x00
,
0x00
,
0x0a
,
0x75
,
0x73
,
0x65
,
0x72
,
0x2d
,
0x61
,
0x67
,
0x65
,
0x6e
,
0x74
,
0x00
,
0x00
,
0x00
,
0x04
,
0x76
,
0x61
,
0x72
,
0x79
,
0x00
,
0x00
,
0x00
,
0x03
,
0x76
,
0x69
,
0x61
,
0x00
,
0x00
,
0x00
,
0x07
,
0x77
,
0x61
,
0x72
,
0x6e
,
0x69
,
0x6e
,
0x67
,
0x00
,
0x00
,
0x00
,
0x10
,
0x77
,
0x77
,
0x77
,
0x2d
,
0x61
,
0x75
,
0x74
,
0x68
,
0x65
,
0x6e
,
0x74
,
0x69
,
0x63
,
0x61
,
0x74
,
0x65
,
0x00
,
0x00
,
0x00
,
0x06
,
0x6d
,
0x65
,
0x74
,
0x68
,
0x6f
,
0x64
,
0x00
,
0x00
,
0x00
,
0x03
,
0x67
,
0x65
,
0x74
,
0x00
,
0x00
,
0x00
,
0x06
,
0x73
,
0x74
,
0x61
,
0x74
,
0x75
,
0x73
,
0x00
,
0x00
,
0x00
,
0x06
,
0x32
,
0x30
,
0x30
,
0x20
,
0x4f
,
0x4b
,
0x00
,
0x00
,
0x00
,
0x07
,
0x76
,
0x65
,
0x72
,
0x73
,
0x69
,
0x6f
,
0x6e
,
0x00
,
0x00
,
0x00
,
0x08
,
0x48
,
0x54
,
0x54
,
0x50
,
0x2f
,
0x31
,
0x2e
,
0x31
,
0x00
,
0x00
,
0x00
,
0x03
,
0x75
,
0x72
,
0x6c
,
0x00
,
0x00
,
0x00
,
0x06
,
0x70
,
0x75
,
0x62
,
0x6c
,
0x69
,
0x63
,
0x00
,
0x00
,
0x00
,
0x0a
,
0x73
,
0x65
,
0x74
,
0x2d
,
0x63
,
0x6f
,
0x6f
,
0x6b
,
0x69
,
0x65
,
0x00
,
0x00
,
0x00
,
0x0a
,
0x6b
,
0x65
,
0x65
,
0x70
,
0x2d
,
0x61
,
0x6c
,
0x69
,
0x76
,
0x65
,
0x00
,
0x00
,
0x00
,
0x06
,
0x6f
,
0x72
,
0x69
,
0x67
,
0x69
,
0x6e
,
0x31
,
0x30
,
0x30
,
0x31
,
0x30
,
0x31
,
0x32
,
0x30
,
0x31
,
0x32
,
0x30
,
0x32
,
0x32
,
0x30
,
0x35
,
0x32
,
0x30
,
0x36
,
0x33
,
0x30
,
0x30
,
0x33
,
0x30
,
0x32
,
0x33
,
0x30
,
0x33
,
0x33
,
0x30
,
0x34
,
0x33
,
0x30
,
0x35
,
0x33
,
0x30
,
0x36
,
0x33
,
0x30
,
0x37
,
0x34
,
0x30
,
0x32
,
0x34
,
0x30
,
0x35
,
0x34
,
0x30
,
0x36
,
0x34
,
0x30
,
0x37
,
0x34
,
0x30
,
0x38
,
0x34
,
0x30
,
0x39
,
0x34
,
0x31
,
0x30
,
0x34
,
0x31
,
0x31
,
0x34
,
0x31
,
0x32
,
0x34
,
0x31
,
0x33
,
0x34
,
0x31
,
0x34
,
0x34
,
0x31
,
0x35
,
0x34
,
0x31
,
0x36
,
0x34
,
0x31
,
0x37
,
0x35
,
0x30
,
0x32
,
0x35
,
0x30
,
0x34
,
0x35
,
0x30
,
0x35
,
0x32
,
0x30
,
0x33
,
0x20
,
0x4e
,
0x6f
,
0x6e
,
0x2d
,
0x41
,
0x75
,
0x74
,
0x68
,
0x6f
,
0x72
,
0x69
,
0x74
,
0x61
,
0x74
,
0x69
,
0x76
,
0x65
,
0x20
,
0x49
,
0x6e
,
0x66
,
0x6f
,
0x72
,
0x6d
,
0x61
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x32
,
0x30
,
0x34
,
0x20
,
0x4e
,
0x6f
,
0x20
,
0x43
,
0x6f
,
0x6e
,
0x74
,
0x65
,
0x6e
,
0x74
,
0x33
,
0x30
,
0x31
,
0x20
,
0x4d
,
0x6f
,
0x76
,
0x65
,
0x64
,
0x20
,
0x50
,
0x65
,
0x72
,
0x6d
,
0x61
,
0x6e
,
0x65
,
0x6e
,
0x74
,
0x6c
,
0x79
,
0x34
,
0x30
,
0x30
,
0x20
,
0x42
,
0x61
,
0x64
,
0x20
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x34
,
0x30
,
0x31
,
0x20
,
0x55
,
0x6e
,
0x61
,
0x75
,
0x74
,
0x68
,
0x6f
,
0x72
,
0x69
,
0x7a
,
0x65
,
0x64
,
0x34
,
0x30
,
0x33
,
0x20
,
0x46
,
0x6f
,
0x72
,
0x62
,
0x69
,
0x64
,
0x64
,
0x65
,
0x6e
,
0x34
,
0x30
,
0x34
,
0x20
,
0x4e
,
0x6f
,
0x74
,
0x20
,
0x46
,
0x6f
,
0x75
,
0x6e
,
0x64
,
0x35
,
0x30
,
0x30
,
0x20
,
0x49
,
0x6e
,
0x74
,
0x65
,
0x72
,
0x6e
,
0x61
,
0x6c
,
0x20
,
0x53
,
0x65
,
0x72
,
0x76
,
0x65
,
0x72
,
0x20
,
0x45
,
0x72
,
0x72
,
0x6f
,
0x72
,
0x35
,
0x30
,
0x31
,
0x20
,
0x4e
,
0x6f
,
0x74
,
0x20
,
0x49
,
0x6d
,
0x70
,
0x6c
,
0x65
,
0x6d
,
0x65
,
0x6e
,
0x74
,
0x65
,
0x64
,
0x35
,
0x30
,
0x33
,
0x20
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x20
,
0x55
,
0x6e
,
0x61
,
0x76
,
0x61
,
0x69
,
0x6c
,
0x61
,
0x62
,
0x6c
,
0x65
,
0x4a
,
0x61
,
0x6e
,
0x20
,
0x46
,
0x65
,
0x62
,
0x20
,
0x4d
,
0x61
,
0x72
,
0x20
,
0x41
,
0x70
,
0x72
,
0x20
,
0x4d
,
0x61
,
0x79
,
0x20
,
0x4a
,
0x75
,
0x6e
,
0x20
,
0x4a
,
0x75
,
0x6c
,
0x20
,
0x41
,
0x75
,
0x67
,
0x20
,
0x53
,
0x65
,
0x70
,
0x74
,
0x20
,
0x4f
,
0x63
,
0x74
,
0x20
,
0x4e
,
0x6f
,
0x76
,
0x20
,
0x44
,
0x65
,
0x63
,
0x20
,
0x30
,
0x30
,
0x3a
,
0x30
,
0x30
,
0x3a
,
0x30
,
0x30
,
0x20
,
0x4d
,
0x6f
,
0x6e
,
0x2c
,
0x20
,
0x54
,
0x75
,
0x65
,
0x2c
,
0x20
,
0x57
,
0x65
,
0x64
,
0x2c
,
0x20
,
0x54
,
0x68
,
0x75
,
0x2c
,
0x20
,
0x46
,
0x72
,
0x69
,
0x2c
,
0x20
,
0x53
,
0x61
,
0x74
,
0x2c
,
0x20
,
0x53
,
0x75
,
0x6e
,
0x2c
,
0x20
,
0x47
,
0x4d
,
0x54
,
0x63
,
0x68
,
0x75
,
0x6e
,
0x6b
,
0x65
,
0x64
,
0x2c
,
0x74
,
0x65
,
0x78
,
0x74
,
0x2f
,
0x68
,
0x74
,
0x6d
,
0x6c
,
0x2c
,
0x69
,
0x6d
,
0x61
,
0x67
,
0x65
,
0x2f
,
0x70
,
0x6e
,
0x67
,
0x2c
,
0x69
,
0x6d
,
0x61
,
0x67
,
0x65
,
0x2f
,
0x6a
,
0x70
,
0x67
,
0x2c
,
0x69
,
0x6d
,
0x61
,
0x67
,
0x65
,
0x2f
,
0x67
,
0x69
,
0x66
,
0x2c
,
0x61
,
0x70
,
0x70
,
0x6c
,
0x69
,
0x63
,
0x61
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x2f
,
0x78
,
0x6d
,
0x6c
,
0x2c
,
0x61
,
0x70
,
0x70
,
0x6c
,
0x69
,
0x63
,
0x61
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x2f
,
0x78
,
0x68
,
0x74
,
0x6d
,
0x6c
,
0x2b
,
0x78
,
0x6d
,
0x6c
,
0x2c
,
0x74
,
0x65
,
0x78
,
0x74
,
0x2f
,
0x70
,
0x6c
,
0x61
,
0x69
,
0x6e
,
0x2c
,
0x74
,
0x65
,
0x78
,
0x74
,
0x2f
,
0x6a
,
0x61
,
0x76
,
0x61
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x2c
,
0x70
,
0x75
,
0x62
,
0x6c
,
0x69
,
0x63
,
0x70
,
0x72
,
0x69
,
0x76
,
0x61
,
0x74
,
0x65
,
0x6d
,
0x61
,
0x78
,
0x2d
,
0x61
,
0x67
,
0x65
,
0x3d
,
0x67
,
0x7a
,
0x69
,
0x70
,
0x2c
,
0x64
,
0x65
,
0x66
,
0x6c
,
0x61
,
0x74
,
0x65
,
0x2c
,
0x73
,
0x64
,
0x63
,
0x68
,
0x63
,
0x68
,
0x61
,
0x72
,
0x73
,
0x65
,
0x74
,
0x3d
,
0x75
,
0x74
,
0x66
,
0x2d
,
0x38
,
0x63
,
0x68
,
0x61
,
0x72
,
0x73
,
0x65
,
0x74
,
0x3d
,
0x69
,
0x73
,
0x6f
,
0x2d
,
0x38
,
0x38
,
0x35
,
0x39
,
0x2d
,
0x31
,
0x2c
,
0x75
,
0x74
,
0x66
,
0x2d
,
0x2c
,
0x2a
,
0x2c
,
0x65
,
0x6e
,
0x71
,
0x3d
,
0x30
,
0x2e
,
}
Godeps/_workspace/src/github.com/docker/spdystream/spdy/read.go
0 → 100644
View file @
bc07f631
This diff is collapsed.
Click to expand it.
Godeps/_workspace/src/github.com/docker/spdystream/spdy/spdy_test.go
0 → 100644
View file @
bc07f631
This diff is collapsed.
Click to expand it.
Godeps/_workspace/src/github.com/docker/spdystream/spdy/types.go
0 → 100644
View file @
bc07f631
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Package spdy implements the SPDY protocol (currently SPDY/3), described in
// http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3.
package
spdy
import
(
"bytes"
"compress/zlib"
"io"
"net/http"
)
// Version is the protocol version number that this package implements.
const
Version
=
3
// ControlFrameType stores the type field in a control frame header.
type
ControlFrameType
uint16
const
(
TypeSynStream
ControlFrameType
=
0x0001
TypeSynReply
=
0x0002
TypeRstStream
=
0x0003
TypeSettings
=
0x0004
TypePing
=
0x0006
TypeGoAway
=
0x0007
TypeHeaders
=
0x0008
TypeWindowUpdate
=
0x0009
)
// ControlFlags are the flags that can be set on a control frame.
type
ControlFlags
uint8
const
(
ControlFlagFin
ControlFlags
=
0x01
ControlFlagUnidirectional
=
0x02
ControlFlagSettingsClearSettings
=
0x01
)
// DataFlags are the flags that can be set on a data frame.
type
DataFlags
uint8
const
(
DataFlagFin
DataFlags
=
0x01
)
// MaxDataLength is the maximum number of bytes that can be stored in one frame.
const
MaxDataLength
=
1
<<
24
-
1
// headerValueSepator separates multiple header values.
const
headerValueSeparator
=
"
\x00
"
// Frame is a single SPDY frame in its unpacked in-memory representation. Use
// Framer to read and write it.
type
Frame
interface
{
write
(
f
*
Framer
)
error
}
// ControlFrameHeader contains all the fields in a control frame header,
// in its unpacked in-memory representation.
type
ControlFrameHeader
struct
{
// Note, high bit is the "Control" bit.
version
uint16
// spdy version number
frameType
ControlFrameType
Flags
ControlFlags
length
uint32
// length of data field
}
type
controlFrame
interface
{
Frame
read
(
h
ControlFrameHeader
,
f
*
Framer
)
error
}
// StreamId represents a 31-bit value identifying the stream.
type
StreamId
uint32
// SynStreamFrame is the unpacked, in-memory representation of a SYN_STREAM
// frame.
type
SynStreamFrame
struct
{
CFHeader
ControlFrameHeader
StreamId
StreamId
AssociatedToStreamId
StreamId
// stream id for a stream which this stream is associated to
Priority
uint8
// priority of this frame (3-bit)
Slot
uint8
// index in the server's credential vector of the client certificate
Headers
http
.
Header
}
// SynReplyFrame is the unpacked, in-memory representation of a SYN_REPLY frame.
type
SynReplyFrame
struct
{
CFHeader
ControlFrameHeader
StreamId
StreamId
Headers
http
.
Header
}
// RstStreamStatus represents the status that led to a RST_STREAM.
type
RstStreamStatus
uint32
const
(
ProtocolError
RstStreamStatus
=
iota
+
1
InvalidStream
RefusedStream
UnsupportedVersion
Cancel
InternalError
FlowControlError
StreamInUse
StreamAlreadyClosed
InvalidCredentials
FrameTooLarge
)
// RstStreamFrame is the unpacked, in-memory representation of a RST_STREAM
// frame.
type
RstStreamFrame
struct
{
CFHeader
ControlFrameHeader
StreamId
StreamId
Status
RstStreamStatus
}
// SettingsFlag represents a flag in a SETTINGS frame.
type
SettingsFlag
uint8
const
(
FlagSettingsPersistValue
SettingsFlag
=
0x1
FlagSettingsPersisted
=
0x2
)
// SettingsFlag represents the id of an id/value pair in a SETTINGS frame.
type
SettingsId
uint32
const
(
SettingsUploadBandwidth
SettingsId
=
iota
+
1
SettingsDownloadBandwidth
SettingsRoundTripTime
SettingsMaxConcurrentStreams
SettingsCurrentCwnd
SettingsDownloadRetransRate
SettingsInitialWindowSize
SettingsClientCretificateVectorSize
)
// SettingsFlagIdValue is the unpacked, in-memory representation of the
// combined flag/id/value for a setting in a SETTINGS frame.
type
SettingsFlagIdValue
struct
{
Flag
SettingsFlag
Id
SettingsId
Value
uint32
}
// SettingsFrame is the unpacked, in-memory representation of a SPDY
// SETTINGS frame.
type
SettingsFrame
struct
{
CFHeader
ControlFrameHeader
FlagIdValues
[]
SettingsFlagIdValue
}
// PingFrame is the unpacked, in-memory representation of a PING frame.
type
PingFrame
struct
{
CFHeader
ControlFrameHeader
Id
uint32
// unique id for this ping, from server is even, from client is odd.
}
// GoAwayStatus represents the status in a GoAwayFrame.
type
GoAwayStatus
uint32
const
(
GoAwayOK
GoAwayStatus
=
iota
GoAwayProtocolError
GoAwayInternalError
)
// GoAwayFrame is the unpacked, in-memory representation of a GOAWAY frame.
type
GoAwayFrame
struct
{
CFHeader
ControlFrameHeader
LastGoodStreamId
StreamId
// last stream id which was accepted by sender
Status
GoAwayStatus
}
// HeadersFrame is the unpacked, in-memory representation of a HEADERS frame.
type
HeadersFrame
struct
{
CFHeader
ControlFrameHeader
StreamId
StreamId
Headers
http
.
Header
}
// WindowUpdateFrame is the unpacked, in-memory representation of a
// WINDOW_UPDATE frame.
type
WindowUpdateFrame
struct
{
CFHeader
ControlFrameHeader
StreamId
StreamId
DeltaWindowSize
uint32
// additional number of bytes to existing window size
}
// TODO: Implement credential frame and related methods.
// DataFrame is the unpacked, in-memory representation of a DATA frame.
type
DataFrame
struct
{
// Note, high bit is the "Control" bit. Should be 0 for data frames.
StreamId
StreamId
Flags
DataFlags
Data
[]
byte
// payload data of this frame
}
// A SPDY specific error.
type
ErrorCode
string
const
(
UnlowercasedHeaderName
ErrorCode
=
"header was not lowercased"
DuplicateHeaders
=
"multiple headers with same name"
WrongCompressedPayloadSize
=
"compressed payload size was incorrect"
UnknownFrameType
=
"unknown frame type"
InvalidControlFrame
=
"invalid control frame"
InvalidDataFrame
=
"invalid data frame"
InvalidHeaderPresent
=
"frame contained invalid header"
ZeroStreamId
=
"stream id zero is disallowed"
)
// Error contains both the type of error and additional values. StreamId is 0
// if Error is not associated with a stream.
type
Error
struct
{
Err
ErrorCode
StreamId
StreamId
}
func
(
e
*
Error
)
Error
()
string
{
return
string
(
e
.
Err
)
}
var
invalidReqHeaders
=
map
[
string
]
bool
{
"Connection"
:
true
,
"Host"
:
true
,
"Keep-Alive"
:
true
,
"Proxy-Connection"
:
true
,
"Transfer-Encoding"
:
true
,
}
var
invalidRespHeaders
=
map
[
string
]
bool
{
"Connection"
:
true
,
"Keep-Alive"
:
true
,
"Proxy-Connection"
:
true
,
"Transfer-Encoding"
:
true
,
}
// Framer handles serializing/deserializing SPDY frames, including compressing/
// decompressing payloads.
type
Framer
struct
{
headerCompressionDisabled
bool
w
io
.
Writer
headerBuf
*
bytes
.
Buffer
headerCompressor
*
zlib
.
Writer
r
io
.
Reader
headerReader
io
.
LimitedReader
headerDecompressor
io
.
ReadCloser
}
// NewFramer allocates a new Framer for a given SPDY connection, represented by
// a io.Writer and io.Reader. Note that Framer will read and write individual fields
// from/to the Reader and Writer, so the caller should pass in an appropriately
// buffered implementation to optimize performance.
func
NewFramer
(
w
io
.
Writer
,
r
io
.
Reader
)
(
*
Framer
,
error
)
{
compressBuf
:=
new
(
bytes
.
Buffer
)
compressor
,
err
:=
zlib
.
NewWriterLevelDict
(
compressBuf
,
zlib
.
BestCompression
,
[]
byte
(
headerDictionary
))
if
err
!=
nil
{
return
nil
,
err
}
framer
:=
&
Framer
{
w
:
w
,
headerBuf
:
compressBuf
,
headerCompressor
:
compressor
,
r
:
r
,
}
return
framer
,
nil
}
Godeps/_workspace/src/github.com/docker/spdystream/spdy/write.go
0 → 100644
View file @
bc07f631
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
spdy
import
(
"encoding/binary"
"io"
"net/http"
"strings"
)
func
(
frame
*
SynStreamFrame
)
write
(
f
*
Framer
)
error
{
return
f
.
writeSynStreamFrame
(
frame
)
}
func
(
frame
*
SynReplyFrame
)
write
(
f
*
Framer
)
error
{
return
f
.
writeSynReplyFrame
(
frame
)
}
func
(
frame
*
RstStreamFrame
)
write
(
f
*
Framer
)
(
err
error
)
{
if
frame
.
StreamId
==
0
{
return
&
Error
{
ZeroStreamId
,
0
}
}
frame
.
CFHeader
.
version
=
Version
frame
.
CFHeader
.
frameType
=
TypeRstStream
frame
.
CFHeader
.
Flags
=
0
frame
.
CFHeader
.
length
=
8
// Serialize frame to Writer.
if
err
=
writeControlFrameHeader
(
f
.
w
,
frame
.
CFHeader
);
err
!=
nil
{
return
}
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
frame
.
StreamId
);
err
!=
nil
{
return
}
if
frame
.
Status
==
0
{
return
&
Error
{
InvalidControlFrame
,
frame
.
StreamId
}
}
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
frame
.
Status
);
err
!=
nil
{
return
}
return
}
func
(
frame
*
SettingsFrame
)
write
(
f
*
Framer
)
(
err
error
)
{
frame
.
CFHeader
.
version
=
Version
frame
.
CFHeader
.
frameType
=
TypeSettings
frame
.
CFHeader
.
length
=
uint32
(
len
(
frame
.
FlagIdValues
)
*
8
+
4
)
// Serialize frame to Writer.
if
err
=
writeControlFrameHeader
(
f
.
w
,
frame
.
CFHeader
);
err
!=
nil
{
return
}
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
uint32
(
len
(
frame
.
FlagIdValues
)));
err
!=
nil
{
return
}
for
_
,
flagIdValue
:=
range
frame
.
FlagIdValues
{
flagId
:=
uint32
(
flagIdValue
.
Flag
)
<<
24
|
uint32
(
flagIdValue
.
Id
)
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
flagId
);
err
!=
nil
{
return
}
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
flagIdValue
.
Value
);
err
!=
nil
{
return
}
}
return
}
func
(
frame
*
PingFrame
)
write
(
f
*
Framer
)
(
err
error
)
{
if
frame
.
Id
==
0
{
return
&
Error
{
ZeroStreamId
,
0
}
}
frame
.
CFHeader
.
version
=
Version
frame
.
CFHeader
.
frameType
=
TypePing
frame
.
CFHeader
.
Flags
=
0
frame
.
CFHeader
.
length
=
4
// Serialize frame to Writer.
if
err
=
writeControlFrameHeader
(
f
.
w
,
frame
.
CFHeader
);
err
!=
nil
{
return
}
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
frame
.
Id
);
err
!=
nil
{
return
}
return
}
func
(
frame
*
GoAwayFrame
)
write
(
f
*
Framer
)
(
err
error
)
{
frame
.
CFHeader
.
version
=
Version
frame
.
CFHeader
.
frameType
=
TypeGoAway
frame
.
CFHeader
.
Flags
=
0
frame
.
CFHeader
.
length
=
8
// Serialize frame to Writer.
if
err
=
writeControlFrameHeader
(
f
.
w
,
frame
.
CFHeader
);
err
!=
nil
{
return
}
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
frame
.
LastGoodStreamId
);
err
!=
nil
{
return
}
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
frame
.
Status
);
err
!=
nil
{
return
}
return
nil
}
func
(
frame
*
HeadersFrame
)
write
(
f
*
Framer
)
error
{
return
f
.
writeHeadersFrame
(
frame
)
}
func
(
frame
*
WindowUpdateFrame
)
write
(
f
*
Framer
)
(
err
error
)
{
frame
.
CFHeader
.
version
=
Version
frame
.
CFHeader
.
frameType
=
TypeWindowUpdate
frame
.
CFHeader
.
Flags
=
0
frame
.
CFHeader
.
length
=
8
// Serialize frame to Writer.
if
err
=
writeControlFrameHeader
(
f
.
w
,
frame
.
CFHeader
);
err
!=
nil
{
return
}
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
frame
.
StreamId
);
err
!=
nil
{
return
}
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
frame
.
DeltaWindowSize
);
err
!=
nil
{
return
}
return
nil
}
func
(
frame
*
DataFrame
)
write
(
f
*
Framer
)
error
{
return
f
.
writeDataFrame
(
frame
)
}
// WriteFrame writes a frame.
func
(
f
*
Framer
)
WriteFrame
(
frame
Frame
)
error
{
return
frame
.
write
(
f
)
}
func
writeControlFrameHeader
(
w
io
.
Writer
,
h
ControlFrameHeader
)
error
{
if
err
:=
binary
.
Write
(
w
,
binary
.
BigEndian
,
0x8000
|
h
.
version
);
err
!=
nil
{
return
err
}
if
err
:=
binary
.
Write
(
w
,
binary
.
BigEndian
,
h
.
frameType
);
err
!=
nil
{
return
err
}
flagsAndLength
:=
uint32
(
h
.
Flags
)
<<
24
|
h
.
length
if
err
:=
binary
.
Write
(
w
,
binary
.
BigEndian
,
flagsAndLength
);
err
!=
nil
{
return
err
}
return
nil
}
func
writeHeaderValueBlock
(
w
io
.
Writer
,
h
http
.
Header
)
(
n
int
,
err
error
)
{
n
=
0
if
err
=
binary
.
Write
(
w
,
binary
.
BigEndian
,
uint32
(
len
(
h
)));
err
!=
nil
{
return
}
n
+=
2
for
name
,
values
:=
range
h
{
if
err
=
binary
.
Write
(
w
,
binary
.
BigEndian
,
uint32
(
len
(
name
)));
err
!=
nil
{
return
}
n
+=
2
name
=
strings
.
ToLower
(
name
)
if
_
,
err
=
io
.
WriteString
(
w
,
name
);
err
!=
nil
{
return
}
n
+=
len
(
name
)
v
:=
strings
.
Join
(
values
,
headerValueSeparator
)
if
err
=
binary
.
Write
(
w
,
binary
.
BigEndian
,
uint32
(
len
(
v
)));
err
!=
nil
{
return
}
n
+=
2
if
_
,
err
=
io
.
WriteString
(
w
,
v
);
err
!=
nil
{
return
}
n
+=
len
(
v
)
}
return
}
func
(
f
*
Framer
)
writeSynStreamFrame
(
frame
*
SynStreamFrame
)
(
err
error
)
{
if
frame
.
StreamId
==
0
{
return
&
Error
{
ZeroStreamId
,
0
}
}
// Marshal the headers.
var
writer
io
.
Writer
=
f
.
headerBuf
if
!
f
.
headerCompressionDisabled
{
writer
=
f
.
headerCompressor
}
if
_
,
err
=
writeHeaderValueBlock
(
writer
,
frame
.
Headers
);
err
!=
nil
{
return
}
if
!
f
.
headerCompressionDisabled
{
f
.
headerCompressor
.
Flush
()
}
// Set ControlFrameHeader.
frame
.
CFHeader
.
version
=
Version
frame
.
CFHeader
.
frameType
=
TypeSynStream
frame
.
CFHeader
.
length
=
uint32
(
len
(
f
.
headerBuf
.
Bytes
())
+
10
)
// Serialize frame to Writer.
if
err
=
writeControlFrameHeader
(
f
.
w
,
frame
.
CFHeader
);
err
!=
nil
{
return
err
}
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
frame
.
StreamId
);
err
!=
nil
{
return
err
}
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
frame
.
AssociatedToStreamId
);
err
!=
nil
{
return
err
}
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
frame
.
Priority
<<
5
);
err
!=
nil
{
return
err
}
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
frame
.
Slot
);
err
!=
nil
{
return
err
}
if
_
,
err
=
f
.
w
.
Write
(
f
.
headerBuf
.
Bytes
());
err
!=
nil
{
return
err
}
f
.
headerBuf
.
Reset
()
return
nil
}
func
(
f
*
Framer
)
writeSynReplyFrame
(
frame
*
SynReplyFrame
)
(
err
error
)
{
if
frame
.
StreamId
==
0
{
return
&
Error
{
ZeroStreamId
,
0
}
}
// Marshal the headers.
var
writer
io
.
Writer
=
f
.
headerBuf
if
!
f
.
headerCompressionDisabled
{
writer
=
f
.
headerCompressor
}
if
_
,
err
=
writeHeaderValueBlock
(
writer
,
frame
.
Headers
);
err
!=
nil
{
return
}
if
!
f
.
headerCompressionDisabled
{
f
.
headerCompressor
.
Flush
()
}
// Set ControlFrameHeader.
frame
.
CFHeader
.
version
=
Version
frame
.
CFHeader
.
frameType
=
TypeSynReply
frame
.
CFHeader
.
length
=
uint32
(
len
(
f
.
headerBuf
.
Bytes
())
+
4
)
// Serialize frame to Writer.
if
err
=
writeControlFrameHeader
(
f
.
w
,
frame
.
CFHeader
);
err
!=
nil
{
return
}
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
frame
.
StreamId
);
err
!=
nil
{
return
}
if
_
,
err
=
f
.
w
.
Write
(
f
.
headerBuf
.
Bytes
());
err
!=
nil
{
return
}
f
.
headerBuf
.
Reset
()
return
}
func
(
f
*
Framer
)
writeHeadersFrame
(
frame
*
HeadersFrame
)
(
err
error
)
{
if
frame
.
StreamId
==
0
{
return
&
Error
{
ZeroStreamId
,
0
}
}
// Marshal the headers.
var
writer
io
.
Writer
=
f
.
headerBuf
if
!
f
.
headerCompressionDisabled
{
writer
=
f
.
headerCompressor
}
if
_
,
err
=
writeHeaderValueBlock
(
writer
,
frame
.
Headers
);
err
!=
nil
{
return
}
if
!
f
.
headerCompressionDisabled
{
f
.
headerCompressor
.
Flush
()
}
// Set ControlFrameHeader.
frame
.
CFHeader
.
version
=
Version
frame
.
CFHeader
.
frameType
=
TypeHeaders
frame
.
CFHeader
.
length
=
uint32
(
len
(
f
.
headerBuf
.
Bytes
())
+
4
)
// Serialize frame to Writer.
if
err
=
writeControlFrameHeader
(
f
.
w
,
frame
.
CFHeader
);
err
!=
nil
{
return
}
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
frame
.
StreamId
);
err
!=
nil
{
return
}
if
_
,
err
=
f
.
w
.
Write
(
f
.
headerBuf
.
Bytes
());
err
!=
nil
{
return
}
f
.
headerBuf
.
Reset
()
return
}
func
(
f
*
Framer
)
writeDataFrame
(
frame
*
DataFrame
)
(
err
error
)
{
if
frame
.
StreamId
==
0
{
return
&
Error
{
ZeroStreamId
,
0
}
}
if
frame
.
StreamId
&
0x80000000
!=
0
||
len
(
frame
.
Data
)
>
MaxDataLength
{
return
&
Error
{
InvalidDataFrame
,
frame
.
StreamId
}
}
// Serialize frame to Writer.
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
frame
.
StreamId
);
err
!=
nil
{
return
}
flagsAndLength
:=
uint32
(
frame
.
Flags
)
<<
24
|
uint32
(
len
(
frame
.
Data
))
if
err
=
binary
.
Write
(
f
.
w
,
binary
.
BigEndian
,
flagsAndLength
);
err
!=
nil
{
return
}
if
_
,
err
=
f
.
w
.
Write
(
frame
.
Data
);
err
!=
nil
{
return
}
return
nil
}
Godeps/_workspace/src/github.com/docker/spdystream/stream.go
View file @
bc07f631
...
...
@@ -9,7 +9,7 @@ import (
"sync"
"time"
"g
olang.org/x/net
/spdy"
"g
ithub.com/docker/spdystream
/spdy"
)
var
(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment