[asterisk-scf-commits] asterisk-scf/integration/sip.git branch "master" created.

Commits to the Asterisk SCF project code repositories asterisk-scf-commits at lists.digium.com
Wed Aug 18 14:24:04 CDT 2010


branch "master" has been created
        at  a21c5d84e24269377087dd322a0a9bdca90780a8 (commit)

- Log -----------------------------------------------------------------
commit a21c5d84e24269377087dd322a0a9bdca90780a8
Author: Mark Michelson <mmichelson at digium.com>
Date:   Wed Aug 18 13:46:41 2010 -0500

    Creating initial SIP repo.
    
    Includes submodules for core slice and core cmake stuff.
    Also includes a local slice subdirectory for SIP-specific slice, along
    with two nearly empty slice files.
    
    I believe before I push these changes out, I'll combine those two
    slice files together though.

diff --git a/local-slice/SipDataIf.slice b/local-slice/SipDataIf.slice
deleted file mode 100644
index ed3f88b..0000000
--- a/local-slice/SipDataIf.slice
+++ /dev/null
@@ -1,14 +0,0 @@
-module Hydra
-{
-
-module SIP
-{
-
-module Data
-{
-
-}; //module data
-
-}; //module SIP
-
-}; //module Hydra
diff --git a/local-slice/SipIf.ice b/local-slice/SipIf.ice
new file mode 100644
index 0000000..c7360b9
--- /dev/null
+++ b/local-slice/SipIf.ice
@@ -0,0 +1,9 @@
+module Hydra
+{
+
+module SIP
+{
+
+}; //module SIP
+
+}; //module Hydra
diff --git a/local-slice/SipRoleIf.slice b/local-slice/SipRoleIf.slice
deleted file mode 100644
index 3e28846..0000000
--- a/local-slice/SipRoleIf.slice
+++ /dev/null
@@ -1,14 +0,0 @@
-module Hydra
-{
-
-module SIP
-{
-
-module Role
-{
-
-}; //module Role
-
-}; //module SIP
-
-}; //module Hydra

commit eeb23f3d095b49fd24f37d450e0c20bc60723fcb
Author: putnopvut <putnopvut at levin.digium.internal>
Date:   Wed Aug 18 13:46:41 2010 -0500

    Creating initial SIP repo.
    
    Includes submodules for core slice and core cmake stuff.
    Also includes a local slice subdirectory for SIP-specific slice, along
    with two nearly empty slice files.
    
    I believe before I push these changes out, I'll combine those two
    slice files together though.

diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..b16198b
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,6 @@
+[submodule "core-slice"]
+	path = core-slice
+	url = ../../integration/slice
+[submodule "cmake"]
+	path = cmake
+	url = ../../release/cmake
diff --git a/cmake b/cmake
new file mode 160000
index 0000000..ea57b07
--- /dev/null
+++ b/cmake
@@ -0,0 +1 @@
+Subproject commit ea57b072d8f90982c9a97466dd5ec572cb9613df
diff --git a/core-slice/CMakeLists.txt b/core-slice/CMakeLists.txt
new file mode 100644
index 0000000..c8abc9e
--- /dev/null
+++ b/core-slice/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Make all of our slice definitions available to... themselves!
+hydra_slice_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+# Slice definitions for core functionality
+add_subdirectory(Core)
+
+# Slice definitions for media functionality
+add_subdirectory(Media)
+
+# Slice definitions for system infrastructure
+add_subdirectory(System)
+
+# Slice definitions for session-oriented communications 
+add_subdirectory(Session)
diff --git a/core-slice/Core/Bridging/BridgeServiceEventsIf.ice b/core-slice/Core/Bridging/BridgeServiceEventsIf.ice
new file mode 100644
index 0000000..2cbb637
--- /dev/null
+++ b/core-slice/Core/Bridging/BridgeServiceEventsIf.ice
@@ -0,0 +1,24 @@
+#pragma once 
+
+#include <Core/Endpoint/EndpointIf.ice>
+
+module Hydra
+{
+module Core
+{
+module Bridging
+{
+["suppress"]
+module V1
+{
+   interface BridgeEvents
+   {
+      void endpointAdded(Endpoint::V1::BaseEndpoint ep);
+      void endpointRemoved(Endpoint::V1::BaseEndpoint ep);
+      void shuttingDown();
+      void stopped();
+   };
+}; // End of module V1
+}; // End of module Bridging
+}; // End of module Core
+}; // End of module Hydra
diff --git a/core-slice/Core/Bridging/BridgeServiceIf.ice b/core-slice/Core/Bridging/BridgeServiceIf.ice
new file mode 100644
index 0000000..4d5615c
--- /dev/null
+++ b/core-slice/Core/Bridging/BridgeServiceIf.ice
@@ -0,0 +1,99 @@
+#pragma once 
+
+#include <Core/Endpoint/EndpointIf.ice>
+#include <System/Component/ComponentServiceIf.ice>
+
+module Hydra
+{
+module Core
+{
+module Bridging
+{
+["suppress"]
+module V1
+{
+   const string Version = "V1";
+
+   /**
+    * UnknownEndpoint indicates that an operation that depended on locating
+    * a specific ep has failed to find it.
+    */
+   exception UnknownEndpoint 
+   {
+      Endpoint::V1::EndpointId ep;
+   };
+
+   /**
+    * Occurs if two endpoints being added to a bridge collide in some way, including media conflicts, etc.
+    */
+   exception EndpointCollision
+   {
+       Endpoint::V1::EndpointId first;
+       Endpoint::V1::EndpointId second;
+   };
+
+   /**
+    * EndpointAlreadyRegistered indicates that an attempt to register an ep
+    * has failed because it was registered already.
+    */
+   exception EndpointAlreadyRegistered
+   {
+      Endpoint::V1::EndpointId ep;
+   };
+
+   /**
+    * The specified endpoint is not supported by this bridge.
+    */
+   exception UnsupportedEndpoint
+   {
+      Endpoint::V1::EndpointId ep;
+   };
+
+   /**
+    * A Bridge manages the assocation between multiple endpoints participating in
+    * a call.
+    */
+   interface Bridge 
+   { 
+      /**
+       * Adds an endpoint to the bridge. In addition to simply adding the endpoint to a 
+       * list of endpoints participating in the bridge, the bridge object may
+       * perform additional operations including, but not limited to, setting
+       * up transcoding and resampling adapters.
+       * 
+       * @param ep The new endpoint to be added to the bridge.
+       * @throws EndpointAlreadyRegistered thrown when the endpoint
+       */
+      void addEndpoint(Endpoint::V1::BaseEndpoint ep);
+      void removeEndpoint(Endpoint::V1::EndpointId id);
+      Endpoint::V1::EndpointSeq listEndpoints();
+      void shutdown();
+      void destroy();
+   };
+
+   interface BridgeMonitor
+   {
+      bool onAddEndpoint(Endpoint::V1::BaseEndpoint ep);
+      bool onRemoveEndpoint(Endpoint::V1::BaseEndpoint ep);
+      bool onListEndpoints(Endpoint::V1::EndpointSeq input, out Endpoint::V1::EndpointSeq output);
+      bool onShutdown();
+      bool onShutdownComplete();
+      bool onDestroy();
+   };
+
+   interface BridgeFactoryHook
+   {
+      bool onCreateBridge(Endpoint::V1::BaseEndpoint adminEndpoint, Endpoint::V1::EndpointSeq eps);
+      bool onShutdown();
+      bool onShutdownCompleted();
+   };
+
+   interface BridgeFactory extends System::Component::V1::ComponentService
+   {
+      Bridge* createBridge(Endpoint::V1::BaseEndpoint adminEndpoint, Endpoint::V1::EndpointSeq eps, 
+	BridgeMonitor* monitor);
+   };
+}; // End of module V1
+}; // End of module Bridging
+}; // End of module Core
+}; // End of module Hydra
diff --git a/core-slice/Core/Bridging/CMakeLists.txt b/core-slice/Core/Bridging/CMakeLists.txt
new file mode 100644
index 0000000..69011bb
--- /dev/null
+++ b/core-slice/Core/Bridging/CMakeLists.txt
@@ -0,0 +1,3 @@
+# Compile Bridging API 
+hydra_compile_slice(BridgeServiceIf.ice lib "BridgeService API" Core)
+hydra_compile_slice(BridgeServiceEventsIf.ice lib "BridgeService Events API" Core)
diff --git a/core-slice/Core/CMakeLists.txt b/core-slice/Core/CMakeLists.txt
new file mode 100644
index 0000000..0b26c10
--- /dev/null
+++ b/core-slice/Core/CMakeLists.txt
@@ -0,0 +1,11 @@
+# Slice definitions for Discovery functionality
+add_subdirectory(Discovery)
+
+# Slice definitions for Endpoint functionality
+add_subdirectory(Endpoint)
+
+# Slice definitions for Routing functionality
+add_subdirectory(Routing)
+
+# Slice definitions for Bridging components
+add_subdirectory(Bridging)
diff --git a/core-slice/Core/Discovery/CMakeLists.txt b/core-slice/Core/Discovery/CMakeLists.txt
new file mode 100644
index 0000000..5a7e573
--- /dev/null
+++ b/core-slice/Core/Discovery/CMakeLists.txt
@@ -0,0 +1,5 @@
+# Compile our service locator slice definition so we can then use it
+hydra_compile_slice(ServiceLocatorIf.ice lib "Slice Defined API" Core)
+
+# Can't forget about events
+hydra_compile_slice(ServiceLocatorEventsIf.ice lib "Slice Defined API" Core)
diff --git a/core-slice/Core/Discovery/ServiceLocatorEventsIf.ice b/core-slice/Core/Discovery/ServiceLocatorEventsIf.ice
new file mode 100644
index 0000000..33fed53
--- /dev/null
+++ b/core-slice/Core/Discovery/ServiceLocatorEventsIf.ice
@@ -0,0 +1,69 @@
+#pragma once
+
+module Hydra
+{
+
+module System
+{
+
+module Discovery
+{
+
+	/**
+	 * Default topic used for service locator events.
+	 */
+	const string TOPIC="::hydra::service::locator";
+
+	/**
+	 * Interface used to publish service locator related events.
+	 */
+	interface Events
+	{
+		/**
+		 * Method which is called when a comparator is registered.
+		 *
+		 * @param guid The unique identifier of the comparator.
+		 */
+		void comparisonRegistered(string guid);
+
+		/**
+		 * Method which is called when a comparator is unregistered.
+		 *
+		 * @param guid The unique identifier of the comparator.
+		 */
+		void comparisonUnregistered(string guid);
+
+		/**
+		 * Method which is called when a service is registered.
+		 *
+		 * @param guid The unique identifier of the service.
+		 */
+		void serviceRegistered(string guid);
+
+		/**
+		 * Method which is called when a service is unregistered.
+		 *
+		 * @param guid The unique identifier of the service.
+		 */
+		void serviceUnregistered(string guid);
+
+		/**
+		 * Method which is called when a service is suspended.
+		 *
+		 * @param guid The unique identifier of the service.
+		 */
+		void serviceSuspended(string guid);
+
+		/**
+		 * Method which is called when a service is unsuspended.
+		 *
+		 * @param guid The unique identifier of the service.
+		 */
+		void serviceUnsuspended(string guid);
+	};
+
+}; // end module Discovery
+
+}; // end module System
+
+}; // end module Hydra
diff --git a/core-slice/Core/Discovery/ServiceLocatorIf.ice b/core-slice/Core/Discovery/ServiceLocatorIf.ice
new file mode 100644
index 0000000..08efca5
--- /dev/null
+++ b/core-slice/Core/Discovery/ServiceLocatorIf.ice
@@ -0,0 +1,164 @@
+#pragma once
+
+#include <Ice/BuiltinSequences.ice>
+
+module Hydra
+{
+
+module Core
+{
+
+module Discovery
+{
+
+["suppress"]
+module V1
+{
+	/**
+	 * String representation of the version of this interface
+	 */
+	const string Version = "V1";
+
+	/**
+	 * Exception used for service locator requests to indicate that no service could be found.
+	 */
+	exception ServiceNotFound { };
+
+	/**
+	 * Exception used for indicating that a comparator is already registered with a given guid.
+	 */
+	exception DuplicateCompare { };
+
+	/**
+	 * Exception used for indicating that a comparator was not found.
+	 */
+	exception CompareNotFound { };
+
+	/**
+	 * Generic service locator parameters class that more specific parameter classes can extend.
+	 */
+	["preserved"] class ServiceLocatorParams
+	{
+		/**
+		 * Basic category for the service, such as bridge or channel service.
+		 */
+		string category;
+	};
+
+	/**
+	 * Interface used to perform service locator requests.
+	 */
+	interface ServiceLocator
+	{
+		/**
+		 * Method which performs a locator request using provided parameters but only returns a single
+		 * proxy.
+		 *
+		 * @param params A concrete class containing parameters describing the service that is trying to be found.
+		 *
+		 * @return A proxy to the service matching the given parameters.
+		 */
+		idempotent Object *locate(ServiceLocatorParams params) throws ServiceNotFound;
+
+		/**
+		 * Method which performs a location request using provided parameters but can return multiple
+		 * proxies.
+		 *
+		 * @param params A concrete class containing parameters describing the service that is trying to be found.
+		 *
+		 * @return A sequence of proxies which match the given parameters.
+		 */
+		idempotent Ice::ObjectProxySeq locateAll(ServiceLocatorParams params) throws ServiceNotFound;
+	};
+
+	/**
+	 * Interface to the service locator component which allows manipulation of registered service.
+	 */
+	interface ServiceManagement
+	{
+		/**
+		 * Method which adds supported discovery parameters to a registered service.
+		 *
+		 * @param params A concrete class containing parameters describing what is supported.
+		 *
+		 * @param compareguid The unique identifier of a comparator which can perform a lower level
+		 *              comparison to determine whether supplied parameters in a locator request
+		 *              are truly supported or not. This is optional.
+		 */
+		void addLocatorParams(ServiceLocatorParams params, string compareguid);
+
+		/**
+		 * Method which suspends this service from being considered when a locator request
+		 * is performed.
+		 */
+		void suspend();
+
+		/**
+		 * Method which unsuspends this service. Once this method is called the service will
+		 * be able to found again when a locator request is performed.
+		 */
+		void unsuspend();
+
+		/**
+		 * Method which unregisters this service from the service locator.
+		 */
+		void unregister();
+	};
+
+	/**
+	 * Interface to an external component which performs a service locator parameters comparison.
+	 */
+	interface ServiceLocatorParamsCompare
+	{
+		/**
+		 * Method which determines whether provided parameters are supported by the
+		 * comparator or not.
+		 *
+		 * @param params A concrete class containing parameters describing the service that is trying to be found.
+		 *
+		 * @return A boolean value with true meaning the parameters are supported and false if not.
+		 *
+		 */
+		bool isSupported(ServiceLocatorParams params);
+	};
+
+	/**
+	 * Interface to do service locator management, such as adding services and comparators.
+	 */
+	interface ServiceLocatorManagement
+	{
+		/**
+		 * Method which adds a service to the service locator.
+		 *
+		 * @param service A proxy to the service that is being registered.
+		 *
+		 * @param guid A unique identifier for the service which is used in events.
+		 *
+		 * @return A proxy to the service management interface for this service.
+		 */
+		ServiceManagement *addService(Object *service, string guid);
+
+		/**
+		 * Method which adds a comparator to the service locator.
+		 *
+		 * @param compareguid A unique identifier for this comparator.
+		 *
+		 * @param compare A proxy to the comparator service.
+		 */
+		void addCompare(string compareguid, ServiceLocatorParamsCompare *compare) throws DuplicateCompare;
+
+		/**
+		 * Method which removes a comparator from the service locator.
+		 *
+		 * @param compareguid The unique identifier for the comparator to remove.
+		 */
+		void removeCompare(string compareguid) throws CompareNotFound;
+	};
+
+}; // end module V1
+
+}; // end module Discovery
+
+}; // end module Core
+
+}; // end module Hydra
diff --git a/core-slice/Core/Endpoint/CMakeLists.txt b/core-slice/Core/Endpoint/CMakeLists.txt
new file mode 100644
index 0000000..24a581c
--- /dev/null
+++ b/core-slice/Core/Endpoint/CMakeLists.txt
@@ -0,0 +1,4 @@
+# Compile routing service API
+hydra_compile_slice(EndpointIf.ice lib "Endpoint API" Core)
+
+
diff --git a/core-slice/Core/Endpoint/EndpointI.ice b/core-slice/Core/Endpoint/EndpointI.ice
new file mode 100644
index 0000000..3c65f9b
--- /dev/null
+++ b/core-slice/Core/Endpoint/EndpointI.ice
@@ -0,0 +1,41 @@
+#pragma once
+
+module Hydra
+{
+module Core
+{
+module Endpoint
+{
+["suppress"]
+module V1
+{
+   const string Version = "V1";
+   
+   /**
+    * Unique id for an Endpoint. 
+    */
+   class EndpointId
+   {
+      string endpointManagerId;
+      string deviceId;
+   };
+
+   /**
+    * A generic Endpoint.
+    * TBD - NOTE: Not crazy about the name, but needs to be different from the module name!
+    */
+   class BaseEndpoint
+   {
+      EndpointId id; 
+   };
+
+   sequence<BaseEndpoint> EndpointSeq;
+
+
+   // TBD... only implemented minimum need for Routing Service. 
+
+}; // module V1
+}; // module Endpoint
+}; // module Core
+}; // module Hydra
+
diff --git a/core-slice/Core/Endpoint/EndpointIf.ice b/core-slice/Core/Endpoint/EndpointIf.ice
new file mode 100644
index 0000000..ed980f5
--- /dev/null
+++ b/core-slice/Core/Endpoint/EndpointIf.ice
@@ -0,0 +1,56 @@
+#pragma once
+
+#include <Ice/BuiltinSequences.ice>
+
+module Hydra
+{
+module Core
+{
+module Endpoint
+{
+["suppress"]
+module V1
+{
+   const string Version = "V1";
+   
+   /**
+    * Unique id for an Endpoint. 
+    */
+   class EndpointId
+   {
+      string endpointManagerId;
+      string destinationId;
+   };
+
+   /**
+    * Exception thrown when an ID does not meet system requirements.
+    */
+   exception InvalidEndpointId
+   {
+       EndpointId badId;
+   };
+
+   /**
+    * A generic Endpoint.
+    * TBD - NOTE: Not crazy about the name, but needs to be different from the module name!
+    */
+   class BaseEndpoint
+   {
+      EndpointId id; 
+   };
+
+   sequence<BaseEndpoint> EndpointSeq;
+
+   interface EndpointManager 
+   {
+      EndpointSeq getManagedEndpoints();
+      Ice::StringSeq getManagedEndpointSpecification();
+   };
+
+   // TBD... only implemented minimum need for Routing Service. 
+
+}; // module V1
+}; // module Endpoint
+}; // module Core
+}; // module Hydra
+
diff --git a/core-slice/Core/Routing/CMakeLists.txt b/core-slice/Core/Routing/CMakeLists.txt
new file mode 100644
index 0000000..5f8756e
--- /dev/null
+++ b/core-slice/Core/Routing/CMakeLists.txt
@@ -0,0 +1,4 @@
+# Compile routing service API
+hydra_compile_slice(RoutingIf.ice lib "Routing Service API" Core)
+
+
diff --git a/core-slice/Core/Routing/RoutingI.ice b/core-slice/Core/Routing/RoutingI.ice
new file mode 100644
index 0000000..2e53b0d
--- /dev/null
+++ b/core-slice/Core/Routing/RoutingI.ice
@@ -0,0 +1,153 @@
+#pragma once
+
+#include "Core/Endpoint/EndpointI.ice"
+
+module Hydra
+{
+module Core
+{
+module Routing
+{
+["suppress"]
+module V1
+{
+   const string Version = "V1";
+   
+   exception DestinationNotFoundException {};
+
+   exception DestinationExistsException {};
+
+   exception InvalidParamsException {};
+
+   sequence<string> RegExSeq;
+
+   /**
+    * Provides lookup of an Endpoint based on a string Id. 
+    */
+   interface EndpointLocator
+   {
+      /**
+       * Returns the endpoints that match the specified destination id. 
+       *   @param id String identifier of the the destination. 
+       */
+      idempotent Endpoint::V1::EndpointSeq lookup(string destination) 
+         throws DestinationNotFoundException, InvalidParamsException;
+   };
+
+   /**
+    * A registry of Endpoints. In addition to providing the EndpointLocator interface, a registry
+    * can be augmented with other EndpointLocators. A LocatorRegistry is expected to be able to return 
+    * a lookup for any of the EndpointLocators added to it. 
+    */
+   interface LocatorRegistry extends EndpointLocator
+   {
+      /**
+       * Add an EndpointLocator.
+       *   @param id A unique identifier for the added EndpointLocator. 
+       *   @param destinationIdRangeList A set of regular expressions that define the valid endpoint ids 
+       *     this locator supports. 
+       */
+      void addEndpointLocator(string id, RegExSeq destinationIdRangeList) 
+         throws DestinationExistsException, InvalidParamsException;
+
+      /**
+       * Remove an EndpointLocator.
+       *   @param The unique id of the locator to remove. 
+       */
+      void removeEndpointLocator(string id) throws DestinationNotFoundException;
+
+      // Changes the range of device ids accessible via given EndpointLocator. 
+      /**
+       * Modify the range of device ids managed by a previously added EndpointLocator. 
+       *   @param id A unique identifier for the added EndpointLocator. 
+       *   @param A list of reqular expressions that define the the valid endpoint ids. This 
+       *     set of regular expressions completely replaces the current set. 
+       */
+      void setEndpointLocatorDeviceIds(string id, RegExSeq deviceIdRangeList) 
+         throws DestinationNotFoundException, InvalidParamsException;
+   };
+
+
+   /** 
+    * Administrative interface to the service. 
+    */
+   interface RoutingServiceAdmin
+   {
+      /**
+       * Drop references to all EndpointLocators that have been registered. 
+       */
+      void clearEndpointLocators();
+
+      /**
+       * Sends a policy string to the Lua script processor.  The default implementation is a no-op, 
+       * but site-specific scripts may make use it. 
+       *    @param policy A site-specific policy specification.  
+       */
+      void setPolicy(string policy);
+   };
+
+
+   module Event
+   {
+      enum OperationResult
+      {
+         SUCCCESS,
+         FAILED
+      };
+
+      const string TopicId = "::hydra::routing::event";
+      
+      /**
+       * Interface for monitoring the basic routing service events. 
+       */
+      interface RoutingEvents
+      {
+         /**
+          * Notification that a lookup was attempted.
+          *  @param destinationId The destination being looked up. 
+          *  @param result Indicates whether or not the attempt was successful.
+          */
+         void lookupEvent(string destinationId, OperationResult result);
+
+         /**
+          * Notification that an attempt to add an EndpointLocator was made.
+          *  @param id The identifier of the EndpointLocator being added. 
+          *  @param destinationIdRangeList A set of regular expressions that define the endpoints available. 
+          *  @param result Indicates whether or not the attempt was successful.
+          */
+         void addEndpointLocatorEvent(string id, RegExSeq destinationIdRangeList, OperationResult result);
+
+         /**
+          * Notification that an attempt was made to remove an EndpointLocator. 
+          *  @param id The identifier of the EndpointLocator being removed. 
+          *  @param result Indicates whether or not the attempt was successful.
+          */
+         void removeEndpointLocatorEvent(string id, OperationResult result);
+
+         /**
+          * Notification that an attempt was made to modify the range of destinationIds 
+          * accessible from a given EndpointLocator.  
+          *  @param id The destination being looked up. 
+          *  @param destinationIdRangeList A list of regular expressions to be representative of the new valid ids. 
+          *  @param result Indicates whether or not the attempt was successful.
+          */
+         void setEndpointLocatorDeviceIds(string id, RegExSeq destinationIdRangeList, OperationResult result);
+
+         /**
+          * Called when the EndpointLocator cache has been cleared by an administrative action.  
+          */
+         void clearEndpointLocatorsEvent();
+
+         /**
+          * Called when an administation operation has set the routing service policy. 
+          *  @param policy The new policy.
+          */
+         void setPolicy(string policy);
+      };
+   };
+
+}; // module V1
+}; // module Routing
+}; // module Core
+}; // module Hydra
+
diff --git a/core-slice/Core/Routing/RoutingIf.ice b/core-slice/Core/Routing/RoutingIf.ice
new file mode 100644
index 0000000..7080ebd
--- /dev/null
+++ b/core-slice/Core/Routing/RoutingIf.ice
@@ -0,0 +1,162 @@
+#pragma once
+
+#include <Core/Endpoint/EndpointIf.ice>
+
+module Hydra
+{
+module Core
+{
+module Routing
+{
+["suppress"]
+module V1
+{
+   const string Version = "V1";
+   
+   exception DestinationNotFoundException 
+   {
+      string destination;
+   };
+
+   exception InvalidParamsException {};
+
+   sequence<string> RegExSeq;
+
+   /**
+    * Provides lookup of an Endpoint based on a string Id. 
+    */
+   interface EndpointLocator
+   {
+      /**
+       * Returns the endpoints that match the specified destination id. 
+       *   @param id String identifier of the the destination. 
+       */
+      idempotent Endpoint::V1::EndpointSeq lookup(string destination) 
+         throws DestinationNotFoundException, InvalidParamsException;
+   };
+
+
+   /**
+    * Indicates an attempt was made to register a locator twice under the same name. 
+    */
+   exception LocatorAlreadyRegisteredException 
+   {
+       string locatorId;
+   };
+
+   /**
+    * A registry of Endpoints. In addition to providing the EndpointLocator interface, a registry
+    * can be augmented with other EndpointLocators. A LocatorRegistry is expected to be able to return 
+    * a lookup for any of the EndpointLocators added to it. 
+    */
+   interface LocatorRegistry extends EndpointLocator
+   {
+      /**
+       * Register an EndpointLocator that can provide endpoints.
+       *   @param id A unique identifier for the added EndpointLocator. 
+       *   @param destinationIdRangeList A set of regular expressions that define the valid endpoint ids 
+       *     the locator being added supports. 
+       */
+      void addEndpointLocator(string id, RegExSeq destinationIdRangeList, EndpointLocator *locator) 
+         throws LocatorAlreadyRegisteredException, InvalidParamsException;
+
+      /**
+       * Remove an EndpointLocator.
+       *   @param The unique id of the locator to remove. 
+       */
+      void removeEndpointLocator(string id) throws DestinationNotFoundException;
+
+      /**
+       * Modify the range of device ids managed by a previously added EndpointLocator. 
+       *   @param id A unique identifier for the added EndpointLocator. 
+       *   @param A list of reqular expressions that define the the valid endpoint ids. This 
+       *     set of regular expressions completely replaces the current set. 
+       */
+      void setEndpointLocatorDestinationIds(string id, RegExSeq deviceIdRangeList) 
+         throws DestinationNotFoundException, InvalidParamsException;
+   };
+
+
+   /** 
+    * Administrative interface to the service. 
+    */
+   interface RoutingServiceAdmin
+   {
+      /**
+       * Drop references to all EndpointLocators that have been registered. 
+       */
+      void clearEndpointLocators();
+
+      /**
+       * Sends a policy string to the Lua script processor.  The default implementation is a no-op, 
+       * but site-specific scripts may make use it. 
+       *    @param policy A site-specific policy specification.  
+       */
+      void setPolicy(string policy);
+   };
+
+
+   module Event
+   {
+      enum OperationResult
+      {
+         SUCCESS,
+         FAILURE
+      };
+
+      const string TopicId = "::hydra::routing::event";
+      
+      /**
+       * Interface for monitoring the basic routing service events. 
+       */
+      interface RoutingEvents
+      {
+         /**
+          * Notification that a lookup was attempted.
+          *  @param destinationId The destination being looked up. 
+          *  @param result Indicates whether or not the attempt was successful.
+          */
+         void lookupEvent(string destinationId, OperationResult result);
+
+         /**
+          * Notification that an attempt to add an EndpointLocator was made.
+          *  @param id The identifier of the EndpointLocator being added. 
+          *  @param destinationIdRangeList A set of regular expressions that define the endpoints available. 
+          *  @param result Indicates whether or not the attempt was successful.
+          */
+         void addEndpointLocatorEvent(string id, RegExSeq destinationIdRangeList, OperationResult result);
+
+         /**
+          * Notification that an attempt was made to remove an EndpointLocator. 
+          *  @param id The identifier of the EndpointLocator being removed. 
+          *  @param result Indicates whether or not the attempt was successful.
+          */
+         void removeEndpointLocatorEvent(string id, OperationResult result);
+
+         /**
+          * Notification that an attempt was made to modify the range of destinationIds 
+          * accessible from a given EndpointLocator.  
+          *  @param id The destination being looked up. 
+          *  @param destinationIdRangeList A list of regular expressions to be representative of the new valid ids. 
+          *  @param result Indicates whether or not the attempt was successful.
+          */
+         void setEndpointLocatorDestinationIdsEvent(string id, RegExSeq destinationIdRangeList, OperationResult result);
+
+         /**
+          * Called when the EndpointLocator cache has been cleared by an administrative action.  
+          */
+         void clearEndpointLocatorsEvent();
+
+         /**
+          * Called when an administation operation has set the routing service policy. 
+          *  @param policy The new policy.
+          */
+         void setPolicyEvent(string policy);
+      };
+   };
+
+}; // module V1
+}; // module Routing
+}; // module Core
+}; // module Hydra
+
diff --git a/core-slice/Media/CMakeLists.txt b/core-slice/Media/CMakeLists.txt
new file mode 100644
index 0000000..94a2c5c
--- /dev/null
+++ b/core-slice/Media/CMakeLists.txt
@@ -0,0 +1,3 @@
+hydra_compile_slice(MediaIf.ice lib "Slice Defined API" Core)
+
+add_subdirectory(RTP)
diff --git a/core-slice/Media/MediaIf.ice b/core-slice/Media/MediaIf.ice
new file mode 100644
index 0000000..42087a7
--- /dev/null
+++ b/core-slice/Media/MediaIf.ice
@@ -0,0 +1,484 @@
+#pragma once
+
+#include <Ice/BuiltinSequences.ice>
+#include "Core/Discovery/ServiceLocatorIf.ice"
+
+module Hydra
+{
+
+module Media
+{
+
+module V1
+{
+
+	/**
+	 * Forward declaration of the Frame class so we can define a sequence of them.
+	 */
+	class Frame;
+
+	/**
+	 * Forward declaration of the Format class so we can define a sequence of them.
+	 */
+	class Format;
+
+	/**
+	 * Forward declaration of the StreamSource interface so we can define a sequence of proxies to them.
+	 */
+	interface StreamSource;
+
+	/**
+	 * Forward declaration of the StreamSink interface so we can define a sequence of proxies to them.
+	 */
+	interface StreamSink;
+
+	/**
+	 * A sequence of stream source proxies.
+	 */
+	sequence<StreamSource*> StreamSourceSeq;
+
+	/**
+	 * A sequence of stream sink proxies.
+	 */
+	sequence<StreamSink*> StreamSinkSeq;
+
+	/**
+	 * A sequence of concrete formats.
+	 */
+	sequence<Format> FormatSeq;
+
+	/**
+	 * A sequence of concrete frames.
+	 */
+	sequence<Frame> FrameSeq;
+
+	/**
+	 * Interface to a container of media sources and sinks.
+	 */
+	interface Session
+	{
+		/**
+		 * Method which returns the stream sources that are on the session.
+		 *
+		 * @return StreamSourceSeq A sequence of stream sources.
+		 */
+		StreamSourceSeq getSources();
+
+		/**
+		 * Method which returns the stream sinks that are on the session.
+		 *
+		 * @return StreamSinkSeq A sequence of stream sinks.
+		 */
+		StreamSinkSeq getSinks();
+
+		/**
+		 * Method which returns a unique identifier for the session.
+		 *
+		 * @return string A string identifier for the session.
+		 */
+		idempotent string getId();
+	};
+
+	/**
+	 * Exception that gets thrown if a sink receives a format that it can not handle.
+	 */
+	exception UnsupportedMediaFormatException { };
+
+	/**
+	 * Exception that gets thrown if a fatal error occurs on a stream or sink.
+	 */
+	exception FatalStreamException { };
+
+	/**
+	 * Exception that gets thrown if a source can not switch to a different format.
+	 */
+	exception MediaFormatSwitchException { };
+
+
+	/**
+	 * Interface to a source of media.
+	 */
+	interface StreamSource
+	{
+		/**
+		 * Method which changes where the implementation should send media that originates from itself.
+		 *
+		 * @param destination A proxy to a stream sink where media will be sent to.
+		 */
+		idempotent void setSink(StreamSink* destination);
+
+		/**
+		 * Method which retrieves the current stream sink for media.
+		 *
+		 * @return StreamSink* A proxy to the stream sink where media is being sent to.
+		 */
+		idempotent StreamSink* getSink();
+
+		/**
+		 * Method which returns the formats that frames from this source may come in.
+		 *
+		 * @return FormatSeq A sequence of concrete format classes.
+		 */
+		idempotent FormatSeq getFormats();
+
+		/**
+		 * Method which returns a unique identifier for the source.
+		 *
+		 * @return string A string identifier for the source.
+		 */
+		idempotent string getId();
+
+		/**
+		 * Method which requests that the source change the format of frames being sent to the sink.
+		 *
+		 * @param Format A concrete class describing the format to change to.
+		 */
+		void requestFormat(Format newformat) throws MediaFormatSwitchException;
+	};
+
+
+	/**
+	 * Interface to a sink for media.
+	 */
+	interface StreamSink
+	{
+		/**
+		 * Method which gives the implementation a sequence of frames which it will then deal with in an implementation
+		 * specific manner.
+		 *
+		 * @param frames A sequence of frames.
+		 */
+		void write(FrameSeq frames) throws UnsupportedMediaFormatException, FatalStreamException;
+
+		/**
+		 * Method which changes the source of media being sent to this sink.
+		 *
+		 * @param source A proxy to the stream source that media is being received from.
+		 */
+		idempotent void setSource(StreamSource* source);
+
+		/**
+		 * Method which retrieves the current stream source of media.
+		 *
+		 * @return StreamSource* A proxy to the stream source that media is being received from.
+		 */
+		idempotent StreamSource* getSource();
+
+		/**
+		 * Method which returns the formats of frames that this sink can handle.
+		 *
+		 * @return FormatSeq A sequence of concrete format classes.
+		 */
+		idempotent FormatSeq getFormats();
+
+		/**
+		 * Method which returns a unique identifier for the sink.
+		 *
+		 * @return string A string identifier for the sink.
+		 */
+		idempotent string getId();
+	};
+
+	/**
+	 * Interface to a media operation session. This extends the normal Session interface and provides additional
+	 * resource specific methods.
+	 */
+	interface MediaOperationSession extends Session
+	{
+		/**
+		 * Method which releases any resources associated with this media operation session.
+		 */
+		void release();
+	};
+
+	/**
+	 * A generic format discovery class that can be extended for adding parameters. The parameters are used to find
+	 * a component capable of interpreting and providing a concrete class for a format.
+	 */
+	class FormatDiscovery extends Hydra::Core::Discovery::V1::ServiceLocatorParams
+	{
+	};
+
+	/**
+	 * A format discovery class that allows finding a format based on name.
+	 */
+	class FormatDiscoveryName extends FormatDiscovery
+	{
+		/**
+		 * A string identifier for the format.
+		 */
+		string name;
+	};
+
+	/**
+	 * A sequence of strings with each string containing a format specific parameter from SDP.
+	 */
+	sequence<string> SDPFormatParameterSeq;
+
+	/**
+	 * A format discovery class that allows finding a format based on information taken from SDP.
+	 */
+	class FormatDiscoverySDP extends FormatDiscovery
+	{
+		/**
+		 * Numerical payload value given in the SDP.
+		 */
+		int payload;
+
+		/**
+		 * String type of the format (audio/video/etc)
+		 */
+		string type;
+
+		/**
+		 * String subtype of the format (in the case of audio something like PCMU)
+		 */
+		string subtype;
+
+		/**
+		 * Numerical sample rate of the format.
+		 */
+		int samplerate;
+
+		/**
+		 * A sequence of format specific parameters.
+		 */
+		SDPFormatParameterSeq parameters;
+	};
+
+	/**
+	 * A format discovery class that allows finding a format based on numerical value, used for IAX2.
+	 */
+	class FormatDiscoveryIAX2 extends FormatDiscovery
+	{
+		/**
+		 * Numerical codec flag value.
+		 */
+		int codec;
+	};
+
+	/**
+	 * A format discovery class that allows finding an audio format based on a few parameters.
+	 */
+	class FormatDiscoveryGenericAudio extends FormatDiscovery
+	{
+		/**
+		 * String name of the codec being used.
+		 */
+		string name;
+
+		/**
+		 * Numerical sample rate.
+		 */
+		int samplerate;
+
+		/**
+		 * Number of channels present.
+		 */
+		int channels;
+	};
+
+	/**
+	 * Interface to a service that interprets format discovery parameters and returns a concrete class
+	 * representing them.
+	 */
+	interface MediaFormatService
+	{
+		/**
+		 * Method which returns a concrete format class given discovery parameters.
+		 *
+		 * @param format A concrete format discovery class containing parameters of the format.
+		 *
+		 * @return Format A concrete format class representing the format as described in the
+		 *                format discovery class.
+		 */
+		idempotent Format getFormat(FormatDiscovery format);
+	};
+
+	/**
+	 * A generic media operation class that can be extended for adding parameters. The parameters are used to find
+	 * a component capable of performing the described operation.
+	 */
+	class MediaOperation
+	{
+	};
+
+	/**
+	 * A transcoding media operation class that is used to transcode from one format to other.
+	 */
+	class MediaOperationTranscode extends MediaOperation
+	{
+		/**
+		 * A concrete format class describing the format that frames will be received in.
+		 */
+		Format from;
+
+		/**
+		 * A concrete format class describing the format that frames should be sent in.
+		 */
+		Format to;
+	};
+
+
+	/**
+	 * A sequence of media operations. These are ordered in the order in which they should be
+	 * executed.
+	 */
+	sequence<MediaOperation> MediaOperationSeq;
+
+	/**
+	 * A media operation query result class, this gets returned by a media operation service when queried.
+	 */
+	class MediaOperationQueryResult
+	{
+		/**
+		 * A concrete class describing the operation that the media operation service can perform.
+		 */
+		MediaOperation operation;
+
+		/**
+		 * An arbitrary numerical score from 1 to 100 of how well the media operation service can perform
+		 * the above operation. This value is used to determine the best route and best component to use
+		 * for a sequence of media operations when faced with multiple choices.
+		 */
+		int score;
+	};
+
+	/**
+	 * A sequence of media operation query results, returned by the MediaOperationService interface.
+	 */
+	sequence<MediaOperationQueryResult> MediaOperationQueryResultSeq;
+
+	/**
+	 * Interface to a service which performs a media operation.
+	 */
+	interface MediaOperationService
+	{
+		/**
+		 * Method which determines how well supported operations are.
+		 *
+		 * @param operations A sequence of media operations that are to be performed.
+		 *
+		 * @return MediaOperationQueryResultSeq A sequence of supported operations with a score of how well
+		 *                                      they can be performed.
+		 */
+		idempotent MediaOperationQueryResultSeq isSupported(MediaOperationSeq operations);
+
+		/**
+		 * Method which allocates a media operation session.
+		 *
+		 * @param operations A sequence of media operations that are to be performed.
+		 *
+		 * @return MediaOperationSession* A proxy to a media operation session that will perform the given media
+		 *                                operations.
+		 */
+		MediaOperationSession *allocate(MediaOperationSeq operations);
+	};
+
+	/**
+	 * A generic frame class that contains common details about frames. Additional classes should extend this to provide
+	 * additional details about the frame.
+	 */
+	class Frame
+	{
+		/**
+		 * A concrete format class describing the format that this frame is in.
+		 */
+		Format mediaformat;
+
+		/**
+		 * A sequence of bytes which contain the actual data payload of this frame.
+		 */
+		Ice::ByteSeq payload;
+	};
+
+	/**
+	 * An additional frame class which is provided for stream based frames.
+	 */
+	class StreamFrame extends Frame
+	{
+		/**
+		 * Timestamp of the frame.
+		 */
+		long timestamp;
+
+		/**
+		 * Numerical sequence number of the frame.
+		 */
+		long seqno;
+	};
+
+	/**
+	 * An additional frame class which is provided for audio frames.
+	 */
+	class AudioFrame extends StreamFrame
+	{
+	};
+
+	/**
+	 * An additional frame class which is provided for video frames.
+	 */
+	class VideoFrame extends StreamFrame
+	{
+	};
+
+	/**
+	 * A generic format class that provides common information about formats. Additional classes should extend
+	 * this to provide additional details about the format.
+	 */
+	class Format
+	{
+		/**
+		 * A string containing a human readable name for the format, this may not be unique and is
+		 * only meant to be used in logging and event messages.
+		 */
+		string name;
+	};
+
+	/**
+	 * An additional format class which is provided for audio formats.
+	 */
+	class AudioFormat extends Format
+	{
+		/**
+		 * Numerical sample rate.
+		 */
+		int sampleRate;
+
+		/**
+		 * Numerical frame size.
+		 */
+		int frameSize;
+
+		/**
+		 * Numerical maximum frame size that is supported.
+		 */
+		int maximumFrameSize;
+
+		/**
+		 * Numerical minimum frame size that is supported.
+		 */
+		int minimumFrameSize;
+		};
+
+	/**
+	 * An additional format class which is provided for video formats.
+	 */
+	class VideoFormat extends Format
+	{
+		/**
+		 * Numerical maximum allowed bandwidth.
+		 */
+		int maximumBandwidth;
+
+		/**
+		 * Numerical maximum allowed bitrate.
+		 */
+		int maximumBitrate;
+	};
+
+}; // end module V1
+
+}; // end module Media
+
+}; // end module Hydra
diff --git a/core-slice/Media/RTP/CMakeLists.txt b/core-slice/Media/RTP/CMakeLists.txt
new file mode 100644
index 0000000..2cd97e7
--- /dev/null
+++ b/core-slice/Media/RTP/CMakeLists.txt
@@ -0,0 +1 @@
+hydra_compile_slice(MediaRTPIf.ice lib "RTP Media API" Core)
diff --git a/core-slice/Media/RTP/MediaRTPIf.ice b/core-slice/Media/RTP/MediaRTPIf.ice
new file mode 100644
index 0000000..2562bc5
--- /dev/null
+++ b/core-slice/Media/RTP/MediaRTPIf.ice
@@ -0,0 +1,141 @@
+#include "Core/Discovery/ServiceLocatorIf.ice"
+#include "Media/MediaIf.ice"
+
+module Hydra
+{
+
+module Media
+{
+
+module RTP
+{
+
+module V1
+{
+
+	/**
+	 * Extended discovery class for RTP media services.
+	 */
+	class RTPServiceLocatorParams extends Hydra::Core::Discovery::V1::ServiceLocatorParams
+	{
+		/**
+		 * A sequence of formats that the RTP media service is expected to transport.
+		 */
+		Hydra::Media::V1::FormatSeq formats;
+	};
+
+	/**
+	 * Interface to an RTP stream source.
+	 */
+	interface StreamSourceRTP extends Hydra::Media::V1::StreamSource
+	{
+		/**
+		 * Method which retrieves the local listening IP address of this source.
+		 *
+		 * @return string A string representation of the IP address.
+		 */
+		idempotent string getLocalAddress();
+
+		/**
+		 * Method which retrieves the local listening port of this source.
+		 *
+		 * @return int An integer containing the port.
+		 */
+		idempotent int getLocalPort();
+	};
+
+	/**
+	 * Interface to an RTP stream sink.
+	 */
+	interface StreamSinkRTP extends Hydra::Media::V1::StreamSink
+	{
+		/**
+		 * Method which changes the IP address and port that media will be sent to.
+		 *
+		 * @param address A string representation of the IP address.
+		 *
+		 * @param port An integer containing the port.
+		 */
+		void setRemoteDetails(string address, int port);
+
+		/**
+		 * Method which retrieves the remote IP address.
+		 *
+		 * @return string A string representation of the IP address.
+		 */
+		idempotent string getRemoteAddress();
+
+		/**
+		 * Method which retrieves the remote port.
+		 *
+		 * @return int An integer containing the port.
+		 */
+		idempotent int getRemotePort();
+	};
+
+	/**
+	 * Interface to an RTCP session.
+	 */
+	interface RTCPSession
+	{
+	};
+
+	/**
+	 * A dictionary mapping payloads to media formats.
+	 */
+	dictionary<int, Hydra::Media::V1::Format> PayloadMap;
+
+	/**
+	 * Interface to an RTP media session.
+	 */
+	interface RTPSession extends Hydra::Media::V1::Session
+	{
+		/**
+		 * Method which associates payloads and media formats.
+		 *
+		 * @param mappings The payload and media format mappings.
+		 */
+		void associatePayloads(PayloadMap mappings);
+
+		/**
+		 * Method which enables or disables RTCP on the RTP session.
+		 *
+		 * @param enable A boolean value with true meaning RTCP should be used and false meaning it should not.
+		 */
+		void useRTCP(bool enable);
+
+		/**
+		 * Method which retrieves a proxy to an RTCP session.
+		 *
+		 * @return RTCPSession* A proxy to the RTCP session associated with this RTP session.
+		 */
+		RTCPSession* getRTCPSession();
+
+		/**
+		 * Method which releases the RTP session. Once called the RTP session will no longer exist.
+		 */
+		void release();
+	};
+
+	/**
+	 * Interface to an RTP media service.
+	 */
+	interface RTPMediaService
+	{
+		/**
+		 * Method which creates a new RTP session and returns a proxy to it.
+		 *
+		 * @param formats The media formats the session is expected to carry.
+		 *
+		 * @return RTPSession* A proxy to the new RTP session.
+		 */
+		RTPSession* allocate(Hydra::Media::V1::FormatSeq formats);
+	};
+
+}; // end module V1
+
+}; // end module RTP
+
+}; // end module Media
+
+}; // end module Hydra
diff --git a/core-slice/Session/CMakeLists.txt b/core-slice/Session/CMakeLists.txt
new file mode 100644
index 0000000..946aa22
--- /dev/null
+++ b/core-slice/Session/CMakeLists.txt
@@ -0,0 +1,2 @@
+# Compile Session Oriented API 
+hydra_compile_slice(SessionIf.ice lib "Sessions API" Session)
diff --git a/core-slice/Session/SessionIf.ice b/core-slice/Session/SessionIf.ice
new file mode 100644
index 0000000..0b06dda
--- /dev/null
+++ b/core-slice/Session/SessionIf.ice
@@ -0,0 +1,67 @@
+#pragma once
+
+#include <Core/Endpoint/EndpointIf.ice>
+#include <System/Time/TimeIf.ice>
+#include <System/Component/ComponentServiceIf.ice>
+#include <Core/Endpoint/EndpointIf.ice>
+#include <Media/MediaIf.ice>
+
+module Hydra
+{
+module Session
+{
+module V1
+{
+   class SessionInfo
+   {
+      Core::Endpoint::V1::EndpointId caller;
+      Core::Endpoint::V1::EndpointId destination;
+      string currentState;
+      string role;
+      System::Time::V1::TimeMarker startTime;
+      long connectedTime;
+   };
+
+   sequence<SessionInfo> SessionInfoSeq;
+
+   class ResponseCode
+   {
+      int isdnCode;
+   };
+
+   interface SignalCallback
+   {
+      void ring(Core::Endpoint::V1::EndpointId ep);
+      void connected(Core::Endpoint::V1::EndpointId ep);
+      void terminated(Core::Endpoint::V1::EndpointId ep, ResponseCode response);
+      void busy(Core::Endpoint::V1::EndpointId ep);
+      void congestion(Core::Endpoint::V1::EndpointId ep, ResponseCode response);
+      void hold(Core::Endpoint::V1::EndpointId ep);
+      void unhold(Core::Endpoint::V1::EndpointId ep);
+      void flash(Core::Endpoint::V1::EndpointId ep);
+      void progress(Core::Endpoint::V1::EndpointId ep, ResponseCode response);
+   };
+
+   interface SignalCommands
+   {
+      bool call(Core::Endpoint::V1::EndpointId caller, Core::Endpoint::V1::EndpointId destination, SignalCallback callback);
+      void terminate(Core::Endpoint::V1::EndpointId caller);
+   };
+
+   class SessionEndpoint extends Core::Endpoint::V1::BaseEndpoint   
+   {
+      SignalCommands* command;
+      SignalCallback* callback;
+      Media::V1::Session* mediaSession;
+   };
+
+   sequence<SessionEndpoint> SessionEndpointSeq;
+
+   interface SessionManager extends System::Component::V1::ComponentService
+   {
+      SessionInfoSeq listCurrentSessions();
+   };
+
+}; // End of V1
+}; // End of Session
+}; // End of Hydra
diff --git a/core-slice/System/CMakeLists.txt b/core-slice/System/CMakeLists.txt
new file mode 100644
index 0000000..526c3fe
--- /dev/null
+++ b/core-slice/System/CMakeLists.txt
@@ -0,0 +1,5 @@
+# Slice definitions for Component functionality 
+add_subdirectory(Component)
+
+# Slice definitions for Time services functionality 
+add_subdirectory(Time)
diff --git a/core-slice/System/Component/CMakeLists.txt b/core-slice/System/Component/CMakeLists.txt
new file mode 100644
index 0000000..fafe3e9
--- /dev/null
+++ b/core-slice/System/Component/CMakeLists.txt
@@ -0,0 +1,2 @@
+# Compile Component API 
+hydra_compile_slice(ComponentServiceIf.ice lib "ComponentService API" System)
diff --git a/core-slice/System/Component/ComponentServiceIf.ice b/core-slice/System/Component/ComponentServiceIf.ice
new file mode 100644
index 0000000..0cd1a12
--- /dev/null
+++ b/core-slice/System/Component/ComponentServiceIf.ice
@@ -0,0 +1,63 @@
+#pragma once
+module Hydra
+{
+module System
+{
+module Component
+{
+module V1
+{
+   const string Version = "V1";
+
+   /**
+    * ShuttingDown is thrown when an operation is performed when a service is in the process
+    * of shutting itself down. This exception may be thrown from other interface methods
+    */
+   exception ShuttingDown {};
+
+   /**
+    * Suspended is thrown when a service cannot perform an operation because it is a suspended 
+    * state.
+    */
+   exception Suspended {};
+
+   /**
+    * Service is the base interface for all Hydra services. Most components will include an implementation
+    * of this or a derived interface.
+    */
+   interface ComponentService
+   {
+      /**
+       * Suspends activity in the service. In general this means that the primary activity of a service
+       * is suspended. Queries about state etc, may or may not be available. Calling suspend on a service
+       * that is suspended should be treated as a no-op.
+       *
+       * @throws ShuttingDown if the service is in the process of shutting down.
+       */
+      void suspend() throws ShuttingDown;
+
+      /**
+       * Resumes a service that has been suspended. After this call returns the suspended service
+       * must be ready to handle requests in a manner consistent with its state at the time the service
+       * was suspended.
+       *
+       * @throws ShuttingDown if the service is in the process of shutting down.
+       */
+      void resume() throws ShuttingDown;
+
+      /** 
+       * Commences a clean shutdown of the services. The details of shutdown are implementation specific.
+       * For example, some services will begin to reject requests immediately after being shutdown but 
+       * resume requests currently being handled. Others might abort requests in progress. A component
+       * implementing this interface should indicate if requests will be aborted or not on shutdown.
+       *
+       * @throws Suspended if the service is suspended. 
+       */
+      void shutdown() throws Suspended;
+   };
+
+}; // End of module V1
+}; // End of module Component
+}; // End of module System
+}; // End of module Hydra
+
diff --git a/core-slice/System/Time/CMakeLists.txt b/core-slice/System/Time/CMakeLists.txt
new file mode 100644
index 0000000..e0f10ae
--- /dev/null
+++ b/core-slice/System/Time/CMakeLists.txt
@@ -0,0 +1,2 @@
+# Compile Time API 
+hydra_compile_slice(TimeIf.ice lib "Time services API" System)
diff --git a/core-slice/System/Time/TimeIf.ice b/core-slice/System/Time/TimeIf.ice
new file mode 100644
index 0000000..c9aa376
--- /dev/null
+++ b/core-slice/System/Time/TimeIf.ice
@@ -0,0 +1,19 @@
+#pragma once
+
+module Hydra
+{
+module System
+{
+module Time
+{
+module V1
+{
+   class TimeMarker
+   {
+      long markTime;
+      float scale; 
+   };
+}; // End of V1
+}; // End of Time
+}; // End of System
+}; // End of Hydra
diff --git a/local-slice/SipDataIf.slice b/local-slice/SipDataIf.slice
new file mode 100644
index 0000000..ed3f88b
--- /dev/null
+++ b/local-slice/SipDataIf.slice
@@ -0,0 +1,14 @@
+module Hydra
+{
+
+module SIP
+{
+
+module Data
+{
+
+}; //module data
+
+}; //module SIP
+
+}; //module Hydra
diff --git a/local-slice/SipRoleIf.slice b/local-slice/SipRoleIf.slice
new file mode 100644
index 0000000..3e28846
--- /dev/null
+++ b/local-slice/SipRoleIf.slice
@@ -0,0 +1,14 @@
+module Hydra
+{
+
+module SIP
+{
+
+module Role
+{
+
+}; //module Role
+
+}; //module SIP
+
+}; //module Hydra

-----------------------------------------------------------------------


-- 
asterisk-scf/integration/sip.git



More information about the asterisk-scf-commits mailing list