Created
April 16, 2016 20:28
-
-
Save empijei/b1586fdfb27d51956713af298988ed61 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"bufio" | |
"flag" | |
"fmt" | |
"net" | |
"os" | |
"strconv" | |
"strings" | |
) | |
const invalidMorse = "3omfmpc5pax8us3y67aasu" | |
const validMorse = "1kgv0qzpgvyt94ip" | |
var stone = map[string]string{"a": ".-", "b": "-...", "c": "-.-.", "d": "-..", "e": ".", "f": "..-.", "g": "--.", "h": "....", "i": "..", "j": ".---", "k": "-.-", "l": ".-..", "m": "--", "n": "-.", "o": "---", "p": ".--.", "q": "--.-", "r": ".-.", "s": "...", "t": "-", "u": "..-", "v": "...-", "w": ".--", "x": "-..-", "y": "-.--", "z": "--..", "0": "-----", "1": ".----", "2": "..---", "3": "...--", "4": "....-", "5": ".....", "6": "-....", "7": "--...", "8": "---..", "9": "----."} | |
var morse map[string]string | |
var brutal = flag.Int("brutal", -1, "this is to collect charaters") | |
var uppercase = flag.Bool("uppercase", false, "this is to use uppercase letters in decoding") | |
var encode = flag.String("encode", "", "This will encode the given string and exit") | |
var decode = flag.String("decode", "", "This will decode the given string and exit") | |
func init() { | |
morse = make(map[string]string) | |
for key, val := range stone { | |
morse[val] = key | |
} | |
flag.Parse() | |
} | |
func main() { | |
if *brutal > 0 { | |
brutalReader() | |
return | |
} | |
if len(*decode) > 0 { | |
fmt.Println(morseToAlph(*decode)) | |
return | |
} | |
if len(*encode) > 0 { | |
fmt.Println(alphToMorse(*encode)) | |
return | |
} | |
interactive() | |
} | |
func interactive() { | |
conn, err := net.Dial("tcp", "morset.pwning.xxx:11821") | |
if err != nil { | |
fmt.Println(err) | |
return | |
} | |
remoteReader := bufio.NewReader(conn) | |
stdin := bufio.NewReader(os.Stdin) | |
for { | |
line, err := remoteReader.ReadString('\n') | |
if err != nil { | |
fmt.Println(err) | |
break | |
} | |
fmt.Println(line) | |
fmt.Println(morseToAlph(line[:len(line)-1])) | |
prompt() | |
input, _ := stdin.ReadString('\n') | |
morseString := alphToMorse(input) | |
morseString += "\n" | |
i, _ := fmt.Fprintf(conn, morseString) | |
fmt.Println("Sending " + morseString + "(" + input[:len(input)-1] + ")" + strconv.Itoa(i) + "Bytes written") | |
if err != nil { | |
fmt.Println(err) | |
break | |
} | |
} | |
} | |
func brutalReader() { | |
file, err := os.OpenFile("./out.log", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0660) | |
if err != nil { | |
fmt.Println(err) | |
return | |
} | |
defer func() { _ = file.Close() }() | |
ch := make(chan string, 500) | |
// for i := 0; i < 20; i++ { | |
go getLine(ch) | |
// } | |
counter := 0 | |
for data, moredata := <-ch; moredata && counter < *brutal; data, moredata = <-ch { | |
fmt.Println(morseToAlph(data)) | |
fmt.Fprintln(file, morseToAlph(data)) | |
err := file.Sync() | |
if err != nil { | |
fmt.Println(err) | |
return | |
} | |
counter++ | |
} | |
} | |
func getLine(out chan string) { | |
for { | |
conn, err := net.Dial("tcp", "morset.pwning.xxx:11821") | |
if err != nil { | |
fmt.Println(err) | |
close(out) | |
return | |
} | |
remoteReader := bufio.NewReader(conn) | |
line, err := remoteReader.ReadString('\n') | |
if err != nil { | |
fmt.Println(err) | |
close(out) | |
return | |
} | |
out <- line[:len(line)-1] | |
_ = conn.Close() | |
} | |
} | |
func morseToAlph(in string) (out string) { | |
letters := strings.Split(in, " ") | |
for _, letter := range letters { | |
if morse[letter] != "" { | |
out += morse[letter] | |
} else { | |
if strings.ContainsAny(letter, "-.") { | |
fmt.Println("Not recognized: " + letter) | |
} | |
} | |
} | |
if *uppercase { | |
out = strings.ToUpper(out) | |
} | |
return | |
} | |
func alphToMorse(in string) (out string) { | |
for _, char := range in { | |
if stone[string(char)] != "" { | |
out += stone[string(char)] + " " | |
} else { | |
fmt.Println("Not recognized: " + string(char)) | |
} | |
} | |
return | |
} | |
func prompt() { | |
fmt.Print("morse interpreter>") | |
} | |
//var NavyStone = map[string]string{"a": "--", "b": "-..-", "c": ".-.", "d": "---", "e": ".-", "f": "---.", "g": "--..", "h": ".--", "i": ".", "j": ".---", "k": "-.-.", "l": "--.", "m": ".--.", "n": "..", "o": "-.", "p": ".-.-", "q": ".-..", "r": "-..", "s": "-.-", "t": "-", "u": "..-", "v": ".---", "w": "..-.", "x": "-..-", "y": "...", "z": "----", "0": "-..-", "1": "....", "2": "--.-", "3": "...-", "4": "---.", "5": "..--", "6": "--..", "7": ".---", "8": "-...", "9": ".--."} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment