diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationUploadTokenReqMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationUploadTokenReqMsgHdlr.scala index 2894b415c990bb49c768f671cddec0c596905d24..9ced41b3234d0e23b89fab1a726724822f0797c8 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationUploadTokenReqMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationUploadTokenReqMsgHdlr.scala @@ -43,7 +43,7 @@ trait PresentationUploadTokenReqMsgHdlr extends RightsManagementTrait { val envelope = BbbCoreEnvelope(PresentationUploadTokenSysPubMsg.NAME, routing) val header = BbbClientMsgHeader(PresentationUploadTokenSysPubMsg.NAME, liveMeeting.props.meetingProp.intId, msg.header.userId) - val body = PresentationUploadTokenSysPubMsgBody(msg.body.podId, token, msg.body.filename) + val body = PresentationUploadTokenSysPubMsgBody(msg.body.podId, token, msg.body.filename, liveMeeting.props.meetingProp.intId) val event = PresentationUploadTokenSysPubMsg(header, body) val msgEvent = BbbCommonEnvCoreMsg(envelope, event) diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/PresentationPodsMsgs.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/PresentationPodsMsgs.scala index 75623c81b32e7c7dbd0550a57031170602d82925..403174888835a8eb0fa7375baea83241a7be48f0 100755 --- a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/PresentationPodsMsgs.scala +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/PresentationPodsMsgs.scala @@ -147,6 +147,22 @@ case class PresentationConversionEndedSysMsgBody( presName: String ) +object PresentationUploadedFileTooLargeErrorSysPubMsg { val NAME = "PresentationUploadedFileTooLargeErrorSysPubMsg" } +case class PresentationUploadedFileTooLargeErrorSysPubMsg( + header: BbbClientMsgHeader, + body: PresentationUploadedFileTooLargeErrorSysPubMsgBody +) extends StandardMsg +case class PresentationUploadedFileTooLargeErrorSysPubMsgBody( + podId: String, + messageKey: String, + code: String, + meetingId: String, + presentationName: String, + presentationToken: String, + fileSize: Int, + maxFileSize: Int +) + // ------------ bbb-common-web to akka-apps ------------ // ------------ akka-apps to client ------------ @@ -281,5 +297,5 @@ case class SyncGetPresentationPodsRespMsgBody(pods: Vector[PresentationPodVO]) // ------------ akka-apps to bbb-common-web ------------ object PresentationUploadTokenSysPubMsg { val NAME = "PresentationUploadTokenSysPubMsg" } case class PresentationUploadTokenSysPubMsg(header: BbbClientMsgHeader, body: PresentationUploadTokenSysPubMsgBody) extends BbbCoreMsg -case class PresentationUploadTokenSysPubMsgBody(podId: String, authzToken: String, filename: String) +case class PresentationUploadTokenSysPubMsgBody(podId: String, authzToken: String, filename: String, meetingId: String) // ------------ akka-apps to bbb-common-web ------------ diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java index bf495f2b8d73d04d6bd45735f47643bc5ed1536e..3adb52b1adfd46d0c6ae77186a3d2a43fb9898db 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java @@ -86,6 +86,7 @@ import org.bigbluebutton.api2.IBbbWebApiGWApp; import org.bigbluebutton.api2.domain.UploadedTrack; import org.bigbluebutton.common2.redis.RedisStorageService; import org.bigbluebutton.presentation.PresentationUrlDownloadService; +import org.bigbluebutton.presentation.imp.SwfSlidesGenerationProgressNotifier; import org.bigbluebutton.web.services.WaitingGuestCleanupTimerTask; import org.bigbluebutton.web.services.UserCleanupTimerTask; import org.bigbluebutton.web.services.EnteredUserCleanupTimerTask; @@ -120,6 +121,7 @@ public class MeetingService implements MessageListener { private RedisStorageService storeService; private CallbackUrlService callbackUrlService; private HTML5LoadBalancingService html5LoadBalancingService; + private SwfSlidesGenerationProgressNotifier notifier; private long usersTimeout; private long enteredUsersTimeout; @@ -314,6 +316,18 @@ public class MeetingService implements MessageListener { return valid; } + public PresentationUploadToken getPresentationUploadToken(String authzToken) { + if(uploadAuthzTokens.containsKey(authzToken)) { + return uploadAuthzTokens.get(authzToken); + } else { + return null; + } + } + + public void sendPresentationUploadMaxFilesizeMessage(PresentationUploadToken presUploadToken, int uploadedFileSize, int maxUploadFileSize) { + notifier.sendUploadFileTooLargeMessage(presUploadToken, uploadedFileSize, maxUploadFileSize); + } + private void removeUserSessions(String meetingId) { Iterator<Map.Entry<String, UserSession>> iterator = sessions.entrySet().iterator(); while (iterator.hasNext()) { @@ -1241,4 +1255,9 @@ public class MeetingService implements MessageListener { public void setEnteredUsersTimeout(long value) { enteredUsersTimeout = value; } + + public void setSwfSlidesGenerationProgressNotifier(SwfSlidesGenerationProgressNotifier notifier) { + this.notifier = notifier; + } + } diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/messages/PresentationUploadToken.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/messages/PresentationUploadToken.java index 02113e7f5d156ded66b9b4dbfc8897d1cf237f93..c88c291b4c2308007da2b92266f5a862870e5f6e 100644 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/messages/PresentationUploadToken.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/messages/PresentationUploadToken.java @@ -4,10 +4,12 @@ public class PresentationUploadToken implements IMessage { public final String podId; public final String authzToken; public final String filename; + public final String meetingId; - public PresentationUploadToken(String podId, String authzToken, String filename) { + public PresentationUploadToken(String podId, String authzToken, String filename, String meetingId) { this.podId = podId; this.authzToken = authzToken; this.filename = filename; + this.meetingId = meetingId; } } diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/presentation/ConversionMessageConstants.java b/bbb-common-web/src/main/java/org/bigbluebutton/presentation/ConversionMessageConstants.java index 5c4618a982f42404332c4d6ea6c299c2969d0a3c..de348d4a708425a612a8abeae786e9c3ed6feeb8 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/presentation/ConversionMessageConstants.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/presentation/ConversionMessageConstants.java @@ -23,6 +23,7 @@ public class ConversionMessageConstants { public static final String OFFICE_DOC_CONVERSION_SUCCESS_KEY = "OFFICE_DOC_CONVERSION_SUCCESS"; public static final String OFFICE_DOC_CONVERSION_FAILED_KEY = "OFFICE_DOC_CONVERSION_FAILED"; public static final String OFFICE_DOC_CONVERSION_INVALID_KEY = "OFFICE_DOC_CONVERSION_INVALID"; + public static final String FILE_TOO_LARGE = "FILE_TOO_LARGE"; public static final String SUPPORTED_DOCUMENT_KEY = "SUPPORTED_DOCUMENT"; public static final String UNSUPPORTED_DOCUMENT_KEY = "UNSUPPORTED_DOCUMENT"; public static final String PAGE_COUNT_FAILED_KEY = "PAGE_COUNT_FAILED"; diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/presentation/imp/SwfSlidesGenerationProgressNotifier.java b/bbb-common-web/src/main/java/org/bigbluebutton/presentation/imp/SwfSlidesGenerationProgressNotifier.java index 00206efb1286dbf7de620050efd59fd7dd888847..ad0852c0bb63f5bb3532dbae1bf47e52db92ecd0 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/presentation/imp/SwfSlidesGenerationProgressNotifier.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/presentation/imp/SwfSlidesGenerationProgressNotifier.java @@ -18,14 +18,12 @@ package org.bigbluebutton.presentation.imp; +import org.bigbluebutton.api.messaging.messages.PresentationUploadToken; import org.bigbluebutton.api2.IBbbWebApiGWApp; import org.bigbluebutton.presentation.ConversionMessageConstants; import org.bigbluebutton.presentation.GeneratedSlidesInfoHelper; import org.bigbluebutton.presentation.UploadedPresentation; -import org.bigbluebutton.presentation.messages.DocPageCompletedProgress; -import org.bigbluebutton.presentation.messages.DocPageGeneratedProgress; -import org.bigbluebutton.presentation.messages.IDocConversionMsg; -import org.bigbluebutton.presentation.messages.OfficeDocConversionProgress; +import org.bigbluebutton.presentation.messages.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,6 +39,17 @@ public class SwfSlidesGenerationProgressNotifier { messagingService.sendDocConversionMsg(msg); } + public void sendUploadFileTooLargeMessage(PresentationUploadToken pres, int uploadedFileSize, int maxUploadFileSize) { + UploadFileTooLargeMessage progress = new UploadFileTooLargeMessage( + pres.podId, + pres.meetingId, + pres.filename, + pres.authzToken, + ConversionMessageConstants.FILE_TOO_LARGE, + uploadedFileSize, + maxUploadFileSize); + messagingService.sendDocConversionMsg(progress); + } public void sendConversionUpdateMessage(int slidesCompleted, UploadedPresentation pres, int pageGenerated) { DocPageGeneratedProgress progress = new DocPageGeneratedProgress(pres.getPodId(), diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/presentation/messages/UploadFileTooLargeMessage.java b/bbb-common-web/src/main/java/org/bigbluebutton/presentation/messages/UploadFileTooLargeMessage.java new file mode 100644 index 0000000000000000000000000000000000000000..b6af2fd0ebcd868c7506eed2369933eb019de728 --- /dev/null +++ b/bbb-common-web/src/main/java/org/bigbluebutton/presentation/messages/UploadFileTooLargeMessage.java @@ -0,0 +1,27 @@ +package org.bigbluebutton.presentation.messages; + +public class UploadFileTooLargeMessage implements IDocConversionMsg { + public final String podId; + public final String meetingId; + public final String filename; + public final String authzToken; + public final String key; + public final Integer uploadedFileSize; + public final Integer maxUploadFileSize; + + public UploadFileTooLargeMessage(String podId, + String meetingId, + String filename, + String authzToken, + String key, + Integer uploadedFileSize, + Integer maxUploadFileSize) { + this.podId = podId; + this.meetingId = meetingId; + this.filename = filename; + this.authzToken = authzToken; + this.key = key; + this.uploadedFileSize = uploadedFileSize; + this.maxUploadFileSize = maxUploadFileSize; + } +} diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala index 56056a58c345cd126451d3fd7e7382fdfc1da747..8d720d60dd83f27d36627600d62392ef6e0f5b97 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala @@ -312,6 +312,9 @@ class BbbWebApiGWApp( } else if (msg.isInstanceOf[DocPageConversionStarted]) { val event = MsgBuilder.buildPresentationPageConversionStartedSysMsg(msg.asInstanceOf[DocPageConversionStarted]) msgToAkkaAppsEventBus.publish(MsgToAkkaApps(toAkkaAppsChannel, event)) + } else if (msg.isInstanceOf[UploadFileTooLargeMessage]) { + val event = MsgBuilder.buildPresentationUploadedFileTooLargeErrorSysMsg(msg.asInstanceOf[UploadFileTooLargeMessage]) + msgToAkkaAppsEventBus.publish(MsgToAkkaApps(toAkkaAppsChannel, event)) } } diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/MsgBuilder.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/MsgBuilder.scala index 945cce0b8a443427eba81f60d574f5dadf52ca29..d124391db978732dd20391b4186bbb52bb53ed76 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/MsgBuilder.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/MsgBuilder.scala @@ -280,4 +280,17 @@ object MsgBuilder { val req = DeletedRecordingSysMsg(header, body) BbbCommonEnvCoreMsg(envelope, req) } + + def buildPresentationUploadedFileTooLargeErrorSysMsg(msg: UploadFileTooLargeMessage): BbbCommonEnvCoreMsg = { + val routing = collection.immutable.HashMap("sender" -> "bbb-web") + val envelope = BbbCoreEnvelope(PresentationUploadedFileTooLargeErrorSysPubMsg.NAME, routing) + val header = BbbClientMsgHeader(PresentationUploadedFileTooLargeErrorSysPubMsg.NAME, msg.meetingId, msg.authzToken) + + val body = PresentationUploadedFileTooLargeErrorSysPubMsgBody(podId = msg.podId, messageKey = msg.key, + code = msg.key, meetingId = msg.meetingId, presentationName = msg.filename, presentationToken = msg.authzToken, fileSize = msg.uploadedFileSize.intValue(), maxFileSize = msg.maxUploadFileSize) + + val req = PresentationUploadedFileTooLargeErrorSysPubMsg(header, body) + BbbCommonEnvCoreMsg(envelope, req) + } + } diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/OldMeetingMsgHdlrActor.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/OldMeetingMsgHdlrActor.scala index ac25f7610c30f77572dcbb1baec069bd9c3fe104..d42b2e82a70f4d7e9330ac9df3719e45c1da401b 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/OldMeetingMsgHdlrActor.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/OldMeetingMsgHdlrActor.scala @@ -159,7 +159,7 @@ class OldMeetingMsgHdlrActor(val olgMsgGW: OldMessageReceivedGW) } def handlePresentationUploadTokenSysPubMsg(msg: PresentationUploadTokenSysPubMsg): Unit = { - olgMsgGW.handle(new PresentationUploadToken(msg.body.podId, msg.body.authzToken, msg.body.filename)) + olgMsgGW.handle(new PresentationUploadToken(msg.body.podId, msg.body.authzToken, msg.body.filename, msg.body.meetingId)) } def handleGuestsWaitingApprovedEvtMsg(msg: GuestsWaitingApprovedEvtMsg): Unit = { diff --git a/bigbluebutton-web/grails-app/conf/spring/resources.xml b/bigbluebutton-web/grails-app/conf/spring/resources.xml index f0af4672950fb897892b2d2de4684a462cded25d..e8986bdc9144aeab605f094234edbf3f269e5888 100755 --- a/bigbluebutton-web/grails-app/conf/spring/resources.xml +++ b/bigbluebutton-web/grails-app/conf/spring/resources.xml @@ -56,6 +56,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <property name="callbackUrlService" ref="callbackUrlService"/> <property name="usersTimeout" value="${usersTimeout}"/> <property name="enteredUsersTimeout" value="${enteredUsersTimeout}"/> + <property name="swfSlidesGenerationProgressNotifier" ref="swfSlidesGenerationProgressNotifier"/> </bean> <bean id="oldMessageReceivedGW" class="org.bigbluebutton.api2.bus.OldMessageReceivedGW"> diff --git a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/PresentationController.groovy b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/PresentationController.groovy index a65a6b3ce2fea87b2d33cea4bb30f1adbbd74f11..2fe2022578dc8873c33cf63ee961365800f766e1 100755 --- a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/PresentationController.groovy +++ b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/PresentationController.groovy @@ -19,6 +19,7 @@ package org.bigbluebutton.web.controllers import grails.converters.* +import org.bigbluebutton.api.messaging.messages.PresentationUploadToken import org.grails.web.mime.DefaultMimeUtility import org.bigbluebutton.api.ParamsProcessorUtil; @@ -62,6 +63,11 @@ class PresentationController { response.outputStream << 'upload-success'; } else { log.debug "NO SUCCESS \n" + + //Send upload error message + PresentationUploadToken presUploadToken = meetingService.getPresentationUploadToken(presentationToken); + meetingService.sendPresentationUploadMaxFilesizeMessage(presUploadToken, originalContentLength, maxUploadFileSize as int); + response.setStatus(404); response.addHeader("Cache-Control", "no-cache") response.contentType = 'plain/text'