X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/67db911d966913ff04ad90018af9a5361a4d8349..9067f2344057a247dab19e6ce6756cb7d560d992:/hotline/transaction_handlers.go diff --git a/hotline/transaction_handlers.go b/hotline/transaction_handlers.go index 5763967..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) { @@ -964,7 +968,7 @@ func HandleTranAgreed(cc *ClientConn, t *Transaction) (res []Transaction, err er cc.AutoReply = []byte{} } - cc.notifyOthers( + for _, t := range cc.notifyOthers( *NewTransaction( tranNotifyChangeUser, nil, NewField(fieldUserName, cc.UserName), @@ -972,7 +976,13 @@ func HandleTranAgreed(cc *ClientConn, t *Transaction) (res []Transaction, err er NewField(fieldUserIconID, *cc.Icon), NewField(fieldUserFlags, *cc.Flags), ), - ) + ) { + 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)) @@ -1925,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 +}