blob: 6ee9cd394e8fa51b30d9db97ff457cdf50c9b79d [file] [log] [blame]
/*
* $Header: /cvshome/build/info.dmtree/src/info/dmtree/notification/NotificationService.java,v 1.5 2006/07/04 12:26:50 tszeredi Exp $
*
* Copyright (c) OSGi Alliance (2004, 2006). All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package info.dmtree.notification;
import info.dmtree.DmtException;
import info.dmtree.DmtSession;
/**
* NotificationService enables sending aynchronous notifications to a management
* server. The implementation of <code>NotificationService</code> should
* register itself in the OSGi service registry as a service.
*/
public interface NotificationService {
/**
* Sends a notification to a named principal. It is the responsibility of
* the <code>NotificationService</code> to route the notification to the
* given principal using the registered
* {@link info.dmtree.notification.spi.RemoteAlertSender} services.
* <p>
* In remotely initiated sessions the principal name identifies the remote
* server that created the session, this can be obtained using the session's
* {@link DmtSession#getPrincipal getPrincipal} call.
* <p>
* The principal name may be omitted if the client does not know the
* principal name. Even in this case the routing might be possible if the
* Notification Service finds an appropriate default destination (for
* example if it is only connected to one protocol adapter, which is only
* connected to one management server).
* <p>
* Since sending the notification and receiving acknowledgment for it is
* potentially a very time-consuming operation, notifications are sent
* asynchronously. This method should attempt to ensure that the
* notification can be sent successfully, and should throw an exception if
* it detects any problems. If the method returns without error, the
* notification is accepted for sending and the implementation must make a
* best-effort attempt to deliver it.
* <p>
* In case the notification is an asynchronous response to a previous
* {@link DmtSession#execute(String, String, String) execute} command, a
* correlation identifier can be specified to provide the association
* between the execute and the notification.
* <p>
* In order to send a notification using this method, the caller must have
* an <code>AlertPermission</code> with a target string matching the
* specified principal name. If the <code>principal</code> parameter is
* <code>null</code> (the principal name is not known), the target of the
* <code>AlertPermission</code> must be &quot;*&quot;.
* <p>
* When this method is called with all its parameters <code>null</code> or 0
* (except <code>principal</code>), it should send a protocol
* specific default notification to initiate a management session. For
* example, in case of OMA DM this is alert 1201 "Client Initiated Session".
* The <code>principal</code> parameter can be used to determine the
* recipient of the session initiation request.
*
* @param principal the principal name which is the recipient of this
* notification, can be <code>null</code>
* @param code the alert code, can be 0 if not needed
* @param correlator optional field that contains the correlation identifier
* of an associated exec command, can be <code>null</code> if not
* needed
* @param items the data of the alert items carried in this alert, can be
* <code>null</code> or empty if not needed
* @throws DmtException with the following possible error codes:
* <ul>
* <li><code>UNAUTHORIZED</code> when the remote server rejected
* the request due to insufficient authorization
* <li><code>ALERT_NOT_ROUTED</code> when the alert can not be
* routed to the given principal
* <li><code>REMOTE_ERROR</code> in case of communication
* problems between the device and the destination
* <li><code>COMMAND_FAILED</code> for unspecified errors
* encountered while attempting to complete the command
* <li><code>FEATURE_NOT_SUPPORTED</code> if the underlying
* management protocol doesn't support asynchronous notifications
* </ul>
* @throws SecurityException if the caller does not have the required
* <code>AlertPermission</code> with a target matching the
* <code>principal</code> parameter, as described above
*/
void sendNotification(String principal, int code, String correlator,
AlertItem[] items) throws DmtException;
}