Selaa lähdekoodia

Pad every string value in SSID with spaces (20) instead of NUL (00)

Viktor Grahn 4 vuotta sitten
vanhempi
commit
a0629b2186
1 muutettua tiedostoa jossa 16 lisäystä ja 9 poistoa
  1. 16 9
      oftp.go

+ 16 - 9
oftp.go

@@ -91,7 +91,7 @@ func (o Oftp) Call() error {
 	dataBuf := make([]byte, o.OftpBuffer)
 
 	// Read STH (header)
-  conn.SetReadDeadline(time.Now().Add(time.Duration(o.NetworkTimeout)*time.Second))
+	conn.SetReadDeadline(time.Now().Add(time.Duration(o.NetworkTimeout) * time.Second))
 	readCnt, err := conn.Read(headerBuf)
 	if err != nil {
 		conn.Close()
@@ -105,7 +105,7 @@ func (o Oftp) Call() error {
 	}
 
 	// Read OFTP command
-  conn.SetReadDeadline(time.Now().Add(time.Duration(o.NetworkTimeout)*time.Second))
+	conn.SetReadDeadline(time.Now().Add(time.Duration(o.NetworkTimeout) * time.Second))
 	readCnt, err = conn.Read(dataBuf)
 	if err != nil {
 		conn.Close()
@@ -120,7 +120,7 @@ func (o Oftp) Call() error {
 	fmt.Printf("Received SSRM (%d)\n", readCnt)
 
 	// 3. Send SSID
-  conn.SetWriteDeadline(time.Now().Add(time.Duration(o.NetworkTimeout)*time.Second))
+	conn.SetWriteDeadline(time.Now().Add(time.Duration(o.NetworkTimeout) * time.Second))
 	writtenCnt, err := conn.Write(o.LocalSSID())
 	if err != nil {
 		conn.Close()
@@ -131,7 +131,7 @@ func (o Oftp) Call() error {
 
 	// 4. Wait for SSID
 	// Read STH (header)
-  conn.SetReadDeadline(time.Now().Add(time.Duration(o.NetworkTimeout)*time.Second))
+	conn.SetReadDeadline(time.Now().Add(time.Duration(o.NetworkTimeout) * time.Second))
 	readCnt, err = conn.Read(headerBuf)
 	if err != nil {
 		conn.Close()
@@ -145,7 +145,7 @@ func (o Oftp) Call() error {
 	}
 
 	// Read OFTP command
-  conn.SetReadDeadline(time.Now().Add(time.Duration(o.NetworkTimeout)*time.Second))
+	conn.SetReadDeadline(time.Now().Add(time.Duration(o.NetworkTimeout) * time.Second))
 	readCnt, err = conn.Read(dataBuf)
 	if err != nil {
 		conn.Close()
@@ -170,7 +170,7 @@ func (o Oftp) Call() error {
 	fmt.Printf("Received SSID (%d)\n", readCnt)
 
 	// 6. Send ESID
-  conn.SetWriteDeadline(time.Now().Add(time.Duration(o.NetworkTimeout)*time.Second))
+	conn.SetWriteDeadline(time.Now().Add(time.Duration(o.NetworkTimeout) * time.Second))
 	writtenCnt, err = conn.Write(o.ESID(ESIDCode))
 	if err != nil {
 		conn.Close()
@@ -197,15 +197,22 @@ func (o Oftp) LocalSSID() []byte {
 	dataBuf := [61]byte{}
 	copy(dataBuf[0:1], "X")
 	copy(dataBuf[1:2], fmt.Sprintf("%d", o.OftpLevel))
-	copy(dataBuf[2:27], o.LocalCode)
-	copy(dataBuf[27:35], o.LocalPassword)
+	copy(dataBuf[2:27], fmt.Sprintf("%-25s", o.LocalCode))
+	copy(dataBuf[27:35], fmt.Sprintf("%-8s", o.LocalPassword))
 	copy(dataBuf[35:40], fmt.Sprintf("%05d", o.OftpBuffer))
 	copy(dataBuf[40:41], o.OftpDuplex)
 	copy(dataBuf[41:42], o.OftpCompression)
 	copy(dataBuf[42:43], o.OftpRestart)
 	copy(dataBuf[43:44], "N")
 	copy(dataBuf[44:47], fmt.Sprintf("%03d", o.OftpCredit))
-	copy(dataBuf[47:48], o.OftpAuthentication)
+
+	if o.OftpLevel > 4 {
+		copy(dataBuf[47:48], o.OftpAuthentication)
+		copy(dataBuf[48:52], fmt.Sprintf("%-4s", ""))
+	} else {
+		copy(dataBuf[47:52], fmt.Sprintf("%-5s", ""))
+	}
+	copy(dataBuf[52:60], fmt.Sprintf("%-8s", ""))
 	copy(dataBuf[60:61], "\r")
 
 	sth := buildSTH(len(dataBuf))