Update runc and containerd deps
| ... | ... |
@@ -250,7 +250,7 @@ RUN set -x \ |
| 250 | 250 |
&& rm -rf "$GOPATH" |
| 251 | 251 |
|
| 252 | 252 |
# Install runc |
| 253 |
-ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa |
|
| 253 |
+ENV RUNC_COMMIT d49ece5a83da3dcb820121d6850e2b61bd0a5fbe |
|
| 254 | 254 |
RUN set -x \ |
| 255 | 255 |
&& export GOPATH="$(mktemp -d)" \ |
| 256 | 256 |
&& git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \ |
| ... | ... |
@@ -261,7 +261,7 @@ RUN set -x \ |
| 261 | 261 |
&& rm -rf "$GOPATH" |
| 262 | 262 |
|
| 263 | 263 |
# Install containerd |
| 264 |
-ENV CONTAINERD_COMMIT v0.2.1 |
|
| 264 |
+ENV CONTAINERD_COMMIT 57b7c3da915ebe943bd304c00890959b191e5264 |
|
| 265 | 265 |
RUN set -x \ |
| 266 | 266 |
&& export GOPATH="$(mktemp -d)" \ |
| 267 | 267 |
&& git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \ |
| ... | ... |
@@ -181,7 +181,7 @@ RUN set -x \ |
| 181 | 181 |
&& rm -rf "$GOPATH" |
| 182 | 182 |
|
| 183 | 183 |
# Install runc |
| 184 |
-ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa |
|
| 184 |
+ENV RUNC_COMMIT d49ece5a83da3dcb820121d6850e2b61bd0a5fbe |
|
| 185 | 185 |
RUN set -x \ |
| 186 | 186 |
&& export GOPATH="$(mktemp -d)" \ |
| 187 | 187 |
&& git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \ |
| ... | ... |
@@ -192,7 +192,7 @@ RUN set -x \ |
| 192 | 192 |
&& rm -rf "$GOPATH" |
| 193 | 193 |
|
| 194 | 194 |
# Install containerd |
| 195 |
-ENV CONTAINERD_COMMIT v0.2.1 |
|
| 195 |
+ENV CONTAINERD_COMMIT 57b7c3da915ebe943bd304c00890959b191e5264 |
|
| 196 | 196 |
RUN set -x \ |
| 197 | 197 |
&& export GOPATH="$(mktemp -d)" \ |
| 198 | 198 |
&& git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \ |
| ... | ... |
@@ -192,7 +192,7 @@ RUN set -x \ |
| 192 | 192 |
&& rm -rf "$GOPATH" |
| 193 | 193 |
|
| 194 | 194 |
# Install runc |
| 195 |
-ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa |
|
| 195 |
+ENV RUNC_COMMIT d49ece5a83da3dcb820121d6850e2b61bd0a5fbe |
|
| 196 | 196 |
RUN set -x \ |
| 197 | 197 |
&& export GOPATH="$(mktemp -d)" \ |
| 198 | 198 |
&& git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \ |
| ... | ... |
@@ -203,7 +203,7 @@ RUN set -x \ |
| 203 | 203 |
&& rm -rf "$GOPATH" |
| 204 | 204 |
|
| 205 | 205 |
# Install containerd |
| 206 |
-ENV CONTAINERD_COMMIT v0.2.1 |
|
| 206 |
+ENV CONTAINERD_COMMIT 57b7c3da915ebe943bd304c00890959b191e5264 |
|
| 207 | 207 |
RUN set -x \ |
| 208 | 208 |
&& export GOPATH="$(mktemp -d)" \ |
| 209 | 209 |
&& git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \ |
| ... | ... |
@@ -74,7 +74,7 @@ WORKDIR /go/src/github.com/docker/docker |
| 74 | 74 |
ENV DOCKER_BUILDTAGS apparmor seccomp selinux |
| 75 | 75 |
|
| 76 | 76 |
# Install runc |
| 77 |
-ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa |
|
| 77 |
+ENV RUNC_COMMIT d49ece5a83da3dcb820121d6850e2b61bd0a5fbe |
|
| 78 | 78 |
RUN set -x \ |
| 79 | 79 |
&& export GOPATH="$(mktemp -d)" \ |
| 80 | 80 |
&& git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \ |
| ... | ... |
@@ -85,7 +85,7 @@ RUN set -x \ |
| 85 | 85 |
&& rm -rf "$GOPATH" |
| 86 | 86 |
|
| 87 | 87 |
# Install containerd |
| 88 |
-ENV CONTAINERD_COMMIT v0.2.1 |
|
| 88 |
+ENV CONTAINERD_COMMIT 57b7c3da915ebe943bd304c00890959b191e5264 |
|
| 89 | 89 |
RUN set -x \ |
| 90 | 90 |
&& export GOPATH="$(mktemp -d)" \ |
| 91 | 91 |
&& git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \ |
| ... | ... |
@@ -204,7 +204,7 @@ RUN set -x \ |
| 204 | 204 |
&& rm -rf "$GOPATH" |
| 205 | 205 |
|
| 206 | 206 |
# Install runc |
| 207 |
-ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa |
|
| 207 |
+ENV RUNC_COMMIT d49ece5a83da3dcb820121d6850e2b61bd0a5fbe |
|
| 208 | 208 |
RUN set -x \ |
| 209 | 209 |
&& export GOPATH="$(mktemp -d)" \ |
| 210 | 210 |
&& git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \ |
| ... | ... |
@@ -215,7 +215,7 @@ RUN set -x \ |
| 215 | 215 |
&& rm -rf "$GOPATH" |
| 216 | 216 |
|
| 217 | 217 |
# Install containerd |
| 218 |
-ENV CONTAINERD_COMMIT v0.2.1 |
|
| 218 |
+ENV CONTAINERD_COMMIT 57b7c3da915ebe943bd304c00890959b191e5264 |
|
| 219 | 219 |
RUN set -x \ |
| 220 | 220 |
&& export GOPATH="$(mktemp -d)" \ |
| 221 | 221 |
&& git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \ |
| ... | ... |
@@ -194,7 +194,7 @@ RUN set -x \ |
| 194 | 194 |
&& rm -rf "$GOPATH" |
| 195 | 195 |
|
| 196 | 196 |
# Install runc |
| 197 |
-ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa |
|
| 197 |
+ENV RUNC_COMMIT d49ece5a83da3dcb820121d6850e2b61bd0a5fbe |
|
| 198 | 198 |
RUN set -x \ |
| 199 | 199 |
&& export GOPATH="$(mktemp -d)" \ |
| 200 | 200 |
&& git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \ |
| ... | ... |
@@ -205,7 +205,7 @@ RUN set -x \ |
| 205 | 205 |
&& rm -rf "$GOPATH" |
| 206 | 206 |
|
| 207 | 207 |
# Install containerd |
| 208 |
-ENV CONTAINERD_COMMIT v0.2.1 |
|
| 208 |
+ENV CONTAINERD_COMMIT 57b7c3da915ebe943bd304c00890959b191e5264 |
|
| 209 | 209 |
RUN set -x \ |
| 210 | 210 |
&& export GOPATH="$(mktemp -d)" \ |
| 211 | 211 |
&& git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \ |
| ... | ... |
@@ -57,7 +57,7 @@ ENV GOPATH /go:/go/src/github.com/docker/docker/vendor |
| 57 | 57 |
ENV CGO_LDFLAGS -L/lib |
| 58 | 58 |
|
| 59 | 59 |
# Install runc |
| 60 |
-ENV RUNC_COMMIT baf6536d6259209c3edfa2b22237af82942d3dfa |
|
| 60 |
+ENV RUNC_COMMIT d49ece5a83da3dcb820121d6850e2b61bd0a5fbe |
|
| 61 | 61 |
RUN set -x \ |
| 62 | 62 |
&& export GOPATH="$(mktemp -d)" \ |
| 63 | 63 |
&& git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc" \ |
| ... | ... |
@@ -68,7 +68,7 @@ RUN set -x \ |
| 68 | 68 |
&& rm -rf "$GOPATH" |
| 69 | 69 |
|
| 70 | 70 |
# Install containerd |
| 71 |
-ENV CONTAINERD_COMMIT v0.2.1 |
|
| 71 |
+ENV CONTAINERD_COMMIT 57b7c3da915ebe943bd304c00890959b191e5264 |
|
| 72 | 72 |
RUN set -x \ |
| 73 | 73 |
&& export GOPATH="$(mktemp -d)" \ |
| 74 | 74 |
&& git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd" \ |
| ... | ... |
@@ -60,14 +60,14 @@ clone git github.com/miekg/pkcs11 df8ae6ca730422dba20c768ff38ef7d79077a59f |
| 60 | 60 |
clone git github.com/docker/go v1.5.1-1-1-gbaf439e |
| 61 | 61 |
clone git github.com/agl/ed25519 d2b94fd789ea21d12fac1a4443dd3a3f79cda72c |
| 62 | 62 |
|
| 63 |
-clone git github.com/opencontainers/runc 2441732d6fcc0fb0a542671a4372e0c7bc99c19e # libcontainer |
|
| 63 |
+clone git github.com/opencontainers/runc d49ece5a83da3dcb820121d6850e2b61bd0a5fbe # libcontainer |
|
| 64 | 64 |
clone git github.com/opencontainers/specs f955d90e70a98ddfb886bd930ffd076da9b67998 # specs |
| 65 | 65 |
clone git github.com/seccomp/libseccomp-golang 1b506fc7c24eec5a3693cdcbed40d9c226cfc6a1 |
| 66 | 66 |
# libcontainer deps (see src/github.com/opencontainers/runc/Godeps/Godeps.json) |
| 67 | 67 |
clone git github.com/coreos/go-systemd v4 |
| 68 | 68 |
clone git github.com/godbus/dbus v4.0.0 |
| 69 | 69 |
clone git github.com/syndtr/gocapability 2c00daeb6c3b45114c80ac44119e7b8801fdd852 |
| 70 |
-clone git github.com/golang/protobuf 68415e7123da32b07eab49c96d2c4d6158360e9b |
|
| 70 |
+clone git github.com/golang/protobuf 8d92cf5fc15a4382f8964b08e1f42a75c0591aa3 |
|
| 71 | 71 |
|
| 72 | 72 |
# gelf logging driver deps |
| 73 | 73 |
clone git github.com/Graylog2/go-gelf aab2f594e4585d43468ac57287b0dece9d806883 |
| ... | ... |
@@ -90,5 +90,5 @@ clone git google.golang.org/api dc6d2353af16e2a2b0ff6986af051d473a4ed468 https:/ |
| 90 | 90 |
clone git google.golang.org/cloud dae7e3d993bc3812a2185af60552bb6b847e52a0 https://code.googlesource.com/gocloud |
| 91 | 91 |
|
| 92 | 92 |
# containerd |
| 93 |
-clone git github.com/docker/containerd v0.2.1 |
|
| 93 |
+clone git github.com/docker/containerd 57b7c3da915ebe943bd304c00890959b191e5264 |
|
| 94 | 94 |
clean |
| ... | ... |
@@ -33,7 +33,7 @@ func (s *DockerDaemonSuite) TestDaemonRestartWithKilledRunningContainer(t *check |
| 33 | 33 |
} |
| 34 | 34 |
|
| 35 | 35 |
// kill the container |
| 36 |
- runCmd := exec.Command(ctrBinary, "--address", "/var/run/docker/libcontainerd/docker-containerd.sock", "containers", "kill", cid) |
|
| 36 |
+ runCmd := exec.Command(ctrBinary, "--address", "unix:///var/run/docker/libcontainerd/docker-containerd.sock", "containers", "kill", cid) |
|
| 37 | 37 |
if out, ec, err := runCommandWithOutput(runCmd); err != nil {
|
| 38 | 38 |
t.Fatalf("Failed to run ctr, ExitCode: %d, err: '%v' output: '%s' cid: '%s'\n", ec, err, out, cid)
|
| 39 | 39 |
} |
| ... | ... |
@@ -120,7 +120,7 @@ func (s *DockerDaemonSuite) TestDaemonRestartWithPausedRunningContainer(t *check |
| 120 | 120 |
} |
| 121 | 121 |
|
| 122 | 122 |
// kill the container |
| 123 |
- runCmd := exec.Command(ctrBinary, "--address", "/var/run/docker/libcontainerd/docker-containerd.sock", "containers", "pause", cid) |
|
| 123 |
+ runCmd := exec.Command(ctrBinary, "--address", "unix:///var/run/docker/libcontainerd/docker-containerd.sock", "containers", "pause", cid) |
|
| 124 | 124 |
if out, ec, err := runCommandWithOutput(runCmd); err != nil {
|
| 125 | 125 |
t.Fatalf("Failed to run ctr, ExitCode: %d, err: '%v' output: '%s' cid: '%s'\n", ec, err, out, cid)
|
| 126 | 126 |
} |
| ... | ... |
@@ -170,7 +170,7 @@ func (s *DockerDaemonSuite) TestDaemonRestartWithUnpausedRunningContainer(t *che |
| 170 | 170 |
} |
| 171 | 171 |
|
| 172 | 172 |
// resume the container |
| 173 |
- runCmd := exec.Command(ctrBinary, "--address", "/var/run/docker/libcontainerd/docker-containerd.sock", "containers", "resume", cid) |
|
| 173 |
+ runCmd := exec.Command(ctrBinary, "--address", "unix:///var/run/docker/libcontainerd/docker-containerd.sock", "containers", "resume", cid) |
|
| 174 | 174 |
if out, ec, err := runCommandWithOutput(runCmd); err != nil {
|
| 175 | 175 |
t.Fatalf("Failed to run ctr, ExitCode: %d, err: '%v' output: '%s' cid: '%s'\n", ec, err, out, cid)
|
| 176 | 176 |
} |
| ... | ... |
@@ -1550,7 +1550,7 @@ func (s *DockerDaemonSuite) TestCleanupMountsAfterDaemonAndContainerKill(c *chec |
| 1550 | 1550 |
c.Assert(strings.Contains(string(mountOut), id), check.Equals, true, comment) |
| 1551 | 1551 |
|
| 1552 | 1552 |
// kill the container |
| 1553 |
- runCmd := exec.Command(ctrBinary, "--address", "/var/run/docker/libcontainerd/docker-containerd.sock", "containers", "kill", id) |
|
| 1553 |
+ runCmd := exec.Command(ctrBinary, "--address", "unix:///var/run/docker/libcontainerd/docker-containerd.sock", "containers", "kill", id) |
|
| 1554 | 1554 |
if out, ec, err := runCommandWithOutput(runCmd); err != nil {
|
| 1555 | 1555 |
c.Fatalf("Failed to run ctr, ExitCode: %d, err: %v output: %s id: %s\n", ec, err, out, id)
|
| 1556 | 1556 |
} |
| ... | ... |
@@ -349,7 +349,12 @@ func (r *remote) runContainerdDaemon() error {
|
| 349 | 349 |
} |
| 350 | 350 |
|
| 351 | 351 |
// Start a new instance |
| 352 |
- args := []string{"-l", r.rpcAddr, "--runtime", "docker-runc", "--metrics-interval=0"}
|
|
| 352 |
+ args := []string{
|
|
| 353 |
+ "-l", fmt.Sprintf("unix://%s", r.rpcAddr),
|
|
| 354 |
+ "--shim", "docker-containerd-shim", |
|
| 355 |
+ "--runtime", "docker-runc", |
|
| 356 |
+ "--metrics-interval=0", |
|
| 357 |
+ } |
|
| 353 | 358 |
if r.debugLog {
|
| 354 | 359 |
args = append(args, "--debug") |
| 355 | 360 |
} |
| ... | ... |
@@ -9,6 +9,8 @@ It is generated from these files: |
| 9 | 9 |
api.proto |
| 10 | 10 |
|
| 11 | 11 |
It has these top-level messages: |
| 12 |
+ GetServerVersionRequest |
|
| 13 |
+ GetServerVersionResponse |
|
| 12 | 14 |
UpdateProcessRequest |
| 13 | 15 |
UpdateProcessResponse |
| 14 | 16 |
CreateContainerRequest |
| ... | ... |
@@ -67,6 +69,30 @@ var _ = proto.Marshal |
| 67 | 67 |
var _ = fmt.Errorf |
| 68 | 68 |
var _ = math.Inf |
| 69 | 69 |
|
| 70 |
+// This is a compile-time assertion to ensure that this generated file |
|
| 71 |
+// is compatible with the proto package it is being compiled against. |
|
| 72 |
+const _ = proto.ProtoPackageIsVersion1 |
|
| 73 |
+ |
|
| 74 |
+type GetServerVersionRequest struct {
|
|
| 75 |
+} |
|
| 76 |
+ |
|
| 77 |
+func (m *GetServerVersionRequest) Reset() { *m = GetServerVersionRequest{} }
|
|
| 78 |
+func (m *GetServerVersionRequest) String() string { return proto.CompactTextString(m) }
|
|
| 79 |
+func (*GetServerVersionRequest) ProtoMessage() {}
|
|
| 80 |
+func (*GetServerVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
|
|
| 81 |
+ |
|
| 82 |
+type GetServerVersionResponse struct {
|
|
| 83 |
+ Major uint32 `protobuf:"varint,1,opt,name=major" json:"major,omitempty"` |
|
| 84 |
+ Minor uint32 `protobuf:"varint,2,opt,name=minor" json:"minor,omitempty"` |
|
| 85 |
+ Patch uint32 `protobuf:"varint,3,opt,name=patch" json:"patch,omitempty"` |
|
| 86 |
+ Revision string `protobuf:"bytes,4,opt,name=revision" json:"revision,omitempty"` |
|
| 87 |
+} |
|
| 88 |
+ |
|
| 89 |
+func (m *GetServerVersionResponse) Reset() { *m = GetServerVersionResponse{} }
|
|
| 90 |
+func (m *GetServerVersionResponse) String() string { return proto.CompactTextString(m) }
|
|
| 91 |
+func (*GetServerVersionResponse) ProtoMessage() {}
|
|
| 92 |
+func (*GetServerVersionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
|
|
| 93 |
+ |
|
| 70 | 94 |
type UpdateProcessRequest struct {
|
| 71 | 95 |
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` |
| 72 | 96 |
Pid string `protobuf:"bytes,2,opt,name=pid" json:"pid,omitempty"` |
| ... | ... |
@@ -78,7 +104,7 @@ type UpdateProcessRequest struct {
|
| 78 | 78 |
func (m *UpdateProcessRequest) Reset() { *m = UpdateProcessRequest{} }
|
| 79 | 79 |
func (m *UpdateProcessRequest) String() string { return proto.CompactTextString(m) }
|
| 80 | 80 |
func (*UpdateProcessRequest) ProtoMessage() {}
|
| 81 |
-func (*UpdateProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
|
|
| 81 |
+func (*UpdateProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
|
|
| 82 | 82 |
|
| 83 | 83 |
type UpdateProcessResponse struct {
|
| 84 | 84 |
} |
| ... | ... |
@@ -86,7 +112,7 @@ type UpdateProcessResponse struct {
|
| 86 | 86 |
func (m *UpdateProcessResponse) Reset() { *m = UpdateProcessResponse{} }
|
| 87 | 87 |
func (m *UpdateProcessResponse) String() string { return proto.CompactTextString(m) }
|
| 88 | 88 |
func (*UpdateProcessResponse) ProtoMessage() {}
|
| 89 |
-func (*UpdateProcessResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
|
|
| 89 |
+func (*UpdateProcessResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
|
|
| 90 | 90 |
|
| 91 | 91 |
type CreateContainerRequest struct {
|
| 92 | 92 |
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` |
| ... | ... |
@@ -102,7 +128,7 @@ type CreateContainerRequest struct {
|
| 102 | 102 |
func (m *CreateContainerRequest) Reset() { *m = CreateContainerRequest{} }
|
| 103 | 103 |
func (m *CreateContainerRequest) String() string { return proto.CompactTextString(m) }
|
| 104 | 104 |
func (*CreateContainerRequest) ProtoMessage() {}
|
| 105 |
-func (*CreateContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
|
|
| 105 |
+func (*CreateContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
|
|
| 106 | 106 |
|
| 107 | 107 |
type CreateContainerResponse struct {
|
| 108 | 108 |
Container *Container `protobuf:"bytes,1,opt,name=container" json:"container,omitempty"` |
| ... | ... |
@@ -111,7 +137,7 @@ type CreateContainerResponse struct {
|
| 111 | 111 |
func (m *CreateContainerResponse) Reset() { *m = CreateContainerResponse{} }
|
| 112 | 112 |
func (m *CreateContainerResponse) String() string { return proto.CompactTextString(m) }
|
| 113 | 113 |
func (*CreateContainerResponse) ProtoMessage() {}
|
| 114 |
-func (*CreateContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
|
|
| 114 |
+func (*CreateContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
|
|
| 115 | 115 |
|
| 116 | 116 |
func (m *CreateContainerResponse) GetContainer() *Container {
|
| 117 | 117 |
if m != nil {
|
| ... | ... |
@@ -129,7 +155,7 @@ type SignalRequest struct {
|
| 129 | 129 |
func (m *SignalRequest) Reset() { *m = SignalRequest{} }
|
| 130 | 130 |
func (m *SignalRequest) String() string { return proto.CompactTextString(m) }
|
| 131 | 131 |
func (*SignalRequest) ProtoMessage() {}
|
| 132 |
-func (*SignalRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
|
|
| 132 |
+func (*SignalRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
|
|
| 133 | 133 |
|
| 134 | 134 |
type SignalResponse struct {
|
| 135 | 135 |
} |
| ... | ... |
@@ -137,7 +163,7 @@ type SignalResponse struct {
|
| 137 | 137 |
func (m *SignalResponse) Reset() { *m = SignalResponse{} }
|
| 138 | 138 |
func (m *SignalResponse) String() string { return proto.CompactTextString(m) }
|
| 139 | 139 |
func (*SignalResponse) ProtoMessage() {}
|
| 140 |
-func (*SignalResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
|
|
| 140 |
+func (*SignalResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
|
|
| 141 | 141 |
|
| 142 | 142 |
type AddProcessRequest struct {
|
| 143 | 143 |
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` |
| ... | ... |
@@ -160,7 +186,7 @@ type AddProcessRequest struct {
|
| 160 | 160 |
func (m *AddProcessRequest) Reset() { *m = AddProcessRequest{} }
|
| 161 | 161 |
func (m *AddProcessRequest) String() string { return proto.CompactTextString(m) }
|
| 162 | 162 |
func (*AddProcessRequest) ProtoMessage() {}
|
| 163 |
-func (*AddProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
|
|
| 163 |
+func (*AddProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
|
|
| 164 | 164 |
|
| 165 | 165 |
func (m *AddProcessRequest) GetUser() *User {
|
| 166 | 166 |
if m != nil {
|
| ... | ... |
@@ -185,7 +211,7 @@ type Rlimit struct {
|
| 185 | 185 |
func (m *Rlimit) Reset() { *m = Rlimit{} }
|
| 186 | 186 |
func (m *Rlimit) String() string { return proto.CompactTextString(m) }
|
| 187 | 187 |
func (*Rlimit) ProtoMessage() {}
|
| 188 |
-func (*Rlimit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
|
|
| 188 |
+func (*Rlimit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
|
|
| 189 | 189 |
|
| 190 | 190 |
type User struct {
|
| 191 | 191 |
Uid uint32 `protobuf:"varint,1,opt,name=uid" json:"uid,omitempty"` |
| ... | ... |
@@ -196,7 +222,7 @@ type User struct {
|
| 196 | 196 |
func (m *User) Reset() { *m = User{} }
|
| 197 | 197 |
func (m *User) String() string { return proto.CompactTextString(m) }
|
| 198 | 198 |
func (*User) ProtoMessage() {}
|
| 199 |
-func (*User) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
|
|
| 199 |
+func (*User) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
|
|
| 200 | 200 |
|
| 201 | 201 |
type AddProcessResponse struct {
|
| 202 | 202 |
} |
| ... | ... |
@@ -204,7 +230,7 @@ type AddProcessResponse struct {
|
| 204 | 204 |
func (m *AddProcessResponse) Reset() { *m = AddProcessResponse{} }
|
| 205 | 205 |
func (m *AddProcessResponse) String() string { return proto.CompactTextString(m) }
|
| 206 | 206 |
func (*AddProcessResponse) ProtoMessage() {}
|
| 207 |
-func (*AddProcessResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
|
|
| 207 |
+func (*AddProcessResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
|
|
| 208 | 208 |
|
| 209 | 209 |
type CreateCheckpointRequest struct {
|
| 210 | 210 |
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` |
| ... | ... |
@@ -214,7 +240,7 @@ type CreateCheckpointRequest struct {
|
| 214 | 214 |
func (m *CreateCheckpointRequest) Reset() { *m = CreateCheckpointRequest{} }
|
| 215 | 215 |
func (m *CreateCheckpointRequest) String() string { return proto.CompactTextString(m) }
|
| 216 | 216 |
func (*CreateCheckpointRequest) ProtoMessage() {}
|
| 217 |
-func (*CreateCheckpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
|
|
| 217 |
+func (*CreateCheckpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
|
|
| 218 | 218 |
|
| 219 | 219 |
func (m *CreateCheckpointRequest) GetCheckpoint() *Checkpoint {
|
| 220 | 220 |
if m != nil {
|
| ... | ... |
@@ -229,7 +255,7 @@ type CreateCheckpointResponse struct {
|
| 229 | 229 |
func (m *CreateCheckpointResponse) Reset() { *m = CreateCheckpointResponse{} }
|
| 230 | 230 |
func (m *CreateCheckpointResponse) String() string { return proto.CompactTextString(m) }
|
| 231 | 231 |
func (*CreateCheckpointResponse) ProtoMessage() {}
|
| 232 |
-func (*CreateCheckpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
|
|
| 232 |
+func (*CreateCheckpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
|
|
| 233 | 233 |
|
| 234 | 234 |
type DeleteCheckpointRequest struct {
|
| 235 | 235 |
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` |
| ... | ... |
@@ -239,7 +265,7 @@ type DeleteCheckpointRequest struct {
|
| 239 | 239 |
func (m *DeleteCheckpointRequest) Reset() { *m = DeleteCheckpointRequest{} }
|
| 240 | 240 |
func (m *DeleteCheckpointRequest) String() string { return proto.CompactTextString(m) }
|
| 241 | 241 |
func (*DeleteCheckpointRequest) ProtoMessage() {}
|
| 242 |
-func (*DeleteCheckpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
|
|
| 242 |
+func (*DeleteCheckpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
|
|
| 243 | 243 |
|
| 244 | 244 |
type DeleteCheckpointResponse struct {
|
| 245 | 245 |
} |
| ... | ... |
@@ -247,7 +273,7 @@ type DeleteCheckpointResponse struct {
|
| 247 | 247 |
func (m *DeleteCheckpointResponse) Reset() { *m = DeleteCheckpointResponse{} }
|
| 248 | 248 |
func (m *DeleteCheckpointResponse) String() string { return proto.CompactTextString(m) }
|
| 249 | 249 |
func (*DeleteCheckpointResponse) ProtoMessage() {}
|
| 250 |
-func (*DeleteCheckpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
|
|
| 250 |
+func (*DeleteCheckpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
|
|
| 251 | 251 |
|
| 252 | 252 |
type ListCheckpointRequest struct {
|
| 253 | 253 |
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` |
| ... | ... |
@@ -256,7 +282,7 @@ type ListCheckpointRequest struct {
|
| 256 | 256 |
func (m *ListCheckpointRequest) Reset() { *m = ListCheckpointRequest{} }
|
| 257 | 257 |
func (m *ListCheckpointRequest) String() string { return proto.CompactTextString(m) }
|
| 258 | 258 |
func (*ListCheckpointRequest) ProtoMessage() {}
|
| 259 |
-func (*ListCheckpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
|
|
| 259 |
+func (*ListCheckpointRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
|
|
| 260 | 260 |
|
| 261 | 261 |
type Checkpoint struct {
|
| 262 | 262 |
Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` |
| ... | ... |
@@ -269,7 +295,7 @@ type Checkpoint struct {
|
| 269 | 269 |
func (m *Checkpoint) Reset() { *m = Checkpoint{} }
|
| 270 | 270 |
func (m *Checkpoint) String() string { return proto.CompactTextString(m) }
|
| 271 | 271 |
func (*Checkpoint) ProtoMessage() {}
|
| 272 |
-func (*Checkpoint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
|
|
| 272 |
+func (*Checkpoint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
|
|
| 273 | 273 |
|
| 274 | 274 |
type ListCheckpointResponse struct {
|
| 275 | 275 |
Checkpoints []*Checkpoint `protobuf:"bytes,1,rep,name=checkpoints" json:"checkpoints,omitempty"` |
| ... | ... |
@@ -278,7 +304,7 @@ type ListCheckpointResponse struct {
|
| 278 | 278 |
func (m *ListCheckpointResponse) Reset() { *m = ListCheckpointResponse{} }
|
| 279 | 279 |
func (m *ListCheckpointResponse) String() string { return proto.CompactTextString(m) }
|
| 280 | 280 |
func (*ListCheckpointResponse) ProtoMessage() {}
|
| 281 |
-func (*ListCheckpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
|
|
| 281 |
+func (*ListCheckpointResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
|
|
| 282 | 282 |
|
| 283 | 283 |
func (m *ListCheckpointResponse) GetCheckpoints() []*Checkpoint {
|
| 284 | 284 |
if m != nil {
|
| ... | ... |
@@ -294,7 +320,7 @@ type StateRequest struct {
|
| 294 | 294 |
func (m *StateRequest) Reset() { *m = StateRequest{} }
|
| 295 | 295 |
func (m *StateRequest) String() string { return proto.CompactTextString(m) }
|
| 296 | 296 |
func (*StateRequest) ProtoMessage() {}
|
| 297 |
-func (*StateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
|
|
| 297 |
+func (*StateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
|
|
| 298 | 298 |
|
| 299 | 299 |
type ContainerState struct {
|
| 300 | 300 |
Status string `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"` |
| ... | ... |
@@ -303,7 +329,7 @@ type ContainerState struct {
|
| 303 | 303 |
func (m *ContainerState) Reset() { *m = ContainerState{} }
|
| 304 | 304 |
func (m *ContainerState) String() string { return proto.CompactTextString(m) }
|
| 305 | 305 |
func (*ContainerState) ProtoMessage() {}
|
| 306 |
-func (*ContainerState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
|
|
| 306 |
+func (*ContainerState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
|
|
| 307 | 307 |
|
| 308 | 308 |
type Process struct {
|
| 309 | 309 |
Pid string `protobuf:"bytes,1,opt,name=pid" json:"pid,omitempty"` |
| ... | ... |
@@ -326,7 +352,7 @@ type Process struct {
|
| 326 | 326 |
func (m *Process) Reset() { *m = Process{} }
|
| 327 | 327 |
func (m *Process) String() string { return proto.CompactTextString(m) }
|
| 328 | 328 |
func (*Process) ProtoMessage() {}
|
| 329 |
-func (*Process) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
|
|
| 329 |
+func (*Process) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
|
|
| 330 | 330 |
|
| 331 | 331 |
func (m *Process) GetUser() *User {
|
| 332 | 332 |
if m != nil {
|
| ... | ... |
@@ -355,7 +381,7 @@ type Container struct {
|
| 355 | 355 |
func (m *Container) Reset() { *m = Container{} }
|
| 356 | 356 |
func (m *Container) String() string { return proto.CompactTextString(m) }
|
| 357 | 357 |
func (*Container) ProtoMessage() {}
|
| 358 |
-func (*Container) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
|
|
| 358 |
+func (*Container) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
|
|
| 359 | 359 |
|
| 360 | 360 |
func (m *Container) GetProcesses() []*Process {
|
| 361 | 361 |
if m != nil {
|
| ... | ... |
@@ -373,7 +399,7 @@ type Machine struct {
|
| 373 | 373 |
func (m *Machine) Reset() { *m = Machine{} }
|
| 374 | 374 |
func (m *Machine) String() string { return proto.CompactTextString(m) }
|
| 375 | 375 |
func (*Machine) ProtoMessage() {}
|
| 376 |
-func (*Machine) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
|
|
| 376 |
+func (*Machine) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
|
|
| 377 | 377 |
|
| 378 | 378 |
// StateResponse is information about containerd daemon |
| 379 | 379 |
type StateResponse struct {
|
| ... | ... |
@@ -384,7 +410,7 @@ type StateResponse struct {
|
| 384 | 384 |
func (m *StateResponse) Reset() { *m = StateResponse{} }
|
| 385 | 385 |
func (m *StateResponse) String() string { return proto.CompactTextString(m) }
|
| 386 | 386 |
func (*StateResponse) ProtoMessage() {}
|
| 387 |
-func (*StateResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
|
|
| 387 |
+func (*StateResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
|
|
| 388 | 388 |
|
| 389 | 389 |
func (m *StateResponse) GetContainers() []*Container {
|
| 390 | 390 |
if m != nil {
|
| ... | ... |
@@ -410,7 +436,7 @@ type UpdateContainerRequest struct {
|
| 410 | 410 |
func (m *UpdateContainerRequest) Reset() { *m = UpdateContainerRequest{} }
|
| 411 | 411 |
func (m *UpdateContainerRequest) String() string { return proto.CompactTextString(m) }
|
| 412 | 412 |
func (*UpdateContainerRequest) ProtoMessage() {}
|
| 413 |
-func (*UpdateContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
|
|
| 413 |
+func (*UpdateContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
|
|
| 414 | 414 |
|
| 415 | 415 |
func (m *UpdateContainerRequest) GetResources() *UpdateResource {
|
| 416 | 416 |
if m != nil {
|
| ... | ... |
@@ -435,7 +461,7 @@ type UpdateResource struct {
|
| 435 | 435 |
func (m *UpdateResource) Reset() { *m = UpdateResource{} }
|
| 436 | 436 |
func (m *UpdateResource) String() string { return proto.CompactTextString(m) }
|
| 437 | 437 |
func (*UpdateResource) ProtoMessage() {}
|
| 438 |
-func (*UpdateResource) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
|
|
| 438 |
+func (*UpdateResource) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
|
|
| 439 | 439 |
|
| 440 | 440 |
type UpdateContainerResponse struct {
|
| 441 | 441 |
} |
| ... | ... |
@@ -443,7 +469,7 @@ type UpdateContainerResponse struct {
|
| 443 | 443 |
func (m *UpdateContainerResponse) Reset() { *m = UpdateContainerResponse{} }
|
| 444 | 444 |
func (m *UpdateContainerResponse) String() string { return proto.CompactTextString(m) }
|
| 445 | 445 |
func (*UpdateContainerResponse) ProtoMessage() {}
|
| 446 |
-func (*UpdateContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
|
|
| 446 |
+func (*UpdateContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
|
|
| 447 | 447 |
|
| 448 | 448 |
type EventsRequest struct {
|
| 449 | 449 |
Timestamp uint64 `protobuf:"varint,1,opt,name=timestamp" json:"timestamp,omitempty"` |
| ... | ... |
@@ -452,7 +478,7 @@ type EventsRequest struct {
|
| 452 | 452 |
func (m *EventsRequest) Reset() { *m = EventsRequest{} }
|
| 453 | 453 |
func (m *EventsRequest) String() string { return proto.CompactTextString(m) }
|
| 454 | 454 |
func (*EventsRequest) ProtoMessage() {}
|
| 455 |
-func (*EventsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
|
|
| 455 |
+func (*EventsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
|
|
| 456 | 456 |
|
| 457 | 457 |
type Event struct {
|
| 458 | 458 |
Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"` |
| ... | ... |
@@ -465,58 +491,58 @@ type Event struct {
|
| 465 | 465 |
func (m *Event) Reset() { *m = Event{} }
|
| 466 | 466 |
func (m *Event) String() string { return proto.CompactTextString(m) }
|
| 467 | 467 |
func (*Event) ProtoMessage() {}
|
| 468 |
-func (*Event) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
|
|
| 468 |
+func (*Event) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
|
|
| 469 | 469 |
|
| 470 | 470 |
type NetworkStats struct {
|
| 471 | 471 |
Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` |
| 472 |
- RxBytes uint64 `protobuf:"varint,2,opt,name=rx_bytes,json=rxBytes" json:"rx_bytes,omitempty"` |
|
| 473 |
- Rx_Packets uint64 `protobuf:"varint,3,opt,name=rx_Packets,json=rxPackets" json:"rx_Packets,omitempty"` |
|
| 474 |
- RxErrors uint64 `protobuf:"varint,4,opt,name=Rx_errors,json=rxErrors" json:"Rx_errors,omitempty"` |
|
| 475 |
- RxDropped uint64 `protobuf:"varint,5,opt,name=Rx_dropped,json=rxDropped" json:"Rx_dropped,omitempty"` |
|
| 476 |
- TxBytes uint64 `protobuf:"varint,6,opt,name=Tx_bytes,json=txBytes" json:"Tx_bytes,omitempty"` |
|
| 477 |
- TxPackets uint64 `protobuf:"varint,7,opt,name=Tx_packets,json=txPackets" json:"Tx_packets,omitempty"` |
|
| 478 |
- TxErrors uint64 `protobuf:"varint,8,opt,name=Tx_errors,json=txErrors" json:"Tx_errors,omitempty"` |
|
| 479 |
- TxDropped uint64 `protobuf:"varint,9,opt,name=Tx_dropped,json=txDropped" json:"Tx_dropped,omitempty"` |
|
| 472 |
+ RxBytes uint64 `protobuf:"varint,2,opt,name=rx_bytes" json:"rx_bytes,omitempty"` |
|
| 473 |
+ Rx_Packets uint64 `protobuf:"varint,3,opt,name=rx_Packets" json:"rx_Packets,omitempty"` |
|
| 474 |
+ RxErrors uint64 `protobuf:"varint,4,opt,name=Rx_errors" json:"Rx_errors,omitempty"` |
|
| 475 |
+ RxDropped uint64 `protobuf:"varint,5,opt,name=Rx_dropped" json:"Rx_dropped,omitempty"` |
|
| 476 |
+ TxBytes uint64 `protobuf:"varint,6,opt,name=Tx_bytes" json:"Tx_bytes,omitempty"` |
|
| 477 |
+ TxPackets uint64 `protobuf:"varint,7,opt,name=Tx_packets" json:"Tx_packets,omitempty"` |
|
| 478 |
+ TxErrors uint64 `protobuf:"varint,8,opt,name=Tx_errors" json:"Tx_errors,omitempty"` |
|
| 479 |
+ TxDropped uint64 `protobuf:"varint,9,opt,name=Tx_dropped" json:"Tx_dropped,omitempty"` |
|
| 480 | 480 |
} |
| 481 | 481 |
|
| 482 | 482 |
func (m *NetworkStats) Reset() { *m = NetworkStats{} }
|
| 483 | 483 |
func (m *NetworkStats) String() string { return proto.CompactTextString(m) }
|
| 484 | 484 |
func (*NetworkStats) ProtoMessage() {}
|
| 485 |
-func (*NetworkStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
|
|
| 485 |
+func (*NetworkStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
|
|
| 486 | 486 |
|
| 487 | 487 |
type CpuUsage struct {
|
| 488 |
- TotalUsage uint64 `protobuf:"varint,1,opt,name=total_usage,json=totalUsage" json:"total_usage,omitempty"` |
|
| 489 |
- PercpuUsage []uint64 `protobuf:"varint,2,rep,name=percpu_usage,json=percpuUsage" json:"percpu_usage,omitempty"` |
|
| 490 |
- UsageInKernelmode uint64 `protobuf:"varint,3,opt,name=usage_in_kernelmode,json=usageInKernelmode" json:"usage_in_kernelmode,omitempty"` |
|
| 491 |
- UsageInUsermode uint64 `protobuf:"varint,4,opt,name=usage_in_usermode,json=usageInUsermode" json:"usage_in_usermode,omitempty"` |
|
| 488 |
+ TotalUsage uint64 `protobuf:"varint,1,opt,name=total_usage" json:"total_usage,omitempty"` |
|
| 489 |
+ PercpuUsage []uint64 `protobuf:"varint,2,rep,name=percpu_usage" json:"percpu_usage,omitempty"` |
|
| 490 |
+ UsageInKernelmode uint64 `protobuf:"varint,3,opt,name=usage_in_kernelmode" json:"usage_in_kernelmode,omitempty"` |
|
| 491 |
+ UsageInUsermode uint64 `protobuf:"varint,4,opt,name=usage_in_usermode" json:"usage_in_usermode,omitempty"` |
|
| 492 | 492 |
} |
| 493 | 493 |
|
| 494 | 494 |
func (m *CpuUsage) Reset() { *m = CpuUsage{} }
|
| 495 | 495 |
func (m *CpuUsage) String() string { return proto.CompactTextString(m) }
|
| 496 | 496 |
func (*CpuUsage) ProtoMessage() {}
|
| 497 |
-func (*CpuUsage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
|
|
| 497 |
+func (*CpuUsage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
|
|
| 498 | 498 |
|
| 499 | 499 |
type ThrottlingData struct {
|
| 500 | 500 |
Periods uint64 `protobuf:"varint,1,opt,name=periods" json:"periods,omitempty"` |
| 501 |
- ThrottledPeriods uint64 `protobuf:"varint,2,opt,name=throttled_periods,json=throttledPeriods" json:"throttled_periods,omitempty"` |
|
| 502 |
- ThrottledTime uint64 `protobuf:"varint,3,opt,name=throttled_time,json=throttledTime" json:"throttled_time,omitempty"` |
|
| 501 |
+ ThrottledPeriods uint64 `protobuf:"varint,2,opt,name=throttled_periods" json:"throttled_periods,omitempty"` |
|
| 502 |
+ ThrottledTime uint64 `protobuf:"varint,3,opt,name=throttled_time" json:"throttled_time,omitempty"` |
|
| 503 | 503 |
} |
| 504 | 504 |
|
| 505 | 505 |
func (m *ThrottlingData) Reset() { *m = ThrottlingData{} }
|
| 506 | 506 |
func (m *ThrottlingData) String() string { return proto.CompactTextString(m) }
|
| 507 | 507 |
func (*ThrottlingData) ProtoMessage() {}
|
| 508 |
-func (*ThrottlingData) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
|
|
| 508 |
+func (*ThrottlingData) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
|
|
| 509 | 509 |
|
| 510 | 510 |
type CpuStats struct {
|
| 511 |
- CpuUsage *CpuUsage `protobuf:"bytes,1,opt,name=cpu_usage,json=cpuUsage" json:"cpu_usage,omitempty"` |
|
| 512 |
- ThrottlingData *ThrottlingData `protobuf:"bytes,2,opt,name=throttling_data,json=throttlingData" json:"throttling_data,omitempty"` |
|
| 513 |
- SystemUsage uint64 `protobuf:"varint,3,opt,name=system_usage,json=systemUsage" json:"system_usage,omitempty"` |
|
| 511 |
+ CpuUsage *CpuUsage `protobuf:"bytes,1,opt,name=cpu_usage" json:"cpu_usage,omitempty"` |
|
| 512 |
+ ThrottlingData *ThrottlingData `protobuf:"bytes,2,opt,name=throttling_data" json:"throttling_data,omitempty"` |
|
| 513 |
+ SystemUsage uint64 `protobuf:"varint,3,opt,name=system_usage" json:"system_usage,omitempty"` |
|
| 514 | 514 |
} |
| 515 | 515 |
|
| 516 | 516 |
func (m *CpuStats) Reset() { *m = CpuStats{} }
|
| 517 | 517 |
func (m *CpuStats) String() string { return proto.CompactTextString(m) }
|
| 518 | 518 |
func (*CpuStats) ProtoMessage() {}
|
| 519 |
-func (*CpuStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
|
|
| 519 |
+func (*CpuStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
|
|
| 520 | 520 |
|
| 521 | 521 |
func (m *CpuStats) GetCpuUsage() *CpuUsage {
|
| 522 | 522 |
if m != nil {
|
| ... | ... |
@@ -540,11 +566,11 @@ type PidsStats struct {
|
| 540 | 540 |
func (m *PidsStats) Reset() { *m = PidsStats{} }
|
| 541 | 541 |
func (m *PidsStats) String() string { return proto.CompactTextString(m) }
|
| 542 | 542 |
func (*PidsStats) ProtoMessage() {}
|
| 543 |
-func (*PidsStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
|
|
| 543 |
+func (*PidsStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
|
|
| 544 | 544 |
|
| 545 | 545 |
type MemoryData struct {
|
| 546 | 546 |
Usage uint64 `protobuf:"varint,1,opt,name=usage" json:"usage,omitempty"` |
| 547 |
- MaxUsage uint64 `protobuf:"varint,2,opt,name=max_usage,json=maxUsage" json:"max_usage,omitempty"` |
|
| 547 |
+ MaxUsage uint64 `protobuf:"varint,2,opt,name=max_usage" json:"max_usage,omitempty"` |
|
| 548 | 548 |
Failcnt uint64 `protobuf:"varint,3,opt,name=failcnt" json:"failcnt,omitempty"` |
| 549 | 549 |
Limit uint64 `protobuf:"varint,4,opt,name=limit" json:"limit,omitempty"` |
| 550 | 550 |
} |
| ... | ... |
@@ -552,20 +578,20 @@ type MemoryData struct {
|
| 552 | 552 |
func (m *MemoryData) Reset() { *m = MemoryData{} }
|
| 553 | 553 |
func (m *MemoryData) String() string { return proto.CompactTextString(m) }
|
| 554 | 554 |
func (*MemoryData) ProtoMessage() {}
|
| 555 |
-func (*MemoryData) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
|
|
| 555 |
+func (*MemoryData) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
|
|
| 556 | 556 |
|
| 557 | 557 |
type MemoryStats struct {
|
| 558 | 558 |
Cache uint64 `protobuf:"varint,1,opt,name=cache" json:"cache,omitempty"` |
| 559 | 559 |
Usage *MemoryData `protobuf:"bytes,2,opt,name=usage" json:"usage,omitempty"` |
| 560 |
- SwapUsage *MemoryData `protobuf:"bytes,3,opt,name=swap_usage,json=swapUsage" json:"swap_usage,omitempty"` |
|
| 561 |
- KernelUsage *MemoryData `protobuf:"bytes,4,opt,name=kernel_usage,json=kernelUsage" json:"kernel_usage,omitempty"` |
|
| 560 |
+ SwapUsage *MemoryData `protobuf:"bytes,3,opt,name=swap_usage" json:"swap_usage,omitempty"` |
|
| 561 |
+ KernelUsage *MemoryData `protobuf:"bytes,4,opt,name=kernel_usage" json:"kernel_usage,omitempty"` |
|
| 562 | 562 |
Stats map[string]uint64 `protobuf:"bytes,5,rep,name=stats" json:"stats,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` |
| 563 | 563 |
} |
| 564 | 564 |
|
| 565 | 565 |
func (m *MemoryStats) Reset() { *m = MemoryStats{} }
|
| 566 | 566 |
func (m *MemoryStats) String() string { return proto.CompactTextString(m) }
|
| 567 | 567 |
func (*MemoryStats) ProtoMessage() {}
|
| 568 |
-func (*MemoryStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
|
|
| 568 |
+func (*MemoryStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
|
|
| 569 | 569 |
|
| 570 | 570 |
func (m *MemoryStats) GetUsage() *MemoryData {
|
| 571 | 571 |
if m != nil {
|
| ... | ... |
@@ -605,23 +631,23 @@ type BlkioStatsEntry struct {
|
| 605 | 605 |
func (m *BlkioStatsEntry) Reset() { *m = BlkioStatsEntry{} }
|
| 606 | 606 |
func (m *BlkioStatsEntry) String() string { return proto.CompactTextString(m) }
|
| 607 | 607 |
func (*BlkioStatsEntry) ProtoMessage() {}
|
| 608 |
-func (*BlkioStatsEntry) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
|
|
| 608 |
+func (*BlkioStatsEntry) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
|
|
| 609 | 609 |
|
| 610 | 610 |
type BlkioStats struct {
|
| 611 |
- IoServiceBytesRecursive []*BlkioStatsEntry `protobuf:"bytes,1,rep,name=io_service_bytes_recursive,json=ioServiceBytesRecursive" json:"io_service_bytes_recursive,omitempty"` |
|
| 612 |
- IoServicedRecursive []*BlkioStatsEntry `protobuf:"bytes,2,rep,name=io_serviced_recursive,json=ioServicedRecursive" json:"io_serviced_recursive,omitempty"` |
|
| 613 |
- IoQueuedRecursive []*BlkioStatsEntry `protobuf:"bytes,3,rep,name=io_queued_recursive,json=ioQueuedRecursive" json:"io_queued_recursive,omitempty"` |
|
| 614 |
- IoServiceTimeRecursive []*BlkioStatsEntry `protobuf:"bytes,4,rep,name=io_service_time_recursive,json=ioServiceTimeRecursive" json:"io_service_time_recursive,omitempty"` |
|
| 615 |
- IoWaitTimeRecursive []*BlkioStatsEntry `protobuf:"bytes,5,rep,name=io_wait_time_recursive,json=ioWaitTimeRecursive" json:"io_wait_time_recursive,omitempty"` |
|
| 616 |
- IoMergedRecursive []*BlkioStatsEntry `protobuf:"bytes,6,rep,name=io_merged_recursive,json=ioMergedRecursive" json:"io_merged_recursive,omitempty"` |
|
| 617 |
- IoTimeRecursive []*BlkioStatsEntry `protobuf:"bytes,7,rep,name=io_time_recursive,json=ioTimeRecursive" json:"io_time_recursive,omitempty"` |
|
| 618 |
- SectorsRecursive []*BlkioStatsEntry `protobuf:"bytes,8,rep,name=sectors_recursive,json=sectorsRecursive" json:"sectors_recursive,omitempty"` |
|
| 611 |
+ IoServiceBytesRecursive []*BlkioStatsEntry `protobuf:"bytes,1,rep,name=io_service_bytes_recursive" json:"io_service_bytes_recursive,omitempty"` |
|
| 612 |
+ IoServicedRecursive []*BlkioStatsEntry `protobuf:"bytes,2,rep,name=io_serviced_recursive" json:"io_serviced_recursive,omitempty"` |
|
| 613 |
+ IoQueuedRecursive []*BlkioStatsEntry `protobuf:"bytes,3,rep,name=io_queued_recursive" json:"io_queued_recursive,omitempty"` |
|
| 614 |
+ IoServiceTimeRecursive []*BlkioStatsEntry `protobuf:"bytes,4,rep,name=io_service_time_recursive" json:"io_service_time_recursive,omitempty"` |
|
| 615 |
+ IoWaitTimeRecursive []*BlkioStatsEntry `protobuf:"bytes,5,rep,name=io_wait_time_recursive" json:"io_wait_time_recursive,omitempty"` |
|
| 616 |
+ IoMergedRecursive []*BlkioStatsEntry `protobuf:"bytes,6,rep,name=io_merged_recursive" json:"io_merged_recursive,omitempty"` |
|
| 617 |
+ IoTimeRecursive []*BlkioStatsEntry `protobuf:"bytes,7,rep,name=io_time_recursive" json:"io_time_recursive,omitempty"` |
|
| 618 |
+ SectorsRecursive []*BlkioStatsEntry `protobuf:"bytes,8,rep,name=sectors_recursive" json:"sectors_recursive,omitempty"` |
|
| 619 | 619 |
} |
| 620 | 620 |
|
| 621 | 621 |
func (m *BlkioStats) Reset() { *m = BlkioStats{} }
|
| 622 | 622 |
func (m *BlkioStats) String() string { return proto.CompactTextString(m) }
|
| 623 | 623 |
func (*BlkioStats) ProtoMessage() {}
|
| 624 |
-func (*BlkioStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
|
|
| 624 |
+func (*BlkioStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
|
|
| 625 | 625 |
|
| 626 | 626 |
func (m *BlkioStats) GetIoServiceBytesRecursive() []*BlkioStatsEntry {
|
| 627 | 627 |
if m != nil {
|
| ... | ... |
@@ -681,7 +707,7 @@ func (m *BlkioStats) GetSectorsRecursive() []*BlkioStatsEntry {
|
| 681 | 681 |
|
| 682 | 682 |
type HugetlbStats struct {
|
| 683 | 683 |
Usage uint64 `protobuf:"varint,1,opt,name=usage" json:"usage,omitempty"` |
| 684 |
- MaxUsage uint64 `protobuf:"varint,2,opt,name=max_usage,json=maxUsage" json:"max_usage,omitempty"` |
|
| 684 |
+ MaxUsage uint64 `protobuf:"varint,2,opt,name=max_usage" json:"max_usage,omitempty"` |
|
| 685 | 685 |
Failcnt uint64 `protobuf:"varint,3,opt,name=failcnt" json:"failcnt,omitempty"` |
| 686 | 686 |
Limit uint64 `protobuf:"varint,4,opt,name=limit" json:"limit,omitempty"` |
| 687 | 687 |
} |
| ... | ... |
@@ -689,20 +715,20 @@ type HugetlbStats struct {
|
| 689 | 689 |
func (m *HugetlbStats) Reset() { *m = HugetlbStats{} }
|
| 690 | 690 |
func (m *HugetlbStats) String() string { return proto.CompactTextString(m) }
|
| 691 | 691 |
func (*HugetlbStats) ProtoMessage() {}
|
| 692 |
-func (*HugetlbStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
|
|
| 692 |
+func (*HugetlbStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
|
|
| 693 | 693 |
|
| 694 | 694 |
type CgroupStats struct {
|
| 695 |
- CpuStats *CpuStats `protobuf:"bytes,1,opt,name=cpu_stats,json=cpuStats" json:"cpu_stats,omitempty"` |
|
| 696 |
- MemoryStats *MemoryStats `protobuf:"bytes,2,opt,name=memory_stats,json=memoryStats" json:"memory_stats,omitempty"` |
|
| 697 |
- BlkioStats *BlkioStats `protobuf:"bytes,3,opt,name=blkio_stats,json=blkioStats" json:"blkio_stats,omitempty"` |
|
| 698 |
- HugetlbStats map[string]*HugetlbStats `protobuf:"bytes,4,rep,name=hugetlb_stats,json=hugetlbStats" json:"hugetlb_stats,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` |
|
| 699 |
- PidsStats *PidsStats `protobuf:"bytes,5,opt,name=pids_stats,json=pidsStats" json:"pids_stats,omitempty"` |
|
| 695 |
+ CpuStats *CpuStats `protobuf:"bytes,1,opt,name=cpu_stats" json:"cpu_stats,omitempty"` |
|
| 696 |
+ MemoryStats *MemoryStats `protobuf:"bytes,2,opt,name=memory_stats" json:"memory_stats,omitempty"` |
|
| 697 |
+ BlkioStats *BlkioStats `protobuf:"bytes,3,opt,name=blkio_stats" json:"blkio_stats,omitempty"` |
|
| 698 |
+ HugetlbStats map[string]*HugetlbStats `protobuf:"bytes,4,rep,name=hugetlb_stats" json:"hugetlb_stats,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` |
|
| 699 |
+ PidsStats *PidsStats `protobuf:"bytes,5,opt,name=pids_stats" json:"pids_stats,omitempty"` |
|
| 700 | 700 |
} |
| 701 | 701 |
|
| 702 | 702 |
func (m *CgroupStats) Reset() { *m = CgroupStats{} }
|
| 703 | 703 |
func (m *CgroupStats) String() string { return proto.CompactTextString(m) }
|
| 704 | 704 |
func (*CgroupStats) ProtoMessage() {}
|
| 705 |
-func (*CgroupStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
|
|
| 705 |
+func (*CgroupStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }
|
|
| 706 | 706 |
|
| 707 | 707 |
func (m *CgroupStats) GetCpuStats() *CpuStats {
|
| 708 | 708 |
if m != nil {
|
| ... | ... |
@@ -740,15 +766,15 @@ func (m *CgroupStats) GetPidsStats() *PidsStats {
|
| 740 | 740 |
} |
| 741 | 741 |
|
| 742 | 742 |
type StatsResponse struct {
|
| 743 |
- NetworkStats []*NetworkStats `protobuf:"bytes,1,rep,name=network_stats,json=networkStats" json:"network_stats,omitempty"` |
|
| 744 |
- CgroupStats *CgroupStats `protobuf:"bytes,2,opt,name=cgroup_stats,json=cgroupStats" json:"cgroup_stats,omitempty"` |
|
| 743 |
+ NetworkStats []*NetworkStats `protobuf:"bytes,1,rep,name=network_stats" json:"network_stats,omitempty"` |
|
| 744 |
+ CgroupStats *CgroupStats `protobuf:"bytes,2,opt,name=cgroup_stats" json:"cgroup_stats,omitempty"` |
|
| 745 | 745 |
Timestamp uint64 `protobuf:"varint,3,opt,name=timestamp" json:"timestamp,omitempty"` |
| 746 | 746 |
} |
| 747 | 747 |
|
| 748 | 748 |
func (m *StatsResponse) Reset() { *m = StatsResponse{} }
|
| 749 | 749 |
func (m *StatsResponse) String() string { return proto.CompactTextString(m) }
|
| 750 | 750 |
func (*StatsResponse) ProtoMessage() {}
|
| 751 |
-func (*StatsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
|
|
| 751 |
+func (*StatsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} }
|
|
| 752 | 752 |
|
| 753 | 753 |
func (m *StatsResponse) GetNetworkStats() []*NetworkStats {
|
| 754 | 754 |
if m != nil {
|
| ... | ... |
@@ -771,9 +797,11 @@ type StatsRequest struct {
|
| 771 | 771 |
func (m *StatsRequest) Reset() { *m = StatsRequest{} }
|
| 772 | 772 |
func (m *StatsRequest) String() string { return proto.CompactTextString(m) }
|
| 773 | 773 |
func (*StatsRequest) ProtoMessage() {}
|
| 774 |
-func (*StatsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }
|
|
| 774 |
+func (*StatsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} }
|
|
| 775 | 775 |
|
| 776 | 776 |
func init() {
|
| 777 |
+ proto.RegisterType((*GetServerVersionRequest)(nil), "types.GetServerVersionRequest") |
|
| 778 |
+ proto.RegisterType((*GetServerVersionResponse)(nil), "types.GetServerVersionResponse") |
|
| 777 | 779 |
proto.RegisterType((*UpdateProcessRequest)(nil), "types.UpdateProcessRequest") |
| 778 | 780 |
proto.RegisterType((*UpdateProcessResponse)(nil), "types.UpdateProcessResponse") |
| 779 | 781 |
proto.RegisterType((*CreateContainerRequest)(nil), "types.CreateContainerRequest") |
| ... | ... |
@@ -824,6 +852,7 @@ var _ grpc.ClientConn |
| 824 | 824 |
// Client API for API service |
| 825 | 825 |
|
| 826 | 826 |
type APIClient interface {
|
| 827 |
+ GetServerVersion(ctx context.Context, in *GetServerVersionRequest, opts ...grpc.CallOption) (*GetServerVersionResponse, error) |
|
| 827 | 828 |
CreateContainer(ctx context.Context, in *CreateContainerRequest, opts ...grpc.CallOption) (*CreateContainerResponse, error) |
| 828 | 829 |
UpdateContainer(ctx context.Context, in *UpdateContainerRequest, opts ...grpc.CallOption) (*UpdateContainerResponse, error) |
| 829 | 830 |
Signal(ctx context.Context, in *SignalRequest, opts ...grpc.CallOption) (*SignalResponse, error) |
| ... | ... |
@@ -845,6 +874,15 @@ func NewAPIClient(cc *grpc.ClientConn) APIClient {
|
| 845 | 845 |
return &aPIClient{cc}
|
| 846 | 846 |
} |
| 847 | 847 |
|
| 848 |
+func (c *aPIClient) GetServerVersion(ctx context.Context, in *GetServerVersionRequest, opts ...grpc.CallOption) (*GetServerVersionResponse, error) {
|
|
| 849 |
+ out := new(GetServerVersionResponse) |
|
| 850 |
+ err := grpc.Invoke(ctx, "/types.API/GetServerVersion", in, out, c.cc, opts...) |
|
| 851 |
+ if err != nil {
|
|
| 852 |
+ return nil, err |
|
| 853 |
+ } |
|
| 854 |
+ return out, nil |
|
| 855 |
+} |
|
| 856 |
+ |
|
| 848 | 857 |
func (c *aPIClient) CreateContainer(ctx context.Context, in *CreateContainerRequest, opts ...grpc.CallOption) (*CreateContainerResponse, error) {
|
| 849 | 858 |
out := new(CreateContainerResponse) |
| 850 | 859 |
err := grpc.Invoke(ctx, "/types.API/CreateContainer", in, out, c.cc, opts...) |
| ... | ... |
@@ -970,6 +1008,7 @@ func (c *aPIClient) Stats(ctx context.Context, in *StatsRequest, opts ...grpc.Ca |
| 970 | 970 |
// Server API for API service |
| 971 | 971 |
|
| 972 | 972 |
type APIServer interface {
|
| 973 |
+ GetServerVersion(context.Context, *GetServerVersionRequest) (*GetServerVersionResponse, error) |
|
| 973 | 974 |
CreateContainer(context.Context, *CreateContainerRequest) (*CreateContainerResponse, error) |
| 974 | 975 |
UpdateContainer(context.Context, *UpdateContainerRequest) (*UpdateContainerResponse, error) |
| 975 | 976 |
Signal(context.Context, *SignalRequest) (*SignalResponse, error) |
| ... | ... |
@@ -987,6 +1026,18 @@ func RegisterAPIServer(s *grpc.Server, srv APIServer) {
|
| 987 | 987 |
s.RegisterService(&_API_serviceDesc, srv) |
| 988 | 988 |
} |
| 989 | 989 |
|
| 990 |
+func _API_GetServerVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
|
|
| 991 |
+ in := new(GetServerVersionRequest) |
|
| 992 |
+ if err := dec(in); err != nil {
|
|
| 993 |
+ return nil, err |
|
| 994 |
+ } |
|
| 995 |
+ out, err := srv.(APIServer).GetServerVersion(ctx, in) |
|
| 996 |
+ if err != nil {
|
|
| 997 |
+ return nil, err |
|
| 998 |
+ } |
|
| 999 |
+ return out, nil |
|
| 1000 |
+} |
|
| 1001 |
+ |
|
| 990 | 1002 |
func _API_CreateContainer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
|
| 991 | 1003 |
in := new(CreateContainerRequest) |
| 992 | 1004 |
if err := dec(in); err != nil {
|
| ... | ... |
@@ -1133,6 +1184,10 @@ var _API_serviceDesc = grpc.ServiceDesc{
|
| 1133 | 1133 |
HandlerType: (*APIServer)(nil), |
| 1134 | 1134 |
Methods: []grpc.MethodDesc{
|
| 1135 | 1135 |
{
|
| 1136 |
+ MethodName: "GetServerVersion", |
|
| 1137 |
+ Handler: _API_GetServerVersion_Handler, |
|
| 1138 |
+ }, |
|
| 1139 |
+ {
|
|
| 1136 | 1140 |
MethodName: "CreateContainer", |
| 1137 | 1141 |
Handler: _API_CreateContainer_Handler, |
| 1138 | 1142 |
}, |
| ... | ... |
@@ -1183,144 +1238,148 @@ var _API_serviceDesc = grpc.ServiceDesc{
|
| 1183 | 1183 |
} |
| 1184 | 1184 |
|
| 1185 | 1185 |
var fileDescriptor0 = []byte{
|
| 1186 |
- // 2212 bytes of a gzipped FileDescriptorProto |
|
| 1187 |
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x39, 0x4b, 0x73, 0x1c, 0x49, |
|
| 1188 |
- 0xd1, 0x9e, 0xa7, 0x34, 0x39, 0x0f, 0x49, 0x6d, 0x3d, 0xc6, 0xb3, 0x6b, 0xaf, 0xbf, 0x8e, 0x0f, |
|
| 1189 |
- 0xd6, 0xc0, 0x22, 0x8c, 0xbc, 0x1b, 0x38, 0x20, 0x20, 0x62, 0x2d, 0x1b, 0x30, 0x6b, 0x2d, 0x72, |
|
| 1190 |
- 0x4b, 0x8a, 0xbd, 0x10, 0x31, 0xd1, 0x9a, 0x2e, 0xcf, 0x34, 0xea, 0xe9, 0xee, 0xed, 0xae, 0xd1, |
|
| 1191 |
- 0xe3, 0xc2, 0x11, 0x6e, 0x1c, 0xb9, 0x10, 0xc1, 0x85, 0x1b, 0x77, 0x0e, 0xfc, 0x02, 0xfe, 0x09, |
|
| 1192 |
- 0xb1, 0x3f, 0x81, 0x23, 0x59, 0x95, 0xd5, 0x55, 0xd5, 0xf3, 0x90, 0x96, 0x03, 0xc1, 0x85, 0xcb, |
|
| 1193 |
- 0x44, 0xe5, 0xa3, 0x32, 0xb3, 0xf2, 0x55, 0xd9, 0x35, 0xd0, 0xf2, 0xd3, 0x70, 0x3f, 0xcd, 0x12, |
|
| 1194 |
- 0x9e, 0x38, 0x0d, 0x7e, 0x93, 0xb2, 0xdc, 0xfd, 0x6d, 0x05, 0xb6, 0xcf, 0xd2, 0xc0, 0xe7, 0xec, |
|
| 1195 |
- 0x38, 0x4b, 0x46, 0x2c, 0xcf, 0x3d, 0xf6, 0xe5, 0x8c, 0xe5, 0xdc, 0xe9, 0x41, 0x35, 0x0c, 0xfa, |
|
| 1196 |
- 0x95, 0xc7, 0x95, 0x27, 0x2d, 0x0f, 0x57, 0xce, 0x26, 0xd4, 0x52, 0x44, 0x54, 0x25, 0x42, 0x2c, |
|
| 1197 |
- 0x9d, 0x47, 0x00, 0xa3, 0x28, 0xc9, 0xd9, 0x09, 0x0f, 0xc2, 0xb8, 0x5f, 0x43, 0xc2, 0xba, 0x67, |
|
| 1198 |
- 0x61, 0x9c, 0x6d, 0x68, 0x5c, 0x85, 0x01, 0x9f, 0xf4, 0xeb, 0x48, 0xea, 0x7a, 0x04, 0x38, 0xbb, |
|
| 1199 |
- 0xd0, 0x9c, 0xb0, 0x70, 0x3c, 0xe1, 0xfd, 0x86, 0x44, 0x2b, 0xc8, 0xdd, 0x83, 0x9d, 0x39, 0x3b, |
|
| 1200 |
- 0xf2, 0x34, 0x89, 0x73, 0xe6, 0x7e, 0x55, 0x81, 0xdd, 0xc3, 0x8c, 0x21, 0xe5, 0x30, 0x89, 0xb9, |
|
| 1201 |
- 0x1f, 0xc6, 0x2c, 0x5b, 0x65, 0x23, 0x5a, 0x74, 0x3e, 0x8b, 0x83, 0x88, 0x1d, 0xfb, 0xa8, 0x96, |
|
| 1202 |
- 0x4c, 0xb5, 0x30, 0xd2, 0xe2, 0x09, 0x1b, 0x5d, 0xa4, 0x49, 0x18, 0x73, 0x69, 0x31, 0xd2, 0x0d, |
|
| 1203 |
- 0x46, 0x58, 0x9c, 0xcb, 0xc3, 0xd4, 0x25, 0x89, 0x00, 0x61, 0x31, 0x2e, 0x92, 0x19, 0x59, 0xdc, |
|
| 1204 |
- 0xf2, 0x14, 0xa4, 0xf0, 0x2c, 0xcb, 0xfa, 0x4d, 0x8d, 0x47, 0x48, 0xe0, 0x23, 0xff, 0x9c, 0x45, |
|
| 1205 |
- 0x79, 0x7f, 0xed, 0x71, 0x4d, 0xe0, 0x09, 0x72, 0x1e, 0x43, 0x3b, 0x4e, 0x8e, 0xc3, 0xcb, 0x84, |
|
| 1206 |
- 0x7b, 0x49, 0xc2, 0xfb, 0xeb, 0xd2, 0x61, 0x36, 0xca, 0x7d, 0x0d, 0x7b, 0x0b, 0x27, 0x25, 0x2f, |
|
| 1207 |
- 0x38, 0xfb, 0xd0, 0x1a, 0x15, 0x48, 0x79, 0xe2, 0xf6, 0xc1, 0xe6, 0xbe, 0x0c, 0xe1, 0xbe, 0x61, |
|
| 1208 |
- 0x36, 0x2c, 0x28, 0xaa, 0x7b, 0x12, 0x8e, 0x63, 0x3f, 0xfa, 0xfa, 0xf1, 0x14, 0xe7, 0x91, 0x5b, |
|
| 1209 |
- 0xa4, 0x67, 0x30, 0x32, 0x04, 0xb9, 0x9b, 0xd0, 0x2b, 0x44, 0xa9, 0x90, 0xfc, 0xb5, 0x06, 0x5b, |
|
| 1210 |
- 0x9f, 0x06, 0xc1, 0x1d, 0x19, 0x33, 0x80, 0x75, 0xce, 0xb2, 0x69, 0x28, 0x24, 0x56, 0xe5, 0x61, |
|
| 1211 |
- 0x35, 0xec, 0x7c, 0x00, 0xf5, 0x59, 0x8e, 0x27, 0xa9, 0xc9, 0x93, 0xb4, 0xd5, 0x49, 0xce, 0x10, |
|
| 1212 |
- 0xe5, 0x49, 0x82, 0xe3, 0x40, 0xdd, 0xcf, 0xc6, 0x39, 0x46, 0x42, 0xb8, 0x50, 0xae, 0x85, 0xc9, |
|
| 1213 |
- 0x2c, 0xbe, 0xc4, 0x28, 0x08, 0x94, 0x58, 0x0a, 0xcc, 0xe8, 0x2a, 0x50, 0xfe, 0x17, 0xcb, 0xe2, |
|
| 1214 |
- 0x58, 0x6b, 0xe6, 0x58, 0x3a, 0xa8, 0xeb, 0xcb, 0x83, 0xda, 0x5a, 0x11, 0x54, 0x28, 0x05, 0xd5, |
|
| 1215 |
- 0x85, 0xce, 0xc8, 0x4f, 0xfd, 0xf3, 0x30, 0x0a, 0x79, 0xc8, 0xf2, 0x7e, 0x5b, 0x1a, 0x51, 0xc2, |
|
| 1216 |
- 0x39, 0x4f, 0x60, 0xc3, 0x4f, 0x53, 0x3f, 0x9b, 0x26, 0x19, 0xba, 0xe6, 0x5d, 0x18, 0xb1, 0x7e, |
|
| 1217 |
- 0x47, 0x0a, 0x99, 0x47, 0x0b, 0x69, 0x39, 0x8b, 0xc2, 0x78, 0x76, 0xfd, 0x46, 0xe4, 0x46, 0xbf, |
|
| 1218 |
- 0x2b, 0xd9, 0x4a, 0x38, 0x21, 0x2d, 0x4e, 0x3e, 0x67, 0x57, 0xc7, 0x59, 0x78, 0x89, 0x7b, 0xc6, |
|
| 1219 |
- 0xa8, 0xb4, 0x27, 0xbd, 0x38, 0x8f, 0x76, 0x3e, 0x84, 0xb5, 0x2c, 0x0a, 0xa7, 0x21, 0xcf, 0xfb, |
|
| 1220 |
- 0x1b, 0x68, 0x56, 0xfb, 0xa0, 0xab, 0xfc, 0xe9, 0x49, 0xac, 0x57, 0x50, 0xdd, 0x97, 0xd0, 0x24, |
|
| 1221 |
- 0x94, 0x70, 0xaf, 0x60, 0x51, 0xd1, 0x92, 0x6b, 0x81, 0xcb, 0x93, 0x77, 0x5c, 0xc6, 0xaa, 0xee, |
|
| 1222 |
- 0xc9, 0xb5, 0xc0, 0x4d, 0xfc, 0x2c, 0x90, 0x71, 0x42, 0x9c, 0x58, 0xbb, 0x1e, 0xd4, 0x45, 0xa0, |
|
| 1223 |
- 0x84, 0xab, 0x67, 0x2a, 0xe0, 0x5d, 0x4f, 0x2c, 0x05, 0x66, 0xac, 0x72, 0x0a, 0x31, 0xb8, 0x74, |
|
| 1224 |
- 0xbe, 0x09, 0x3d, 0x3f, 0x08, 0xd0, 0x3d, 0x09, 0x46, 0xfd, 0x67, 0x61, 0x90, 0xa3, 0xa4, 0x1a, |
|
| 1225 |
- 0x12, 0xe7, 0xb0, 0xee, 0x36, 0x38, 0x76, 0x42, 0xa9, 0x3c, 0xfb, 0x95, 0xae, 0x07, 0x5d, 0xa3, |
|
| 1226 |
- 0xab, 0x92, 0xed, 0xfb, 0xa5, 0xd2, 0xae, 0xca, 0xb4, 0xda, 0x2a, 0x0a, 0xc4, 0xec, 0xb6, 0x98, |
|
| 1227 |
- 0xdc, 0x01, 0xf4, 0x17, 0xa5, 0x2b, 0xcd, 0x3f, 0x86, 0xbd, 0x97, 0x2c, 0x62, 0x5f, 0x47, 0x33, |
|
| 1228 |
- 0xba, 0x28, 0xf6, 0xa7, 0x4c, 0x55, 0x92, 0x5c, 0x0b, 0xd1, 0x8b, 0xdb, 0x95, 0xe8, 0x0f, 0x61, |
|
| 1229 |
- 0xe7, 0x4d, 0x98, 0xf3, 0x3b, 0x05, 0xbb, 0xbf, 0x01, 0x30, 0x4c, 0x5a, 0x4d, 0xc5, 0xa8, 0x11, |
|
| 1230 |
- 0x38, 0x76, 0x1d, 0x72, 0x55, 0x5d, 0x72, 0x2d, 0x62, 0xc0, 0x47, 0xa9, 0x6a, 0xc7, 0x62, 0x29, |
|
| 1231 |
- 0xfa, 0xce, 0x2c, 0x0e, 0xaf, 0x4f, 0x92, 0xd1, 0x05, 0xe3, 0xb9, 0xec, 0x6d, 0xd8, 0x77, 0x2c, |
|
| 1232 |
- 0x94, 0x2c, 0x91, 0x09, 0x8b, 0x22, 0xd9, 0xe0, 0xd6, 0x3d, 0x02, 0xdc, 0x23, 0xd8, 0x9d, 0x37, |
|
| 1233 |
- 0x54, 0x35, 0xa3, 0x67, 0xd0, 0x36, 0x7e, 0xcc, 0xd1, 0xa4, 0xda, 0x72, 0x6f, 0xdb, 0x5c, 0xee, |
|
| 1234 |
- 0x23, 0xe8, 0x9c, 0x70, 0xf4, 0xf6, 0xaa, 0xe3, 0x3e, 0x81, 0x9e, 0xee, 0x64, 0x92, 0x91, 0x6a, |
|
| 1235 |
- 0xd1, 0xe7, 0xb3, 0x5c, 0x71, 0x29, 0xc8, 0xfd, 0x5b, 0x0d, 0xd6, 0x54, 0xaa, 0x14, 0xf5, 0x5e, |
|
| 1236 |
- 0x31, 0xf5, 0xfe, 0x5f, 0x69, 0x3b, 0xef, 0x43, 0x2b, 0xbf, 0xc9, 0x39, 0x9b, 0x1e, 0xab, 0xe6, |
|
| 1237 |
- 0xd3, 0xf5, 0x0c, 0xe2, 0x7f, 0x2d, 0xc8, 0xb4, 0xa0, 0xbf, 0x57, 0xa0, 0xa5, 0xc3, 0xfc, 0x6f, |
|
| 1238 |
- 0x5f, 0xe0, 0x1f, 0x41, 0x2b, 0xa5, 0xc0, 0x33, 0xea, 0x24, 0xed, 0x83, 0x9e, 0x52, 0x54, 0xf4, |
|
| 1239 |
- 0x0e, 0xc3, 0x60, 0xe5, 0x4f, 0xdd, 0xce, 0x1f, 0xeb, 0x82, 0x6e, 0x94, 0x2e, 0x68, 0x0c, 0x7e, |
|
| 1240 |
- 0x2a, 0x5a, 0x54, 0x53, 0xb6, 0x28, 0xb9, 0x76, 0xfa, 0x78, 0xb0, 0x59, 0xcc, 0x43, 0xac, 0x3c, |
|
| 1241 |
- 0xba, 0x53, 0x0a, 0xd0, 0xfd, 0x04, 0xd6, 0x8e, 0xfc, 0xd1, 0x04, 0xcf, 0x21, 0x36, 0x8e, 0x52, |
|
| 1242 |
- 0x95, 0xa6, 0xb8, 0x51, 0xac, 0x85, 0x92, 0x29, 0x43, 0x7f, 0xdf, 0xa8, 0x7e, 0xaa, 0x20, 0xf7, |
|
| 1243 |
- 0x02, 0x2f, 0x66, 0x2a, 0x03, 0x55, 0x4c, 0x4f, 0xb1, 0x73, 0x15, 0x0e, 0x29, 0x6a, 0x69, 0xf1, |
|
| 1244 |
- 0x6a, 0xb7, 0x78, 0x30, 0x2c, 0x6b, 0x53, 0xd2, 0xac, 0x1a, 0x5d, 0xe1, 0x03, 0x65, 0x8f, 0x57, |
|
| 1245 |
- 0x90, 0xdd, 0xdf, 0xe1, 0xec, 0x44, 0x53, 0xd5, 0x9d, 0xb3, 0xd3, 0xf2, 0x79, 0x80, 0xdc, 0x57, |
|
| 1246 |
- 0x2b, 0xb9, 0xef, 0x19, 0xb4, 0x32, 0x96, 0x27, 0xb3, 0x0c, 0xdd, 0x2c, 0x3d, 0xdb, 0x3e, 0xd8, |
|
| 1247 |
- 0x29, 0x2a, 0x49, 0xea, 0xf2, 0x14, 0xd5, 0x33, 0x7c, 0xee, 0x57, 0x55, 0xe8, 0x95, 0xa9, 0xa2, |
|
| 1248 |
- 0x2f, 0x9d, 0x47, 0x17, 0x61, 0xf2, 0x05, 0x8d, 0x83, 0xe4, 0x3c, 0x1b, 0x25, 0xaa, 0x0a, 0x7d, |
|
| 1249 |
- 0x79, 0x82, 0xb7, 0x0e, 0x6a, 0xa2, 0x5b, 0xc5, 0x20, 0x14, 0xf5, 0x98, 0x65, 0x61, 0x12, 0xa8, |
|
| 1250 |
- 0x91, 0xc5, 0x20, 0x44, 0x1b, 0x40, 0xe0, 0xed, 0x2c, 0xe1, 0xbe, 0x1a, 0x40, 0x35, 0x2c, 0xe7, |
|
| 1251 |
- 0x40, 0x8c, 0x11, 0xe3, 0x87, 0x22, 0x6a, 0x0d, 0x35, 0x07, 0x6a, 0x8c, 0xa1, 0x1f, 0xb1, 0x69, |
|
| 1252 |
- 0xae, 0xca, 0xdc, 0xc2, 0x08, 0xcb, 0x29, 0x9a, 0x6f, 0x44, 0x52, 0xab, 0x7a, 0xb7, 0x51, 0x42, |
|
| 1253 |
- 0x02, 0x81, 0x27, 0x57, 0x7e, 0x2a, 0xcb, 0xbe, 0xeb, 0x59, 0x18, 0x4c, 0xe4, 0x2d, 0x82, 0xd0, |
|
| 1254 |
- 0x1b, 0x2c, 0xbb, 0xf4, 0xc5, 0x55, 0x28, 0xdb, 0x40, 0xd7, 0x5b, 0x24, 0x08, 0xee, 0x0b, 0x96, |
|
| 1255 |
- 0xc5, 0x2c, 0x3a, 0xb2, 0xb4, 0x02, 0x71, 0x2f, 0x10, 0xdc, 0x07, 0xb0, 0xb7, 0x10, 0x73, 0x75, |
|
| 1256 |
- 0xf7, 0x7c, 0x17, 0xba, 0xaf, 0x2e, 0x19, 0x76, 0xe3, 0x22, 0x0b, 0xd0, 0x87, 0x22, 0x99, 0x31, |
|
| 1257 |
- 0xb2, 0xd3, 0x54, 0x46, 0xa0, 0xee, 0x19, 0x84, 0x9b, 0x43, 0x43, 0xb2, 0x2f, 0x1d, 0x17, 0x28, |
|
| 1258 |
- 0x81, 0xaa, 0x3a, 0x81, 0xca, 0xe9, 0xd2, 0xd5, 0xe9, 0xa2, 0x12, 0xab, 0x6e, 0x12, 0xab, 0xa4, |
|
| 1259 |
- 0xb4, 0x31, 0xaf, 0xf4, 0xf7, 0x55, 0xe8, 0x7c, 0xce, 0xf8, 0x55, 0x92, 0x5d, 0x88, 0x42, 0xc9, |
|
| 1260 |
- 0x97, 0xde, 0x7c, 0x0f, 0x60, 0x3d, 0xbb, 0x1e, 0x9e, 0xdf, 0x70, 0x95, 0x18, 0x75, 0xac, 0xcb, |
|
| 1261 |
- 0xeb, 0x17, 0x02, 0x74, 0x1e, 0x02, 0x20, 0xe9, 0xd8, 0xa7, 0xdb, 0x8e, 0x06, 0x97, 0x56, 0x76, |
|
| 1262 |
- 0xad, 0x10, 0xce, 0x7b, 0xd0, 0xf2, 0xae, 0x87, 0xd8, 0x4f, 0x93, 0x8c, 0xb2, 0xb7, 0xee, 0xa1, |
|
| 1263 |
- 0xa8, 0x57, 0x12, 0x16, 0x7b, 0x91, 0x18, 0x64, 0x49, 0x9a, 0xb2, 0xa0, 0x30, 0x2d, 0xbb, 0x7e, |
|
| 1264 |
- 0x49, 0x08, 0xa1, 0xf5, 0xb4, 0xd0, 0xda, 0x24, 0xad, 0xdc, 0x68, 0x45, 0x52, 0xaa, 0xb4, 0xae, |
|
| 1265 |
- 0xa9, 0x43, 0xd9, 0x5a, 0x4f, 0xb5, 0xd6, 0x75, 0xd2, 0xca, 0x2d, 0xad, 0xa7, 0x46, 0x6b, 0xab, |
|
| 1266 |
- 0xd8, 0xab, 0xb4, 0xba, 0x7f, 0xa9, 0xc0, 0x3a, 0xa6, 0xe5, 0x59, 0xee, 0x8f, 0x19, 0xde, 0x60, |
|
| 1267 |
- 0x6d, 0x8e, 0x29, 0x1c, 0x0d, 0x67, 0x02, 0x54, 0x21, 0x03, 0x89, 0x22, 0x86, 0xff, 0x83, 0x4e, |
|
| 1268 |
- 0xca, 0x32, 0x4c, 0x56, 0xc5, 0x51, 0xc5, 0x86, 0x52, 0xf7, 0xda, 0x84, 0x23, 0x96, 0x7d, 0xb8, |
|
| 1269 |
- 0x2f, 0x69, 0xc3, 0x30, 0x1e, 0x52, 0xfa, 0x4c, 0x93, 0x80, 0x29, 0x57, 0x6d, 0x49, 0xd2, 0xeb, |
|
| 1270 |
- 0xf8, 0x33, 0x4d, 0x70, 0xbe, 0x0d, 0x5b, 0x9a, 0x5f, 0xdc, 0x92, 0x92, 0x9b, 0x5c, 0xb7, 0xa1, |
|
| 1271 |
- 0xb8, 0xcf, 0x14, 0x1a, 0x87, 0x96, 0xde, 0xe9, 0x04, 0x3f, 0x30, 0x39, 0x5e, 0x23, 0xe3, 0x97, |
|
| 1272 |
- 0x3e, 0x16, 0x1b, 0x76, 0xd0, 0x54, 0x96, 0x64, 0xae, 0xac, 0x2d, 0x40, 0xe7, 0x3b, 0xb0, 0xc5, |
|
| 1273 |
- 0x89, 0x97, 0x05, 0xc3, 0x82, 0x87, 0xa2, 0xb9, 0xa9, 0x09, 0xc7, 0x8a, 0xf9, 0x1b, 0xd0, 0x33, |
|
| 1274 |
- 0xcc, 0xb2, 0x1f, 0x93, 0xbd, 0x5d, 0x8d, 0x3d, 0x15, 0x5d, 0xf9, 0x8f, 0xe4, 0x2c, 0xca, 0x9c, |
|
| 1275 |
- 0x8f, 0x64, 0x87, 0xb0, 0x5c, 0xd5, 0x3e, 0xd8, 0x28, 0x3a, 0xab, 0x72, 0x86, 0xec, 0x0a, 0xe4, |
|
| 1276 |
- 0x96, 0x9f, 0xc0, 0x06, 0xd7, 0xa6, 0x0f, 0xb1, 0x80, 0x7c, 0xd5, 0x5e, 0x8b, 0xee, 0x56, 0x3e, |
|
| 1277 |
- 0x98, 0xd7, 0xe3, 0xe5, 0x83, 0xa2, 0xe7, 0xe9, 0xca, 0x57, 0x0a, 0xc9, 0xbe, 0x36, 0xe1, 0xa4, |
|
| 1278 |
- 0x0a, 0xf7, 0x47, 0xd0, 0xc2, 0x79, 0x20, 0x27, 0xeb, 0xd0, 0x31, 0xa3, 0x59, 0x96, 0x61, 0x7d, |
|
| 1279 |
- 0x15, 0x8e, 0x51, 0xa0, 0x98, 0x17, 0xe4, 0x75, 0xa9, 0x9c, 0x41, 0x80, 0x9b, 0x00, 0x50, 0x99, |
|
| 1280 |
- 0x4b, 0x6d, 0xc8, 0x63, 0xa7, 0x00, 0x01, 0x22, 0xcf, 0xa6, 0xfe, 0xb5, 0x0e, 0xbd, 0xcc, 0x33, |
|
| 1281 |
- 0x44, 0xd0, 0x01, 0x51, 0xe1, 0x3b, 0x3f, 0x8c, 0x46, 0xea, 0xdb, 0x17, 0x15, 0x2a, 0xd0, 0x28, |
|
| 1282 |
- 0xac, 0xdb, 0x0a, 0xff, 0x5c, 0x85, 0x36, 0x69, 0x24, 0x83, 0x91, 0x6b, 0x84, 0x17, 0x8b, 0x56, |
|
| 1283 |
- 0x29, 0x01, 0xbc, 0xfa, 0x1b, 0x46, 0x9d, 0x19, 0x03, 0x8d, 0xa9, 0x85, 0x6d, 0x78, 0xd1, 0xe5, |
|
| 1284 |
- 0xd8, 0xfb, 0x2c, 0xef, 0x2c, 0xe5, 0x6e, 0x09, 0x26, 0x32, 0xf8, 0x63, 0xe8, 0x50, 0x7e, 0xaa, |
|
| 1285 |
- 0x3d, 0xf5, 0x55, 0x7b, 0xda, 0xc4, 0x46, 0xbb, 0x9e, 0x89, 0x69, 0x0b, 0xed, 0x95, 0xb7, 0x7b, |
|
| 1286 |
- 0xfb, 0xe0, 0x61, 0x89, 0x5d, 0x9e, 0x64, 0x5f, 0xfe, 0xbe, 0x8a, 0x39, 0xb6, 0x59, 0xe2, 0x1d, |
|
| 1287 |
- 0x3c, 0x07, 0x30, 0x48, 0xd1, 0xb3, 0x2e, 0xd8, 0x4d, 0x31, 0x55, 0xe2, 0x52, 0x9c, 0xfd, 0xd2, |
|
| 1288 |
- 0x8f, 0x66, 0x85, 0x53, 0x09, 0xf8, 0x61, 0xf5, 0x79, 0xc5, 0x1d, 0xc1, 0xc6, 0x0b, 0x71, 0x67, |
|
| 1289 |
- 0x59, 0xdb, 0x91, 0x79, 0xea, 0xff, 0x3a, 0xc9, 0x0a, 0x47, 0x49, 0x40, 0x62, 0xc3, 0x18, 0xb1, |
|
| 1290 |
- 0x4a, 0x84, 0x04, 0x44, 0x1b, 0x4d, 0x52, 0x75, 0xc3, 0xe2, 0xca, 0x28, 0xaa, 0x5b, 0x8a, 0xdc, |
|
| 1291 |
- 0x7f, 0xd4, 0x01, 0x8c, 0x16, 0xe7, 0x04, 0x06, 0x61, 0x32, 0x14, 0x17, 0x44, 0x38, 0x62, 0xd4, |
|
| 1292 |
- 0x90, 0x86, 0x19, 0xc3, 0xf4, 0xc9, 0xc3, 0x4b, 0xa6, 0x66, 0x88, 0x5d, 0x75, 0xee, 0x39, 0xe3, |
|
| 1293 |
- 0xbc, 0x3d, 0x84, 0x68, 0xa3, 0xec, 0x5c, 0x5e, 0xb1, 0xcd, 0xf9, 0x05, 0xec, 0x18, 0xa1, 0x81, |
|
| 1294 |
- 0x25, 0xaf, 0x7a, 0xab, 0xbc, 0xfb, 0x5a, 0x5e, 0x60, 0x64, 0xfd, 0x14, 0x10, 0x3d, 0xc4, 0x3b, |
|
| 1295 |
- 0x66, 0x56, 0x92, 0x54, 0xbb, 0x55, 0xd2, 0x56, 0x98, 0xbc, 0x95, 0x3b, 0x8c, 0x9c, 0xb7, 0xf0, |
|
| 1296 |
- 0xc0, 0x3a, 0xa8, 0x28, 0x7b, 0x4b, 0x5a, 0xfd, 0x56, 0x69, 0xbb, 0xda, 0x2e, 0xd1, 0x18, 0x8c, |
|
| 1297 |
- 0xc8, 0xcf, 0x00, 0x29, 0xc3, 0x2b, 0x3f, 0xe4, 0xf3, 0xf2, 0x1a, 0x77, 0x9d, 0xf3, 0x0b, 0xdc, |
|
| 1298 |
- 0x54, 0x16, 0x46, 0xe7, 0x9c, 0xb2, 0x6c, 0x5c, 0x3a, 0x67, 0xf3, 0xae, 0x73, 0x1e, 0xc9, 0x1d, |
|
| 1299 |
- 0x46, 0xce, 0x0b, 0x40, 0xe4, 0xbc, 0x3d, 0x6b, 0xb7, 0x4a, 0xd9, 0x08, 0x93, 0xb2, 0x2d, 0x87, |
|
| 1300 |
- 0xb0, 0x95, 0xb3, 0x11, 0xc7, 0x1b, 0xc5, 0x92, 0xb1, 0x7e, 0xab, 0x8c, 0x4d, 0xb5, 0x41, 0x0b, |
|
| 1301 |
- 0x71, 0xbf, 0x84, 0xce, 0xcf, 0x67, 0x63, 0xc6, 0xa3, 0x73, 0x5d, 0xf3, 0xff, 0xe9, 0x36, 0xf3, |
|
| 1302 |
- 0x4f, 0x6c, 0x33, 0x87, 0xe3, 0x2c, 0x99, 0xa5, 0xa5, 0xae, 0x4d, 0x35, 0xbc, 0xd0, 0xb5, 0x25, |
|
| 1303 |
- 0x8f, 0xec, 0xda, 0xc4, 0xfd, 0x09, 0x74, 0x68, 0x60, 0x52, 0x1b, 0xa8, 0x0b, 0x39, 0x8b, 0x45, |
|
| 1304 |
- 0x5f, 0x0c, 0x68, 0xb4, 0xed, 0x40, 0x0d, 0x9f, 0x6a, 0x57, 0xb9, 0x1b, 0x19, 0x37, 0xe1, 0xd7, |
|
| 1305 |
- 0x87, 0xa9, 0xba, 0xd7, 0xd0, 0x9d, 0x90, 0x6f, 0xd4, 0x2e, 0x4a, 0xc0, 0xff, 0x2f, 0x8c, 0x33, |
|
| 1306 |
- 0x67, 0xd8, 0xb7, 0x7d, 0x48, 0xae, 0xee, 0x4c, 0x6c, 0xb7, 0x7e, 0x0f, 0x40, 0x7c, 0x5e, 0x0c, |
|
| 1307 |
- 0x8b, 0x46, 0x65, 0xbf, 0xe7, 0xe9, 0x1b, 0x02, 0xbf, 0x65, 0x8a, 0xe5, 0xe0, 0x14, 0xb6, 0x16, |
|
| 1308 |
- 0x64, 0x2e, 0x69, 0x53, 0xdf, 0xb2, 0xdb, 0x54, 0xfb, 0xe0, 0xbe, 0x12, 0x69, 0x6f, 0xb5, 0x7b, |
|
| 1309 |
- 0xd7, 0x9f, 0x2a, 0xf4, 0x35, 0xa2, 0x9f, 0x5c, 0x9c, 0xe7, 0xd0, 0x8d, 0x69, 0xf8, 0xd2, 0x01, |
|
| 1310 |
- 0xa8, 0x59, 0x82, 0xec, 0xc1, 0xcc, 0xeb, 0xc4, 0xf6, 0x98, 0x86, 0x81, 0x18, 0x49, 0x0f, 0x2c, |
|
| 1311 |
- 0x0d, 0x84, 0xe5, 0x1c, 0xaf, 0x3d, 0xb2, 0xa2, 0x5d, 0x1a, 0x06, 0x6b, 0xf3, 0xc3, 0xa0, 0x7a, |
|
| 1312 |
- 0x34, 0x58, 0xf5, 0xc6, 0x78, 0xf0, 0x87, 0x26, 0xd4, 0x3e, 0x3d, 0x7e, 0xed, 0x78, 0xb0, 0x31, |
|
| 1313 |
- 0xf7, 0x72, 0xea, 0x14, 0x7d, 0x7f, 0xf9, 0xdb, 0xf1, 0xe0, 0xd1, 0x2a, 0xb2, 0x1a, 0x95, 0xef, |
|
| 1314 |
- 0x09, 0x99, 0x73, 0x73, 0xb4, 0x96, 0xb9, 0xfc, 0x9b, 0x4a, 0xcb, 0x5c, 0x35, 0x7e, 0xdf, 0x73, |
|
| 1315 |
- 0x7e, 0x00, 0x4d, 0x7a, 0x4b, 0x75, 0xb6, 0x15, 0x6f, 0xe9, 0x95, 0x76, 0xb0, 0x33, 0x87, 0xd5, |
|
| 1316 |
- 0x1b, 0xdf, 0x40, 0xb7, 0xf4, 0x3c, 0xee, 0xbc, 0x57, 0xd2, 0x55, 0x7e, 0x8a, 0x1d, 0xbc, 0xbf, |
|
| 1317 |
- 0x9c, 0xa8, 0xa5, 0x1d, 0x02, 0x98, 0xe7, 0x36, 0xa7, 0xaf, 0xb8, 0x17, 0x9e, 0x74, 0x07, 0x0f, |
|
| 1318 |
- 0x96, 0x50, 0xb4, 0x90, 0x33, 0xd8, 0x9c, 0x7f, 0x3f, 0x73, 0xe6, 0xbc, 0x3a, 0xff, 0xc6, 0x35, |
|
| 1319 |
- 0xf8, 0x60, 0x25, 0xdd, 0x16, 0x3b, 0xff, 0x76, 0xa6, 0xc5, 0xae, 0x78, 0x93, 0xd3, 0x62, 0x57, |
|
| 1320 |
- 0x3e, 0xba, 0xdd, 0x73, 0x7e, 0x09, 0xbd, 0xf2, 0x6b, 0x96, 0x53, 0x38, 0x69, 0xe9, 0x6b, 0xdc, |
|
| 1321 |
- 0xe0, 0xe1, 0x0a, 0xaa, 0x16, 0xf8, 0x31, 0x34, 0xe8, 0x99, 0xaa, 0xa8, 0x0d, 0xfb, 0x75, 0x6b, |
|
| 1322 |
- 0xb0, 0x5d, 0x46, 0xea, 0x5d, 0x4f, 0xa1, 0x49, 0x5f, 0x60, 0x3a, 0x01, 0x4a, 0x1f, 0x64, 0x83, |
|
| 1323 |
- 0x8e, 0x8d, 0x75, 0xef, 0x3d, 0xad, 0x14, 0x7a, 0xf2, 0x92, 0x9e, 0x7c, 0x99, 0x1e, 0x2b, 0x38, |
|
| 1324 |
- 0xe7, 0x4d, 0xf9, 0x2f, 0xcf, 0xb3, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0x9a, 0x70, 0x70, 0x7d, |
|
| 1325 |
- 0xf2, 0x19, 0x00, 0x00, |
|
| 1186 |
+ // 2285 bytes of a gzipped FileDescriptorProto |
|
| 1187 |
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x19, 0xcb, 0x72, 0x1c, 0x49, |
|
| 1188 |
+ 0xd1, 0xf3, 0x94, 0x26, 0xe7, 0x21, 0xa9, 0xfd, 0xd0, 0x78, 0x76, 0xed, 0x35, 0x1d, 0xc0, 0x1a, |
|
| 1189 |
+ 0x58, 0x84, 0x91, 0x77, 0x03, 0x07, 0x04, 0x44, 0xac, 0x65, 0xb3, 0x98, 0xb5, 0x16, 0xb9, 0x25, |
|
| 1190 |
+ 0xb1, 0x17, 0x22, 0x26, 0x5a, 0x33, 0xe5, 0x99, 0x46, 0x33, 0xdd, 0xbd, 0xdd, 0x35, 0xd2, 0xe8, |
|
| 1191 |
+ 0xc2, 0x11, 0x6e, 0xfc, 0x00, 0x11, 0x5c, 0xb8, 0x71, 0xe7, 0xc0, 0x17, 0xf0, 0x27, 0xc4, 0x5e, |
|
| 1192 |
+ 0xb8, 0x73, 0x24, 0xab, 0x32, 0xbb, 0xba, 0x7a, 0x1e, 0xd2, 0x72, 0x20, 0xb8, 0xec, 0x65, 0xa2, |
|
| 1193 |
+ 0x32, 0x2b, 0x2b, 0x33, 0x2b, 0xdf, 0x5d, 0x03, 0x0d, 0x3f, 0x0e, 0xf6, 0xe2, 0x24, 0x92, 0x91, |
|
| 1194 |
+ 0x53, 0x93, 0x57, 0xb1, 0x48, 0xdd, 0xfb, 0xb0, 0xfb, 0x89, 0x90, 0xc7, 0x22, 0xb9, 0x10, 0xc9, |
|
| 1195 |
+ 0xaf, 0x45, 0x92, 0x06, 0x51, 0xe8, 0x89, 0x2f, 0x66, 0x22, 0x95, 0xee, 0x1c, 0xba, 0xcb, 0x5b, |
|
| 1196 |
+ 0x69, 0x1c, 0x85, 0xa9, 0x70, 0xee, 0x40, 0x6d, 0xea, 0xff, 0x36, 0x4a, 0xba, 0xa5, 0x47, 0xa5, |
|
| 1197 |
+ 0xc7, 0x6d, 0x8f, 0x00, 0x8d, 0x0d, 0x42, 0xc4, 0x96, 0x19, 0xab, 0x00, 0x85, 0x8d, 0x7d, 0x39, |
|
| 1198 |
+ 0x18, 0x77, 0x2b, 0x84, 0xd5, 0x80, 0xd3, 0x83, 0xcd, 0x44, 0x5c, 0x04, 0x8a, 0x6b, 0xb7, 0x8a, |
|
| 1199 |
+ 0x1b, 0x0d, 0xcf, 0xc0, 0xee, 0xef, 0x4b, 0x70, 0xe7, 0x34, 0x1e, 0xfa, 0x52, 0x1c, 0x25, 0xd1, |
|
| 1200 |
+ 0x40, 0xa4, 0x29, 0xab, 0xe4, 0x74, 0xa0, 0x1c, 0x0c, 0xb5, 0xcc, 0x86, 0x87, 0x2b, 0x67, 0x1b, |
|
| 1201 |
+ 0x2a, 0x31, 0x22, 0xca, 0x1a, 0xa1, 0x96, 0xce, 0x43, 0x80, 0xc1, 0x24, 0x4a, 0xc5, 0xb1, 0x1c, |
|
| 1202 |
+ 0x06, 0xa1, 0x96, 0xb8, 0xe9, 0x59, 0x18, 0xa5, 0xcc, 0x65, 0x30, 0x94, 0x63, 0x2d, 0x13, 0x95, |
|
| 1203 |
+ 0xd1, 0x80, 0x73, 0x0f, 0xea, 0x63, 0x11, 0x8c, 0xc6, 0xb2, 0x5b, 0xd3, 0x68, 0x86, 0xdc, 0x5d, |
|
| 1204 |
+ 0xb8, 0xbb, 0xa0, 0x07, 0xdd, 0xdf, 0xfd, 0xb2, 0x04, 0xf7, 0x0e, 0x12, 0x81, 0x3b, 0x07, 0x51, |
|
| 1205 |
+ 0x28, 0xfd, 0x20, 0x14, 0xc9, 0x3a, 0x1d, 0x51, 0xa3, 0xb3, 0x59, 0x38, 0x9c, 0x88, 0x23, 0x1f, |
|
| 1206 |
+ 0xc5, 0x92, 0xaa, 0x16, 0x46, 0x6b, 0x3c, 0x16, 0x83, 0xf3, 0x38, 0x0a, 0x42, 0xa9, 0x35, 0xc6, |
|
| 1207 |
+ 0xfd, 0x1c, 0xa3, 0x34, 0x4e, 0xf5, 0x65, 0xc8, 0x4a, 0x04, 0x28, 0x8d, 0x71, 0x11, 0xcd, 0x48, |
|
| 1208 |
+ 0xe3, 0x86, 0xc7, 0x10, 0xe3, 0x45, 0x92, 0x74, 0xeb, 0x06, 0x8f, 0x90, 0xc2, 0x4f, 0xfc, 0x33, |
|
| 1209 |
+ 0x31, 0x49, 0xbb, 0x1b, 0x8f, 0x2a, 0x0a, 0x4f, 0x90, 0xf3, 0x08, 0x9a, 0x61, 0x74, 0x14, 0x5c, |
|
| 1210 |
+ 0x44, 0xd2, 0x8b, 0x22, 0xd9, 0xdd, 0xd4, 0x06, 0xb3, 0x51, 0xee, 0x2b, 0xd8, 0x5d, 0xba, 0x29, |
|
| 1211 |
+ 0x47, 0xc1, 0x1e, 0x34, 0x06, 0x19, 0x52, 0xdf, 0xb8, 0xb9, 0xbf, 0xbd, 0xa7, 0xe3, 0x6a, 0x2f, |
|
| 1212 |
+ 0x27, 0xce, 0x49, 0x90, 0x55, 0xfb, 0x38, 0x18, 0x85, 0xfe, 0xe4, 0xab, 0xfb, 0x53, 0xdd, 0x47, |
|
| 1213 |
+ 0x1f, 0xe1, 0xe8, 0x61, 0xc8, 0xdd, 0x86, 0x4e, 0xc6, 0x8a, 0x5d, 0xf2, 0xb7, 0x0a, 0xec, 0x7c, |
|
| 1214 |
+ 0x3c, 0x1c, 0xde, 0x10, 0x31, 0x18, 0x76, 0x52, 0x24, 0x18, 0x98, 0xc8, 0xb1, 0xac, 0x2f, 0x6b, |
|
| 1215 |
+ 0x60, 0xe7, 0x3d, 0xa8, 0xce, 0x52, 0xbc, 0x49, 0x45, 0xdf, 0xa4, 0xc9, 0x37, 0x39, 0x45, 0x94, |
|
| 1216 |
+ 0xa7, 0x37, 0x1c, 0x07, 0xaa, 0x7e, 0x32, 0x4a, 0xd1, 0x13, 0xca, 0x84, 0x7a, 0xad, 0x54, 0x16, |
|
| 1217 |
+ 0xe1, 0x05, 0x7a, 0x41, 0xa1, 0xd4, 0x52, 0x61, 0x06, 0x97, 0x43, 0xb6, 0xbf, 0x5a, 0x66, 0xd7, |
|
| 1218 |
+ 0xda, 0xc8, 0xaf, 0x65, 0x9c, 0xba, 0xb9, 0xda, 0xa9, 0x8d, 0x35, 0x4e, 0x85, 0x82, 0x53, 0x5d, |
|
| 1219 |
+ 0x68, 0x0d, 0xfc, 0xd8, 0x3f, 0x0b, 0x26, 0x81, 0x0c, 0x44, 0xda, 0x6d, 0x6a, 0x25, 0x0a, 0x38, |
|
| 1220 |
+ 0xe7, 0x31, 0x6c, 0xf9, 0x71, 0xec, 0x27, 0xd3, 0x28, 0x41, 0xd3, 0xbc, 0x0d, 0x26, 0xa2, 0xdb, |
|
| 1221 |
+ 0xd2, 0x4c, 0x16, 0xd1, 0x8a, 0x5b, 0x2a, 0x26, 0x41, 0x38, 0x9b, 0xbf, 0x56, 0xb1, 0xd1, 0x6d, |
|
| 1222 |
+ 0x6b, 0xb2, 0x02, 0x4e, 0x71, 0x0b, 0xa3, 0xcf, 0xc4, 0xe5, 0x51, 0x12, 0x5c, 0xe0, 0x99, 0x11, |
|
| 1223 |
+ 0x0a, 0xed, 0x68, 0x2b, 0x2e, 0xa2, 0x9d, 0xf7, 0x61, 0x23, 0x99, 0x04, 0xd3, 0x40, 0xa6, 0xdd, |
|
| 1224 |
+ 0x2d, 0x54, 0xab, 0xb9, 0xdf, 0x66, 0x7b, 0x7a, 0x1a, 0xeb, 0x65, 0xbb, 0xee, 0x0b, 0xa8, 0x13, |
|
| 1225 |
+ 0x4a, 0x99, 0x57, 0x91, 0xb0, 0xb7, 0xf4, 0x5a, 0xe1, 0xd2, 0xe8, 0xad, 0xd4, 0xbe, 0xaa, 0x7a, |
|
| 1226 |
+ 0x7a, 0xad, 0x70, 0x63, 0x3f, 0x19, 0x6a, 0x3f, 0x21, 0x4e, 0xad, 0x5d, 0x0f, 0xaa, 0xca, 0x51, |
|
| 1227 |
+ 0xca, 0xd4, 0x33, 0x76, 0x78, 0xdb, 0x53, 0x4b, 0x85, 0x19, 0x71, 0x4c, 0x21, 0x06, 0x97, 0xce, |
|
| 1228 |
+ 0xb7, 0xa1, 0xe3, 0x0f, 0x87, 0x68, 0x9e, 0x08, 0xbd, 0xfe, 0x49, 0x30, 0x4c, 0x91, 0x53, 0x05, |
|
| 1229 |
+ 0x37, 0x17, 0xb0, 0xee, 0x1d, 0x70, 0xec, 0x80, 0xe2, 0x38, 0xfb, 0x8d, 0xc9, 0x07, 0x93, 0xa3, |
|
| 1230 |
+ 0xeb, 0x82, 0xed, 0x87, 0x85, 0xd4, 0x2e, 0xeb, 0xb0, 0xda, 0xc9, 0x12, 0x24, 0x3f, 0x6d, 0x11, |
|
| 1231 |
+ 0xb9, 0x3d, 0xe8, 0x2e, 0x73, 0x67, 0xc9, 0x3f, 0x85, 0xdd, 0x17, 0x62, 0x22, 0xbe, 0x8a, 0x64, |
|
| 1232 |
+ 0x34, 0x51, 0xe8, 0x4f, 0x05, 0x67, 0x92, 0x5e, 0x2b, 0xd6, 0xcb, 0xc7, 0x99, 0xf5, 0xfb, 0x70, |
|
| 1233 |
+ 0xf7, 0x75, 0x90, 0xca, 0x1b, 0x19, 0xbb, 0xbf, 0x03, 0xc8, 0x89, 0x8c, 0x98, 0x52, 0x2e, 0x46, |
|
| 1234 |
+ 0xe1, 0xc4, 0x3c, 0x90, 0x9c, 0x5d, 0x7a, 0xad, 0x7c, 0x20, 0x07, 0x31, 0x97, 0x63, 0xb5, 0x54, |
|
| 1235 |
+ 0x75, 0x67, 0x16, 0x06, 0xf3, 0xe3, 0x68, 0x70, 0x2e, 0x64, 0xaa, 0x6b, 0x1b, 0xd6, 0x1d, 0x0b, |
|
| 1236 |
+ 0xa5, 0x53, 0x64, 0x2c, 0x26, 0x13, 0x5d, 0xe0, 0x36, 0x3d, 0x02, 0xdc, 0x43, 0xb8, 0xb7, 0xa8, |
|
| 1237 |
+ 0x28, 0x17, 0xa3, 0xa7, 0xd0, 0xcc, 0xed, 0x98, 0xa2, 0x4a, 0x95, 0xd5, 0xd6, 0xb6, 0xa9, 0xdc, |
|
| 1238 |
+ 0x87, 0xd0, 0x3a, 0x96, 0x68, 0xed, 0x75, 0xd7, 0x7d, 0x0c, 0x1d, 0x53, 0xc9, 0x34, 0x21, 0xe5, |
|
| 1239 |
+ 0xa2, 0x2f, 0x67, 0x29, 0x53, 0x31, 0xe4, 0xfe, 0xbd, 0x02, 0x1b, 0x1c, 0x2a, 0x59, 0xbe, 0x97, |
|
| 1240 |
+ 0xf2, 0x7c, 0xff, 0xbf, 0x94, 0x9d, 0x77, 0xa1, 0x91, 0x5e, 0xa5, 0x52, 0x4c, 0x8f, 0xb8, 0xf8, |
|
| 1241 |
+ 0xb4, 0xbd, 0x1c, 0xf1, 0x75, 0x09, 0xca, 0x4b, 0xd0, 0x3f, 0x4a, 0xd0, 0x30, 0x6e, 0xfe, 0xaf, |
|
| 1242 |
+ 0x1b, 0xf8, 0x07, 0xd0, 0x88, 0xc9, 0xf1, 0x82, 0x2a, 0x49, 0x73, 0xbf, 0xc3, 0x82, 0xb2, 0xda, |
|
| 1243 |
+ 0x91, 0x13, 0x58, 0xf1, 0x53, 0xb5, 0xe3, 0xc7, 0x6a, 0xd0, 0xb5, 0x42, 0x83, 0x46, 0xe7, 0xc7, |
|
| 1244 |
+ 0xaa, 0x44, 0xd5, 0x75, 0x89, 0xd2, 0x6b, 0xa7, 0x8b, 0x17, 0x9b, 0x85, 0x32, 0xc0, 0xcc, 0xa3, |
|
| 1245 |
+ 0x9e, 0x92, 0x81, 0xee, 0x47, 0xb0, 0x71, 0xe8, 0x0f, 0xc6, 0x78, 0x0f, 0x75, 0x70, 0x10, 0x73, |
|
| 1246 |
+ 0x98, 0xe2, 0x41, 0xb5, 0x56, 0x42, 0xa6, 0x02, 0xed, 0x7d, 0xc5, 0xf5, 0x94, 0x21, 0xf7, 0x1c, |
|
| 1247 |
+ 0x1b, 0x33, 0xa5, 0x01, 0x27, 0xd3, 0x13, 0xac, 0x5c, 0x99, 0x41, 0xb2, 0x5c, 0x5a, 0x6e, 0xed, |
|
| 1248 |
+ 0x16, 0x0d, 0xba, 0x65, 0x63, 0x4a, 0x92, 0xb9, 0xd0, 0x65, 0x36, 0x60, 0x7d, 0xbc, 0x6c, 0xdb, |
|
| 1249 |
+ 0xfd, 0x03, 0xce, 0x4e, 0x34, 0x55, 0xdd, 0x38, 0x3b, 0xad, 0x9e, 0x07, 0xc8, 0x7c, 0x95, 0x82, |
|
| 1250 |
+ 0xf9, 0x9e, 0x42, 0x23, 0x11, 0x69, 0x34, 0x4b, 0xd0, 0xcc, 0xda, 0xb2, 0xcd, 0xfd, 0xbb, 0x59, |
|
| 1251 |
+ 0x26, 0x69, 0x59, 0x1e, 0xef, 0x7a, 0x39, 0x9d, 0xfb, 0x65, 0x19, 0x3a, 0xc5, 0x5d, 0x55, 0x97, |
|
| 1252 |
+ 0xce, 0x26, 0xe7, 0x41, 0xf4, 0x39, 0x8d, 0x83, 0x64, 0x3c, 0x1b, 0xa5, 0xb2, 0x0a, 0x6d, 0x79, |
|
| 1253 |
+ 0x8c, 0x5d, 0x07, 0x25, 0x51, 0x57, 0xc9, 0x11, 0xbc, 0x7b, 0x24, 0x92, 0x20, 0x1a, 0xf2, 0xc8, |
|
| 1254 |
+ 0x92, 0x23, 0x54, 0x19, 0x40, 0xe0, 0xcd, 0x2c, 0x92, 0x3e, 0x0f, 0xa0, 0x06, 0xd6, 0x73, 0x20, |
|
| 1255 |
+ 0xfa, 0x48, 0xc8, 0x03, 0xe5, 0xb5, 0x1a, 0xcf, 0x81, 0x06, 0x93, 0xef, 0x1f, 0x8a, 0x69, 0xca, |
|
| 1256 |
+ 0x69, 0x6e, 0x61, 0x94, 0xe6, 0xe4, 0xcd, 0xd7, 0x2a, 0xa8, 0x39, 0xdf, 0x6d, 0x94, 0xe2, 0x40, |
|
| 1257 |
+ 0xe0, 0xf1, 0xa5, 0x1f, 0xeb, 0xb4, 0x6f, 0x7b, 0x16, 0x06, 0x03, 0x79, 0x87, 0x20, 0xb4, 0x06, |
|
| 1258 |
+ 0x4e, 0xfd, 0xbe, 0x6a, 0x85, 0xba, 0x0c, 0xb4, 0xbd, 0xe5, 0x0d, 0x45, 0x7d, 0x2e, 0x92, 0x50, |
|
| 1259 |
+ 0x4c, 0x0e, 0x2d, 0xa9, 0x40, 0xd4, 0x4b, 0x1b, 0xea, 0x3b, 0x63, 0xc9, 0xe7, 0xdc, 0x7b, 0xbe, |
|
| 1260 |
+ 0x0f, 0xed, 0x97, 0x17, 0x02, 0xab, 0x71, 0x16, 0x05, 0x68, 0x43, 0x15, 0xcc, 0xe8, 0xd9, 0x69, |
|
| 1261 |
+ 0xac, 0x3d, 0x50, 0xf5, 0x72, 0x84, 0x9b, 0x42, 0x4d, 0x93, 0xaf, 0x1c, 0x17, 0x28, 0x80, 0xca, |
|
| 1262 |
+ 0x26, 0x80, 0x8a, 0xe1, 0xd2, 0x36, 0xe1, 0xc2, 0x81, 0x55, 0xcd, 0x03, 0xab, 0x20, 0xb4, 0xb6, |
|
| 1263 |
+ 0x28, 0xf4, 0x8f, 0x65, 0x68, 0x7d, 0x26, 0xe4, 0x65, 0x94, 0x9c, 0xab, 0x44, 0x49, 0x57, 0x76, |
|
| 1264 |
+ 0xbe, 0xfb, 0xf8, 0x49, 0x33, 0xef, 0x9f, 0x5d, 0x49, 0x0e, 0x8c, 0x2a, 0xe6, 0xe5, 0xfc, 0xb9, |
|
| 1265 |
+ 0x02, 0x9d, 0x07, 0x00, 0xb8, 0x75, 0xe4, 0x53, 0xb7, 0xa3, 0xc1, 0xa5, 0x91, 0xcc, 0x19, 0xe1, |
|
| 1266 |
+ 0xbc, 0x03, 0x0d, 0x6f, 0xde, 0xc7, 0x7a, 0x1a, 0x25, 0x14, 0xbd, 0x55, 0xfc, 0x1a, 0x9a, 0xbf, |
|
| 1267 |
+ 0xd4, 0xb0, 0x3a, 0x8b, 0x9b, 0xc3, 0x24, 0x8a, 0x63, 0x31, 0xcc, 0x54, 0x4b, 0xe6, 0x2f, 0x08, |
|
| 1268 |
+ 0xa1, 0xa4, 0x9e, 0x64, 0x52, 0xeb, 0x24, 0x55, 0xe6, 0x52, 0x71, 0x2b, 0x66, 0xa9, 0x1b, 0x7c, |
|
| 1269 |
+ 0x29, 0x5b, 0xea, 0x89, 0x91, 0xba, 0x49, 0x52, 0xa5, 0x25, 0xf5, 0x24, 0x97, 0xda, 0xc8, 0xce, |
|
| 1270 |
+ 0xb2, 0x54, 0xf7, 0xaf, 0x25, 0xd8, 0xc4, 0xb0, 0x3c, 0x4d, 0xfd, 0x91, 0xc0, 0x0e, 0xd6, 0x94, |
|
| 1271 |
+ 0x18, 0xc2, 0x93, 0xfe, 0x4c, 0x81, 0xec, 0x32, 0xd0, 0x28, 0x22, 0xf8, 0x06, 0xb4, 0x62, 0x91, |
|
| 1272 |
+ 0x60, 0xb0, 0x32, 0x45, 0x19, 0x0b, 0x4a, 0xd5, 0x6b, 0x12, 0x8e, 0x48, 0xf6, 0xe0, 0xb6, 0xde, |
|
| 1273 |
+ 0xeb, 0x07, 0x61, 0x9f, 0xc2, 0x67, 0x1a, 0x0d, 0x05, 0x9b, 0x6a, 0x47, 0x6f, 0xbd, 0x0a, 0x3f, |
|
| 1274 |
+ 0x35, 0x1b, 0xce, 0x77, 0x61, 0xc7, 0xd0, 0xab, 0x2e, 0xa9, 0xa9, 0xc9, 0x74, 0x5b, 0x4c, 0x7d, |
|
| 1275 |
+ 0xca, 0x68, 0x1c, 0x5a, 0x3a, 0x27, 0x63, 0xfc, 0xea, 0x95, 0xd8, 0x46, 0x46, 0x2f, 0x7c, 0x4c, |
|
| 1276 |
+ 0x36, 0xac, 0xa0, 0xb1, 0x4e, 0xc9, 0x94, 0xb5, 0xcd, 0x40, 0xe7, 0x7b, 0xb0, 0x23, 0x89, 0x56, |
|
| 1277 |
+ 0x0c, 0xfb, 0x19, 0x0d, 0x79, 0x73, 0xdb, 0x6c, 0x1c, 0x31, 0xf1, 0xb7, 0xa0, 0x93, 0x13, 0xeb, |
|
| 1278 |
+ 0x7a, 0x4c, 0xfa, 0xb6, 0x0d, 0xf6, 0x44, 0x55, 0xe5, 0x3f, 0x91, 0xb1, 0x28, 0x72, 0x3e, 0xd0, |
|
| 1279 |
+ 0x15, 0xc2, 0x32, 0x55, 0x73, 0x7f, 0x2b, 0xab, 0xac, 0x6c, 0x0c, 0x5d, 0x15, 0xc8, 0x2c, 0x3f, |
|
| 1280 |
+ 0x83, 0x2d, 0x69, 0x54, 0xef, 0x63, 0x02, 0xf9, 0x5c, 0x5e, 0xb3, 0xea, 0x56, 0xbc, 0x98, 0xd7, |
|
| 1281 |
+ 0x91, 0xc5, 0x8b, 0xa2, 0xe5, 0xa9, 0xe5, 0xb3, 0x40, 0xd2, 0xaf, 0x49, 0x38, 0x2d, 0xc2, 0xfd, |
|
| 1282 |
+ 0x09, 0x34, 0x70, 0x1e, 0x48, 0x49, 0x3b, 0x34, 0xcc, 0x60, 0x96, 0x24, 0x98, 0x5f, 0x99, 0x61, |
|
| 1283 |
+ 0x18, 0x54, 0xf3, 0x82, 0x6e, 0x97, 0x6c, 0x0c, 0x02, 0xdc, 0x08, 0x80, 0xd2, 0x5c, 0x4b, 0x43, |
|
| 1284 |
+ 0x1a, 0x3b, 0x04, 0x08, 0x50, 0x71, 0x36, 0xf5, 0xe7, 0xc6, 0xf5, 0x3a, 0xce, 0x10, 0x41, 0x17, |
|
| 1285 |
+ 0x44, 0x81, 0x6f, 0xfd, 0x60, 0x32, 0xe0, 0x6f, 0x5f, 0x14, 0xc8, 0x60, 0x2e, 0xb0, 0x6a, 0x0b, |
|
| 1286 |
+ 0xfc, 0x4b, 0x19, 0x9a, 0x24, 0x91, 0x14, 0x46, 0xaa, 0x01, 0x36, 0x16, 0x23, 0x52, 0x03, 0xd8, |
|
| 1287 |
+ 0xfa, 0x6b, 0xb9, 0xb8, 0x7c, 0x0c, 0xcc, 0x55, 0xcd, 0x74, 0xc3, 0x46, 0x97, 0x62, 0xed, 0xb3, |
|
| 1288 |
+ 0xac, 0xb3, 0x92, 0xba, 0xa1, 0x88, 0x48, 0xe1, 0x0f, 0xa1, 0x45, 0xf1, 0xc9, 0x67, 0xaa, 0xeb, |
|
| 1289 |
+ 0xce, 0x34, 0x89, 0x8c, 0x4e, 0x3d, 0x55, 0xd3, 0x16, 0xea, 0xab, 0xbb, 0x7b, 0x73, 0xff, 0x41, |
|
| 1290 |
+ 0x81, 0x5c, 0xdf, 0x64, 0x4f, 0xff, 0xbe, 0x0c, 0x25, 0x96, 0x59, 0xa2, 0xed, 0x3d, 0x03, 0xc8, |
|
| 1291 |
+ 0x91, 0xaa, 0x66, 0x9d, 0x8b, 0xab, 0x6c, 0xaa, 0xc4, 0xa5, 0xba, 0xfb, 0x85, 0x3f, 0x99, 0x65, |
|
| 1292 |
+ 0x46, 0x25, 0xe0, 0xc7, 0xe5, 0x67, 0x25, 0x77, 0x00, 0x5b, 0xcf, 0x55, 0xcf, 0xb2, 0x8e, 0x17, |
|
| 1293 |
+ 0x9e, 0x6c, 0xaa, 0x2b, 0x9f, 0x6c, 0xaa, 0xd9, 0x93, 0x0d, 0x96, 0xd1, 0x28, 0xe6, 0x0e, 0x8b, |
|
| 1294 |
+ 0xab, 0x5c, 0x50, 0xd5, 0x12, 0xe4, 0xfe, 0xb3, 0x0a, 0x90, 0x4b, 0x71, 0x8e, 0xa1, 0x17, 0x44, |
|
| 1295 |
+ 0x7d, 0xd5, 0x20, 0x82, 0x81, 0xa0, 0x82, 0xd4, 0x4f, 0x04, 0x86, 0x4f, 0x1a, 0x5c, 0x08, 0x9e, |
|
| 1296 |
+ 0x21, 0xee, 0xf1, 0xbd, 0x17, 0x94, 0xf3, 0x76, 0x11, 0xa2, 0x83, 0xba, 0x72, 0x79, 0xd9, 0x31, |
|
| 1297 |
+ 0xe7, 0x97, 0x70, 0x37, 0x67, 0x3a, 0xb4, 0xf8, 0x95, 0xaf, 0xe5, 0x77, 0xdb, 0xf0, 0x1b, 0xe6, |
|
| 1298 |
+ 0xbc, 0x7e, 0x0e, 0x88, 0xee, 0x63, 0x8f, 0x99, 0x15, 0x38, 0x55, 0xae, 0xe5, 0xb4, 0x13, 0x44, |
|
| 1299 |
+ 0x6f, 0xf4, 0x89, 0x9c, 0xcf, 0x1b, 0xb8, 0x6f, 0x5d, 0x54, 0xa5, 0xbd, 0xc5, 0xad, 0x7a, 0x2d, |
|
| 1300 |
+ 0xb7, 0x7b, 0x46, 0x2f, 0x55, 0x18, 0x72, 0x96, 0x9f, 0x02, 0xee, 0xf4, 0x2f, 0xfd, 0x40, 0x2e, |
|
| 1301 |
+ 0xf2, 0xab, 0xdd, 0x74, 0xcf, 0xcf, 0xf1, 0x50, 0x91, 0x19, 0xdd, 0x73, 0x2a, 0x92, 0x51, 0xe1, |
|
| 1302 |
+ 0x9e, 0xf5, 0x9b, 0xee, 0x79, 0xa8, 0x4f, 0xe4, 0x7c, 0x9e, 0x03, 0x22, 0x17, 0xf5, 0xd9, 0xb8, |
|
| 1303 |
+ 0x96, 0xcb, 0x56, 0x10, 0x15, 0x75, 0x39, 0x80, 0x9d, 0x54, 0x0c, 0x24, 0x76, 0x14, 0x8b, 0xc7, |
|
| 1304 |
+ 0xe6, 0xb5, 0x3c, 0xb6, 0xf9, 0x80, 0x61, 0xe2, 0x7e, 0x01, 0xad, 0x5f, 0xcc, 0x46, 0x42, 0x4e, |
|
| 1305 |
+ 0xce, 0x4c, 0xce, 0xff, 0xaf, 0xcb, 0xcc, 0xbf, 0xb1, 0xcc, 0x1c, 0x8c, 0x92, 0x68, 0x16, 0x17, |
|
| 1306 |
+ 0xaa, 0x36, 0xe5, 0xf0, 0x52, 0xd5, 0xd6, 0x34, 0xba, 0x6a, 0x13, 0xf5, 0x47, 0xd0, 0xa2, 0x81, |
|
| 1307 |
+ 0x89, 0x0f, 0x50, 0x15, 0x72, 0x96, 0x93, 0x3e, 0x1b, 0xd0, 0xe8, 0xd8, 0x3e, 0x0f, 0x9f, 0x7c, |
|
| 1308 |
+ 0xaa, 0x58, 0x8d, 0x72, 0x33, 0xe1, 0xd7, 0x47, 0x9e, 0x75, 0xaf, 0xa0, 0x3d, 0x26, 0xdb, 0xf0, |
|
| 1309 |
+ 0x29, 0x0a, 0xc0, 0x6f, 0x66, 0xca, 0xe5, 0x77, 0xd8, 0xb3, 0x6d, 0x48, 0xa6, 0x6e, 0x8d, 0x6d, |
|
| 1310 |
+ 0xb3, 0xfe, 0x00, 0x40, 0x7d, 0x5e, 0xf4, 0xb3, 0x42, 0x65, 0xbf, 0xe7, 0x99, 0x0e, 0x81, 0xdf, |
|
| 1311 |
+ 0x32, 0xd9, 0xb2, 0x77, 0x02, 0x3b, 0x4b, 0x3c, 0x57, 0x94, 0xa9, 0xef, 0xd8, 0x65, 0xaa, 0xb9, |
|
| 1312 |
+ 0x7f, 0x9b, 0x59, 0xda, 0x47, 0xed, 0xda, 0xf5, 0xe7, 0x12, 0x7d, 0x8d, 0x98, 0x27, 0x17, 0xe7, |
|
| 1313 |
+ 0x19, 0xb4, 0x43, 0x1a, 0xbe, 0x8c, 0x03, 0x2a, 0x16, 0x23, 0x7b, 0x30, 0xf3, 0x5a, 0xa1, 0x3d, |
|
| 1314 |
+ 0xa6, 0xa1, 0x23, 0x06, 0xda, 0x02, 0x2b, 0x1d, 0x61, 0x19, 0xc7, 0x6b, 0x0e, 0x2c, 0x6f, 0x17, |
|
| 1315 |
+ 0x86, 0xc1, 0xca, 0xe2, 0x30, 0xc8, 0x8f, 0x06, 0xeb, 0xde, 0x18, 0xf7, 0xff, 0x55, 0x87, 0xca, |
|
| 1316 |
+ 0xc7, 0x47, 0xaf, 0x9c, 0x53, 0xd8, 0x5e, 0x7c, 0x40, 0x77, 0x1e, 0xb2, 0xe8, 0x35, 0x8f, 0xee, |
|
| 1317 |
+ 0xbd, 0xf7, 0xd6, 0xee, 0xf3, 0xb4, 0x7c, 0xcb, 0xf1, 0x60, 0x6b, 0xe1, 0x41, 0xd6, 0xc9, 0xda, |
|
| 1318 |
+ 0xc9, 0xea, 0x27, 0xe9, 0xde, 0xc3, 0x75, 0xdb, 0x36, 0xcf, 0x85, 0xf1, 0xdc, 0xf0, 0x5c, 0xfd, |
|
| 1319 |
+ 0xa9, 0x66, 0x78, 0xae, 0x9b, 0xea, 0x6f, 0x39, 0x3f, 0x82, 0x3a, 0x3d, 0xd1, 0x3a, 0x77, 0x98, |
|
| 1320 |
+ 0xb6, 0xf0, 0xf8, 0xdb, 0xbb, 0xbb, 0x80, 0x35, 0x07, 0x5f, 0x43, 0xbb, 0xf0, 0xea, 0xee, 0xbc, |
|
| 1321 |
+ 0x53, 0x90, 0x55, 0x7c, 0xe1, 0xed, 0xbd, 0xbb, 0x7a, 0xd3, 0x70, 0x3b, 0x00, 0xc8, 0x5f, 0xf1, |
|
| 1322 |
+ 0x9c, 0x2e, 0x53, 0x2f, 0xbd, 0x14, 0xf7, 0xee, 0xaf, 0xd8, 0x31, 0x4c, 0xd0, 0x95, 0x8b, 0xcf, |
|
| 1323 |
+ 0x72, 0xce, 0x82, 0x55, 0x17, 0x9f, 0xce, 0x8c, 0x2b, 0xd7, 0xbe, 0xe7, 0x69, 0xb6, 0x8b, 0x4f, |
|
| 1324 |
+ 0x72, 0x86, 0xed, 0x9a, 0xa7, 0x3e, 0xc3, 0x76, 0xed, 0x5b, 0xde, 0x2d, 0xe7, 0x57, 0xd0, 0x29, |
|
| 1325 |
+ 0x3e, 0x92, 0x39, 0x99, 0x91, 0x56, 0x3e, 0xf2, 0xf5, 0x1e, 0xac, 0xd9, 0x35, 0x0c, 0x3f, 0x84, |
|
| 1326 |
+ 0x1a, 0xbd, 0x7e, 0x65, 0x29, 0x67, 0x3f, 0x9a, 0xf5, 0xee, 0x14, 0x91, 0xe6, 0xd4, 0x13, 0xa8, |
|
| 1327 |
+ 0xd3, 0x87, 0x9d, 0x09, 0x80, 0xc2, 0x77, 0x5e, 0xaf, 0x65, 0x63, 0xdd, 0x5b, 0x4f, 0x4a, 0x99, |
|
| 1328 |
+ 0x9c, 0xb4, 0x20, 0x27, 0x5d, 0x25, 0xc7, 0x72, 0xce, 0x59, 0x5d, 0xff, 0xa3, 0xf5, 0xf4, 0x3f, |
|
| 1329 |
+ 0x01, 0x00, 0x00, 0xff, 0xff, 0xf0, 0xa3, 0xf6, 0xb8, 0xde, 0x1a, 0x00, 0x00, |
|
| 1326 | 1330 |
} |
| ... | ... |
@@ -3,6 +3,7 @@ syntax = "proto3"; |
| 3 | 3 |
package types; |
| 4 | 4 |
|
| 5 | 5 |
service API {
|
| 6 |
+ rpc GetServerVersion(GetServerVersionRequest) returns (GetServerVersionResponse) {}
|
|
| 6 | 7 |
rpc CreateContainer(CreateContainerRequest) returns (CreateContainerResponse) {}
|
| 7 | 8 |
rpc UpdateContainer(UpdateContainerRequest) returns (UpdateContainerResponse) {}
|
| 8 | 9 |
rpc Signal(SignalRequest) returns (SignalResponse) {}
|
| ... | ... |
@@ -16,6 +17,16 @@ service API {
|
| 16 | 16 |
rpc Stats(StatsRequest) returns (StatsResponse) {}
|
| 17 | 17 |
} |
| 18 | 18 |
|
| 19 |
+message GetServerVersionRequest {
|
|
| 20 |
+} |
|
| 21 |
+ |
|
| 22 |
+message GetServerVersionResponse {
|
|
| 23 |
+ uint32 major = 1; |
|
| 24 |
+ uint32 minor = 2; |
|
| 25 |
+ uint32 patch = 3; |
|
| 26 |
+ string revision = 4; |
|
| 27 |
+} |
|
| 28 |
+ |
|
| 19 | 29 |
message UpdateProcessRequest {
|
| 20 | 30 |
string id = 1; |
| 21 | 31 |
string pid = 2; |
| ... | ... |
@@ -39,5 +39,5 @@ test: install generate-test-pbs |
| 39 | 39 |
generate-test-pbs: |
| 40 | 40 |
make install |
| 41 | 41 |
make -C testdata |
| 42 |
- protoc --go_out=Mtestdata/test.proto=github.com/golang/protobuf/proto/testdata:. proto3_proto/proto3.proto |
|
| 42 |
+ protoc --go_out=Mtestdata/test.proto=github.com/golang/protobuf/proto/testdata,Mgoogle/protobuf/any.proto=github.com/golang/protobuf/ptypes/any:. proto3_proto/proto3.proto |
|
| 43 | 43 |
make |
| ... | ... |
@@ -768,10 +768,11 @@ func (o *Buffer) dec_new_map(p *Properties, base structPointer) error {
|
| 768 | 768 |
} |
| 769 | 769 |
} |
| 770 | 770 |
keyelem, valelem := keyptr.Elem(), valptr.Elem() |
| 771 |
- if !keyelem.IsValid() || !valelem.IsValid() {
|
|
| 772 |
- // We did not decode the key or the value in the map entry. |
|
| 773 |
- // Either way, it's an invalid map entry. |
|
| 774 |
- return fmt.Errorf("proto: bad map data: missing key/val")
|
|
| 771 |
+ if !keyelem.IsValid() {
|
|
| 772 |
+ keyelem = reflect.Zero(p.mtype.Key()) |
|
| 773 |
+ } |
|
| 774 |
+ if !valelem.IsValid() {
|
|
| 775 |
+ valelem = reflect.Zero(p.mtype.Elem()) |
|
| 775 | 776 |
} |
| 776 | 777 |
|
| 777 | 778 |
v.SetMapIndex(keyelem, valelem) |
| ... | ... |
@@ -64,6 +64,10 @@ var ( |
| 64 | 64 |
// a struct with a repeated field containing a nil element. |
| 65 | 65 |
errRepeatedHasNil = errors.New("proto: repeated field has nil element")
|
| 66 | 66 |
|
| 67 |
+ // errOneofHasNil is the error returned if Marshal is called with |
|
| 68 |
+ // a struct with a oneof field containing a nil element. |
|
| 69 |
+ errOneofHasNil = errors.New("proto: oneof field has nil value")
|
|
| 70 |
+ |
|
| 67 | 71 |
// ErrNil is the error returned if Marshal is called with nil. |
| 68 | 72 |
ErrNil = errors.New("proto: Marshal called with nil")
|
| 69 | 73 |
) |
| ... | ... |
@@ -1222,7 +1226,9 @@ func (o *Buffer) enc_struct(prop *StructProperties, base structPointer) error {
|
| 1222 | 1222 |
// Do oneof fields. |
| 1223 | 1223 |
if prop.oneofMarshaler != nil {
|
| 1224 | 1224 |
m := structPointer_Interface(base, prop.stype).(Message) |
| 1225 |
- if err := prop.oneofMarshaler(m, o); err != nil {
|
|
| 1225 |
+ if err := prop.oneofMarshaler(m, o); err == ErrNil {
|
|
| 1226 |
+ return errOneofHasNil |
|
| 1227 |
+ } else if err != nil {
|
|
| 1226 | 1228 |
return err |
| 1227 | 1229 |
} |
| 1228 | 1230 |
} |
| ... | ... |
@@ -50,7 +50,9 @@ Equality is defined in this way: |
| 50 | 50 |
are equal, and extensions sets are equal. |
| 51 | 51 |
- Two set scalar fields are equal iff their values are equal. |
| 52 | 52 |
If the fields are of a floating-point type, remember that |
| 53 |
- NaN != x for all x, including NaN. |
|
| 53 |
+ NaN != x for all x, including NaN. If the message is defined |
|
| 54 |
+ in a proto3 .proto file, fields are not "set"; specifically, |
|
| 55 |
+ zero length proto3 "bytes" fields are equal (nil == {}).
|
|
| 54 | 56 |
- Two repeated fields are equal iff their lengths are the same, |
| 55 | 57 |
and their corresponding elements are equal (a "bytes" field, |
| 56 | 58 |
although represented by []byte, is not a repeated field) |
| ... | ... |
@@ -88,6 +90,7 @@ func Equal(a, b Message) bool {
|
| 88 | 88 |
|
| 89 | 89 |
// v1 and v2 are known to have the same type. |
| 90 | 90 |
func equalStruct(v1, v2 reflect.Value) bool {
|
| 91 |
+ sprop := GetProperties(v1.Type()) |
|
| 91 | 92 |
for i := 0; i < v1.NumField(); i++ {
|
| 92 | 93 |
f := v1.Type().Field(i) |
| 93 | 94 |
if strings.HasPrefix(f.Name, "XXX_") {
|
| ... | ... |
@@ -113,7 +116,7 @@ func equalStruct(v1, v2 reflect.Value) bool {
|
| 113 | 113 |
} |
| 114 | 114 |
f1, f2 = f1.Elem(), f2.Elem() |
| 115 | 115 |
} |
| 116 |
- if !equalAny(f1, f2) {
|
|
| 116 |
+ if !equalAny(f1, f2, sprop.Prop[i]) {
|
|
| 117 | 117 |
return false |
| 118 | 118 |
} |
| 119 | 119 |
} |
| ... | ... |
@@ -140,7 +143,8 @@ func equalStruct(v1, v2 reflect.Value) bool {
|
| 140 | 140 |
} |
| 141 | 141 |
|
| 142 | 142 |
// v1 and v2 are known to have the same type. |
| 143 |
-func equalAny(v1, v2 reflect.Value) bool {
|
|
| 143 |
+// prop may be nil. |
|
| 144 |
+func equalAny(v1, v2 reflect.Value, prop *Properties) bool {
|
|
| 144 | 145 |
if v1.Type() == protoMessageType {
|
| 145 | 146 |
m1, _ := v1.Interface().(Message) |
| 146 | 147 |
m2, _ := v2.Interface().(Message) |
| ... | ... |
@@ -163,7 +167,7 @@ func equalAny(v1, v2 reflect.Value) bool {
|
| 163 | 163 |
if e1.Type() != e2.Type() {
|
| 164 | 164 |
return false |
| 165 | 165 |
} |
| 166 |
- return equalAny(e1, e2) |
|
| 166 |
+ return equalAny(e1, e2, nil) |
|
| 167 | 167 |
case reflect.Map: |
| 168 | 168 |
if v1.Len() != v2.Len() {
|
| 169 | 169 |
return false |
| ... | ... |
@@ -174,16 +178,22 @@ func equalAny(v1, v2 reflect.Value) bool {
|
| 174 | 174 |
// This key was not found in the second map. |
| 175 | 175 |
return false |
| 176 | 176 |
} |
| 177 |
- if !equalAny(v1.MapIndex(key), val2) {
|
|
| 177 |
+ if !equalAny(v1.MapIndex(key), val2, nil) {
|
|
| 178 | 178 |
return false |
| 179 | 179 |
} |
| 180 | 180 |
} |
| 181 | 181 |
return true |
| 182 | 182 |
case reflect.Ptr: |
| 183 |
- return equalAny(v1.Elem(), v2.Elem()) |
|
| 183 |
+ return equalAny(v1.Elem(), v2.Elem(), prop) |
|
| 184 | 184 |
case reflect.Slice: |
| 185 | 185 |
if v1.Type().Elem().Kind() == reflect.Uint8 {
|
| 186 | 186 |
// short circuit: []byte |
| 187 |
+ |
|
| 188 |
+ // Edge case: if this is in a proto3 message, a zero length |
|
| 189 |
+ // bytes field is considered the zero value. |
|
| 190 |
+ if prop != nil && prop.proto3 && v1.Len() == 0 && v2.Len() == 0 {
|
|
| 191 |
+ return true |
|
| 192 |
+ } |
|
| 187 | 193 |
if v1.IsNil() != v2.IsNil() {
|
| 188 | 194 |
return false |
| 189 | 195 |
} |
| ... | ... |
@@ -194,7 +204,7 @@ func equalAny(v1, v2 reflect.Value) bool {
|
| 194 | 194 |
return false |
| 195 | 195 |
} |
| 196 | 196 |
for i := 0; i < v1.Len(); i++ {
|
| 197 |
- if !equalAny(v1.Index(i), v2.Index(i)) {
|
|
| 197 |
+ if !equalAny(v1.Index(i), v2.Index(i), prop) {
|
|
| 198 | 198 |
return false |
| 199 | 199 |
} |
| 200 | 200 |
} |
| ... | ... |
@@ -229,7 +239,7 @@ func equalExtensions(base reflect.Type, em1, em2 map[int32]Extension) bool {
|
| 229 | 229 |
|
| 230 | 230 |
if m1 != nil && m2 != nil {
|
| 231 | 231 |
// Both are unencoded. |
| 232 |
- if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2)) {
|
|
| 232 |
+ if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {
|
|
| 233 | 233 |
return false |
| 234 | 234 |
} |
| 235 | 235 |
continue |
| ... | ... |
@@ -257,7 +267,7 @@ func equalExtensions(base reflect.Type, em1, em2 map[int32]Extension) bool {
|
| 257 | 257 |
log.Printf("proto: badly encoded extension %d of %v: %v", extNum, base, err)
|
| 258 | 258 |
return false |
| 259 | 259 |
} |
| 260 |
- if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2)) {
|
|
| 260 |
+ if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {
|
|
| 261 | 261 |
return false |
| 262 | 262 |
} |
| 263 | 263 |
} |
| ... | ... |
@@ -70,6 +70,12 @@ for a protocol buffer variable v: |
| 70 | 70 |
with distinguished wrapper types for each possible field value. |
| 71 | 71 |
- Marshal and Unmarshal are functions to encode and decode the wire format. |
| 72 | 72 |
|
| 73 |
+When the .proto file specifies `syntax="proto3"`, there are some differences: |
|
| 74 |
+ |
|
| 75 |
+ - Non-repeated fields of non-message type are values instead of pointers. |
|
| 76 |
+ - Getters are only generated for message and oneof fields. |
|
| 77 |
+ - Enum types do not get an Enum method. |
|
| 78 |
+ |
|
| 73 | 79 |
The simplest way to describe this is to see an example. |
| 74 | 80 |
Given file test.proto, containing |
| 75 | 81 |
|
| ... | ... |
@@ -229,6 +235,7 @@ To create and play with a Test object: |
| 229 | 229 |
test := &pb.Test{
|
| 230 | 230 |
Label: proto.String("hello"),
|
| 231 | 231 |
Type: proto.Int32(17), |
| 232 |
+ Reps: []int64{1, 2, 3},
|
|
| 232 | 233 |
Optionalgroup: &pb.Test_OptionalGroup{
|
| 233 | 234 |
RequiredField: proto.String("good bye"),
|
| 234 | 235 |
}, |
| ... | ... |
@@ -881,3 +888,7 @@ func isProto3Zero(v reflect.Value) bool {
|
| 881 | 881 |
} |
| 882 | 882 |
return false |
| 883 | 883 |
} |
| 884 |
+ |
|
| 885 |
+// ProtoPackageIsVersion1 is referenced from generated protocol buffer files |
|
| 886 |
+// to assert that that code is compatible with this version of the proto package. |
|
| 887 |
+const ProtoPackageIsVersion1 = true |
| ... | ... |
@@ -173,6 +173,7 @@ func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order
|
| 173 | 173 |
type Properties struct {
|
| 174 | 174 |
Name string // name of the field, for error messages |
| 175 | 175 |
OrigName string // original name before protocol compiler (always set) |
| 176 |
+ JSONName string // name to use for JSON; determined by protoc |
|
| 176 | 177 |
Wire string |
| 177 | 178 |
WireType int |
| 178 | 179 |
Tag int |
| ... | ... |
@@ -229,8 +230,9 @@ func (p *Properties) String() string {
|
| 229 | 229 |
if p.Packed {
|
| 230 | 230 |
s += ",packed" |
| 231 | 231 |
} |
| 232 |
- if p.OrigName != p.Name {
|
|
| 233 |
- s += ",name=" + p.OrigName |
|
| 232 |
+ s += ",name=" + p.OrigName |
|
| 233 |
+ if p.JSONName != p.OrigName {
|
|
| 234 |
+ s += ",json=" + p.JSONName |
|
| 234 | 235 |
} |
| 235 | 236 |
if p.proto3 {
|
| 236 | 237 |
s += ",proto3" |
| ... | ... |
@@ -310,6 +312,8 @@ func (p *Properties) Parse(s string) {
|
| 310 | 310 |
p.Packed = true |
| 311 | 311 |
case strings.HasPrefix(f, "name="): |
| 312 | 312 |
p.OrigName = f[5:] |
| 313 |
+ case strings.HasPrefix(f, "json="): |
|
| 314 |
+ p.JSONName = f[5:] |
|
| 313 | 315 |
case strings.HasPrefix(f, "enum="): |
| 314 | 316 |
p.Enum = f[5:] |
| 315 | 317 |
case f == "proto3": |
| ... | ... |
@@ -175,7 +175,93 @@ type raw interface {
|
| 175 | 175 |
Bytes() []byte |
| 176 | 176 |
} |
| 177 | 177 |
|
| 178 |
-func writeStruct(w *textWriter, sv reflect.Value) error {
|
|
| 178 |
+func requiresQuotes(u string) bool {
|
|
| 179 |
+ // When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted. |
|
| 180 |
+ for _, ch := range u {
|
|
| 181 |
+ switch {
|
|
| 182 |
+ case ch == '.' || ch == '/' || ch == '_': |
|
| 183 |
+ continue |
|
| 184 |
+ case '0' <= ch && ch <= '9': |
|
| 185 |
+ continue |
|
| 186 |
+ case 'A' <= ch && ch <= 'Z': |
|
| 187 |
+ continue |
|
| 188 |
+ case 'a' <= ch && ch <= 'z': |
|
| 189 |
+ continue |
|
| 190 |
+ default: |
|
| 191 |
+ return true |
|
| 192 |
+ } |
|
| 193 |
+ } |
|
| 194 |
+ return false |
|
| 195 |
+} |
|
| 196 |
+ |
|
| 197 |
+// isAny reports whether sv is a google.protobuf.Any message |
|
| 198 |
+func isAny(sv reflect.Value) bool {
|
|
| 199 |
+ type wkt interface {
|
|
| 200 |
+ XXX_WellKnownType() string |
|
| 201 |
+ } |
|
| 202 |
+ t, ok := sv.Addr().Interface().(wkt) |
|
| 203 |
+ return ok && t.XXX_WellKnownType() == "Any" |
|
| 204 |
+} |
|
| 205 |
+ |
|
| 206 |
+// writeProto3Any writes an expanded google.protobuf.Any message. |
|
| 207 |
+// |
|
| 208 |
+// It returns (false, nil) if sv value can't be unmarshaled (e.g. because |
|
| 209 |
+// required messages are not linked in). |
|
| 210 |
+// |
|
| 211 |
+// It returns (true, error) when sv was written in expanded format or an error |
|
| 212 |
+// was encountered. |
|
| 213 |
+func (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) {
|
|
| 214 |
+ turl := sv.FieldByName("TypeUrl")
|
|
| 215 |
+ val := sv.FieldByName("Value")
|
|
| 216 |
+ if !turl.IsValid() || !val.IsValid() {
|
|
| 217 |
+ return true, errors.New("proto: invalid google.protobuf.Any message")
|
|
| 218 |
+ } |
|
| 219 |
+ |
|
| 220 |
+ b, ok := val.Interface().([]byte) |
|
| 221 |
+ if !ok {
|
|
| 222 |
+ return true, errors.New("proto: invalid google.protobuf.Any message")
|
|
| 223 |
+ } |
|
| 224 |
+ |
|
| 225 |
+ parts := strings.Split(turl.String(), "/") |
|
| 226 |
+ mt := MessageType(parts[len(parts)-1]) |
|
| 227 |
+ if mt == nil {
|
|
| 228 |
+ return false, nil |
|
| 229 |
+ } |
|
| 230 |
+ m := reflect.New(mt.Elem()) |
|
| 231 |
+ if err := Unmarshal(b, m.Interface().(Message)); err != nil {
|
|
| 232 |
+ return false, nil |
|
| 233 |
+ } |
|
| 234 |
+ w.Write([]byte("["))
|
|
| 235 |
+ u := turl.String() |
|
| 236 |
+ if requiresQuotes(u) {
|
|
| 237 |
+ writeString(w, u) |
|
| 238 |
+ } else {
|
|
| 239 |
+ w.Write([]byte(u)) |
|
| 240 |
+ } |
|
| 241 |
+ if w.compact {
|
|
| 242 |
+ w.Write([]byte("]:<"))
|
|
| 243 |
+ } else {
|
|
| 244 |
+ w.Write([]byte("]: <\n"))
|
|
| 245 |
+ w.ind++ |
|
| 246 |
+ } |
|
| 247 |
+ if err := tm.writeStruct(w, m.Elem()); err != nil {
|
|
| 248 |
+ return true, err |
|
| 249 |
+ } |
|
| 250 |
+ if w.compact {
|
|
| 251 |
+ w.Write([]byte("> "))
|
|
| 252 |
+ } else {
|
|
| 253 |
+ w.ind-- |
|
| 254 |
+ w.Write([]byte(">\n"))
|
|
| 255 |
+ } |
|
| 256 |
+ return true, nil |
|
| 257 |
+} |
|
| 258 |
+ |
|
| 259 |
+func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
|
|
| 260 |
+ if tm.ExpandAny && isAny(sv) {
|
|
| 261 |
+ if canExpand, err := tm.writeProto3Any(w, sv); canExpand {
|
|
| 262 |
+ return err |
|
| 263 |
+ } |
|
| 264 |
+ } |
|
| 179 | 265 |
st := sv.Type() |
| 180 | 266 |
sprops := GetProperties(st) |
| 181 | 267 |
for i := 0; i < sv.NumField(); i++ {
|
| ... | ... |
@@ -227,7 +313,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error {
|
| 227 | 227 |
} |
| 228 | 228 |
continue |
| 229 | 229 |
} |
| 230 |
- if err := writeAny(w, v, props); err != nil {
|
|
| 230 |
+ if err := tm.writeAny(w, v, props); err != nil {
|
|
| 231 | 231 |
return err |
| 232 | 232 |
} |
| 233 | 233 |
if err := w.WriteByte('\n'); err != nil {
|
| ... | ... |
@@ -269,7 +355,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error {
|
| 269 | 269 |
return err |
| 270 | 270 |
} |
| 271 | 271 |
} |
| 272 |
- if err := writeAny(w, key, props.mkeyprop); err != nil {
|
|
| 272 |
+ if err := tm.writeAny(w, key, props.mkeyprop); err != nil {
|
|
| 273 | 273 |
return err |
| 274 | 274 |
} |
| 275 | 275 |
if err := w.WriteByte('\n'); err != nil {
|
| ... | ... |
@@ -286,7 +372,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error {
|
| 286 | 286 |
return err |
| 287 | 287 |
} |
| 288 | 288 |
} |
| 289 |
- if err := writeAny(w, val, props.mvalprop); err != nil {
|
|
| 289 |
+ if err := tm.writeAny(w, val, props.mvalprop); err != nil {
|
|
| 290 | 290 |
return err |
| 291 | 291 |
} |
| 292 | 292 |
if err := w.WriteByte('\n'); err != nil {
|
| ... | ... |
@@ -358,7 +444,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error {
|
| 358 | 358 |
} |
| 359 | 359 |
|
| 360 | 360 |
// Enums have a String method, so writeAny will work fine. |
| 361 |
- if err := writeAny(w, fv, props); err != nil {
|
|
| 361 |
+ if err := tm.writeAny(w, fv, props); err != nil {
|
|
| 362 | 362 |
return err |
| 363 | 363 |
} |
| 364 | 364 |
|
| ... | ... |
@@ -370,7 +456,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error {
|
| 370 | 370 |
// Extensions (the XXX_extensions field). |
| 371 | 371 |
pv := sv.Addr() |
| 372 | 372 |
if pv.Type().Implements(extendableProtoType) {
|
| 373 |
- if err := writeExtensions(w, pv); err != nil {
|
|
| 373 |
+ if err := tm.writeExtensions(w, pv); err != nil {
|
|
| 374 | 374 |
return err |
| 375 | 375 |
} |
| 376 | 376 |
} |
| ... | ... |
@@ -400,7 +486,7 @@ func writeRaw(w *textWriter, b []byte) error {
|
| 400 | 400 |
} |
| 401 | 401 |
|
| 402 | 402 |
// writeAny writes an arbitrary field. |
| 403 |
-func writeAny(w *textWriter, v reflect.Value, props *Properties) error {
|
|
| 403 |
+func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error {
|
|
| 404 | 404 |
v = reflect.Indirect(v) |
| 405 | 405 |
|
| 406 | 406 |
// Floats have special cases. |
| ... | ... |
@@ -449,15 +535,15 @@ func writeAny(w *textWriter, v reflect.Value, props *Properties) error {
|
| 449 | 449 |
} |
| 450 | 450 |
} |
| 451 | 451 |
w.indent() |
| 452 |
- if tm, ok := v.Interface().(encoding.TextMarshaler); ok {
|
|
| 453 |
- text, err := tm.MarshalText() |
|
| 452 |
+ if etm, ok := v.Interface().(encoding.TextMarshaler); ok {
|
|
| 453 |
+ text, err := etm.MarshalText() |
|
| 454 | 454 |
if err != nil {
|
| 455 | 455 |
return err |
| 456 | 456 |
} |
| 457 | 457 |
if _, err = w.Write(text); err != nil {
|
| 458 | 458 |
return err |
| 459 | 459 |
} |
| 460 |
- } else if err := writeStruct(w, v); err != nil {
|
|
| 460 |
+ } else if err := tm.writeStruct(w, v); err != nil {
|
|
| 461 | 461 |
return err |
| 462 | 462 |
} |
| 463 | 463 |
w.unindent() |
| ... | ... |
@@ -601,7 +687,7 @@ func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
|
| 601 | 601 |
|
| 602 | 602 |
// writeExtensions writes all the extensions in pv. |
| 603 | 603 |
// pv is assumed to be a pointer to a protocol message struct that is extendable. |
| 604 |
-func writeExtensions(w *textWriter, pv reflect.Value) error {
|
|
| 604 |
+func (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error {
|
|
| 605 | 605 |
emap := extensionMaps[pv.Type().Elem()] |
| 606 | 606 |
ep := pv.Interface().(extendableProto) |
| 607 | 607 |
|
| ... | ... |
@@ -636,13 +722,13 @@ func writeExtensions(w *textWriter, pv reflect.Value) error {
|
| 636 | 636 |
|
| 637 | 637 |
// Repeated extensions will appear as a slice. |
| 638 | 638 |
if !desc.repeated() {
|
| 639 |
- if err := writeExtension(w, desc.Name, pb); err != nil {
|
|
| 639 |
+ if err := tm.writeExtension(w, desc.Name, pb); err != nil {
|
|
| 640 | 640 |
return err |
| 641 | 641 |
} |
| 642 | 642 |
} else {
|
| 643 | 643 |
v := reflect.ValueOf(pb) |
| 644 | 644 |
for i := 0; i < v.Len(); i++ {
|
| 645 |
- if err := writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil {
|
|
| 645 |
+ if err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil {
|
|
| 646 | 646 |
return err |
| 647 | 647 |
} |
| 648 | 648 |
} |
| ... | ... |
@@ -651,7 +737,7 @@ func writeExtensions(w *textWriter, pv reflect.Value) error {
|
| 651 | 651 |
return nil |
| 652 | 652 |
} |
| 653 | 653 |
|
| 654 |
-func writeExtension(w *textWriter, name string, pb interface{}) error {
|
|
| 654 |
+func (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error {
|
|
| 655 | 655 |
if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil {
|
| 656 | 656 |
return err |
| 657 | 657 |
} |
| ... | ... |
@@ -660,7 +746,7 @@ func writeExtension(w *textWriter, name string, pb interface{}) error {
|
| 660 | 660 |
return err |
| 661 | 661 |
} |
| 662 | 662 |
} |
| 663 |
- if err := writeAny(w, reflect.ValueOf(pb), nil); err != nil {
|
|
| 663 |
+ if err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil {
|
|
| 664 | 664 |
return err |
| 665 | 665 |
} |
| 666 | 666 |
if err := w.WriteByte('\n'); err != nil {
|
| ... | ... |
@@ -685,7 +771,15 @@ func (w *textWriter) writeIndent() {
|
| 685 | 685 |
w.complete = false |
| 686 | 686 |
} |
| 687 | 687 |
|
| 688 |
-func marshalText(w io.Writer, pb Message, compact bool) error {
|
|
| 688 |
+// TextMarshaler is a configurable text format marshaler. |
|
| 689 |
+type TextMarshaler struct {
|
|
| 690 |
+ Compact bool // use compact text format (one line). |
|
| 691 |
+ ExpandAny bool // expand google.protobuf.Any messages of known types |
|
| 692 |
+} |
|
| 693 |
+ |
|
| 694 |
+// Marshal writes a given protocol buffer in text format. |
|
| 695 |
+// The only errors returned are from w. |
|
| 696 |
+func (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error {
|
|
| 689 | 697 |
val := reflect.ValueOf(pb) |
| 690 | 698 |
if pb == nil || val.IsNil() {
|
| 691 | 699 |
w.Write([]byte("<nil>"))
|
| ... | ... |
@@ -700,11 +794,11 @@ func marshalText(w io.Writer, pb Message, compact bool) error {
|
| 700 | 700 |
aw := &textWriter{
|
| 701 | 701 |
w: ww, |
| 702 | 702 |
complete: true, |
| 703 |
- compact: compact, |
|
| 703 |
+ compact: tm.Compact, |
|
| 704 | 704 |
} |
| 705 | 705 |
|
| 706 |
- if tm, ok := pb.(encoding.TextMarshaler); ok {
|
|
| 707 |
- text, err := tm.MarshalText() |
|
| 706 |
+ if etm, ok := pb.(encoding.TextMarshaler); ok {
|
|
| 707 |
+ text, err := etm.MarshalText() |
|
| 708 | 708 |
if err != nil {
|
| 709 | 709 |
return err |
| 710 | 710 |
} |
| ... | ... |
@@ -718,7 +812,7 @@ func marshalText(w io.Writer, pb Message, compact bool) error {
|
| 718 | 718 |
} |
| 719 | 719 |
// Dereference the received pointer so we don't have outer < and >. |
| 720 | 720 |
v := reflect.Indirect(val) |
| 721 |
- if err := writeStruct(aw, v); err != nil {
|
|
| 721 |
+ if err := tm.writeStruct(aw, v); err != nil {
|
|
| 722 | 722 |
return err |
| 723 | 723 |
} |
| 724 | 724 |
if bw != nil {
|
| ... | ... |
@@ -727,25 +821,29 @@ func marshalText(w io.Writer, pb Message, compact bool) error {
|
| 727 | 727 |
return nil |
| 728 | 728 |
} |
| 729 | 729 |
|
| 730 |
+// Text is the same as Marshal, but returns the string directly. |
|
| 731 |
+func (tm *TextMarshaler) Text(pb Message) string {
|
|
| 732 |
+ var buf bytes.Buffer |
|
| 733 |
+ tm.Marshal(&buf, pb) |
|
| 734 |
+ return buf.String() |
|
| 735 |
+} |
|
| 736 |
+ |
|
| 737 |
+var ( |
|
| 738 |
+ defaultTextMarshaler = TextMarshaler{}
|
|
| 739 |
+ compactTextMarshaler = TextMarshaler{Compact: true}
|
|
| 740 |
+) |
|
| 741 |
+ |
|
| 742 |
+// TODO: consider removing some of the Marshal functions below. |
|
| 743 |
+ |
|
| 730 | 744 |
// MarshalText writes a given protocol buffer in text format. |
| 731 | 745 |
// The only errors returned are from w. |
| 732 |
-func MarshalText(w io.Writer, pb Message) error {
|
|
| 733 |
- return marshalText(w, pb, false) |
|
| 734 |
-} |
|
| 746 |
+func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) }
|
|
| 735 | 747 |
|
| 736 | 748 |
// MarshalTextString is the same as MarshalText, but returns the string directly. |
| 737 |
-func MarshalTextString(pb Message) string {
|
|
| 738 |
- var buf bytes.Buffer |
|
| 739 |
- marshalText(&buf, pb, false) |
|
| 740 |
- return buf.String() |
|
| 741 |
-} |
|
| 749 |
+func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) }
|
|
| 742 | 750 |
|
| 743 | 751 |
// CompactText writes a given protocol buffer in compact text format (one line). |
| 744 |
-func CompactText(w io.Writer, pb Message) error { return marshalText(w, pb, true) }
|
|
| 752 |
+func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) }
|
|
| 745 | 753 |
|
| 746 | 754 |
// CompactTextString is the same as CompactText, but returns the string directly. |
| 747 |
-func CompactTextString(pb Message) string {
|
|
| 748 |
- var buf bytes.Buffer |
|
| 749 |
- marshalText(&buf, pb, true) |
|
| 750 |
- return buf.String() |
|
| 751 |
-} |
|
| 755 |
+func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) }
|
| ... | ... |
@@ -119,6 +119,14 @@ func isWhitespace(c byte) bool {
|
| 119 | 119 |
return false |
| 120 | 120 |
} |
| 121 | 121 |
|
| 122 |
+func isQuote(c byte) bool {
|
|
| 123 |
+ switch c {
|
|
| 124 |
+ case '"', '\'': |
|
| 125 |
+ return true |
|
| 126 |
+ } |
|
| 127 |
+ return false |
|
| 128 |
+} |
|
| 129 |
+ |
|
| 122 | 130 |
func (p *textParser) skipWhitespace() {
|
| 123 | 131 |
i := 0 |
| 124 | 132 |
for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') {
|
| ... | ... |
@@ -155,7 +163,7 @@ func (p *textParser) advance() {
|
| 155 | 155 |
p.cur.offset, p.cur.line = p.offset, p.line |
| 156 | 156 |
p.cur.unquoted = "" |
| 157 | 157 |
switch p.s[0] {
|
| 158 |
- case '<', '>', '{', '}', ':', '[', ']', ';', ',':
|
|
| 158 |
+ case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/':
|
|
| 159 | 159 |
// Single symbol |
| 160 | 160 |
p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)] |
| 161 | 161 |
case '"', '\'': |
| ... | ... |
@@ -333,13 +341,13 @@ func (p *textParser) next() *token {
|
| 333 | 333 |
p.advance() |
| 334 | 334 |
if p.done {
|
| 335 | 335 |
p.cur.value = "" |
| 336 |
- } else if len(p.cur.value) > 0 && p.cur.value[0] == '"' {
|
|
| 336 |
+ } else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) {
|
|
| 337 | 337 |
// Look for multiple quoted strings separated by whitespace, |
| 338 | 338 |
// and concatenate them. |
| 339 | 339 |
cat := p.cur |
| 340 | 340 |
for {
|
| 341 | 341 |
p.skipWhitespace() |
| 342 |
- if p.done || p.s[0] != '"' {
|
|
| 342 |
+ if p.done || !isQuote(p.s[0]) {
|
|
| 343 | 343 |
break |
| 344 | 344 |
} |
| 345 | 345 |
p.advance() |
| ... | ... |
@@ -443,7 +451,10 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
|
| 443 | 443 |
fieldSet := make(map[string]bool) |
| 444 | 444 |
// A struct is a sequence of "name: value", terminated by one of |
| 445 | 445 |
// '>' or '}', or the end of the input. A name may also be |
| 446 |
- // "[extension]". |
|
| 446 |
+ // "[extension]" or "[type/url]". |
|
| 447 |
+ // |
|
| 448 |
+ // The whole struct can also be an expanded Any message, like: |
|
| 449 |
+ // [type/url] < ... struct contents ... > |
|
| 447 | 450 |
for {
|
| 448 | 451 |
tok := p.next() |
| 449 | 452 |
if tok.err != nil {
|
| ... | ... |
@@ -453,33 +464,66 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
|
| 453 | 453 |
break |
| 454 | 454 |
} |
| 455 | 455 |
if tok.value == "[" {
|
| 456 |
- // Looks like an extension. |
|
| 456 |
+ // Looks like an extension or an Any. |
|
| 457 | 457 |
// |
| 458 | 458 |
// TODO: Check whether we need to handle |
| 459 | 459 |
// namespace rooted names (e.g. ".something.Foo"). |
| 460 |
- tok = p.next() |
|
| 461 |
- if tok.err != nil {
|
|
| 462 |
- return tok.err |
|
| 460 |
+ extName, err := p.consumeExtName() |
|
| 461 |
+ if err != nil {
|
|
| 462 |
+ return err |
|
| 463 |
+ } |
|
| 464 |
+ |
|
| 465 |
+ if s := strings.LastIndex(extName, "/"); s >= 0 {
|
|
| 466 |
+ // If it contains a slash, it's an Any type URL. |
|
| 467 |
+ messageName := extName[s+1:] |
|
| 468 |
+ mt := MessageType(messageName) |
|
| 469 |
+ if mt == nil {
|
|
| 470 |
+ return p.errorf("unrecognized message %q in google.protobuf.Any", messageName)
|
|
| 471 |
+ } |
|
| 472 |
+ tok = p.next() |
|
| 473 |
+ if tok.err != nil {
|
|
| 474 |
+ return tok.err |
|
| 475 |
+ } |
|
| 476 |
+ // consume an optional colon |
|
| 477 |
+ if tok.value == ":" {
|
|
| 478 |
+ tok = p.next() |
|
| 479 |
+ if tok.err != nil {
|
|
| 480 |
+ return tok.err |
|
| 481 |
+ } |
|
| 482 |
+ } |
|
| 483 |
+ var terminator string |
|
| 484 |
+ switch tok.value {
|
|
| 485 |
+ case "<": |
|
| 486 |
+ terminator = ">" |
|
| 487 |
+ case "{":
|
|
| 488 |
+ terminator = "}" |
|
| 489 |
+ default: |
|
| 490 |
+ return p.errorf("expected '{' or '<', found %q", tok.value)
|
|
| 491 |
+ } |
|
| 492 |
+ v := reflect.New(mt.Elem()) |
|
| 493 |
+ if pe := p.readStruct(v.Elem(), terminator); pe != nil {
|
|
| 494 |
+ return pe |
|
| 495 |
+ } |
|
| 496 |
+ b, err := Marshal(v.Interface().(Message)) |
|
| 497 |
+ if err != nil {
|
|
| 498 |
+ return p.errorf("failed to marshal message of type %q: %v", messageName, err)
|
|
| 499 |
+ } |
|
| 500 |
+ sv.FieldByName("TypeUrl").SetString(extName)
|
|
| 501 |
+ sv.FieldByName("Value").SetBytes(b)
|
|
| 502 |
+ continue |
|
| 463 | 503 |
} |
| 504 |
+ |
|
| 464 | 505 |
var desc *ExtensionDesc |
| 465 | 506 |
// This could be faster, but it's functional. |
| 466 | 507 |
// TODO: Do something smarter than a linear scan. |
| 467 | 508 |
for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) {
|
| 468 |
- if d.Name == tok.value {
|
|
| 509 |
+ if d.Name == extName {
|
|
| 469 | 510 |
desc = d |
| 470 | 511 |
break |
| 471 | 512 |
} |
| 472 | 513 |
} |
| 473 | 514 |
if desc == nil {
|
| 474 |
- return p.errorf("unrecognized extension %q", tok.value)
|
|
| 475 |
- } |
|
| 476 |
- // Check the extension terminator. |
|
| 477 |
- tok = p.next() |
|
| 478 |
- if tok.err != nil {
|
|
| 479 |
- return tok.err |
|
| 480 |
- } |
|
| 481 |
- if tok.value != "]" {
|
|
| 482 |
- return p.errorf("unrecognized extension terminator %q", tok.value)
|
|
| 515 |
+ return p.errorf("unrecognized extension %q", extName)
|
|
| 483 | 516 |
} |
| 484 | 517 |
|
| 485 | 518 |
props := &Properties{}
|
| ... | ... |
@@ -635,6 +679,35 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
|
| 635 | 635 |
return reqFieldErr |
| 636 | 636 |
} |
| 637 | 637 |
|
| 638 |
+// consumeExtName consumes extension name or expanded Any type URL and the |
|
| 639 |
+// following ']'. It returns the name or URL consumed. |
|
| 640 |
+func (p *textParser) consumeExtName() (string, error) {
|
|
| 641 |
+ tok := p.next() |
|
| 642 |
+ if tok.err != nil {
|
|
| 643 |
+ return "", tok.err |
|
| 644 |
+ } |
|
| 645 |
+ |
|
| 646 |
+ // If extension name or type url is quoted, it's a single token. |
|
| 647 |
+ if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] {
|
|
| 648 |
+ name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0])) |
|
| 649 |
+ if err != nil {
|
|
| 650 |
+ return "", err |
|
| 651 |
+ } |
|
| 652 |
+ return name, p.consumeToken("]")
|
|
| 653 |
+ } |
|
| 654 |
+ |
|
| 655 |
+ // Consume everything up to "]" |
|
| 656 |
+ var parts []string |
|
| 657 |
+ for tok.value != "]" {
|
|
| 658 |
+ parts = append(parts, tok.value) |
|
| 659 |
+ tok = p.next() |
|
| 660 |
+ if tok.err != nil {
|
|
| 661 |
+ return "", p.errorf("unrecognized type_url or extension name: %s", tok.err)
|
|
| 662 |
+ } |
|
| 663 |
+ } |
|
| 664 |
+ return strings.Join(parts, ""), nil |
|
| 665 |
+} |
|
| 666 |
+ |
|
| 638 | 667 |
// consumeOptionalSeparator consumes an optional semicolon or comma. |
| 639 | 668 |
// It is used in readStruct to provide backward compatibility. |
| 640 | 669 |
func (p *textParser) consumeOptionalSeparator() error {
|
| ... | ... |
@@ -7,6 +7,7 @@ package apparmor |
| 7 | 7 |
// #include <stdlib.h> |
| 8 | 8 |
import "C" |
| 9 | 9 |
import ( |
| 10 |
+ "fmt" |
|
| 10 | 11 |
"io/ioutil" |
| 11 | 12 |
"os" |
| 12 | 13 |
"unsafe" |
| ... | ... |
@@ -32,7 +33,7 @@ func ApplyProfile(name string) error {
|
| 32 | 32 |
cName := C.CString(name) |
| 33 | 33 |
defer C.free(unsafe.Pointer(cName)) |
| 34 | 34 |
if _, err := C.aa_change_onexec(cName); err != nil {
|
| 35 |
- return err |
|
| 35 |
+ return fmt.Errorf("apparmor failed to apply profile: %s", err)
|
|
| 36 | 36 |
} |
| 37 | 37 |
return nil |
| 38 | 38 |
} |
| ... | ... |
@@ -11,6 +11,7 @@ type ThrottlingData struct {
|
| 11 | 11 |
ThrottledTime uint64 `json:"throttled_time,omitempty"` |
| 12 | 12 |
} |
| 13 | 13 |
|
| 14 |
+// CpuUsage denotes the usage of a CPU. |
|
| 14 | 15 |
// All CPU stats are aggregate since container inception. |
| 15 | 16 |
type CpuUsage struct {
|
| 16 | 17 |
// Total CPU time consumed. |
| ... | ... |
@@ -18,11 +18,14 @@ import ( |
| 18 | 18 |
|
| 19 | 19 |
const cgroupNamePrefix = "name=" |
| 20 | 20 |
|
| 21 |
-// https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt |
|
| 21 |
+// https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt |
|
| 22 | 22 |
func FindCgroupMountpoint(subsystem string) (string, error) {
|
| 23 | 23 |
// We are not using mount.GetMounts() because it's super-inefficient, |
| 24 | 24 |
// parsing it directly sped up x10 times because of not using Sscanf. |
| 25 | 25 |
// It was one of two major performance drawbacks in container start. |
| 26 |
+ if !isSubsystemAvailable(subsystem) {
|
|
| 27 |
+ return "", NewNotFoundError(subsystem) |
|
| 28 |
+ } |
|
| 26 | 29 |
f, err := os.Open("/proc/self/mountinfo")
|
| 27 | 30 |
if err != nil {
|
| 28 | 31 |
return "", err |
| ... | ... |
@@ -47,6 +50,9 @@ func FindCgroupMountpoint(subsystem string) (string, error) {
|
| 47 | 47 |
} |
| 48 | 48 |
|
| 49 | 49 |
func FindCgroupMountpointAndRoot(subsystem string) (string, string, error) {
|
| 50 |
+ if !isSubsystemAvailable(subsystem) {
|
|
| 51 |
+ return "", "", NewNotFoundError(subsystem) |
|
| 52 |
+ } |
|
| 50 | 53 |
f, err := os.Open("/proc/self/mountinfo")
|
| 51 | 54 |
if err != nil {
|
| 52 | 55 |
return "", "", err |
| ... | ... |
@@ -70,6 +76,15 @@ func FindCgroupMountpointAndRoot(subsystem string) (string, string, error) {
|
| 70 | 70 |
return "", "", NewNotFoundError(subsystem) |
| 71 | 71 |
} |
| 72 | 72 |
|
| 73 |
+func isSubsystemAvailable(subsystem string) bool {
|
|
| 74 |
+ cgroups, err := ParseCgroupFile("/proc/self/cgroup")
|
|
| 75 |
+ if err != nil {
|
|
| 76 |
+ return false |
|
| 77 |
+ } |
|
| 78 |
+ _, avail := cgroups[subsystem] |
|
| 79 |
+ return avail |
|
| 80 |
+} |
|
| 81 |
+ |
|
| 73 | 82 |
func FindCgroupMountpointDir() (string, error) {
|
| 74 | 83 |
f, err := os.Open("/proc/self/mountinfo")
|
| 75 | 84 |
if err != nil {
|
| ... | ... |
@@ -124,7 +139,8 @@ func (m Mount) GetThisCgroupDir(cgroups map[string]string) (string, error) {
|
| 124 | 124 |
func getCgroupMountsHelper(ss map[string]bool, mi io.Reader) ([]Mount, error) {
|
| 125 | 125 |
res := make([]Mount, 0, len(ss)) |
| 126 | 126 |
scanner := bufio.NewScanner(mi) |
| 127 |
- for scanner.Scan() {
|
|
| 127 |
+ numFound := 0 |
|
| 128 |
+ for scanner.Scan() && numFound < len(ss) {
|
|
| 128 | 129 |
txt := scanner.Text() |
| 129 | 130 |
sepIdx := strings.Index(txt, " - ") |
| 130 | 131 |
if sepIdx == -1 {
|
| ... | ... |
@@ -139,12 +155,15 @@ func getCgroupMountsHelper(ss map[string]bool, mi io.Reader) ([]Mount, error) {
|
| 139 | 139 |
Root: fields[3], |
| 140 | 140 |
} |
| 141 | 141 |
for _, opt := range strings.Split(fields[len(fields)-1], ",") {
|
| 142 |
+ if !ss[opt] {
|
|
| 143 |
+ continue |
|
| 144 |
+ } |
|
| 142 | 145 |
if strings.HasPrefix(opt, cgroupNamePrefix) {
|
| 143 | 146 |
m.Subsystems = append(m.Subsystems, opt[len(cgroupNamePrefix):]) |
| 144 |
- } |
|
| 145 |
- if ss[opt] {
|
|
| 147 |
+ } else {
|
|
| 146 | 148 |
m.Subsystems = append(m.Subsystems, opt) |
| 147 | 149 |
} |
| 150 |
+ numFound++ |
|
| 148 | 151 |
} |
| 149 | 152 |
res = append(res, m) |
| 150 | 153 |
} |
| ... | ... |
@@ -161,19 +180,19 @@ func GetCgroupMounts() ([]Mount, error) {
|
| 161 | 161 |
} |
| 162 | 162 |
defer f.Close() |
| 163 | 163 |
|
| 164 |
- all, err := GetAllSubsystems() |
|
| 164 |
+ all, err := ParseCgroupFile("/proc/self/cgroup")
|
|
| 165 | 165 |
if err != nil {
|
| 166 | 166 |
return nil, err |
| 167 | 167 |
} |
| 168 | 168 |
|
| 169 | 169 |
allMap := make(map[string]bool) |
| 170 |
- for _, s := range all {
|
|
| 170 |
+ for s := range all {
|
|
| 171 | 171 |
allMap[s] = true |
| 172 | 172 |
} |
| 173 | 173 |
return getCgroupMountsHelper(allMap, f) |
| 174 | 174 |
} |
| 175 | 175 |
|
| 176 |
-// Returns all the cgroup subsystems supported by the kernel |
|
| 176 |
+// GetAllSubsystems returns all the cgroup subsystems supported by the kernel |
|
| 177 | 177 |
func GetAllSubsystems() ([]string, error) {
|
| 178 | 178 |
f, err := os.Open("/proc/cgroups")
|
| 179 | 179 |
if err != nil {
|
| ... | ... |
@@ -199,7 +218,7 @@ func GetAllSubsystems() ([]string, error) {
|
| 199 | 199 |
return subsystems, nil |
| 200 | 200 |
} |
| 201 | 201 |
|
| 202 |
-// Returns the relative path to the cgroup docker is running in. |
|
| 202 |
+// GetThisCgroupDir returns the relative path to the cgroup docker is running in. |
|
| 203 | 203 |
func GetThisCgroupDir(subsystem string) (string, error) {
|
| 204 | 204 |
cgroups, err := ParseCgroupFile("/proc/self/cgroup")
|
| 205 | 205 |
if err != nil {
|
| ... | ... |
@@ -33,7 +33,7 @@ type Seccomp struct {
|
| 33 | 33 |
Syscalls []*Syscall `json:"syscalls"` |
| 34 | 34 |
} |
| 35 | 35 |
|
| 36 |
-// An action to be taken upon rule match in Seccomp |
|
| 36 |
+// Action is taken upon rule match in Seccomp |
|
| 37 | 37 |
type Action int |
| 38 | 38 |
|
| 39 | 39 |
const ( |
| ... | ... |
@@ -44,7 +44,7 @@ const ( |
| 44 | 44 |
Trace |
| 45 | 45 |
) |
| 46 | 46 |
|
| 47 |
-// A comparison operator to be used when matching syscall arguments in Seccomp |
|
| 47 |
+// Operator is a comparison operator to be used when matching syscall arguments in Seccomp |
|
| 48 | 48 |
type Operator int |
| 49 | 49 |
|
| 50 | 50 |
const ( |
| ... | ... |
@@ -57,7 +57,7 @@ const ( |
| 57 | 57 |
MaskEqualTo |
| 58 | 58 |
) |
| 59 | 59 |
|
| 60 |
-// A rule to match a specific syscall argument in Seccomp |
|
| 60 |
+// Arg is a rule to match a specific syscall argument in Seccomp |
|
| 61 | 61 |
type Arg struct {
|
| 62 | 62 |
Index uint `json:"index"` |
| 63 | 63 |
Value uint64 `json:"value"` |
| ... | ... |
@@ -65,7 +65,7 @@ type Arg struct {
|
| 65 | 65 |
Op Operator `json:"op"` |
| 66 | 66 |
} |
| 67 | 67 |
|
| 68 |
-// An rule to match a syscall in Seccomp |
|
| 68 |
+// Syscall is a rule to match a syscall in Seccomp |
|
| 69 | 69 |
type Syscall struct {
|
| 70 | 70 |
Name string `json:"name"` |
| 71 | 71 |
Action Action `json:"action"` |
| ... | ... |
@@ -249,10 +249,11 @@ func (hooks Hooks) MarshalJSON() ([]byte, error) {
|
| 249 | 249 |
|
| 250 | 250 |
// HookState is the payload provided to a hook on execution. |
| 251 | 251 |
type HookState struct {
|
| 252 |
- Version string `json:"version"` |
|
| 253 |
- ID string `json:"id"` |
|
| 254 |
- Pid int `json:"pid"` |
|
| 255 |
- Root string `json:"root"` |
|
| 252 |
+ Version string `json:"ociVersion"` |
|
| 253 |
+ ID string `json:"id"` |
|
| 254 |
+ Pid int `json:"pid"` |
|
| 255 |
+ Root string `json:"root"` |
|
| 256 |
+ BundlePath string `json:"bundlePath"` |
|
| 256 | 257 |
} |
| 257 | 258 |
|
| 258 | 259 |
type Hook interface {
|
| ... | ... |
@@ -260,7 +261,7 @@ type Hook interface {
|
| 260 | 260 |
Run(HookState) error |
| 261 | 261 |
} |
| 262 | 262 |
|
| 263 |
-// NewFunctionHooks will call the provided function when the hook is run. |
|
| 263 |
+// NewFunctionHook will call the provided function when the hook is run. |
|
| 264 | 264 |
func NewFunctionHook(f func(HookState) error) FuncHook {
|
| 265 | 265 |
return FuncHook{
|
| 266 | 266 |
run: f, |
| ... | ... |
@@ -283,7 +284,7 @@ type Command struct {
|
| 283 | 283 |
Timeout *time.Duration `json:"timeout"` |
| 284 | 284 |
} |
| 285 | 285 |
|
| 286 |
-// NewCommandHooks will execute the provided command when the hook is run. |
|
| 286 |
+// NewCommandHook will execute the provided command when the hook is run. |
|
| 287 | 287 |
func NewCommandHook(cmd Command) CommandHook {
|
| 288 | 288 |
return CommandHook{
|
| 289 | 289 |
Command: cmd, |
| ... | ... |
@@ -307,7 +308,11 @@ func (c Command) Run(s HookState) error {
|
| 307 | 307 |
} |
| 308 | 308 |
errC := make(chan error, 1) |
| 309 | 309 |
go func() {
|
| 310 |
- errC <- cmd.Run() |
|
| 310 |
+ out, err := cmd.CombinedOutput() |
|
| 311 |
+ if err != nil {
|
|
| 312 |
+ err = fmt.Errorf("%s: %s", err, out)
|
|
| 313 |
+ } |
|
| 314 |
+ errC <- err |
|
| 311 | 315 |
}() |
| 312 | 316 |
if c.Timeout != nil {
|
| 313 | 317 |
select {
|
| ... | ... |
@@ -4,7 +4,7 @@ package configs |
| 4 | 4 |
|
| 5 | 5 |
import "fmt" |
| 6 | 6 |
|
| 7 |
-// Gets the root uid for the process on host which could be non-zero |
|
| 7 |
+// HostUID gets the root uid for the process on host which could be non-zero |
|
| 8 | 8 |
// when user namespaces are enabled. |
| 9 | 9 |
func (c Config) HostUID() (int, error) {
|
| 10 | 10 |
if c.Namespaces.Contains(NEWUSER) {
|
| ... | ... |
@@ -21,7 +21,7 @@ func (c Config) HostUID() (int, error) {
|
| 21 | 21 |
return 0, nil |
| 22 | 22 |
} |
| 23 | 23 |
|
| 24 |
-// Gets the root gid for the process on host which could be non-zero |
|
| 24 |
+// HostGID gets the root gid for the process on host which could be non-zero |
|
| 25 | 25 |
// when user namespaces are enabled. |
| 26 | 26 |
func (c Config) HostGID() (int, error) {
|
| 27 | 27 |
if c.Namespaces.Contains(NEWUSER) {
|
| ... | ... |
@@ -94,6 +94,11 @@ func GetProcessLabel() (string, error) {
|
| 94 | 94 |
return selinux.Getexeccon() |
| 95 | 95 |
} |
| 96 | 96 |
|
| 97 |
+// GetFileLabel returns the label for specified path |
|
| 98 |
+func GetFileLabel(path string) (string, error) {
|
|
| 99 |
+ return selinux.Getfilecon(path) |
|
| 100 |
+} |
|
| 101 |
+ |
|
| 97 | 102 |
// SetFileLabel modifies the "path" label to the specified file label |
| 98 | 103 |
func SetFileLabel(path string, fileLabel string) error {
|
| 99 | 104 |
if selinux.SelinuxEnabled() && fileLabel != "" {
|
| ... | ... |
@@ -102,7 +107,7 @@ func SetFileLabel(path string, fileLabel string) error {
|
| 102 | 102 |
return nil |
| 103 | 103 |
} |
| 104 | 104 |
|
| 105 |
-// Tell the kernel the label for all files to be created |
|
| 105 |
+// SetFileCreateLabel tells the kernel the label for all files to be created |
|
| 106 | 106 |
func SetFileCreateLabel(fileLabel string) error {
|
| 107 | 107 |
if selinux.SelinuxEnabled() {
|
| 108 | 108 |
return selinux.Setfscreatecon(fileLabel) |
| ... | ... |
@@ -110,7 +115,7 @@ func SetFileCreateLabel(fileLabel string) error {
|
| 110 | 110 |
return nil |
| 111 | 111 |
} |
| 112 | 112 |
|
| 113 |
-// Change the label of path to the filelabel string. |
|
| 113 |
+// Relabel changes the label of path to the filelabel string. |
|
| 114 | 114 |
// It changes the MCS label to s0 if shared is true. |
| 115 | 115 |
// This will allow all containers to share the content. |
| 116 | 116 |
func Relabel(path string, fileLabel string, shared bool) error {
|
| ... | ... |
@@ -13,9 +13,9 @@ import ( |
| 13 | 13 |
"regexp" |
| 14 | 14 |
"strconv" |
| 15 | 15 |
"strings" |
| 16 |
+ "sync" |
|
| 16 | 17 |
"syscall" |
| 17 | 18 |
|
| 18 |
- "github.com/docker/docker/pkg/mount" |
|
| 19 | 19 |
"github.com/opencontainers/runc/libcontainer/system" |
| 20 | 20 |
) |
| 21 | 21 |
|
| ... | ... |
@@ -35,6 +35,7 @@ const ( |
| 35 | 35 |
var ( |
| 36 | 36 |
assignRegex = regexp.MustCompile(`^([^=]+)=(.*)$`) |
| 37 | 37 |
mcsList = make(map[string]bool) |
| 38 |
+ mcsLock sync.Mutex |
|
| 38 | 39 |
selinuxfs = "unknown" |
| 39 | 40 |
selinuxEnabled = false // Stores whether selinux is currently enabled |
| 40 | 41 |
selinuxEnabledChecked = false // Stores whether selinux enablement has been checked or established yet |
| ... | ... |
@@ -58,16 +59,31 @@ func getSelinuxMountPoint() string {
|
| 58 | 58 |
} |
| 59 | 59 |
selinuxfs = "" |
| 60 | 60 |
|
| 61 |
- mounts, err := mount.GetMounts() |
|
| 61 |
+ f, err := os.Open("/proc/self/mountinfo")
|
|
| 62 | 62 |
if err != nil {
|
| 63 | 63 |
return selinuxfs |
| 64 | 64 |
} |
| 65 |
- for _, mount := range mounts {
|
|
| 66 |
- if mount.Fstype == "selinuxfs" {
|
|
| 67 |
- selinuxfs = mount.Mountpoint |
|
| 68 |
- break |
|
| 65 |
+ defer f.Close() |
|
| 66 |
+ |
|
| 67 |
+ scanner := bufio.NewScanner(f) |
|
| 68 |
+ for scanner.Scan() {
|
|
| 69 |
+ txt := scanner.Text() |
|
| 70 |
+ // Safe as mountinfo encodes mountpoints with spaces as \040. |
|
| 71 |
+ sepIdx := strings.Index(txt, " - ") |
|
| 72 |
+ if sepIdx == -1 {
|
|
| 73 |
+ continue |
|
| 74 |
+ } |
|
| 75 |
+ if !strings.Contains(txt[sepIdx:], "selinuxfs") {
|
|
| 76 |
+ continue |
|
| 69 | 77 |
} |
| 78 |
+ fields := strings.Split(txt, " ") |
|
| 79 |
+ if len(fields) < 5 {
|
|
| 80 |
+ continue |
|
| 81 |
+ } |
|
| 82 |
+ selinuxfs = fields[4] |
|
| 83 |
+ break |
|
| 70 | 84 |
} |
| 85 |
+ |
|
| 71 | 86 |
if selinuxfs != "" {
|
| 72 | 87 |
var buf syscall.Statfs_t |
| 73 | 88 |
syscall.Statfs(selinuxfs, &buf) |
| ... | ... |
@@ -267,6 +283,8 @@ func SelinuxGetEnforceMode() int {
|
| 267 | 267 |
} |
| 268 | 268 |
|
| 269 | 269 |
func mcsAdd(mcs string) error {
|
| 270 |
+ mcsLock.Lock() |
|
| 271 |
+ defer mcsLock.Unlock() |
|
| 270 | 272 |
if mcsList[mcs] {
|
| 271 | 273 |
return fmt.Errorf("MCS Label already exists")
|
| 272 | 274 |
} |
| ... | ... |
@@ -275,7 +293,9 @@ func mcsAdd(mcs string) error {
|
| 275 | 275 |
} |
| 276 | 276 |
|
| 277 | 277 |
func mcsDelete(mcs string) {
|
| 278 |
+ mcsLock.Lock() |
|
| 278 | 279 |
mcsList[mcs] = false |
| 280 |
+ mcsLock.Unlock() |
|
| 279 | 281 |
} |
| 280 | 282 |
|
| 281 | 283 |
func IntToMcs(id int, catRange uint32) string {
|
| ... | ... |
@@ -291,7 +311,7 @@ func IntToMcs(id int, catRange uint32) string {
|
| 291 | 291 |
|
| 292 | 292 |
for ORD > TIER {
|
| 293 | 293 |
ORD = ORD - TIER |
| 294 |
- TIER -= 1 |
|
| 294 |
+ TIER-- |
|
| 295 | 295 |
} |
| 296 | 296 |
TIER = SETSIZE - TIER |
| 297 | 297 |
ORD = ORD + TIER |
| ... | ... |
@@ -432,7 +452,7 @@ func badPrefix(fpath string) error {
|
| 432 | 432 |
return nil |
| 433 | 433 |
} |
| 434 | 434 |
|
| 435 |
-// Change the fpath file object to the SELinux label scon. |
|
| 435 |
+// Chcon changes the fpath file object to the SELinux label scon. |
|
| 436 | 436 |
// If the fpath is a directory and recurse is true Chcon will walk the |
| 437 | 437 |
// directory tree setting the label |
| 438 | 438 |
func Chcon(fpath string, scon string, recurse bool) error {
|
| ... | ... |
@@ -466,14 +486,14 @@ func DupSecOpt(src string) []string {
|
| 466 | 466 |
con["level"] == "" {
|
| 467 | 467 |
return nil |
| 468 | 468 |
} |
| 469 |
- return []string{"label:user:" + con["user"],
|
|
| 470 |
- "label:role:" + con["role"], |
|
| 471 |
- "label:type:" + con["type"], |
|
| 472 |
- "label:level:" + con["level"]} |
|
| 469 |
+ return []string{"label=user:" + con["user"],
|
|
| 470 |
+ "label=role:" + con["role"], |
|
| 471 |
+ "label=type:" + con["type"], |
|
| 472 |
+ "label=level:" + con["level"]} |
|
| 473 | 473 |
} |
| 474 | 474 |
|
| 475 | 475 |
// DisableSecOpt returns a security opt that can be used to disabling SELinux |
| 476 | 476 |
// labeling support for future container processes |
| 477 | 477 |
func DisableSecOpt() []string {
|
| 478 |
- return []string{"label:disable"}
|
|
| 478 |
+ return []string{"label=disable"}
|
|
| 479 | 479 |
} |
| ... | ... |
@@ -100,17 +100,12 @@ func Setctty() error {
|
| 100 | 100 |
return nil |
| 101 | 101 |
} |
| 102 | 102 |
|
| 103 |
-/* |
|
| 104 |
- * Detect whether we are currently running in a user namespace. |
|
| 105 |
- * Copied from github.com/lxc/lxd/shared/util.go |
|
| 106 |
- */ |
|
| 103 |
+// RunningInUserNS detects whether we are currently running in a user namespace. |
|
| 104 |
+// Copied from github.com/lxc/lxd/shared/util.go |
|
| 107 | 105 |
func RunningInUserNS() bool {
|
| 108 | 106 |
file, err := os.Open("/proc/self/uid_map")
|
| 109 | 107 |
if err != nil {
|
| 110 |
- /* |
|
| 111 |
- * This kernel-provided file only exists if user namespaces are |
|
| 112 |
- * supported |
|
| 113 |
- */ |
|
| 108 |
+ // This kernel-provided file only exists if user namespaces are supported |
|
| 114 | 109 |
return false |
| 115 | 110 |
} |
| 116 | 111 |
defer file.Close() |