|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"flag"
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/Unbewohnte/FTU/receiver"
|
|
|
|
"github.com/Unbewohnte/FTU/sender"
|
|
|
|
)
|
|
|
|
|
|
|
|
// flags
|
|
|
|
var PORT *int = flag.Int("port", 8080, "Specifies a port for a sender")
|
|
|
|
var SENDERADDR *string = flag.String("addr", "", "Specifies an IP for connection")
|
|
|
|
var SENDING *bool = flag.Bool("sending", false, "Send or receive")
|
|
|
|
var DOWNLOADSFOLDER *string = flag.String("downloadto", "", "Specifies where the receiver will store downloaded file")
|
|
|
|
var SHAREDFILE *string = flag.String("sharefile", "", "Specifies what file sender will send")
|
|
|
|
|
|
|
|
// helpMessage
|
|
|
|
var HELPMSG string = `
|
|
|
|
"-port", default: 8080, Specifies a port for a sender
|
|
|
|
"-addr", default: "", Specifies an IP for connection
|
|
|
|
"-sending", default: false, Send or receive
|
|
|
|
"-downloadto", default: "", Specifies where the receiver will store downloaded file
|
|
|
|
"-sharefile", default: "", Specifies what file sender will send`
|
|
|
|
|
|
|
|
// Input-validation
|
|
|
|
func checkFlags() {
|
|
|
|
if *SENDING {
|
|
|
|
if strings.TrimSpace(*SHAREDFILE) == "" {
|
|
|
|
fmt.Println("No file specified !\n", HELPMSG)
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
if *PORT <= 0 {
|
|
|
|
fmt.Println("Invalid port !\n", HELPMSG)
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
} else if !*SENDING {
|
|
|
|
if strings.TrimSpace(*SENDERADDR) == "" {
|
|
|
|
fmt.Println("Invalid IP address !\n", HELPMSG)
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
if strings.TrimSpace(*DOWNLOADSFOLDER) == "" {
|
|
|
|
*DOWNLOADSFOLDER = "./downloads/"
|
|
|
|
fmt.Println("Empty downloads folder. Changed to ./downloads/")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// parse flags, validate given values
|
|
|
|
func init() {
|
|
|
|
flag.Parse()
|
|
|
|
checkFlags()
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
if *SENDING {
|
|
|
|
// 1) create sender -> 2) wait for a connection ->|
|
|
|
|
// 3) send fileinfo packet -> 4) if accepted - upload file
|
|
|
|
sender := sender.NewSender(*PORT, *SHAREDFILE)
|
|
|
|
sender.WaitForConnection()
|
|
|
|
sender.MainLoop()
|
|
|
|
|
|
|
|
} else {
|
|
|
|
// 1) create receiver -> 2) try to connect to a sender -> 3) wait for a fileinfo packet ->|
|
|
|
|
// 4) accept or refuse -> 5) download|don`t_download file
|
|
|
|
receiver := receiver.NewReceiver(*DOWNLOADSFOLDER)
|
|
|
|
receiver.Connect(fmt.Sprintf("%s:%d", *SENDERADDR, *PORT))
|
|
|
|
receiver.MainLoop()
|
|
|
|
}
|
|
|
|
}
|