/*
* 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() { } }