You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2017/05/18 05:36:33 UTC
[26/26] openmeetings git commit: Normalize all the line endings
Normalize all the line endings
Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/1cb3518f
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/1cb3518f
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/1cb3518f
Branch: refs/heads/3.3.x
Commit: 1cb3518f0d7622145f37ecb62d14f56e7126cc3d
Parents: 11e8d9d
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu May 18 12:35:51 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu May 18 12:35:51 2017 +0700
----------------------------------------------------------------------
NOTICE | 28 +-
README | 248 +--
.../record/listener/async/BaseStreamWriter.java | 400 ++---
.../data/record/listener/async/CachedEvent.java | 152 +-
.../listener/async/StreamAudioWriter.java | 456 ++---
.../listener/async/StreamVideoWriter.java | 196 +--
.../openmeetings/core/mail/SMSHandler.java | 236 +--
.../core/session/SessionManager.java | 730 ++++----
openmeetings-core/src/site/site.xml | 80 +-
.../test/rtmp/LoadTestRtmpClient.java | 344 ++--
.../openmeetings/test/rtmp/SimulateLoad.java | 184 +-
.../openmeetings/db/dao/IDataProviderDao.java | 188 +-
.../db/dao/basic/MailMessageDao.java | 270 +--
.../openmeetings/db/dao/label/LabelDao.java | 642 +++----
.../apache/openmeetings/db/dao/room/SipDao.java | 382 ++--
.../db/dao/server/ISessionManager.java | 412 ++---
.../openmeetings/db/dao/server/ServerDao.java | 444 ++---
.../openmeetings/db/dao/user/GroupDao.java | 292 ++--
.../openmeetings/db/dao/user/GroupUserDao.java | 248 +--
.../db/entity/basic/MailMessage.java | 398 ++---
.../openmeetings/db/entity/server/Server.java | 608 +++----
.../openmeetings/db/util/FormatHelper.java | 162 +-
openmeetings-db/src/site/site.xml | 80 +-
.../src/main/swf/base/components/miniIcons.lzx | 132 +-
.../main/swf/base/components/miniIconsNew.lzx | 92 +-
.../src/main/swf/base/components/omImage.lzx | 104 +-
.../src/main/swf/base/components/omMiniIcon.lzx | 74 +-
.../swf/base/components/scrollbars/library.lzx | 88 +-
.../scrollbars/scrollbar_yresources.lzx | 48 +-
.../main/swf/base/remote/baseVideoStream.lzx | 770 ++++-----
.../swf/base/remote/baseVideoStreamDevice.lzx | 344 ++--
.../src/main/swf/base/remote/baseVideoView.lzx | 208 +--
.../main/swf/commonVideoViewContentSWF10.lzx | 1630 +++++++++---------
openmeetings-flash/src/main/swf/dragHelper.lzx | 82 +-
.../src/main/swf/lzrecorder/library.lzx | 50 +-
.../main/swf/lzrecorder/playBackVideoStream.lzx | 140 +-
.../whiteboard/base/whiteBoardPointer.lzx | 74 +-
.../propertypanel/drawDocumentPanelItem.lzx | 80 +-
.../main/swf/networkTesting/networktesting.lzx | 294 ++--
.../networkTesting/tests/BaseURLLoadTest.lzx | 292 ++--
.../networkTesting/tests/DownloadSpeedTest.lzx | 100 +-
.../swf/networkTesting/tests/JitterTest.lzx | 114 +-
.../swf/networkTesting/tests/NetworkTest.lzx | 256 +--
.../main/swf/networkTesting/tests/PingTest.lzx | 86 +-
.../tests/PortAvailabilityTest.lzx | 180 +-
.../networkTesting/tests/UploadSpeedTest.lzx | 248 +--
.../main/swf/networkTesting/tests/library.lzx | 74 +-
.../src/main/swf/networkTesting/testsView.lzx | 210 +--
.../src/main/swf/video/baseVideoObject.lzx | 1442 ++++++++--------
.../main/swf/video/editRecordStreamSWF10.lzx | 998 +++++------
.../src/main/swf/video/library.lzx | 140 +-
.../main/swf/video/videoObjectPlayBroadcast.lzx | 162 +-
.../swf/video/videoObjectPlayTestBroadcast.lzx | 82 +-
.../main/swf/video/videoObjectTestBroadcast.lzx | 110 +-
.../main/swf/video/videoUserProfilePicSWF10.lzx | 72 +-
.../src/main/swf/video/volumeSlider.lzx | 136 +-
openmeetings-flash/src/site/site.xml | 78 +-
.../backup/AppointmentConverter.java | 108 +-
.../AppointmentReminderTypeConverter.java | 78 +-
.../openmeetings/backup/DateConverter.java | 80 +-
.../openmeetings/backup/GroupConverter.java | 108 +-
.../openmeetings/backup/InlineConverter.java | 58 +-
.../openmeetings/backup/IntegerTransform.java | 68 +-
.../openmeetings/backup/LongTransform.java | 66 +-
.../backup/OmCalendarConverter.java | 110 +-
.../apache/openmeetings/backup/OmConverter.java | 112 +-
.../openmeetings/backup/PollTypeConverter.java | 74 +-
.../backup/RecordingStatusConverter.java | 94 +-
.../openmeetings/backup/RoomConverter.java | 108 +-
.../openmeetings/backup/RoomTypeConverter.java | 74 +-
.../backup/SalutationConverter.java | 70 +-
.../openmeetings/backup/UserConverter.java | 108 +-
.../cli/ConnectionPropertiesPatcher.java | 378 ++--
.../org/apache/openmeetings/cli/Db2Patcher.java | 56 +-
.../apache/openmeetings/cli/DerbyPatcher.java | 66 +-
.../apache/openmeetings/cli/MssqlPatcher.java | 56 +-
.../apache/openmeetings/cli/MysqlPatcher.java | 58 +-
.../apache/openmeetings/cli/OraclePatcher.java | 64 +-
.../openmeetings/cli/PostgresPatcher.java | 56 +-
.../installation/InstallationConfig.java | 200 +--
openmeetings-install/src/site/site.xml | 78 +-
.../openmeetings/screenshare/CaptureScreen.java | 474 ++---
.../screenshare/IScreenEncoder.java | 66 +-
.../screenshare/RTMPClientPublish.java | 204 +--
.../screenshare/ScreenV1Encoder.java | 404 ++---
.../screenshare/gui/MouseListenerable.java | 62 +-
.../screenshare/gui/NumberSpinner.java | 70 +-
.../src/main/resources/logback.xsd | 218 +--
openmeetings-screenshare/src/site/site.xml | 78 +-
.../src/main/assembly/jrebel/red5-debug.bat | 38 +-
.../src/main/assembly/scripts/admin.bat | 42 +-
openmeetings-server/src/site/site.xml | 280 +--
.../src/site/stylesheets/errortable.xsl | 134 +-
.../src/site/xdoc/ApacheDerbyConfig.xml | 114 +-
.../src/site/xdoc/BitrixPlugin.xml | 96 +-
.../src/site/xdoc/BuildInstructions.xml | 208 +--
.../src/site/xdoc/BuildInstructions_3.0.x.xml | 608 +++----
.../src/site/xdoc/CalendarAndTimezone.xml | 134 +-
.../src/site/xdoc/CallForLogo.xml | 486 +++---
.../src/site/xdoc/Clustering.xml | 278 +--
.../src/site/xdoc/CommandLineAdmin.xml | 200 +--
.../site/xdoc/ConferenceRoomLayoutOptions.xml | 174 +-
.../src/site/xdoc/ConfluencePlugin.xml | 98 +-
.../src/site/xdoc/CustomCryptMechanism.xml | 206 +--
.../src/site/xdoc/CustomRoomTypeHowTo.xml | 206 +--
openmeetings-server/src/site/xdoc/Dashboard.xml | 138 +-
.../src/site/xdoc/DrupalPlugin.xml | 150 +-
.../src/site/xdoc/EditTemplates.xml | 128 +-
.../src/site/xdoc/GeneralConfiguration.xml | 626 +++----
.../src/site/xdoc/GetVersionInfo.xml | 144 +-
openmeetings-server/src/site/xdoc/HotKeys.xml | 106 +-
.../src/site/xdoc/IBMDB2Config.xml | 146 +-
.../src/site/xdoc/Internationalisation.xml | 96 +-
.../src/site/xdoc/JUnitTesting.xml | 170 +-
.../src/site/xdoc/JVMPerformanceTuning.xml | 132 +-
.../src/site/xdoc/JiraPlugin.xml | 102 +-
.../src/site/xdoc/JoomlaPlugin.xml | 118 +-
.../src/site/xdoc/LanguageEditor.xml | 116 +-
.../src/site/xdoc/LdapAndADS.xml | 190 +-
.../src/site/xdoc/MSSQLConfig.xml | 152 +-
.../src/site/xdoc/ManualTesting.xml | 1002 +++++------
.../src/site/xdoc/MoodlePlugin.xml | 152 +-
.../src/site/xdoc/MySQLConfig.xml | 152 +-
.../src/site/xdoc/Navigation.xml | 86 +-
.../src/site/xdoc/OpenOfficeConverter.xml | 108 +-
.../src/site/xdoc/OracleConfig.xml | 122 +-
.../src/site/xdoc/PortSettings.xml | 172 +-
.../src/site/xdoc/PostgresConfig.xml | 144 +-
.../src/site/xdoc/RTMPSAndHTTPS.xml | 434 ++---
.../src/site/xdoc/RecommendedHardwareList.xml | 118 +-
.../src/site/xdoc/RedminePlugin.xml | 68 +-
.../src/site/xdoc/ReleaseGuide.xml | 628 +++----
.../src/site/xdoc/RestAPISample.xml | 278 +--
.../src/site/xdoc/RestrictedAccess.xml | 144 +-
.../src/site/xdoc/SakaiPlugin.xml | 220 +--
.../src/site/xdoc/SugarCRMPlugin.xml | 146 +-
.../src/site/xdoc/TimeZoneHandling.xml | 78 +-
openmeetings-server/src/site/xdoc/Upgrade.xml | 192 +--
.../src/site/xdoc/WebappNamePath.xml | 302 ++--
.../src/site/xdoc/WebcamResolutions.xml | 118 +-
.../src/site/xdoc/WebsiteGuide.xml | 160 +-
.../src/site/xdoc/commercial-support.xml | 112 +-
.../src/site/xdoc/installation.xml | 568 +++---
.../src/site/xdoc/red5sip-integration_2.0.xml | 356 ++--
.../src/site/xdoc/themes-and-branding.xml | 122 +-
.../src/site/xdoc/voip-sip-integration.xml | 136 +-
.../service/quartz/scheduler/CleanupJob.java | 358 ++--
openmeetings-service/src/site/site.xml | 80 +-
.../openmeetings/util/ConnectionProperties.java | 172 +-
.../org/apache/openmeetings/util/DaoHelper.java | 214 +--
.../apache/openmeetings/util/OmFileHelper.java | 630 +++----
.../org/apache/openmeetings/util/Version.java | 196 +--
.../apache/openmeetings/util/mail/MailUtil.java | 68 +-
.../util/process/ProcessHelper.java | 232 +--
openmeetings-util/src/site/site.xml | 80 +-
.../openmeetings/web/admin/AdminBaseForm.java | 362 ++--
.../web/admin/SearchableDataView.java | 90 +-
.../web/admin/backup/BackupPanel.java | 484 +++---
.../web/admin/configurations/ConfigForm.java | 286 +--
.../web/admin/configurations/ConfigsPanel.java | 188 +-
.../web/admin/groups/GroupForm.java | 500 +++---
.../web/admin/groups/GroupUsersPanel.html | 90 +-
.../web/admin/groups/GroupUsersPanel.java | 318 ++--
.../web/admin/groups/GroupsPanel.java | 198 +--
.../web/admin/labels/AddLanguageDialog.java | 230 +--
.../web/admin/labels/LabelsForm.java | 224 +--
.../openmeetings/web/admin/labels/LangForm.java | 206 +--
.../openmeetings/web/admin/ldaps/LdapForm.java | 260 +--
.../web/admin/ldaps/LdapsPanel.java | 186 +-
.../openmeetings/web/admin/rooms/RoomForm.java | 824 ++++-----
.../web/admin/rooms/RoomsPanel.java | 182 +-
.../web/admin/servers/ServerForm.java | 280 +--
.../web/admin/servers/ServersPanel.java | 190 +-
.../openmeetings/web/admin/users/UserForm.java | 628 +++----
.../web/app/LabelResourceLoader.java | 130 +-
.../web/common/ConfirmableAjaxBorder.java | 354 ++--
.../openmeetings/web/common/HeaderPanel.html | 52 +-
.../openmeetings/web/common/HeaderPanel.java | 64 +-
.../web/common/OmPagingNavigator.html | 54 +-
.../web/common/OmPagingNavigator.java | 64 +-
.../openmeetings/web/common/menu/MenuPanel.html | 50 +-
.../openmeetings/web/common/menu/MenuPanel.java | 138 +-
.../web/data/DataViewContainer.java | 106 +-
.../openmeetings/web/data/OmOrderByBorder.java | 90 +-
.../web/data/SearchableDataProvider.java | 184 +-
.../openmeetings/web/pages/ActivatePage.java | 102 +-
.../openmeetings/web/pages/NotInitedPage.html | 64 +-
.../openmeetings/web/pages/NotInitedPage.java | 80 +-
.../openmeetings/web/pages/ResetPage.html | 50 +-
.../openmeetings/web/pages/ResetPage.java | 88 +-
.../web/pages/auth/KickMessageDialog.html | 56 +-
.../web/pages/auth/KickMessageDialog.java | 116 +-
.../web/pages/auth/ResetPasswordDialog.html | 84 +-
.../web/pages/auth/ResetPasswordDialog.java | 314 ++--
.../openmeetings/web/user/AboutDialog.html | 84 +-
.../openmeetings/web/user/AboutDialog.java | 114 +-
.../openmeetings/web/user/UserInfoDialog.html | 54 +-
.../openmeetings/web/user/UserInfoDialog.java | 166 +-
.../web/user/calendar/AppointmentDialog.html | 242 +--
.../web/user/calendar/AppointmentDialog.java | 1020 +++++------
.../web/user/calendar/AppointmentModel.java | 102 +-
.../web/user/dashboard/MyRoomsWidget.java | 98 +-
.../user/dashboard/MyRoomsWidgetDescriptor.java | 102 +-
.../web/user/dashboard/MyRoomsWidgetView.html | 50 +-
.../web/user/dashboard/MyRoomsWidgetView.java | 72 +-
.../web/user/dashboard/OmDashboardPanel.html | 50 +-
.../web/user/dashboard/OmDashboardPanel.java | 72 +-
.../web/user/dashboard/RecentRoomsWidget.java | 98 +-
.../dashboard/RecentRoomsWidgetDescriptor.java | 102 +-
.../user/dashboard/RecentRoomsWidgetView.html | 50 +-
.../user/dashboard/RecentRoomsWidgetView.java | 76 +-
.../web/user/dashboard/RssWidget.java | 98 +-
.../web/user/dashboard/RssWidgetDescriptor.java | 102 +-
.../web/user/dashboard/RssWidgetView.java | 194 +--
.../web/user/dashboard/StartWidget.java | 96 +-
.../user/dashboard/StartWidgetDescriptor.java | 102 +-
.../web/user/dashboard/StartWidgetView.html | 76 +-
.../web/user/dashboard/StartWidgetView.java | 138 +-
.../web/user/dashboard/WelcomeWidget.java | 96 +-
.../user/dashboard/WelcomeWidgetDescriptor.java | 102 +-
.../web/user/dashboard/WelcomeWidgetView.html | 86 +-
.../web/user/dashboard/WelcomeWidgetView.java | 162 +-
.../web/user/dashboard/admin/AdminWidget.java | 98 +-
.../dashboard/admin/AdminWidgetDescriptor.java | 102 +-
.../user/dashboard/admin/AdminWidgetView.html | 58 +-
.../user/dashboard/admin/AdminWidgetView.java | 108 +-
.../web/user/profile/UserProfilePanel.html | 174 +-
.../web/user/profile/UserProfilePanel.java | 146 +-
.../web/user/profile/UserSearchPanel.html | 136 +-
.../web/user/profile/UserSearchPanel.java | 308 ++--
.../openmeetings/web/user/rooms/RoomsPanel.html | 124 +-
.../openmeetings/web/user/rooms/RoomsPanel.java | 274 +--
.../web/user/rooms/RoomsSelectorPanel.html | 54 +-
.../web/user/rooms/RoomsSelectorPanel.java | 112 +-
.../web/user/rooms/RoomsTabbedPanel.html | 60 +-
.../web/user/rooms/RoomsTabbedPanel.java | 140 +-
.../openmeetings/web/util/AjaxDownload.java | 256 +--
.../src/main/webapp/conf/om_ldap.cfg | 218 +--
.../main/webapp/js/openmeetings_functions.js | 128 +-
.../src/main/webapp/languages/errorvalues.xsd | 82 +-
.../src/main/webapp/public/config.xsd | 262 +--
.../src/main/webapp/public/theme.xml | 660 +++----
.../src/main/webapp/public/theme.xsd | 90 +-
.../src/main/webapp/upload/library.xsd | 136 +-
openmeetings-web/src/site/site.xml | 78 +-
.../openmeetings/test/AbstractWicketTester.java | 154 +-
.../test/backup/TestOldBackups.java | 256 +--
.../openmeetings/test/user/TestUserContact.java | 210 +--
.../openmeetings/test/user/TestUserCount.java | 116 +-
.../webservice/ServerWebService.java | 360 ++--
.../cluster/SlaveHTTPConnectionManager.java | 198 +--
openmeetings-webservice/src/site/site.xml | 80 +-
src/site/site.xml | 154 +-
253 files changed, 25570 insertions(+), 25570 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/NOTICE
----------------------------------------------------------------------
diff --git a/NOTICE b/NOTICE
index 6685a3f..eddf910 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,14 +1,14 @@
-Apache OpenMeetings
-Copyright 2011-2017 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-This product includes icons from FamFamFam Icon Set Silk.
-http://www.famfamfam.com/lab/icons/silk/
-
-This product includes icons from Yusuke Kamiyamane.
-http://p.yusukekamiyamane.com/
-
-This product includes free icons from FatCow.
-http://www.fatcow.com/free-icons
+Apache OpenMeetings
+Copyright 2011-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This product includes icons from FamFamFam Icon Set Silk.
+http://www.famfamfam.com/lab/icons/silk/
+
+This product includes icons from Yusuke Kamiyamane.
+http://p.yusukekamiyamane.com/
+
+This product includes free icons from FatCow.
+http://www.fatcow.com/free-icons
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/README
----------------------------------------------------------------------
diff --git a/README b/README
index 6747d28..fb4c599 100644
--- a/README
+++ b/README
@@ -1,124 +1,124 @@
-Apache OpenMeetings - README
-Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
---------------------------------------------------------------------------------
-
-About
-=====
-Apache OpenMeetings provides video conferencing, instant messaging, white board,
-collaborative document editing and other groupware tools using API functions of
-the Red5 Streaming Server for Remoting and Streaming.
-
-Release Notes 3.2.1
-=============
-see CHANGELOG file for detailed log
-
-Service release 1 for 3.2.0, provides following improvements:
-
-Room
-* Video is more stable
-* Office files download is fixed
-* Multi-upload is added
-* External video works as expected
-* WB drawing on slides works as expected
-
-Chat
-* chat is made resizable
-* multiple issues in chat are fixed
-* typing indicator is added
-
-Calendar
-* date/time validator is improved
-* whole group can be invited by admin to event
-
-Other fixes and improvements, 49 issues were fixed
-
-
-=============
-_Integration with Asterisk_
-SIP/VOIP integration with Asterisk was refactored.
-Confbridge application is now used instead of Meetme for the conferences.
-Sound quality and SIP transport stability was significantly improved.
-Basic support for video is added (is unstable and in beta version stage now).
-See also: http://openmeetings.apache.org/red5sip-integration_2.1.html
-
-_Improving the sound and video quality_
-All the audio/video related components now use SWF11 for broadcasting and
-receiving audio and video signals.
-Echo cancellation can be enabled in the config.
-H264 video codec is now used instead of H263 to enable SIP video support.
-
-_Private and moderated chat_
-Ability to send private chat messages in the room is added as well as the chat
-moderation funmctionality.
-
-_SMS sending module_
-Possibility to send SMS message as a meeting reminder is added.
-See also: https://cwiki.apache.org/confluence/display/OPENMEETINGS/SMS+Sending+Module
-
-_Network testing tool/script_
-Network testing tool is implemented and its link is added to the login page.
-See also: https://cwiki.apache.org/confluence/display/OPENMEETINGS/Connection+testing+tool
-
-_Improvements in the mail sending process_
-Now e-mails are re-send again in case of unsuccessfull result at the first
-attempt or OpenMeetings re-start before the sending.
-SMTP setting updates now takes effect just after they saving whereas previously
-they started to work after the OpenMeetings re-start only.
-
-_Calendar_
-Messages about the meeting updates are sent only when substantial changes were made.
-Multiple external attendees can be added as one operation, it's now possible to
-specify user name for external guests (user will appear with this name in the user
-list in the room).
-
-_Room Interface_
-Possibility to get invitation link without sending an e-mail was added.
-Confirmation dialog for exclusive audio no longer appears.
-Hot key is added to be able to "rearrange" video windows in the room.
-Volume slider on the video pod toolbar was added.
-
-_Recordings and screen sharing improvements_
-Some improvements for the screen sharing and recordings quality and stability
-were made.
-
-_Cluster capabilities_
-In the beta stage: OpenMeetings can be configured in the cluster environment and
-is ready for the testing, but development has not been fnished yet.
-See also: http://openmeetings.apache.org/Clustering.html,
-https://cwiki.apache.org/confluence/display/OPENMEETINGS/Cluster+Master-Slave+overview
-
-_Admin/Calendar HTML5 UI_
-Additional HTML5 Wicket based UI (fully customizable with CSS) is added for
-static screens as a proof of the concept.
-
-Getting Started
-===============
-Please visit the project website for the latest information:
- http://openmeetings.apache.org/
-
-Documentation for Installation and Upgrade:
- http://openmeetings.apache.org/installation.html
- http://openmeetings.apache.org/Upgrade.html
-
-Along with the developer mailing list archive:
- http://openmeetings.apache.org/mail-lists.html
-
-
-System Requirements
-===================
-You need a platform that supports Sun Java SE 6.
-
-
-Building and running
-====================
-To build from source code:
-
- - Requirements:
- Sources compilation require Sun Java SE 8.
- The project is built with Apache Maven 3.3.9 or later.
-
- - To build the OpenMeetings project run ant in the root directory:
- ant
-
-For a detailed documentation on how to build from source and options see:
- http://openmeetings.apache.org/BuildInstructions.html
+Apache OpenMeetings - README
+Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
+--------------------------------------------------------------------------------
+
+About
+=====
+Apache OpenMeetings provides video conferencing, instant messaging, white board,
+collaborative document editing and other groupware tools using API functions of
+the Red5 Streaming Server for Remoting and Streaming.
+
+Release Notes 3.2.1
+=============
+see CHANGELOG file for detailed log
+
+Service release 1 for 3.2.0, provides following improvements:
+
+Room
+* Video is more stable
+* Office files download is fixed
+* Multi-upload is added
+* External video works as expected
+* WB drawing on slides works as expected
+
+Chat
+* chat is made resizable
+* multiple issues in chat are fixed
+* typing indicator is added
+
+Calendar
+* date/time validator is improved
+* whole group can be invited by admin to event
+
+Other fixes and improvements, 49 issues were fixed
+
+
+=============
+_Integration with Asterisk_
+SIP/VOIP integration with Asterisk was refactored.
+Confbridge application is now used instead of Meetme for the conferences.
+Sound quality and SIP transport stability was significantly improved.
+Basic support for video is added (is unstable and in beta version stage now).
+See also: http://openmeetings.apache.org/red5sip-integration_2.1.html
+
+_Improving the sound and video quality_
+All the audio/video related components now use SWF11 for broadcasting and
+receiving audio and video signals.
+Echo cancellation can be enabled in the config.
+H264 video codec is now used instead of H263 to enable SIP video support.
+
+_Private and moderated chat_
+Ability to send private chat messages in the room is added as well as the chat
+moderation funmctionality.
+
+_SMS sending module_
+Possibility to send SMS message as a meeting reminder is added.
+See also: https://cwiki.apache.org/confluence/display/OPENMEETINGS/SMS+Sending+Module
+
+_Network testing tool/script_
+Network testing tool is implemented and its link is added to the login page.
+See also: https://cwiki.apache.org/confluence/display/OPENMEETINGS/Connection+testing+tool
+
+_Improvements in the mail sending process_
+Now e-mails are re-send again in case of unsuccessfull result at the first
+attempt or OpenMeetings re-start before the sending.
+SMTP setting updates now takes effect just after they saving whereas previously
+they started to work after the OpenMeetings re-start only.
+
+_Calendar_
+Messages about the meeting updates are sent only when substantial changes were made.
+Multiple external attendees can be added as one operation, it's now possible to
+specify user name for external guests (user will appear with this name in the user
+list in the room).
+
+_Room Interface_
+Possibility to get invitation link without sending an e-mail was added.
+Confirmation dialog for exclusive audio no longer appears.
+Hot key is added to be able to "rearrange" video windows in the room.
+Volume slider on the video pod toolbar was added.
+
+_Recordings and screen sharing improvements_
+Some improvements for the screen sharing and recordings quality and stability
+were made.
+
+_Cluster capabilities_
+In the beta stage: OpenMeetings can be configured in the cluster environment and
+is ready for the testing, but development has not been fnished yet.
+See also: http://openmeetings.apache.org/Clustering.html,
+https://cwiki.apache.org/confluence/display/OPENMEETINGS/Cluster+Master-Slave+overview
+
+_Admin/Calendar HTML5 UI_
+Additional HTML5 Wicket based UI (fully customizable with CSS) is added for
+static screens as a proof of the concept.
+
+Getting Started
+===============
+Please visit the project website for the latest information:
+ http://openmeetings.apache.org/
+
+Documentation for Installation and Upgrade:
+ http://openmeetings.apache.org/installation.html
+ http://openmeetings.apache.org/Upgrade.html
+
+Along with the developer mailing list archive:
+ http://openmeetings.apache.org/mail-lists.html
+
+
+System Requirements
+===================
+You need a platform that supports Sun Java SE 6.
+
+
+Building and running
+====================
+To build from source code:
+
+ - Requirements:
+ Sources compilation require Sun Java SE 8.
+ The project is built with Apache Maven 3.3.9 or later.
+
+ - To build the OpenMeetings project run ant in the root directory:
+ ant
+
+For a detailed documentation on how to build from source and options see:
+ http://openmeetings.apache.org/BuildInstructions.html
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java
index de93393..1520204 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java
@@ -1,200 +1,200 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") + you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.core.data.record.listener.async;
-
-import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_FLV;
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Date;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
-import org.apache.openmeetings.db.entity.record.RecordingMetaData;
-import org.apache.openmeetings.db.entity.record.RecordingMetaData.Status;
-import org.apache.openmeetings.util.OmFileHelper;
-import org.red5.io.IStreamableFile;
-import org.red5.io.ITagWriter;
-import org.red5.logging.Red5LoggerFactory;
-import org.red5.server.api.scope.IScope;
-import org.red5.server.api.service.IStreamableFileService;
-import org.red5.server.api.stream.IStreamableFileFactory;
-import org.red5.server.stream.StreamableFileFactory;
-import org.red5.server.util.ScopeUtils;
-import org.slf4j.Logger;
-
-public abstract class BaseStreamWriter implements Runnable {
- private static final Logger log = Red5LoggerFactory.getLogger(BaseStreamWriter.class, webAppRootKey);
- private final static int MINUTE_MULTIPLIER = 60 * 1000;
- public final static int TIME_TO_WAIT_FOR_FRAME = 15 * MINUTE_MULTIPLIER;
- protected int startTimeStamp = -1;
- protected long initialDelta = 0;
-
- // thread is running
- private boolean running = false;
- // thread is stopped
- private boolean stopping = false;
- // thread will be stopped as soon as the queue is empty
- private boolean dostopping = false;
-
- protected ITagWriter writer = null;
-
- protected Long metaDataId = null;
-
- protected Date startedSessionTimeDate = null;
-
- protected File file;
-
- protected IScope scope;
-
- protected boolean isScreenData = false;
-
- protected String streamName = "";
- protected final RecordingMetaDataDao metaDataDao;
- private final BlockingQueue<CachedEvent> queue = new LinkedBlockingQueue<>();
-
- public BaseStreamWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData, RecordingMetaDataDao metaDataDao) {
- startedSessionTimeDate = new Date();
- this.isScreenData = isScreenData;
- this.streamName = streamName;
- this.metaDataId = metaDataId;
- this.metaDataDao = metaDataDao;
- this.scope = scope;
- try {
- init();
- } catch (IOException ex) {
- log.error("##REC:: [BaseStreamWriter] Could not init Thread", ex);
- }
- RecordingMetaData metaData = metaDataDao.get(metaDataId);
- metaData.setStreamStatus(Status.STARTED);
- metaDataDao.update(metaData);
-
- open();
- }
-
- /**
- * Initialization
- *
- * @throws IOException
- * I/O exception
- */
- private void init() throws IOException {
- file = new File(OmFileHelper.getStreamsSubDir(scope.getName()), OmFileHelper.getName(streamName, EXTENSION_FLV));
-
- IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils.getScopeService(scope, IStreamableFileFactory.class,
- StreamableFileFactory.class);
-
- if (!file.isFile()) {
- // Maybe the (previously existing) file has been deleted
- file.createNewFile();
-
- } else if (!file.canWrite()) {
- throw new IOException("The file is read-only");
- }
-
- IStreamableFileService service = factory.getService(file);
- IStreamableFile flv = service.getStreamableFile(file);
- writer = flv.getWriter();
- }
-
- private void open() {
- running = true;
- new Thread(this, "Recording " + file.getName()).start();
- }
-
- public void stop() {
- dostopping = true;
- }
-
- @Override
- public void run() {
- log.debug("##REC:: stream writer started");
- long lastPackedRecieved = System.currentTimeMillis() + TIME_TO_WAIT_FOR_FRAME;
- long counter = 0;
- while (!stopping) {
- try {
- CachedEvent item = queue.poll(100, TimeUnit.MICROSECONDS);
- if (item != null) {
- log.trace("##REC:: got packet");
- lastPackedRecieved = System.currentTimeMillis();
- if (dostopping) {
- log.trace("metadatId: {} :: Recording stopped but still packets to write to file!", metaDataId);
- }
-
- packetReceived(item);
- } else if (dostopping || lastPackedRecieved + TIME_TO_WAIT_FOR_FRAME < System.currentTimeMillis()) {
- log.debug(String.format("##REC:: none packets received for: %s minutes, exiting", (System.currentTimeMillis() - lastPackedRecieved) / MINUTE_MULTIPLIER));
- stopping = true;
- closeStream();
- }
- if (++counter % 5000 == 0) {
- log.debug("##REC:: Stream writer is still listening:: " + file.getName());
- }
- } catch (InterruptedException e) {
- log.error("##REC:: [run]", e);
- }
- }
- log.debug("##REC:: stream writer stopped");
- }
-
- /**
- * Write the actual packet data to the disk and do calculate any needed additional information
- *
- * @param streampacket
- */
- public abstract void packetReceived(CachedEvent streampacket);
-
- protected abstract void internalCloseStream();
- /**
- * called when the stream is finished written on the disk
- */
- public void closeStream() {
- try {
- writer.close();
- } catch (Exception err) {
- log.error("[closeStream, close writer]", err);
- }
- internalCloseStream();
- // Write the complete Bit to the meta data, the converter task will wait for this bit!
- try {
- RecordingMetaData metaData = metaDataDao.get(metaDataId);
- log.debug("##REC:: Stream Status was: {} has been written for: {}", metaData.getStreamStatus(), metaDataId);
- metaData.setStreamStatus(Status.STOPPED);
- metaDataDao.update(metaData);
- } catch (Exception err) {
- log.error("##REC:: [closeStream, complete Bit]", err);
- }
- }
-
- public void append(CachedEvent streampacket) {
- if (!running) {
- throw new IllegalStateException("Append called before the Thread was started!");
- }
- try {
- queue.put(streampacket);
- log.trace("##REC:: Q put, successful: " + queue.size());
- } catch (InterruptedException ignored) {
- log.error("##REC:: [append]", ignored);
- }
- }
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.core.data.record.listener.async;
+
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_FLV;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
+import org.apache.openmeetings.db.entity.record.RecordingMetaData;
+import org.apache.openmeetings.db.entity.record.RecordingMetaData.Status;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.red5.io.IStreamableFile;
+import org.red5.io.ITagWriter;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.scope.IScope;
+import org.red5.server.api.service.IStreamableFileService;
+import org.red5.server.api.stream.IStreamableFileFactory;
+import org.red5.server.stream.StreamableFileFactory;
+import org.red5.server.util.ScopeUtils;
+import org.slf4j.Logger;
+
+public abstract class BaseStreamWriter implements Runnable {
+ private static final Logger log = Red5LoggerFactory.getLogger(BaseStreamWriter.class, webAppRootKey);
+ private final static int MINUTE_MULTIPLIER = 60 * 1000;
+ public final static int TIME_TO_WAIT_FOR_FRAME = 15 * MINUTE_MULTIPLIER;
+ protected int startTimeStamp = -1;
+ protected long initialDelta = 0;
+
+ // thread is running
+ private boolean running = false;
+ // thread is stopped
+ private boolean stopping = false;
+ // thread will be stopped as soon as the queue is empty
+ private boolean dostopping = false;
+
+ protected ITagWriter writer = null;
+
+ protected Long metaDataId = null;
+
+ protected Date startedSessionTimeDate = null;
+
+ protected File file;
+
+ protected IScope scope;
+
+ protected boolean isScreenData = false;
+
+ protected String streamName = "";
+ protected final RecordingMetaDataDao metaDataDao;
+ private final BlockingQueue<CachedEvent> queue = new LinkedBlockingQueue<>();
+
+ public BaseStreamWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData, RecordingMetaDataDao metaDataDao) {
+ startedSessionTimeDate = new Date();
+ this.isScreenData = isScreenData;
+ this.streamName = streamName;
+ this.metaDataId = metaDataId;
+ this.metaDataDao = metaDataDao;
+ this.scope = scope;
+ try {
+ init();
+ } catch (IOException ex) {
+ log.error("##REC:: [BaseStreamWriter] Could not init Thread", ex);
+ }
+ RecordingMetaData metaData = metaDataDao.get(metaDataId);
+ metaData.setStreamStatus(Status.STARTED);
+ metaDataDao.update(metaData);
+
+ open();
+ }
+
+ /**
+ * Initialization
+ *
+ * @throws IOException
+ * I/O exception
+ */
+ private void init() throws IOException {
+ file = new File(OmFileHelper.getStreamsSubDir(scope.getName()), OmFileHelper.getName(streamName, EXTENSION_FLV));
+
+ IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils.getScopeService(scope, IStreamableFileFactory.class,
+ StreamableFileFactory.class);
+
+ if (!file.isFile()) {
+ // Maybe the (previously existing) file has been deleted
+ file.createNewFile();
+
+ } else if (!file.canWrite()) {
+ throw new IOException("The file is read-only");
+ }
+
+ IStreamableFileService service = factory.getService(file);
+ IStreamableFile flv = service.getStreamableFile(file);
+ writer = flv.getWriter();
+ }
+
+ private void open() {
+ running = true;
+ new Thread(this, "Recording " + file.getName()).start();
+ }
+
+ public void stop() {
+ dostopping = true;
+ }
+
+ @Override
+ public void run() {
+ log.debug("##REC:: stream writer started");
+ long lastPackedRecieved = System.currentTimeMillis() + TIME_TO_WAIT_FOR_FRAME;
+ long counter = 0;
+ while (!stopping) {
+ try {
+ CachedEvent item = queue.poll(100, TimeUnit.MICROSECONDS);
+ if (item != null) {
+ log.trace("##REC:: got packet");
+ lastPackedRecieved = System.currentTimeMillis();
+ if (dostopping) {
+ log.trace("metadatId: {} :: Recording stopped but still packets to write to file!", metaDataId);
+ }
+
+ packetReceived(item);
+ } else if (dostopping || lastPackedRecieved + TIME_TO_WAIT_FOR_FRAME < System.currentTimeMillis()) {
+ log.debug(String.format("##REC:: none packets received for: %s minutes, exiting", (System.currentTimeMillis() - lastPackedRecieved) / MINUTE_MULTIPLIER));
+ stopping = true;
+ closeStream();
+ }
+ if (++counter % 5000 == 0) {
+ log.debug("##REC:: Stream writer is still listening:: " + file.getName());
+ }
+ } catch (InterruptedException e) {
+ log.error("##REC:: [run]", e);
+ }
+ }
+ log.debug("##REC:: stream writer stopped");
+ }
+
+ /**
+ * Write the actual packet data to the disk and do calculate any needed additional information
+ *
+ * @param streampacket
+ */
+ public abstract void packetReceived(CachedEvent streampacket);
+
+ protected abstract void internalCloseStream();
+ /**
+ * called when the stream is finished written on the disk
+ */
+ public void closeStream() {
+ try {
+ writer.close();
+ } catch (Exception err) {
+ log.error("[closeStream, close writer]", err);
+ }
+ internalCloseStream();
+ // Write the complete Bit to the meta data, the converter task will wait for this bit!
+ try {
+ RecordingMetaData metaData = metaDataDao.get(metaDataId);
+ log.debug("##REC:: Stream Status was: {} has been written for: {}", metaData.getStreamStatus(), metaDataId);
+ metaData.setStreamStatus(Status.STOPPED);
+ metaDataDao.update(metaData);
+ } catch (Exception err) {
+ log.error("##REC:: [closeStream, complete Bit]", err);
+ }
+ }
+
+ public void append(CachedEvent streampacket) {
+ if (!running) {
+ throw new IllegalStateException("Append called before the Thread was started!");
+ }
+ try {
+ queue.put(streampacket);
+ log.trace("##REC:: Q put, successful: " + queue.size());
+ } catch (InterruptedException ignored) {
+ log.error("##REC:: [append]", ignored);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/CachedEvent.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/CachedEvent.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/CachedEvent.java
index 433cf80..4184290 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/CachedEvent.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/CachedEvent.java
@@ -1,76 +1,76 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") + you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.core.data.record.listener.async;
-
-import java.util.Date;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.red5.server.api.stream.IStreamPacket;
-import org.red5.server.net.rtmp.event.VideoData.FrameType;
-
-public class CachedEvent implements IStreamPacket {
- private byte dataType;
- private int timestamp; //this is the timeStamp, showing the time elapsed since the microphone was turned on
- private IoBuffer data;
- private Date currentTime; //this is the actually current timeStamp when the packet with audio data did enter the server
- private FrameType frameType = FrameType.UNKNOWN;
-
- public Date getCurrentTime() {
- return currentTime;
- }
-
- public void setCurrentTime(Date currentTime) {
- this.currentTime = currentTime;
- }
-
- public void setDataType(byte dataType) {
- this.dataType = dataType;
- }
-
- public void setTimestamp(int timestamp) {
- this.timestamp = timestamp;
- }
-
- public void setData(IoBuffer data) {
- this.data = data;
- }
-
- @Override
- public byte getDataType() {
- return dataType;
- }
-
- @Override
- public int getTimestamp() {
- return timestamp;
- }
-
- @Override
- public IoBuffer getData() {
- return data;
- }
-
- public FrameType getFrameType() {
- return frameType;
- }
-
- public void setFrameType(FrameType frameType) {
- this.frameType = frameType;
- }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.core.data.record.listener.async;
+
+import java.util.Date;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.red5.server.api.stream.IStreamPacket;
+import org.red5.server.net.rtmp.event.VideoData.FrameType;
+
+public class CachedEvent implements IStreamPacket {
+ private byte dataType;
+ private int timestamp; //this is the timeStamp, showing the time elapsed since the microphone was turned on
+ private IoBuffer data;
+ private Date currentTime; //this is the actually current timeStamp when the packet with audio data did enter the server
+ private FrameType frameType = FrameType.UNKNOWN;
+
+ public Date getCurrentTime() {
+ return currentTime;
+ }
+
+ public void setCurrentTime(Date currentTime) {
+ this.currentTime = currentTime;
+ }
+
+ public void setDataType(byte dataType) {
+ this.dataType = dataType;
+ }
+
+ public void setTimestamp(int timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ public void setData(IoBuffer data) {
+ this.data = data;
+ }
+
+ @Override
+ public byte getDataType() {
+ return dataType;
+ }
+
+ @Override
+ public int getTimestamp() {
+ return timestamp;
+ }
+
+ @Override
+ public IoBuffer getData() {
+ return data;
+ }
+
+ public FrameType getFrameType() {
+ return frameType;
+ }
+
+ public void setFrameType(FrameType frameType) {
+ this.frameType = frameType;
+ }
+}
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamAudioWriter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamAudioWriter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamAudioWriter.java
index a7391a6..736fea6 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamAudioWriter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamAudioWriter.java
@@ -1,228 +1,228 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") + you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.core.data.record.listener.async;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-import static org.red5.io.IoConstants.TYPE_AUDIO;
-import static org.red5.server.net.rtmp.event.VideoData.FrameType.KEYFRAME;
-
-import java.util.Date;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
-import org.apache.openmeetings.db.dao.record.RecordingMetaDeltaDao;
-import org.apache.openmeetings.db.entity.record.RecordingMetaData;
-import org.apache.openmeetings.db.entity.record.RecordingMetaDelta;
-import org.red5.io.ITag;
-import org.red5.io.flv.impl.Tag;
-import org.red5.logging.Red5LoggerFactory;
-import org.red5.server.api.scope.IScope;
-import org.slf4j.Logger;
-
-public class StreamAudioWriter extends BaseStreamWriter {
- private static final Logger log = Red5LoggerFactory.getLogger(StreamAudioWriter.class, webAppRootKey);
-
- private int duration = 0;
-
- private Integer lastTimeStamp = -1;
- private Date lastcurrentTime = null;
-
- private int lastStreamPacketTimeStamp = -1;
-
- private long byteCount = 0;
-
- // Autowire is not possible
- protected final RecordingMetaDeltaDao metaDeltaDao;
-
- private boolean isInterview = false;
-
- public StreamAudioWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,
- boolean isInterview, RecordingMetaDataDao metaDataDao, RecordingMetaDeltaDao metaDeltaDao) {
- super(streamName, scope, metaDataId, isScreenData, metaDataDao);
-
- this.metaDeltaDao = metaDeltaDao;
- this.isInterview = isInterview;
- }
-
- @Override
- public void packetReceived(CachedEvent streampacket) {
- try {
- // We only care about audio at this moment
- if (isInterview || TYPE_AUDIO == streampacket.getDataType()) {
- if (streampacket.getTimestamp() <= 0) {
- log.warn("##REC:: Negative TimeStamp");
- return;
- }
- // we should not skip audio data in case it is Audio only interview
- if (isInterview && isScreenData && startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {
- //skip until keyframe
- log.trace("##REC:: no KEYFRAME, skipping");
- return;
- }
- IoBuffer data = streampacket.getData().asReadOnlyBuffer();
- if (data.limit() == 0) {
- log.trace("##REC:: data.limit() == 0 ");
- return;
- }
-
- byteCount += data.limit();
-
- lastcurrentTime = streampacket.getCurrentTime();
- int timeStamp = streampacket.getTimestamp();
- Date virtualTime = streampacket.getCurrentTime();
-
- if (startTimeStamp == -1) {
- // Calculate the delta between the initial start and the first audio-packet data
-
- initialDelta = virtualTime.getTime() - startedSessionTimeDate.getTime();
-
- RecordingMetaDelta metaDelta = new RecordingMetaDelta();
-
- metaDelta.setDeltaTime(initialDelta);
- metaDelta.setMetaDataId(metaDataId);
- metaDelta.setTimeStamp(0);
- metaDelta.setDebugStatus("INIT AUDIO");
- metaDelta.setStartPadding(true);
- metaDelta.setEndPadding(false);
- metaDelta.setDataLengthPacket(data.limit());
- metaDelta.setReceivedAudioDataLength(byteCount);
- metaDelta.setStartTime(startedSessionTimeDate);
- metaDelta.setPacketTimeStamp(streampacket.getTimestamp());
-
- Long deltaTimeStamp = virtualTime.getTime() - startedSessionTimeDate.getTime();
-
- metaDelta.setDuration(0);
-
- Long missingTime = deltaTimeStamp - 0;
-
- metaDelta.setMissingTime(missingTime);
-
- metaDelta.setCurrentTime(virtualTime);
- metaDelta.setDeltaTimeStamp(deltaTimeStamp);
- metaDelta.setStartTimeStamp(startTimeStamp);
-
- metaDeltaDao.add(metaDelta);
-
- // That will be not bigger then long value
- startTimeStamp = streampacket.getTimestamp();
-
- RecordingMetaData metaData = metaDataDao.get(metaDataId);
- metaData.setRecordStart(virtualTime);
- metaDataDao.update(metaData);
- }
-
- lastStreamPacketTimeStamp = streampacket.getTimestamp();
-
- timeStamp -= startTimeStamp;
-
- // Offset at the beginning is calculated above
- long deltaTime = lastTimeStamp == -1 ? 0 : timeStamp - lastTimeStamp;
-
- Long preLastTimeStamp = Long.parseLong(lastTimeStamp.toString());
-
- lastTimeStamp = timeStamp;
-
- if (deltaTime > 75) {
- RecordingMetaDelta metaDelta = new RecordingMetaDelta();
-
- metaDelta.setDeltaTime(deltaTime);
- metaDelta.setMetaDataId(metaDataId);
- metaDelta.setTimeStamp(timeStamp);
- metaDelta.setDebugStatus("RUN AUDIO");
- metaDelta.setStartPadding(false);
- metaDelta.setLastTimeStamp(preLastTimeStamp);
- metaDelta.setEndPadding(false);
- metaDelta.setDataLengthPacket(data.limit());
- metaDelta.setReceivedAudioDataLength(byteCount);
- metaDelta.setStartTime(startedSessionTimeDate);
- metaDelta.setPacketTimeStamp(streampacket.getTimestamp());
-
- Date current_date = new Date();
- Long deltaTimeStamp = current_date.getTime() - startedSessionTimeDate.getTime();
-
- duration = Math.max(duration, timeStamp + writer.getOffset());
- metaDelta.setDuration(duration);
-
- Long missingTime = deltaTimeStamp - timeStamp;
-
- metaDelta.setMissingTime(missingTime);
-
- metaDelta.setCurrentTime(current_date);
- metaDelta.setDeltaTimeStamp(deltaTimeStamp);
- metaDelta.setStartTimeStamp(startTimeStamp);
-
- metaDeltaDao.add(metaDelta);
- }
-
- log.trace("##REC:: timeStamp :: " + timeStamp);
- ITag tag = new Tag();
- tag.setDataType(streampacket.getDataType());
-
- // log.debug("data.limit() :: "+data.limit());
- tag.setBodySize(data.limit());
- tag.setTimestamp(timeStamp);
- tag.setBody(data);
-
- writer.writeTag(tag);
-
- }
- } catch (Exception e) {
- log.error("##REC:: [packetReceived]", e);
- }
- }
-
- @Override
- protected void internalCloseStream() {
- try {
- // We do not add any End Padding or count the gaps for the
- // Screen Data, cause there is no!
-
- Date virtualTime = lastcurrentTime;
- log.debug("##REC:: virtualTime: " + virtualTime);
- log.debug("##REC:: startedSessionTimeDate: " + startedSessionTimeDate);
-
- long deltaRecordingTime = virtualTime == null ? 0 : virtualTime.getTime() - startedSessionTimeDate.getTime();
-
- log.debug("##REC:: lastTimeStamp :closeStream: " + lastTimeStamp);
- log.debug("##REC:: lastStreamPacketTimeStamp :closeStream: " + lastStreamPacketTimeStamp);
- log.debug("##REC:: deltaRecordingTime :closeStream: " + deltaRecordingTime);
-
- long deltaTimePaddingEnd = deltaRecordingTime - lastTimeStamp - initialDelta;
-
- log.debug("##REC:: deltaTimePaddingEnd :: " + deltaTimePaddingEnd);
-
- RecordingMetaDelta metaDelta = new RecordingMetaDelta();
-
- metaDelta.setDeltaTime(deltaTimePaddingEnd);
- metaDelta.setMetaDataId(metaDataId);
- metaDelta.setTimeStamp(lastTimeStamp);
- metaDelta.setDebugStatus("END AUDIO");
- metaDelta.setStartPadding(false);
- metaDelta.setEndPadding(true);
- metaDelta.setDataLengthPacket(null);
- metaDelta.setReceivedAudioDataLength(byteCount);
- metaDelta.setStartTime(startedSessionTimeDate);
- metaDelta.setCurrentTime(new Date());
-
- metaDeltaDao.add(metaDelta);
- } catch (Exception err) {
- log.error("##REC:: [internalCloseStream]", err);
- }
- }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.core.data.record.listener.async;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.red5.io.IoConstants.TYPE_AUDIO;
+import static org.red5.server.net.rtmp.event.VideoData.FrameType.KEYFRAME;
+
+import java.util.Date;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
+import org.apache.openmeetings.db.dao.record.RecordingMetaDeltaDao;
+import org.apache.openmeetings.db.entity.record.RecordingMetaData;
+import org.apache.openmeetings.db.entity.record.RecordingMetaDelta;
+import org.red5.io.ITag;
+import org.red5.io.flv.impl.Tag;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.scope.IScope;
+import org.slf4j.Logger;
+
+public class StreamAudioWriter extends BaseStreamWriter {
+ private static final Logger log = Red5LoggerFactory.getLogger(StreamAudioWriter.class, webAppRootKey);
+
+ private int duration = 0;
+
+ private Integer lastTimeStamp = -1;
+ private Date lastcurrentTime = null;
+
+ private int lastStreamPacketTimeStamp = -1;
+
+ private long byteCount = 0;
+
+ // Autowire is not possible
+ protected final RecordingMetaDeltaDao metaDeltaDao;
+
+ private boolean isInterview = false;
+
+ public StreamAudioWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,
+ boolean isInterview, RecordingMetaDataDao metaDataDao, RecordingMetaDeltaDao metaDeltaDao) {
+ super(streamName, scope, metaDataId, isScreenData, metaDataDao);
+
+ this.metaDeltaDao = metaDeltaDao;
+ this.isInterview = isInterview;
+ }
+
+ @Override
+ public void packetReceived(CachedEvent streampacket) {
+ try {
+ // We only care about audio at this moment
+ if (isInterview || TYPE_AUDIO == streampacket.getDataType()) {
+ if (streampacket.getTimestamp() <= 0) {
+ log.warn("##REC:: Negative TimeStamp");
+ return;
+ }
+ // we should not skip audio data in case it is Audio only interview
+ if (isInterview && isScreenData && startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {
+ //skip until keyframe
+ log.trace("##REC:: no KEYFRAME, skipping");
+ return;
+ }
+ IoBuffer data = streampacket.getData().asReadOnlyBuffer();
+ if (data.limit() == 0) {
+ log.trace("##REC:: data.limit() == 0 ");
+ return;
+ }
+
+ byteCount += data.limit();
+
+ lastcurrentTime = streampacket.getCurrentTime();
+ int timeStamp = streampacket.getTimestamp();
+ Date virtualTime = streampacket.getCurrentTime();
+
+ if (startTimeStamp == -1) {
+ // Calculate the delta between the initial start and the first audio-packet data
+
+ initialDelta = virtualTime.getTime() - startedSessionTimeDate.getTime();
+
+ RecordingMetaDelta metaDelta = new RecordingMetaDelta();
+
+ metaDelta.setDeltaTime(initialDelta);
+ metaDelta.setMetaDataId(metaDataId);
+ metaDelta.setTimeStamp(0);
+ metaDelta.setDebugStatus("INIT AUDIO");
+ metaDelta.setStartPadding(true);
+ metaDelta.setEndPadding(false);
+ metaDelta.setDataLengthPacket(data.limit());
+ metaDelta.setReceivedAudioDataLength(byteCount);
+ metaDelta.setStartTime(startedSessionTimeDate);
+ metaDelta.setPacketTimeStamp(streampacket.getTimestamp());
+
+ Long deltaTimeStamp = virtualTime.getTime() - startedSessionTimeDate.getTime();
+
+ metaDelta.setDuration(0);
+
+ Long missingTime = deltaTimeStamp - 0;
+
+ metaDelta.setMissingTime(missingTime);
+
+ metaDelta.setCurrentTime(virtualTime);
+ metaDelta.setDeltaTimeStamp(deltaTimeStamp);
+ metaDelta.setStartTimeStamp(startTimeStamp);
+
+ metaDeltaDao.add(metaDelta);
+
+ // That will be not bigger then long value
+ startTimeStamp = streampacket.getTimestamp();
+
+ RecordingMetaData metaData = metaDataDao.get(metaDataId);
+ metaData.setRecordStart(virtualTime);
+ metaDataDao.update(metaData);
+ }
+
+ lastStreamPacketTimeStamp = streampacket.getTimestamp();
+
+ timeStamp -= startTimeStamp;
+
+ // Offset at the beginning is calculated above
+ long deltaTime = lastTimeStamp == -1 ? 0 : timeStamp - lastTimeStamp;
+
+ Long preLastTimeStamp = Long.parseLong(lastTimeStamp.toString());
+
+ lastTimeStamp = timeStamp;
+
+ if (deltaTime > 75) {
+ RecordingMetaDelta metaDelta = new RecordingMetaDelta();
+
+ metaDelta.setDeltaTime(deltaTime);
+ metaDelta.setMetaDataId(metaDataId);
+ metaDelta.setTimeStamp(timeStamp);
+ metaDelta.setDebugStatus("RUN AUDIO");
+ metaDelta.setStartPadding(false);
+ metaDelta.setLastTimeStamp(preLastTimeStamp);
+ metaDelta.setEndPadding(false);
+ metaDelta.setDataLengthPacket(data.limit());
+ metaDelta.setReceivedAudioDataLength(byteCount);
+ metaDelta.setStartTime(startedSessionTimeDate);
+ metaDelta.setPacketTimeStamp(streampacket.getTimestamp());
+
+ Date current_date = new Date();
+ Long deltaTimeStamp = current_date.getTime() - startedSessionTimeDate.getTime();
+
+ duration = Math.max(duration, timeStamp + writer.getOffset());
+ metaDelta.setDuration(duration);
+
+ Long missingTime = deltaTimeStamp - timeStamp;
+
+ metaDelta.setMissingTime(missingTime);
+
+ metaDelta.setCurrentTime(current_date);
+ metaDelta.setDeltaTimeStamp(deltaTimeStamp);
+ metaDelta.setStartTimeStamp(startTimeStamp);
+
+ metaDeltaDao.add(metaDelta);
+ }
+
+ log.trace("##REC:: timeStamp :: " + timeStamp);
+ ITag tag = new Tag();
+ tag.setDataType(streampacket.getDataType());
+
+ // log.debug("data.limit() :: "+data.limit());
+ tag.setBodySize(data.limit());
+ tag.setTimestamp(timeStamp);
+ tag.setBody(data);
+
+ writer.writeTag(tag);
+
+ }
+ } catch (Exception e) {
+ log.error("##REC:: [packetReceived]", e);
+ }
+ }
+
+ @Override
+ protected void internalCloseStream() {
+ try {
+ // We do not add any End Padding or count the gaps for the
+ // Screen Data, cause there is no!
+
+ Date virtualTime = lastcurrentTime;
+ log.debug("##REC:: virtualTime: " + virtualTime);
+ log.debug("##REC:: startedSessionTimeDate: " + startedSessionTimeDate);
+
+ long deltaRecordingTime = virtualTime == null ? 0 : virtualTime.getTime() - startedSessionTimeDate.getTime();
+
+ log.debug("##REC:: lastTimeStamp :closeStream: " + lastTimeStamp);
+ log.debug("##REC:: lastStreamPacketTimeStamp :closeStream: " + lastStreamPacketTimeStamp);
+ log.debug("##REC:: deltaRecordingTime :closeStream: " + deltaRecordingTime);
+
+ long deltaTimePaddingEnd = deltaRecordingTime - lastTimeStamp - initialDelta;
+
+ log.debug("##REC:: deltaTimePaddingEnd :: " + deltaTimePaddingEnd);
+
+ RecordingMetaDelta metaDelta = new RecordingMetaDelta();
+
+ metaDelta.setDeltaTime(deltaTimePaddingEnd);
+ metaDelta.setMetaDataId(metaDataId);
+ metaDelta.setTimeStamp(lastTimeStamp);
+ metaDelta.setDebugStatus("END AUDIO");
+ metaDelta.setStartPadding(false);
+ metaDelta.setEndPadding(true);
+ metaDelta.setDataLengthPacket(null);
+ metaDelta.setReceivedAudioDataLength(byteCount);
+ metaDelta.setStartTime(startedSessionTimeDate);
+ metaDelta.setCurrentTime(new Date());
+
+ metaDeltaDao.add(metaDelta);
+ } catch (Exception err) {
+ log.error("##REC:: [internalCloseStream]", err);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamVideoWriter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamVideoWriter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamVideoWriter.java
index 169379d..8596042 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamVideoWriter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamVideoWriter.java
@@ -1,98 +1,98 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") + you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.core.data.record.listener.async;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-import static org.red5.server.net.rtmp.event.VideoData.FrameType.KEYFRAME;
-
-import java.util.Date;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
-import org.apache.openmeetings.db.entity.record.RecordingMetaData;
-import org.red5.io.ITag;
-import org.red5.io.flv.impl.Tag;
-import org.red5.logging.Red5LoggerFactory;
-import org.red5.server.api.scope.IScope;
-import org.slf4j.Logger;
-
-public class StreamVideoWriter extends BaseStreamWriter {
- private static final Logger log = Red5LoggerFactory.getLogger(StreamVideoWriter.class, webAppRootKey);
- private Date startedSessionScreenTimeDate = null;
-
- public StreamVideoWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,
- RecordingMetaDataDao metaDataDao) {
-
- super(streamName, scope, metaDataId, isScreenData, metaDataDao);
- }
-
- @Override
- public void packetReceived(CachedEvent streampacket) {
- try {
- int timeStamp = streampacket.getTimestamp();
- log.trace("incoming timeStamp :: " + timeStamp);
- if (startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {
- //skip until keyframe
- log.trace("no KEYFRAME, skipping ::" + streampacket.getFrameType());
- return;
- }
- if (timeStamp <= 0) {
- log.warn("Negative TimeStamp");
- return;
- }
- IoBuffer data = streampacket.getData().asReadOnlyBuffer();
- if (data.limit() == 0) {
- log.trace("Data.limit() == 0");
- return;
- }
- Date virtualTime = streampacket.getCurrentTime();
-
- if (startedSessionScreenTimeDate == null) {
- startedSessionScreenTimeDate = virtualTime;
-
- RecordingMetaData metaData = metaDataDao.get(metaDataId);
- metaData.setRecordStart(virtualTime);
- metaDataDao.update(metaData);
- }
-
- if (startTimeStamp == -1) {
- // That will be not bigger then long value
- startTimeStamp = timeStamp;
- }
-
- timeStamp -= startTimeStamp;
-
- log.trace("timeStamp :: " + timeStamp);
- ITag tag = new Tag();
- tag.setDataType(streampacket.getDataType());
-
- tag.setBodySize(data.limit());
- tag.setTimestamp(timeStamp);
- tag.setBody(data);
-
- writer.writeTag(tag);
- } catch (Exception e) {
- log.error("[packetReceived]", e);
- }
- }
-
- @Override
- protected void internalCloseStream() {
- }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.core.data.record.listener.async;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.red5.server.net.rtmp.event.VideoData.FrameType.KEYFRAME;
+
+import java.util.Date;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
+import org.apache.openmeetings.db.entity.record.RecordingMetaData;
+import org.red5.io.ITag;
+import org.red5.io.flv.impl.Tag;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.scope.IScope;
+import org.slf4j.Logger;
+
+public class StreamVideoWriter extends BaseStreamWriter {
+ private static final Logger log = Red5LoggerFactory.getLogger(StreamVideoWriter.class, webAppRootKey);
+ private Date startedSessionScreenTimeDate = null;
+
+ public StreamVideoWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,
+ RecordingMetaDataDao metaDataDao) {
+
+ super(streamName, scope, metaDataId, isScreenData, metaDataDao);
+ }
+
+ @Override
+ public void packetReceived(CachedEvent streampacket) {
+ try {
+ int timeStamp = streampacket.getTimestamp();
+ log.trace("incoming timeStamp :: " + timeStamp);
+ if (startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {
+ //skip until keyframe
+ log.trace("no KEYFRAME, skipping ::" + streampacket.getFrameType());
+ return;
+ }
+ if (timeStamp <= 0) {
+ log.warn("Negative TimeStamp");
+ return;
+ }
+ IoBuffer data = streampacket.getData().asReadOnlyBuffer();
+ if (data.limit() == 0) {
+ log.trace("Data.limit() == 0");
+ return;
+ }
+ Date virtualTime = streampacket.getCurrentTime();
+
+ if (startedSessionScreenTimeDate == null) {
+ startedSessionScreenTimeDate = virtualTime;
+
+ RecordingMetaData metaData = metaDataDao.get(metaDataId);
+ metaData.setRecordStart(virtualTime);
+ metaDataDao.update(metaData);
+ }
+
+ if (startTimeStamp == -1) {
+ // That will be not bigger then long value
+ startTimeStamp = timeStamp;
+ }
+
+ timeStamp -= startTimeStamp;
+
+ log.trace("timeStamp :: " + timeStamp);
+ ITag tag = new Tag();
+ tag.setDataType(streampacket.getDataType());
+
+ tag.setBodySize(data.limit());
+ tag.setTimestamp(timeStamp);
+ tag.setBody(data);
+
+ writer.writeTag(tag);
+ } catch (Exception e) {
+ log.error("[packetReceived]", e);
+ }
+ }
+
+ @Override
+ protected void internalCloseStream() {
+ }
+}
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/SMSHandler.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/SMSHandler.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/SMSHandler.java
index 89d62b4..bf17d61 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/SMSHandler.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/SMSHandler.java
@@ -1,118 +1,118 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") + you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.core.mail;
-
-import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.openmeetings.util.OpenmeetingsVariables;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-import org.smslib.Message.MessageEncodings;
-import org.smslib.OutboundMessage;
-import org.smslib.Service;
-import org.smslib.http.BulkSmsHTTPGateway;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.task.TaskExecutor;
-
-/**
- *
- * @author iarkh
- *
- */
-
-public class SMSHandler {
-
- private static final Logger log = Red5LoggerFactory.getLogger(
- SMSHandler.class, OpenmeetingsVariables.webAppRootKey);
-
- @Autowired
- protected ConfigurationDao configurationDao;
- @Autowired
- protected TaskExecutor taskExecutor;
-
- private BulkSmsHTTPGateway gateway = null;
-
- private boolean checkBalance() throws Exception {
- if (gateway == null) {
- String smsProvider = configurationDao.getConfValue("sms.provider", String.class, null);
- String smsUsername = configurationDao.getConfValue("sms.username", String.class, null);
- String smsUserpass = configurationDao.getConfValue("sms.userpass", String.class, null);
-
- if (smsProvider == null || smsProvider.length() == 0 ||
- smsUsername == null || smsUsername.length() == 0) {
- log.error("SMS Provider is not configured properly!");
- return false;
- }
- gateway = new BulkSmsHTTPGateway(smsProvider, smsUsername, smsUserpass);
- gateway.setOutbound(true);
- Service.getInstance().addGateway(gateway);
- Service.getInstance().startService();
- }
- return gateway.queryBalance() >= 1;
- }
-
- public boolean sendSMS(String phone, String subj, long languageId) {
- try {
- taskExecutor.execute(new SMSSenderTask(phone, subj, languageId));
- return true;
- } catch (Exception ex) {
- log.error("sendSMS", ex);
- return false;
- }
- }
-
- protected class SMSSenderTask implements Runnable {
- private final String phone;
- private final String subject;
- private long languageId;
-
- public SMSSenderTask(String phone, String subject, long languageId) {
- this.phone = phone;
- this.subject = subject;
- this.languageId = languageId;
- }
-
- @Override
- public void run() {
- this.send();
- }
-
- /**
- * Sending an SMS with the given values.
- * @return <code>true</code> if sms was sent successfully, <code>false</code> otherwise.
- */
- public boolean send() {
- try {
- log.debug("SMS sending to: " + phone + ", subject is: " + subject);
- if (checkBalance()) {
- OutboundMessage msg = new OutboundMessage(phone, subject);
- if (languageId != 1) {
- msg.setEncoding(MessageEncodings.ENCUCS2);
- }
- return Service.getInstance().sendMessage(msg);
- } else {
- log.error("Error: insufficient funds on SMS provider account!");
- return false;
- }
- } catch (Exception ex) {
- log.error("Error sending sms: ", ex);
- return false;
- }
- }
- }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.core.mail;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.smslib.Message.MessageEncodings;
+import org.smslib.OutboundMessage;
+import org.smslib.Service;
+import org.smslib.http.BulkSmsHTTPGateway;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.task.TaskExecutor;
+
+/**
+ *
+ * @author iarkh
+ *
+ */
+
+public class SMSHandler {
+
+ private static final Logger log = Red5LoggerFactory.getLogger(
+ SMSHandler.class, OpenmeetingsVariables.webAppRootKey);
+
+ @Autowired
+ protected ConfigurationDao configurationDao;
+ @Autowired
+ protected TaskExecutor taskExecutor;
+
+ private BulkSmsHTTPGateway gateway = null;
+
+ private boolean checkBalance() throws Exception {
+ if (gateway == null) {
+ String smsProvider = configurationDao.getConfValue("sms.provider", String.class, null);
+ String smsUsername = configurationDao.getConfValue("sms.username", String.class, null);
+ String smsUserpass = configurationDao.getConfValue("sms.userpass", String.class, null);
+
+ if (smsProvider == null || smsProvider.length() == 0 ||
+ smsUsername == null || smsUsername.length() == 0) {
+ log.error("SMS Provider is not configured properly!");
+ return false;
+ }
+ gateway = new BulkSmsHTTPGateway(smsProvider, smsUsername, smsUserpass);
+ gateway.setOutbound(true);
+ Service.getInstance().addGateway(gateway);
+ Service.getInstance().startService();
+ }
+ return gateway.queryBalance() >= 1;
+ }
+
+ public boolean sendSMS(String phone, String subj, long languageId) {
+ try {
+ taskExecutor.execute(new SMSSenderTask(phone, subj, languageId));
+ return true;
+ } catch (Exception ex) {
+ log.error("sendSMS", ex);
+ return false;
+ }
+ }
+
+ protected class SMSSenderTask implements Runnable {
+ private final String phone;
+ private final String subject;
+ private long languageId;
+
+ public SMSSenderTask(String phone, String subject, long languageId) {
+ this.phone = phone;
+ this.subject = subject;
+ this.languageId = languageId;
+ }
+
+ @Override
+ public void run() {
+ this.send();
+ }
+
+ /**
+ * Sending an SMS with the given values.
+ * @return <code>true</code> if sms was sent successfully, <code>false</code> otherwise.
+ */
+ public boolean send() {
+ try {
+ log.debug("SMS sending to: " + phone + ", subject is: " + subject);
+ if (checkBalance()) {
+ OutboundMessage msg = new OutboundMessage(phone, subject);
+ if (languageId != 1) {
+ msg.setEncoding(MessageEncodings.ENCUCS2);
+ }
+ return Service.getInstance().sendMessage(msg);
+ } else {
+ log.error("Error: insufficient funds on SMS provider account!");
+ return false;
+ }
+ } catch (Exception ex) {
+ log.error("Error sending sms: ", ex);
+ return false;
+ }
+ }
+ }
+}