Advertisement
Guest User

Untitled

a guest
Nov 27th, 2014
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.63 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "encoding/json"
  5.     "fmt"
  6.     "io/ioutil"
  7.     "net"
  8.     "os"
  9. )
  10.  
  11. type Packet struct {
  12.     Data       string
  13.     PacketType int
  14.     SeqNum     int
  15.     WindowSize int
  16.     AckNum     int
  17. }
  18.  
  19. type Data struct {
  20.     Data string
  21.     Size int
  22. }
  23.  
  24. type Addresses struct {
  25.     ClientIP    string
  26.     ClientPort  string
  27.     NetworkIP   string
  28.     NetworkPort string
  29.     ServerIP    string
  30.     ServerPort  string
  31. }
  32.  
  33. func main() {
  34.  
  35.     configFileName := os.Args[1]
  36.  
  37.     // open and read the config file
  38.     configFileString, err := ioutil.ReadFile(configFileName)
  39.     if err != nil {
  40.         panic(err)
  41.     }
  42.  
  43.     var addy Addresses
  44.     //parse the config file to the addresses struct
  45.     _ = json.Unmarshal(configFileString, &addy)
  46.  
  47.     fmt.Println("Dial Server")
  48.     //call up the server for a conection
  49.     //conServer, _ := net.DialUDP("udp", addy.ServerIP+":"+addy.ServerPort)
  50.     ipa := net.ParseIP("127.0.0.1")
  51.     var networkToClient = net.UDPAddr{ipa, 7005, "0"}
  52.     var clientToNetwork = net.UDPAddr{ipa, 7015, "0"}
  53.     var networkToServer = net.UDPAddr{ipa, 7007, "0"}
  54.     var serverToNetwork = net.UDPAddr{ipa, 7017, "0"}
  55.     //DialUDP(net string, laddr, raddr *UDPAddr)
  56.  
  57.     conServer, _ := net.DialUDP("udp4", &serverToNetwork, &networkToServer)
  58.     //Listen for packets
  59.     fmt.Println("Dial to Client")
  60.     conClient, _ := net.DialUDP("udp4", &clientToNetwork, &networkToClient)
  61.  
  62.     //tell them to start
  63.     initPacket := Packet{"", 0, 0, 0, 0}
  64.     jsoninitPacket, err := json.Marshal(initPacket)
  65.     if err != nil {
  66.         panic(err)
  67.     }
  68.  
  69.     go forwardToServer(conClient, conServer)
  70.     //go forwardToClient(conServer, conClient)
  71.  
  72.     conClient.Write(jsoninitPacket)
  73.     conServer.Write(jsoninitPacket)
  74.  
  75.     for {
  76.     }
  77.  
  78. }
  79.  
  80. func forwardToServer(client *net.UDPConn, server net.Conn) {
  81.     fmt.Println("forwardToServer started")
  82.  
  83.     for {
  84.         packet := make([]byte, 2048)
  85.  
  86.         fmt.Println("Reading from Client")
  87.         //copy byte array(sock)
  88.         n, _, err := client.ReadFromUDP(packet)
  89.         if err != nil {
  90.             fmt.Println(err)
  91.  
  92.         }
  93.         if n >= 2048 {
  94.             fmt.Println("packet buffer too small")
  95.         }
  96.  
  97.         fmt.Println("Writing to Server")
  98.         //write to server
  99.         _, err = server.Write(packet)
  100.         if err != nil {
  101.             fmt.Println(err)
  102.  
  103.         }
  104.     }
  105.  
  106. }
  107.  
  108. func forwardToClient(client net.Conn, server net.Conn) {
  109.     fmt.Println("forwardToClient started")
  110.  
  111.     for {
  112.         packet := make([]byte, 2048)
  113.  
  114.         fmt.Println("Reading from Server")
  115.         //copy byte array(sock)
  116.         n, err := server.Read(packet)
  117.         if err != nil {
  118.             fmt.Println(err)
  119.  
  120.         }
  121.         if n >= 2048 {
  122.             fmt.Println("packet buffer too small")
  123.         }
  124.  
  125.         fmt.Println("Writing to Client")
  126.         //write to server
  127.         _, err = client.Write(packet)
  128.         if err != nil {
  129.             fmt.Println(err)
  130.  
  131.         }
  132.     }
  133.  
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement