From ea05d18d829be5b6c617d6e71144349b2abb856d Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Tue, 10 Aug 2021 15:02:08 +0300 Subject: [PATCH] proxy --- README | 2 ++ cmd/proxy/main.go | 57 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 cmd/proxy/main.go diff --git a/README b/README index 8be9670..c71493f 100644 --- a/README +++ b/README @@ -29,5 +29,7 @@ that OpenSSL-dependant ones, or also much more complicated stunnel. disable authentication completely with -name "". -show option prints connection state after handshake and outputs certificates information. +* cmd/proxy: proxy between UCSPI server and UCSPI client + go.cypherpunks.ru/ucspi is free software: see the file COPYING for copying conditions. diff --git a/cmd/proxy/main.go b/cmd/proxy/main.go new file mode 100644 index 0000000..3fd4f77 --- /dev/null +++ b/cmd/proxy/main.go @@ -0,0 +1,57 @@ +/* +ucspi/cmd/tlsc -- UCSPI TLS client +Copyright (C) 2021 Sergey Matveev + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +package main + +import ( + "flag" + "fmt" + "io" + "log" + "os" +) + +func main() { + flag.Usage = func() { + fmt.Fprintln(os.Stderr, "Usage: UCSPIserver [address] UCSPIclient [address] ucspi-proxy") + } + flag.Parse() + log.SetFlags(log.Lshortfile) + + r := os.NewFile(6, "R") + w := os.NewFile(7, "W") + if r == nil { + log.Fatalln("no 6 file descriptor") + } + if w == nil { + log.Fatalln("no 7 file descriptor") + } + copiers := make(chan struct{}) + var err error + go func() { + _, err = io.Copy(w, os.Stdin) + w.Close() + close(copiers) + }() + go func() { + io.Copy(os.Stdout, r) + }() + <-copiers + if err != nil { + log.Fatalln(err) + } +} -- 2.44.0