]> git.r.bdr.sh - rbdr/mobius/commitdiff
Minor cleanup of transfer
authorJeff Halter <redacted>
Fri, 6 Aug 2021 23:46:45 +0000 (16:46 -0700)
committerJeff Halter <redacted>
Fri, 6 Aug 2021 23:46:45 +0000 (16:46 -0700)
hotline/server.go
hotline/transaction_handlers.go
hotline/transfer.go
hotline/transfer_test.go

index e51f673bf1c5c57446008fbb65be1a63fd83c500..0203dc9e67d4b02230ba58fb9739010d83fffaba 100644 (file)
@@ -622,7 +622,8 @@ func (s *Server) TransferFile(conn net.Conn) error {
                return err
        }
 
-       t, err := NewReadTransfer(buf)
+       var t transfer
+       _, err := t.Write(buf[:16])
        if err != nil {
                return err
        }
@@ -726,7 +727,7 @@ func (s *Server) TransferFile(conn net.Conn) error {
                }
        case FolderDownload:
                // Folder Download flow:
-               // 1. Get filePath from the Transfer
+               // 1. Get filePath from the transfer
                // 2. Iterate over files
                // 3. For each file:
                //       Send file header to client
index 0812f9a4d3e0521e712376f4ad9dd39b0a5bf309..ba90a56bcda94e2d3925d04b4d2b986de9b18fb8 100644 (file)
@@ -1263,7 +1263,7 @@ func HandleDownloadFolder(cc *ClientConn, t *Transaction) (res []Transaction, er
 // Fields used in the request
 // 201 File name
 // 202 File path
-// 108 Transfer size   Total size of all items in the folder
+// 108 transfer size   Total size of all items in the folder
 // 220 Folder item count
 // 204 File transfer options   "Optional Currently set to 1" (TODO: ??)
 func HandleUploadFolder(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
index b8bec1dd9122b40540f48ac033c0c026c0e830b6..fa431cee176de216af5582336c5d3e6f0ecea198 100644 (file)
@@ -6,45 +6,23 @@ import (
        "errors"
 )
 
-type Transfer struct {
+type transfer struct {
        Protocol        [4]byte // "HTXF" 0x48545846
        ReferenceNumber [4]byte // Unique ID generated for the transfer
        DataSize        [4]byte // File size
        RSVD            [4]byte // Not implemented in Hotline Protocol
 }
 
-func NewReadTransfer(b []byte) (Transfer, error) {
-       r := bytes.NewReader(b)
-       var transfer Transfer
+var HTXF = [4]byte{0x48, 0x54, 0x58, 0x46} // (HTXF) is the only supported transfer protocol
 
-       if err := binary.Read(r, binary.BigEndian, &transfer); err != nil {
-               return transfer, err
+func (tf *transfer) Write(b []byte) (int, error) {
+       if err := binary.Read(bytes.NewReader(b), binary.BigEndian, tf); err != nil {
+               return 0, err
        }
 
-       // 0x48545846 (HTXF) is the only supported transfer protocol
-       if transfer.Protocol != [4]byte{0x48, 0x54, 0x58, 0x46} {
-               return transfer, errors.New("invalid protocol")
+       if tf.Protocol != HTXF {
+               return 0, errors.New("invalid protocol")
        }
 
-       return transfer, nil
+       return len(b), nil
 }
-
-//
-//type FolderTransfer struct {
-//     Protocol        [4]byte // "HTXF" 0x48545846
-//     ReferenceNumber [4]byte // Unique ID generated for the transfer
-//     DataSize        [4]byte // File size
-//     RSVD            [4]byte // Not implemented in Hotline Protocol
-//     Action          [2]byte // Next file action
-//}
-//
-//func ReadFolderTransfer(b []byte) (FolderTransfer, error) {
-//     r := bytes.NewReader(b)
-//     var decodedEvent FolderTransfer
-//
-//     if err := binary.Read(r, binary.BigEndian, &decodedEvent); err != nil {
-//             return decodedEvent, err
-//     }
-//
-//     return decodedEvent, nil
-//}
index 52044b0524e8bb88f072552fd5aedbeb59927f63..63e22c068e5269d24800d83afb4ed5a312c3dc14 100644 (file)
@@ -2,6 +2,97 @@ package hotline
 
 import "testing"
 
-func TestReadTransfer(t *testing.T) {
-
+func TestTransfer_Read(t *testing.T) {
+       type fields struct {
+               Protocol        [4]byte
+               ReferenceNumber [4]byte
+               DataSize        [4]byte
+               RSVD            [4]byte
+       }
+       type args struct {
+               b []byte
+       }
+       tests := []struct {
+               name    string
+               fields  fields
+               args    args
+               want    int
+               wantErr bool
+       }{
+               {
+                       name: "when b is a valid transfer",
+                       fields: fields{
+                               Protocol:        [4]byte{},
+                               ReferenceNumber: [4]byte{},
+                               DataSize:        [4]byte{},
+                               RSVD:            [4]byte{},
+                       },
+                       args: args{
+                               b: []byte{
+                                       0x48, 0x54, 0x58, 0x46,
+                                       0x00, 0x00, 0x00, 0x01,
+                                       0x00, 0x00, 0x00, 0x02,
+                                       0x00, 0x00, 0x00, 0x00,
+                               },
+                       },
+                       want:    16,
+                       wantErr: false,
+               },
+               {
+                       name: "when b contains invalid transfer protocol",
+                       fields: fields{
+                               Protocol:        [4]byte{},
+                               ReferenceNumber: [4]byte{},
+                               DataSize:        [4]byte{},
+                               RSVD:            [4]byte{},
+                       },
+                       args: args{
+                               b: []byte{
+                                       0x11, 0x11, 0x11, 0x11,
+                                       0x00, 0x00, 0x00, 0x01,
+                                       0x00, 0x00, 0x00, 0x02,
+                                       0x00, 0x00, 0x00, 0x00,
+                               },
+                       },
+                       want:    0,
+                       wantErr: true,
+               },
+               {
+                       name: "when b does not contain expected len of bytes",
+                       fields: fields{
+                               Protocol:        [4]byte{},
+                               ReferenceNumber: [4]byte{},
+                               DataSize:        [4]byte{},
+                               RSVD:            [4]byte{},
+                       },
+                       args: args{
+                               b: []byte{
+                                       0x48, 0x54, 0x58, 0x46,
+                                       0x00, 0x00, 0x00, 0x01,
+                                       0x00, 0x00, 0x00, 0x02,
+                                       0x00, 0x00, 0x00,
+                               },
+                       },
+                       want:    0,
+                       wantErr: true,
+               },
+       }
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       tf := &transfer{
+                               Protocol:        tt.fields.Protocol,
+                               ReferenceNumber: tt.fields.ReferenceNumber,
+                               DataSize:        tt.fields.DataSize,
+                               RSVD:            tt.fields.RSVD,
+                       }
+                       got, err := tf.Write(tt.args.b)
+                       if (err != nil) != tt.wantErr {
+                               t.Errorf("Read() error = %v, wantErr %v", err, tt.wantErr)
+                               return
+                       }
+                       if got != tt.want {
+                               t.Errorf("Read() got = %v, want %v", got, tt.want)
+                       }
+               })
+       }
 }