server data rx changes
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net"
|
||||
|
||||
//"strings"
|
||||
"time"
|
||||
|
||||
@@ -13,6 +14,19 @@ import (
|
||||
"github.com/google/gopacket/pcap"
|
||||
)
|
||||
|
||||
type SaprusHeaderPacket struct {
|
||||
Type uint16
|
||||
Length uint16
|
||||
}
|
||||
|
||||
type SaprusFileTransfer struct {
|
||||
Header SaprusHeaderPacket
|
||||
Flag uint8
|
||||
Sequence uint16
|
||||
Checksum uint16
|
||||
Payload []byte
|
||||
}
|
||||
|
||||
func errCheck(err error) {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
@@ -20,8 +34,26 @@ func errCheck(err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func createSaprusFileTransferPacket(payload []byte) SaprusFileTransfer {
|
||||
var packet SaprusFileTransfer
|
||||
|
||||
packet.Header.Type = binary.BigEndian.Uint16([]byte{payload[0], payload[1]})
|
||||
packet.Header.Length = binary.BigEndian.Uint16([]byte{payload[2], payload[3]})
|
||||
|
||||
packet.Flag = uint8(payload[4])
|
||||
packet.Sequence = binary.BigEndian.Uint16([]byte{payload[5], payload[6]})
|
||||
packet.Checksum = binary.BigEndian.Uint16([]byte{payload[7], payload[8]})
|
||||
|
||||
for i := uint16(0); i < packet.Header.Length - 5; i++ {
|
||||
packet.Payload = append(packet.Payload, payload[i+9])
|
||||
}
|
||||
|
||||
return packet
|
||||
}
|
||||
|
||||
func listenDiscoverResponse(addrChan chan string, readyFlag chan int) {
|
||||
finalMessage := ""
|
||||
var pkt_data SaprusFileTransfer
|
||||
handle, err := pcap.OpenLive("any", int32(1600), true, pcap.BlockForever)
|
||||
errCheck(err)
|
||||
|
||||
@@ -33,17 +65,10 @@ func listenDiscoverResponse(addrChan chan string, readyFlag chan int) {
|
||||
readyFlag <- 1
|
||||
|
||||
for pkt := range packets {
|
||||
finalMessage = ""
|
||||
payload := pkt.ApplicationLayer().Payload()
|
||||
payloadLength := binary.BigEndian.Uint16([]byte{payload[2], payload[3]})
|
||||
|
||||
for i := uint16(0); i < payloadLength - 5; i++ {
|
||||
finalMessage += string(payload[i+9])
|
||||
}
|
||||
fmt.Println(finalMessage)
|
||||
if err == nil {
|
||||
//addrChan <- finalMessage
|
||||
//return
|
||||
pkt_data = createSaprusFileTransferPacket(pkt.ApplicationLayer().Payload())
|
||||
finalMessage += string(pkt_data.Payload)
|
||||
if pkt_data.Flag == 2 {
|
||||
addrChan <- finalMessage
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,7 +134,7 @@ func main() {
|
||||
select {
|
||||
case returnMSG := <- addrChan:
|
||||
fmt.Printf("%s\n", returnMSG)
|
||||
case <- time.After(5 * time.Second):
|
||||
case <- time.After(60 * time.Second):
|
||||
fmt.Printf("error\n")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user