Browse Source

beam/examples/beamsh: 'in' chdirs to a directory. 'pass' does simple passthrough

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
Solomon Hykes 11 năm trước cách đây
mục cha
commit
371f6fc63d
1 tập tin đã thay đổi với 21 bổ sung1 xóa
  1. 21 1
      pkg/beam/examples/beamsh/beamsh.go

+ 21 - 1
pkg/beam/examples/beamsh/beamsh.go

@@ -191,7 +191,27 @@ func randomId() string {
 }
 
 func GetHandler(name string) Handler {
-	if name == "exec" {
+	if name == "pass" {
+		return func(args []string, in *net.UnixConn, out *net.UnixConn) {
+			for {
+				payload, attachment, err := beam.Receive(in)
+				if err != nil {
+					return
+				}
+				if err := beam.Send(out, payload, attachment); err != nil {
+					if attachment != nil {
+						attachment.Close()
+					}
+					return
+				}
+			}
+		}
+	} else if name == "in" {
+		return func(args []string, in *net.UnixConn, out *net.UnixConn) {
+			os.Chdir(args[1])
+			GetHandler("pass")([]string{"pass"}, in, out)
+		}
+	} else if name == "exec" {
 		return func(args []string, in *net.UnixConn, out *net.UnixConn) {
 			cmd := exec.Command(args[1], args[2:]...)
 			outR, outW, err := os.Pipe()