Skip to content

Commit 959282d

Browse files
committed
add methods for setfileparams, addappl, and getappl
1 parent ed83a33 commit 959282d

File tree

1 file changed

+105
-1
lines changed

1 file changed

+105
-1
lines changed

protocol/afp/afp.go

Lines changed: 105 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -726,13 +726,117 @@ func MoveAndRenameFile(conn net.Conn, srcVolID uint16, srcDirID uint32, srcPath
726726
return ok
727727
}
728728

729+
// Sends the AddAppl command to the AFP server.
730+
func AddAppl(conn net.Conn, volID uint16, dirID uint32, creator [4]byte, applTag [4]byte, path string) bool {
731+
data := []byte{}
732+
data = append(data, AFPAddAppl)
733+
data = append(data, byte(0x00))
734+
volIDBytes := make([]byte, 2)
735+
binary.BigEndian.PutUint16(volIDBytes, volID)
736+
data = append(data, volIDBytes...)
737+
dirIDBytes := make([]byte, 4)
738+
binary.BigEndian.PutUint32(dirIDBytes, dirID)
739+
data = append(data, dirIDBytes...)
740+
data = append(data, creator[0])
741+
data = append(data, creator[1])
742+
data = append(data, creator[2])
743+
data = append(data, creator[3])
744+
data = append(data, applTag[0])
745+
data = append(data, applTag[1])
746+
data = append(data, applTag[2])
747+
data = append(data, applTag[3])
748+
data = append(data, byte(0x2))
749+
data = append(data, uint8(len(path)))
750+
data = append(data, []byte(path)...)
751+
752+
packet := CreateFPPacket(DSICommand, data)
753+
754+
// send message
755+
ok := WritePacket(conn, packet)
756+
if !ok {
757+
return false
758+
}
759+
760+
// read response
761+
_, ok = ReadPacket(conn)
762+
763+
return ok
764+
}
765+
766+
// Sends the GetAppl command to the AFP server.
767+
func GetAppl(conn net.Conn, volID uint16, creator [4]byte, aIndex uint16, bitmap uint16) (*FPPacket, bool) {
768+
data := []byte{}
769+
data = append(data, AFPGetAppl)
770+
data = append(data, byte(0x00))
771+
volIDBytes := make([]byte, 2)
772+
binary.BigEndian.PutUint16(volIDBytes, volID)
773+
data = append(data, volIDBytes...)
774+
data = append(data, creator[0])
775+
data = append(data, creator[1])
776+
data = append(data, creator[2])
777+
data = append(data, creator[3])
778+
aIndexBytes := make([]byte, 2)
779+
binary.BigEndian.PutUint16(aIndexBytes, aIndex)
780+
data = append(data, aIndexBytes...)
781+
bitmapBytes := make([]byte, 2)
782+
binary.BigEndian.PutUint16(bitmapBytes, bitmap)
783+
data = append(data, bitmapBytes...)
784+
785+
packet := CreateFPPacket(DSICommand, data)
786+
787+
// send message
788+
ok := WritePacket(conn, packet)
789+
if !ok {
790+
return nil, false
791+
}
792+
793+
// read response
794+
response, ok := ReadPacket(conn)
795+
796+
return response, ok
797+
}
798+
799+
800+
// Sends the setfileparams command to the AFP server.
801+
func SetFilParams(conn net.Conn, volID uint16, dirID uint32, bitmap uint16, path string, buffer []byte) bool {
802+
data := []byte{}
803+
data = append(data, AFPSetFileParams)
804+
data = append(data, byte(0x00))
805+
volIDBytes := make([]byte, 2)
806+
binary.BigEndian.PutUint16(volIDBytes, volID)
807+
data = append(data, volIDBytes...)
808+
dirIDBytes := make([]byte, 4)
809+
binary.BigEndian.PutUint32(dirIDBytes, dirID)
810+
data = append(data, dirIDBytes...)
811+
bitmapBytes := make([]byte, 2)
812+
binary.BigEndian.PutUint16(bitmapBytes, bitmap)
813+
data = append(data, bitmapBytes...)
814+
data = append(data, byte(0x2))
815+
data = append(data, uint8(len(path)))
816+
data = append(data, []byte(path)...)
817+
data = append(data, buffer...)
818+
819+
packet := CreateFPPacket(DSICommand, data)
820+
821+
// send message
822+
ok := WritePacket(conn, packet)
823+
if !ok {
824+
return false
825+
}
826+
827+
// read response
828+
_, ok = ReadPacket(conn)
829+
830+
return ok
831+
}
832+
833+
729834
// Sends the Delete command to the AFP server.
730835
func Delete(conn net.Conn, volumeID uint16, dirID uint32, path string) bool {
731836
// requires protocol 3.2 and specific support configured at build time.
732837
pathElements := strings.Split(path, "/")
733838
fileName := pathElements[len(pathElements)-1]
734839

735-
// from nmap lua library -- data = string.pack( ">BBI2I4I2I2", COMMAND.FPOpenFork, flag, volume_id, did, file_bitmap, access_mode ) .. encode_path(path)
736840
data := []byte{}
737841
data = append(data, AFPDelete)
738842
data = append(data, byte(0x00))

0 commit comments

Comments
 (0)