[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