X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/95159e5585762c06c654945070ba54262b7dcec9..45ca5d60383cbe270624c713b916da29af7ba88f:/hotline/transaction_handlers.go?ds=sidebyside diff --git a/hotline/transaction_handlers.go b/hotline/transaction_handlers.go index 1a079f7..20b87e2 100644 --- a/hotline/transaction_handlers.go +++ b/hotline/transaction_handlers.go @@ -749,7 +749,8 @@ func HandleListUsers(cc *ClientConn, t *Transaction) (res []Transaction, err err var userFields []Field for _, acc := range cc.Server.Accounts { - b, err := io.ReadAll(acc) + accCopy := *acc + b, err := io.ReadAll(&accCopy) if err != nil { return res, err } @@ -1432,6 +1433,9 @@ func HandlePostNewsArt(cc *ClientConn, t *Transaction) (res []Transaction, err e bs := make([]byte, 4) binary.BigEndian.PutUint32(bs, convertedArtID) + cc.Server.mux.Lock() + defer cc.Server.mux.Unlock() + newArt := NewsArtData{ Title: string(t.GetField(FieldNewsArtTitle).Data), Poster: string(cc.UserName), @@ -1759,13 +1763,13 @@ func HandleGetFileNameList(cc *ClientConn, t *Transaction) (res []Transaction, e nil, ) if err != nil { - return res, err + return res, fmt.Errorf("error reading file path: %w", err) } var fp FilePath if t.GetField(FieldFilePath).Data != nil { if _, err = fp.Write(t.GetField(FieldFilePath).Data); err != nil { - return res, err + return res, fmt.Errorf("error writing file path: %w", err) } } @@ -1777,7 +1781,7 @@ func HandleGetFileNameList(cc *ClientConn, t *Transaction) (res []Transaction, e fileNames, err := getFileNameList(fullPath, cc.Server.Config.IgnoreFiles) if err != nil { - return res, err + return res, fmt.Errorf("getFileNameList: %w", err) } res = append(res, cc.NewReply(t, fileNames...)) @@ -2053,19 +2057,11 @@ func HandleMakeAlias(cc *ClientConn, t *Transaction) (res []Transaction, err err // 107 FieldRefNum Used later for transfer // 108 FieldTransferSize Size of data to be downloaded func HandleDownloadBanner(cc *ClientConn, t *Transaction) (res []Transaction, err error) { - fi, err := cc.Server.FS.Stat(filepath.Join(cc.Server.ConfigDir, cc.Server.Config.BannerFile)) - if err != nil { - return res, err - } - ft := cc.newFileTransfer(bannerDownload, []byte{}, []byte{}, make([]byte, 4)) + binary.BigEndian.PutUint32(ft.TransferSize, uint32(len(cc.Server.banner))) - binary.BigEndian.PutUint32(ft.TransferSize, uint32(fi.Size())) - - res = append(res, cc.NewReply(t, + return append(res, cc.NewReply(t, NewField(FieldRefNum, ft.refNum[:]), NewField(FieldTransferSize, ft.TransferSize), - )) - - return res, err + )), err }