<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright 1999-2004 The Apache Software Foundation
Licensed 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.
-->

    <!-- ====================================================================== -->
    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE TEMPLATE INSTEAD! -->
    <!-- Main Page Section -->
    <!-- ====================================================================== -->
    
     <html>
        <head>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
		<meta name="author" content="OpenMeetings Team">
		<meta name="email" content="sebawagner@apache.org">
		<title>OpenMeetings API Classes</title>
		<link rel="stylesheet" type="text/css" href="openmeetings_docs.css">
        </head>
	<body>
			
       <div class="navigation">
	               <div>
            <a href="CalendarService.html" target="_PARENT"><b>CalendarService</b></a><br/>
            <div class="navigation_comment"><i >CalendarService contains methods to create, edit delete calendar meetings</i></div>
            </div>
                    <div>
            <a href="FileService.html" target="_PARENT"><b>FileService</b></a><br/>
            <div class="navigation_comment"><i >Contains methods to import and upload files into the Files section of the
 conference room and the personal drive of any user</i></div>
            </div>
                    <div>
            <a href="JabberService.html" target="_PARENT"><b>JabberService</b></a><br/>
            <div class="navigation_comment"><i >This class provides method implementations necessary for OM to Jabber integration.</i></div>
            </div>
                    <div>
            <a href="RoomService.html" target="_PARENT"><b>RoomService</b></a><br/>
            <div class="navigation_comment"><i >RoomService contains methods to manipulate rooms and create invitation hash</i></div>
            </div>
                    <div>
            <a href="ServerService.html" target="_PARENT"><b>ServerService</b></a><br/>
            <div class="navigation_comment"><i >This class provides method implementations necessary for OM to manage servers
 participating in cluster.</i></div>
            </div>
                    <div>
            <a href="UserService.html" target="_PARENT"><b>UserService</b></a><br/>
            <div class="navigation_comment"><i >The Service contains methods to login and create hash to directly enter
 conference rooms, recordings or the application in general</i></div>
            </div>
                </div>
	
	
	</body>
	</html>