blob: 1efe56d5cb9351e0c4d20a98b18b80c7ed405814 [file] [log] [blame]
package com.android.bluetooth.tests;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.concurrent.CountDownLatch;
import javax.obex.HeaderSet;
import javax.obex.Operation;
import javax.obex.ResponseCodes;
import javax.obex.ServerRequestHandler;
import android.util.Log;
public class ObexTestServer extends ServerRequestHandler {
private static final String TAG = "ObexTestServer";
private static final boolean V = true;
ArrayList<SeqStep> mSequence;
CountDownLatch mStopLatch;
ObexTestDataHandler mDataHandler;
int mOperationIndex = 0;
public ObexTestServer(ArrayList<SeqStep> sequence, CountDownLatch stopLatch) {
super();
mSequence = sequence;
mDataHandler = new ObexTestDataHandler("(Server)");
mStopLatch = stopLatch;
}
/* OBEX operation handlers */
@Override
public int onConnect(HeaderSet request, HeaderSet reply) {
Log.i(TAG,"onConnect()");
int index;
int result = ResponseCodes.OBEX_HTTP_OK;
try {
index = ((Long)request.getHeader(TestSequencer.STEP_INDEX_HEADER)).intValue();
mOperationIndex = index;
} catch (IOException e) {
Log.e(TAG, "Exception in onConnect - aborting...");
result = ResponseCodes.OBEX_HTTP_INTERNAL_ERROR;
// A read from null will produce exception to end the test.
}
/* TODO: validate request headers, and set response headers */
return result;
}
@Override
public void onDisconnect(HeaderSet request, HeaderSet reply) {
Log.i(TAG,"onDisconnect()");
/* TODO: validate request headers, and set response headers */
int index;
int result = ResponseCodes.OBEX_HTTP_OK;
try {
index = ((Long)request.getHeader(TestSequencer.STEP_INDEX_HEADER)).intValue();
mOperationIndex = index;
} catch (IOException e) {
Log.e(TAG, "Exception in onDisconnect...");
result = ResponseCodes.OBEX_HTTP_INTERNAL_ERROR;
// A read from null will produce exception to end the test.
}
if(mOperationIndex >= (mSequence.size()-1)) {
/* End of test, signal test runner thread */
Log.i(TAG, "Sending latch close signal...");
mStopLatch.countDown();
} else {
Log.i(TAG, "Got disconnect with mOperationCounter = " + mOperationIndex);
}
reply.responseCode = result;
}
@Override
public int onPut(Operation operation) {
Log.i(TAG,"onPut()");
/* TODO: validate request headers, and set response headers
* Also handle pause/abort */
// 1) Validate request
// 2) Open the output stream.
// 3) Receive the data
// 4) Send response OK
InputStream inStream;
int result = ResponseCodes.OBEX_HTTP_OK;
try{
inStream = operation.openInputStream();
HeaderSet reqHeaders = operation.getReceivedHeader();
int index = ((Long)reqHeaders.getHeader(TestSequencer.STEP_INDEX_HEADER)).intValue();
mOperationIndex = index;
mDataHandler.readData(inStream, mSequence.get(index).mParams);
} catch (IOException e) {
Log.e(TAG, "Exception in onPut - aborting...");
inStream = null;
result = ResponseCodes.OBEX_HTTP_INTERNAL_ERROR;
// A read from null will produce exception to end the test.
} finally {
}
if(result == ResponseCodes.OBEX_HTTP_OK) {
Log.i(TAG, "OBEX-HANDLER: operation complete success");
} else {
Log.e(TAG, "OBEX-HANDLER: operation complete FAILED!");
}
return result;
}
@Override
public int onGet(Operation operation) {
Log.i(TAG,"onGet()");
/* TODO: validate request headers, and set response headers
* Also handle pause/abort */
// 1) Validate request
// 2) Open the output stream.
// 3) Receive the data
// 4) Send response OK
OutputStream outStream;
int result = ResponseCodes.OBEX_HTTP_OK;
try{
outStream = operation.openOutputStream();
HeaderSet reqHeaders = operation.getReceivedHeader();
int index = ((Long)reqHeaders.getHeader(TestSequencer.STEP_INDEX_HEADER)).intValue();
mOperationIndex = index;
mDataHandler.writeData(outStream, mSequence.get(index).mParams);
} catch (IOException e) {
Log.e(TAG, "Exception in onGet - aborting...");
outStream = null;
result = ResponseCodes.OBEX_HTTP_INTERNAL_ERROR;
// A read from null will produce exception to end the test.
} finally {
}
if(result == ResponseCodes.OBEX_HTTP_OK) {
Log.i(TAG, "OBEX-HANDLER: operation complete success");
} else {
Log.e(TAG, "OBEX-HANDLER: operation complete FAILED!");
}
return result;
}
}