/* * Copyright (c) 2008-2009, Motorola, Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * - Neither the name of the Motorola, Inc. nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ package javax.obex; /** * The ServerRequestHandler class defines an event listener that * will respond to OBEX requests made to the server. *

* The onConnect(), onSetPath(), * onDelete(), onGet(), and onPut() * methods may return any response code defined in the * ResponseCodes class except for OBEX_HTTP_CONTINUE. * If OBEX_HTTP_CONTINUE or a value not defined in the * ResponseCodes class is returned, the server implementation will * send an OBEX_HTTP_INTERNAL_ERROR response to the client. *

* Connection ID and Target Headers *

* According to the IrOBEX specification, a packet may not contain a Connection * ID and Target header. Since the Connection ID header is managed by the * implementation, it will not send a Connection ID header, if a Connection ID * was specified, in a packet that has a Target header. In other words, if an * application adds a Target header to a HeaderSet object used in * an OBEX operation and a Connection ID was specified, no Connection ID will be * sent in the packet containing the Target header. *

* CREATE-EMPTY Requests *

* A CREATE-EMPTY request allows clients to create empty objects on the server. * When a CREATE-EMPTY request is received, the onPut() method will * be called by the implementation. To differentiate between a normal PUT * request and a CREATE-EMPTY request, an application must open the * InputStream from the Operation object passed to the * onPut() method. For a PUT request, the application will be able * to read Body data from this InputStream. For a CREATE-EMPTY * request, there will be no Body data to read. Therefore, a call to * InputStream.read() will return -1. * @hide */ public class ServerRequestHandler { private long mConnectionId; /** * Creates a ServerRequestHandler. */ protected ServerRequestHandler() { /* * A connection ID of -1 implies there is no conenction ID */ mConnectionId = -1; } /** * Sets the connection ID header to include in the reply packets. * @param connectionId the connection ID to use; -1 if no connection ID * should be sent * @throws IllegalArgumentException if id is not in the range * -1 to 232-1 */ public void setConnectionId(final long connectionId) { if ((connectionId < -1) || (connectionId > 0xFFFFFFFFL)) { throw new IllegalArgumentException("Illegal Connection ID"); } mConnectionId = connectionId; } /** * Retrieves the connection ID that is being used in the present connection. * This method will return -1 if no connection ID is being used. * @return the connection id being used or -1 if no connection ID is being * used */ public long getConnectionId() { return mConnectionId; } /** * Called when a CONNECT request is received. *

* If this method is not implemented by the class that extends this class, * onConnect() will always return an OBEX_HTTP_OK * response code. *

* The headers received in the request can be retrieved from the * request argument. The headers that should be sent in the * reply must be specified in the reply argument. * @param request contains the headers sent by the client; * request will never be null * @param reply the headers that should be sent in the reply; * reply will never be null * @return a response code defined in ResponseCodes that will * be returned to the client; if an invalid response code is * provided, the OBEX_HTTP_INTERNAL_ERROR response code * will be used */ public int onConnect(HeaderSet request, HeaderSet reply) { return ResponseCodes.OBEX_HTTP_OK; } /** * Called when a DISCONNECT request is received. *

* The headers received in the request can be retrieved from the * request argument. The headers that should be sent in the * reply must be specified in the reply argument. * @param request contains the headers sent by the client; * request will never be null * @param reply the headers that should be sent in the reply; * reply will never be null */ public void onDisconnect(HeaderSet request, HeaderSet reply) { } /** * Called when a SETPATH request is received. *

* If this method is not implemented by the class that extends this class, * onSetPath() will always return an * OBEX_HTTP_NOT_IMPLEMENTED response code. *

* The headers received in the request can be retrieved from the * request argument. The headers that should be sent in the * reply must be specified in the reply argument. * @param request contains the headers sent by the client; * request will never be null * @param reply the headers that should be sent in the reply; * reply will never be null * @param backup true if the client requests that the server * back up one directory before changing to the path described by * name; false to apply the request to the * present path * @param create true if the path should be created if it does * not already exist; false if the path should not be * created if it does not exist and an error code should be returned * @return a response code defined in ResponseCodes that will * be returned to the client; if an invalid response code is * provided, the OBEX_HTTP_INTERNAL_ERROR response code * will be used */ public int onSetPath(HeaderSet request, HeaderSet reply, boolean backup, boolean create) { return ResponseCodes.OBEX_HTTP_NOT_IMPLEMENTED; } /** * Called when a DELETE request is received. *

* If this method is not implemented by the class that extends this class, * onDelete() will always return an * OBEX_HTTP_NOT_IMPLEMENTED response code. *

* The headers received in the request can be retrieved from the * request argument. The headers that should be sent in the * reply must be specified in the reply argument. * @param request contains the headers sent by the client; * request will never be null * @param reply the headers that should be sent in the reply; * reply will never be null * @return a response code defined in ResponseCodes that will * be returned to the client; if an invalid response code is * provided, the OBEX_HTTP_INTERNAL_ERROR response code * will be used */ public int onDelete(HeaderSet request, HeaderSet reply) { return ResponseCodes.OBEX_HTTP_NOT_IMPLEMENTED; } /** * Called when a ABORT request is received. */ public int onAbort(HeaderSet request, HeaderSet reply) { return ResponseCodes.OBEX_HTTP_NOT_IMPLEMENTED; } /** * Called when a PUT request is received. *

* If this method is not implemented by the class that extends this class, * onPut() will always return an * OBEX_HTTP_NOT_IMPLEMENTED response code. *

* If an ABORT request is received during the processing of a PUT request, * op will be closed by the implementation. * @param operation contains the headers sent by the client and allows new * headers to be sent in the reply; op will never be * null * @return a response code defined in ResponseCodes that will * be returned to the client; if an invalid response code is * provided, the OBEX_HTTP_INTERNAL_ERROR response code * will be used */ public int onPut(Operation operation) { return ResponseCodes.OBEX_HTTP_NOT_IMPLEMENTED; } /** * Called when a GET request is received. *

* If this method is not implemented by the class that extends this class, * onGet() will always return an * OBEX_HTTP_NOT_IMPLEMENTED response code. *

* If an ABORT request is received during the processing of a GET request, * op will be closed by the implementation. * @param operation contains the headers sent by the client and allows new * headers to be sent in the reply; op will never be * null * @return a response code defined in ResponseCodes that will * be returned to the client; if an invalid response code is * provided, the OBEX_HTTP_INTERNAL_ERROR response code * will be used */ public int onGet(Operation operation) { return ResponseCodes.OBEX_HTTP_NOT_IMPLEMENTED; } /** * Called when this object attempts to authenticate a client and the * authentication request fails because the response digest in the * authentication response header was wrong. *

* If this method is not implemented by the class that extends this class, * this method will do nothing. * @param userName the user name returned in the authentication response; * null if no user name was provided in the response */ public void onAuthenticationFailure(byte[] userName) { } /** * Called by ServerSession to update the status of current transaction *

* If this method is not implemented by the class that extends this class, * this method will do nothing. */ public void updateStatus(String message) { } /** * Called when session is closed. *

* If this method is not implemented by the class that extends this class, * this method will do nothing. */ public void onClose() { } }