initial input support

This commit is contained in:
Hedy Li 2021-07-09 13:42:30 +08:00
parent 8eb1a1cd36
commit 345af74bd1
Signed by: hedy
GPG Key ID: B51B5A8D1B176372
1 changed files with 29 additions and 11 deletions

View File

@ -12,7 +12,7 @@ import (
) )
// SpartanURL parses u and calls SpartanParsedURL with the parsed url // SpartanURL parses u and calls SpartanParsedURL with the parsed url
func SpartanURL(u string) bool { func SpartanURL(u, input string) bool {
parsed, err := url.Parse(u) parsed, err := url.Parse(u)
if parsed.Host == "" { if parsed.Host == "" {
parsed, err = url.Parse("spartan://" + u) parsed, err = url.Parse("spartan://" + u)
@ -24,11 +24,11 @@ func SpartanURL(u string) bool {
if parsed.Scheme != "spartan" { if parsed.Scheme != "spartan" {
fmt.Println("Unsupported scheme") fmt.Println("Unsupported scheme")
} }
return SpartanParsedURL(*parsed) return SpartanParsedURL(*parsed, input)
} }
// SpartanParsedURL fetches u and displays the page // SpartanParsedURL fetches u and displays the page
func SpartanParsedURL(u url.URL) bool { func SpartanParsedURL(u url.URL, input string) bool {
host := u.Host host := u.Host
if u.Port() == "" { if u.Port() == "" {
host += ":300" host += ":300"
@ -46,7 +46,8 @@ func SpartanParsedURL(u url.URL) bool {
if u.Path == "" { if u.Path == "" {
path = "/" path = "/"
} }
conn.Write([]byte(fmt.Sprintf("%s %s 0\r\n", u.Hostname(), path))) conn.Write([]byte(fmt.Sprintf("%s %s %d\r\n", u.Hostname(), path, len(input))))
conn.Write([]byte(input))
// Receive and parse response header // Receive and parse response header
reader := bufio.NewReader(conn) reader := bufio.NewReader(conn)
header, err := reader.ReadString(byte('\n')) header, err := reader.ReadString(byte('\n'))
@ -78,7 +79,8 @@ func SpartanParsedURL(u url.URL) bool {
body := string(bodyBytes) body := string(bodyBytes)
fmt.Print(body) fmt.Print(body)
case 3: case 3:
SpartanURL("spartan://" + u.Host + meta) fmt.Println(u.Host + meta)
SpartanURL("spartan://" + u.Host + meta, "")
case 4: case 4:
fmt.Println("Error: " + meta) fmt.Println("Error: " + meta)
case 5: case 5:
@ -89,11 +91,27 @@ func SpartanParsedURL(u url.URL) bool {
} }
func main() { func main() {
args := os.Args args := os.Args[1:]
if len(args) == 0 || args[1] == "--help" { if len(args) == 0 {
fmt.Println("Usage: <program> [--help] [URL]") fmt.Println("do --help for help")
return
} }
// TODO: support multiple args for i, arg := range args {
SpartanURL(args[1]) if arg == "--help" {
fmt.Println("Usage: <program> [--help] [URL]")
return
}
if arg == "-i" {
if len(args) < i+2 {
fmt.Println("argument needed for -i")
return
}
if i == 0 {
fmt.Println("try this format instead: <program> URL -i INPUT")
return
}
SpartanURL(args[i-1], args[i+1])
return
}
}
SpartanURL(args[0], "")
} }