aboutsummaryrefslogtreecommitdiff
path: root/hotline/transaction_handlers.go
diff options
context:
space:
mode:
authorJeff Halter <868228+jhalter@users.noreply.github.com>2022-06-21 16:10:19 -0700
committerJeff Halter <868228+jhalter@users.noreply.github.com>2022-06-21 16:10:19 -0700
commit9067f2344057a247dab19e6ce6756cb7d560d992 (patch)
treec59612079b713581463c833ee21e5790a425c848 /hotline/transaction_handlers.go
parent21581958c38861f3a62ef7c27d0a8a6f4db2a1f8 (diff)
Add support for server banner
Diffstat (limited to 'hotline/transaction_handlers.go')
-rw-r--r--hotline/transaction_handlers.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/hotline/transaction_handlers.go b/hotline/transaction_handlers.go
index cad3370..9f07fe1 100644
--- a/hotline/transaction_handlers.go
+++ b/hotline/transaction_handlers.go
@@ -231,6 +231,10 @@ var TransactionHandlers = map[uint16]TransactionType{
Name: "tranUserBroadcast",
Handler: HandleUserBroadcast,
},
+ tranDownloadBanner: {
+ Name: "tranDownloadBanner",
+ Handler: HandleDownloadBanner,
+ },
}
func HandleChatSend(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
@@ -976,6 +980,10 @@ func HandleTranAgreed(cc *ClientConn, t *Transaction) (res []Transaction, err er
cc.Server.outbox <- t
}
+ if cc.Server.Config.BannerFile != "" {
+ cc.Server.outbox <- *NewTransaction(tranServerBanner, cc.ID, NewField(fieldBannerType, []byte("JPEG")))
+ }
+
res = append(res, cc.NewReply(t))
return res, err
@@ -1927,3 +1935,33 @@ func HandleMakeAlias(cc *ClientConn, t *Transaction) (res []Transaction, err err
res = append(res, cc.NewReply(t))
return res, err
}
+
+func HandleDownloadBanner(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
+ transactionRef := cc.Server.NewTransactionRef()
+ data := binary.BigEndian.Uint32(transactionRef)
+
+ ft := &FileTransfer{
+ ReferenceNumber: transactionRef,
+ Type: bannerDownload,
+ }
+
+ fi, err := cc.Server.FS.Stat(filepath.Join(cc.Server.ConfigDir, cc.Server.Config.BannerFile))
+ if err != nil {
+ return res, err
+ }
+
+ size := make([]byte, 4)
+ binary.BigEndian.PutUint32(size, uint32(fi.Size()))
+
+ cc.Server.mux.Lock()
+ defer cc.Server.mux.Unlock()
+ cc.Server.FileTransfers[data] = ft
+
+ res = append(res, cc.NewReply(t,
+ NewField(fieldRefNum, transactionRef),
+ NewField(fieldTransferSize, size),
+ ))
+
+ res = append(res, cc.NewReply(t))
+ return res, err
+}