diff options
Diffstat (limited to 'obex/javax')
-rw-r--r-- | obex/javax/obex/ClientOperation.java | 2 | ||||
-rw-r--r-- | obex/javax/obex/ClientSession.java | 312 | ||||
-rw-r--r-- | obex/javax/obex/ObexHelper.java | 16 | ||||
-rw-r--r-- | obex/javax/obex/PrivateInputStream.java | 2 | ||||
-rw-r--r-- | obex/javax/obex/ServerOperation.java | 4 |
5 files changed, 152 insertions, 184 deletions
diff --git a/obex/javax/obex/ClientOperation.java b/obex/javax/obex/ClientOperation.java index 1bd1367..5bc302a 100644 --- a/obex/javax/obex/ClientOperation.java +++ b/obex/javax/obex/ClientOperation.java @@ -347,7 +347,7 @@ public final class ClientOperation implements Operation, BaseStream { isClosed = true; inputStreamOpened = false; outputStreamOpened = false; - parent.setInactive(); + parent.setRequestInactive(); } /** diff --git a/obex/javax/obex/ClientSession.java b/obex/javax/obex/ClientSession.java index bdbd699..f65ded9 100644 --- a/obex/javax/obex/ClientSession.java +++ b/obex/javax/obex/ClientSession.java @@ -43,66 +43,52 @@ import java.io.OutputStream; * * @hide */ -public class ClientSession implements ObexSession { - protected Authenticator authenticator; +public final class ClientSession implements ObexSession { + private Authenticator mAuthenticator; - protected boolean connectionOpen = false; + private boolean mOpen; // Determines if an OBEX layer connection has been established - protected boolean isConnected; + private boolean mObexConnected; - private byte[] connectionID = null; + private byte[] mConnectionId = null; - byte[] challengeDigest = null; - - protected InputStream input = null; - - protected OutputStream output = null; - - protected ObexTransport trans = null; + private byte[] mChallengeDigest = null; /* - * The max Packet size must be at least 256 according to the OBEX - * specification. - */ + * The max Packet size must be at least 256 according to the OBEX + * specification. + */ private int maxPacketSize = 256; - protected boolean isActive; + private boolean mRequestActive; - /* public ClientSession() { - connectionOpen = false; - }*/ + private final InputStream mInput; - public ClientSession(ObexTransport trans) { - try { - this.trans = trans; - input = trans.openInputStream(); - output = trans.openOutputStream(); - connectionOpen = true; - } catch (IOException ioe) { - } + private final OutputStream mOutput; + public ClientSession(ObexTransport trans) throws IOException { + mInput = trans.openInputStream(); + mOutput = trans.openOutputStream(); + mOpen = true; + mRequestActive = false; } - public HeaderSet connect(HeaderSet header) throws java.io.IOException { + public HeaderSet connect(HeaderSet header) throws IOException { ensureOpen(); - if (isConnected) { + if (mObexConnected) { throw new IOException("Already connected to server"); } - synchronized (this) { - if (isActive) { - throw new IOException("OBEX request is already being performed"); - } - isActive = true; - } + setRequestActive(); + int totalLength = 4; byte[] head = null; // Determine the header byte array if (header != null) { - if ((header).nonce != null) { - challengeDigest = new byte[16]; - System.arraycopy((header).nonce, 0, challengeDigest, 0, 16); + if (header.nonce != null) { + mChallengeDigest = new byte[16]; + System.arraycopy(header.nonce, 0, mChallengeDigest, 0, 16); } head = ObexHelper.createHeader(header, false); totalLength += head.length; @@ -145,62 +131,52 @@ public class ClientSession implements ObexSession { * Byte 7 to n: Optional HeaderSet */ if (returnHeaderSet.responseCode == ResponseCodes.OBEX_HTTP_OK) { - isConnected = true; - } - synchronized (this) { - isActive = false; + mObexConnected = true; } + setRequestInactive(); return returnHeaderSet; } - public Operation get(HeaderSet header) throws java.io.IOException { + public Operation get(HeaderSet header) throws IOException { - if (!isConnected) { + if (!mObexConnected) { throw new IOException("Not connected to the server"); } - synchronized (this) { - if (isActive) { - throw new IOException("OBEX request is already being performed"); - } - isActive = true; - } + setRequestActive(); + ensureOpen(); if (header == null) { header = new HeaderSet(); } else { - if ((header).nonce != null) { - challengeDigest = new byte[16]; - System.arraycopy((header).nonce, 0, challengeDigest, 0, 16); + if (header.nonce != null) { + mChallengeDigest = new byte[16]; + System.arraycopy(header.nonce, 0, mChallengeDigest, 0, 16); } } // Add the connection ID if one exists - if (connectionID != null) { - (header).connectionID = new byte[4]; - System.arraycopy(connectionID, 0, (header).connectionID, 0, 4); + if (mConnectionId != null) { + header.connectionID = new byte[4]; + System.arraycopy(mConnectionId, 0, header.connectionID, 0, 4); } - return new ClientOperation(input, maxPacketSize, this, header, true); + return new ClientOperation(mInput, maxPacketSize, this, header, true); } /** - * 0xCB Connection Id an identifier used for OBEX connection multiplexing - */ + * 0xCB Connection Id an identifier used for OBEX connection multiplexing + */ public void setConnectionID(long id) { if ((id < 0) || (id > 0xFFFFFFFFL)) { throw new IllegalArgumentException("Connection ID is not in a valid range"); } - connectionID = ObexHelper.convertToByteArray(id); - } - - public HeaderSet createHeaderSet() { - return new HeaderSet(); + mConnectionId = ObexHelper.convertToByteArray(id); } - public HeaderSet delete(HeaderSet headers) throws java.io.IOException { + public HeaderSet delete(HeaderSet header) throws IOException { - Operation op = put(headers); + Operation op = put(header); op.getResponseCode(); HeaderSet returnValue = op.getReceivedHeaders(); op.close(); @@ -208,28 +184,24 @@ public class ClientSession implements ObexSession { return returnValue; } - public HeaderSet disconnect(HeaderSet header) throws java.io.IOException { - if (!isConnected) { + public HeaderSet disconnect(HeaderSet header) throws IOException { + if (!mObexConnected) { throw new IOException("Not connected to the server"); } - synchronized (this) { - if (isActive) { - throw new IOException("OBEX request is already being performed"); - } - isActive = true; - } + setRequestActive(); + ensureOpen(); // Determine the header byte array byte[] head = null; if (header != null) { - if ((header).nonce != null) { - challengeDigest = new byte[16]; - System.arraycopy((header).nonce, 0, challengeDigest, 0, 16); + if (header.nonce != null) { + mChallengeDigest = new byte[16]; + System.arraycopy(header.nonce, 0, mChallengeDigest, 0, 16); } // Add the connection ID if one exists - if (connectionID != null) { - (header).connectionID = new byte[4]; - System.arraycopy(connectionID, 0, (header).connectionID, 0, 4); + if (mConnectionId != null) { + header.connectionID = new byte[4]; + System.arraycopy(mConnectionId, 0, header.connectionID, 0, 4); } head = ObexHelper.createHeader(header, false); @@ -238,10 +210,10 @@ public class ClientSession implements ObexSession { } } else { // Add the connection ID if one exists - if (connectionID != null) { + if (mConnectionId != null) { head = new byte[5]; head[0] = (byte)0xCB; - System.arraycopy(connectionID, 0, head, 1, 4); + System.arraycopy(mConnectionId, 0, head, 1, 4); } } @@ -249,18 +221,18 @@ public class ClientSession implements ObexSession { sendRequest(0x81, head, returnHeaderSet, null); /* - * An OBEX DISCONNECT reply from the server: - * Byte 1: Response code - * Bytes 2 & 3: packet size - * Bytes 4 & up: headers - */ + * An OBEX DISCONNECT reply from the server: + * Byte 1: Response code + * Bytes 2 & 3: packet size + * Bytes 4 & up: headers + */ /* response code , and header are ignored * */ synchronized (this) { - isConnected = false; - isActive = false; + mObexConnected = false; + setRequestInactive(); } return returnHeaderSet; @@ -268,22 +240,17 @@ public class ClientSession implements ObexSession { public long getConnectionID() { - if (connectionID == null) { + if (mConnectionId == null) { return -1; } - return ObexHelper.convertToLong(connectionID); + return ObexHelper.convertToLong(mConnectionId); } - public Operation put(HeaderSet header) throws java.io.IOException { - if (!isConnected) { + public Operation put(HeaderSet header) throws IOException { + if (!mObexConnected) { throw new IOException("Not connected to the server"); } - synchronized (this) { - if (isActive) { - throw new IOException("OBEX request is already being performed"); - } - isActive = true; - } + setRequestActive(); ensureOpen(); @@ -291,41 +258,35 @@ public class ClientSession implements ObexSession { header = new HeaderSet(); } else { // when auth is initated by client ,save the digest - if ((header).nonce != null) { - challengeDigest = new byte[16]; - System.arraycopy((header).nonce, 0, challengeDigest, 0, 16); + if (header.nonce != null) { + mChallengeDigest = new byte[16]; + System.arraycopy(header.nonce, 0, mChallengeDigest, 0, 16); } } // Add the connection ID if one exists - if (connectionID != null) { + if (mConnectionId != null) { - (header).connectionID = new byte[4]; - System.arraycopy(connectionID, 0, (header).connectionID, 0, 4); + header.connectionID = new byte[4]; + System.arraycopy(mConnectionId, 0, header.connectionID, 0, 4); } - return new ClientOperation(input, maxPacketSize, this, header, false); + return new ClientOperation(mInput, maxPacketSize, this, header, false); } public void setAuthenticator(Authenticator auth) { if (auth == null) { throw new NullPointerException("Authenticator may not be null"); } - authenticator = auth; + mAuthenticator = auth; } public HeaderSet setPath(HeaderSet header, boolean backup, boolean create) - throws java.io.IOException { - if (!isConnected) { + throws IOException { + if (!mObexConnected) { throw new IOException("Not connected to the server"); } - synchronized (this) { - if (isActive) { - throw new IOException("OBEX request is already being performed"); - } - isActive = true; - } - + setRequestActive(); ensureOpen(); int totalLength = 2; @@ -334,22 +295,22 @@ public class ClientSession implements ObexSession { if (header == null) { header = new HeaderSet(); } else { - if ((header).nonce != null) { - challengeDigest = new byte[16]; - System.arraycopy((header).nonce, 0, challengeDigest, 0, 16); + if (header.nonce != null) { + mChallengeDigest = new byte[16]; + System.arraycopy(header.nonce, 0, mChallengeDigest, 0, 16); } } // when auth is initiated by client ,save the digest - if ((header).nonce != null) { - challengeDigest = new byte[16]; - System.arraycopy((header).nonce, 0, challengeDigest, 0, 16); + if (header.nonce != null) { + mChallengeDigest = new byte[16]; + System.arraycopy(header.nonce, 0, mChallengeDigest, 0, 16); } // Add the connection ID if one exists - if (connectionID != null) { - (header).connectionID = new byte[4]; - System.arraycopy(connectionID, 0, (header).connectionID, 0, 4); + if (mConnectionId != null) { + header.connectionID = new byte[4]; + System.arraycopy(mConnectionId, 0, header.connectionID, 0, 4); } head = ObexHelper.createHeader(header, false); @@ -398,9 +359,7 @@ public class ClientSession implements ObexSession { * Bytes 4 & up: headers */ - synchronized (this) { - isActive = false; - } + setRequestInactive(); return returnHeaderSet; } @@ -411,19 +370,29 @@ public class ClientSession implements ObexSession { * @throws IOException if the connection is closed */ public synchronized void ensureOpen() throws IOException { - if (!connectionOpen) { + if (!mOpen) { throw new IOException("Connection closed"); } } /** - * Sets the active mode to off. This allows Put and get operation objects - * to tell this object when they are done. + * Set request inactive. + * Allows Put and get operation objects to tell this object when they are + * done. */ - public void setInactive() { - synchronized (this) { - isActive = false; + /*package*/ synchronized void setRequestInactive() { + mRequestActive = false; + } + + /** + * Set request to active. + * @throws IOException if already active + */ + private synchronized void setRequestActive() throws IOException { + if (mRequestActive) { + throw new IOException("OBEX request is already being performed"); } + mRequestActive = true; } /** @@ -440,7 +409,7 @@ public class ClientSession implements ObexSession { * challenge header located in <code>head</code>; <code>null</code> * if no authentication header is included in <code>head</code> * - * @param headers the header object to update with the response + * @param header the header object to update with the response * * @param input the input stream used by the Operation object; null if this * is called on a CONNECT, SETPATH or DISCONNECT @@ -450,7 +419,7 @@ public class ClientSession implements ObexSession { * * @throws IOException if an IO error occurs */ - public boolean sendRequest(int code, byte[] head, HeaderSet headers, + public boolean sendRequest(int code, byte[] head, HeaderSet header, PrivateInputStream privateInput) throws IOException { //check header length with local max size if (head != null) { @@ -474,12 +443,12 @@ public class ClientSession implements ObexSession { } // Write the request to the output stream and flush the stream - output.write(out.toByteArray()); - output.flush(); + mOutput.write(out.toByteArray()); + mOutput.flush(); - headers.responseCode = input.read(); + header.responseCode = mInput.read(); - int length = ((input.read() << 8) | (input.read())); + int length = ((mInput.read() << 8) | (mInput.read())); if (length > ObexHelper.MAX_PACKET_SIZE_INT) { throw new IOException("Packet received exceeds packet size limit"); @@ -487,9 +456,9 @@ public class ClientSession implements ObexSession { if (length > 3) { byte[] data = null; if (code == 0x80) { - int version = input.read(); - int flags = input.read(); - maxPacketSize = (input.read() << 8) + input.read(); + int version = mInput.read(); + int flags = mInput.read(); + maxPacketSize = (mInput.read() << 8) + mInput.read(); //check with local max size if (maxPacketSize > ObexHelper.MAX_PACKET_SIZE_INT) { @@ -499,9 +468,9 @@ public class ClientSession implements ObexSession { if (length > 7) { data = new byte[length - 7]; - bytesReceived = input.read(data); + bytesReceived = mInput.read(data); while (bytesReceived != (length - 7)) { - bytesReceived += input.read(data, bytesReceived, data.length + bytesReceived += mInput.read(data, bytesReceived, data.length - bytesReceived); } } else { @@ -509,48 +478,48 @@ public class ClientSession implements ObexSession { } } else { data = new byte[length - 3]; - bytesReceived = input.read(data); + bytesReceived = mInput.read(data); while (bytesReceived != (length - 3)) { - bytesReceived += input.read(data, bytesReceived, data.length - bytesReceived); + bytesReceived += mInput.read(data, bytesReceived, data.length - bytesReceived); } if (code == 0xFF) { return true; } } - byte[] body = ObexHelper.updateHeaderSet(headers, data); + byte[] body = ObexHelper.updateHeaderSet(header, data); if ((privateInput != null) && (body != null)) { privateInput.writeBytes(body, 1); } - if (headers.connectionID != null) { - connectionID = new byte[4]; - System.arraycopy(headers.connectionID, 0, connectionID, 0, 4); + if (header.connectionID != null) { + mConnectionId = new byte[4]; + System.arraycopy(header.connectionID, 0, mConnectionId, 0, 4); } - if (headers.authResp != null) { - if (!handleAuthResp(headers.authResp)) { - setInactive(); + if (header.authResp != null) { + if (!handleAuthResp(header.authResp)) { + setRequestInactive(); throw new IOException("Authentication Failed"); } } - if ((headers.responseCode == ResponseCodes.OBEX_HTTP_UNAUTHORIZED) - && (headers.authChall != null)) { + if ((header.responseCode == ResponseCodes.OBEX_HTTP_UNAUTHORIZED) + && (header.authChall != null)) { - if (handleAuthChall(headers)) { + if (handleAuthChall(header)) { out.write((byte)0x4E); - out.write((byte)((headers.authResp.length + 3) >> 8)); - out.write((byte)(headers.authResp.length + 3)); - out.write(headers.authResp); - headers.authChall = null; - headers.authResp = null; + out.write((byte)((header.authResp.length + 3) >> 8)); + out.write((byte)(header.authResp.length + 3)); + out.write(header.authResp); + header.authChall = null; + header.authResp = null; byte[] sendHeaders = new byte[out.size() - 3]; System.arraycopy(out.toByteArray(), 3, sendHeaders, 0, sendHeaders.length); - return sendRequest(code, sendHeaders, headers, privateInput); + return sendRequest(code, sendHeaders, header, privateInput); } } } @@ -569,7 +538,7 @@ public class ClientSession implements ObexSession { */ protected boolean handleAuthChall(HeaderSet header) { - if (authenticator == null) { + if (mAuthenticator == null) { return false; } @@ -655,7 +624,7 @@ public class ClientSession implements ObexSession { header.authChall = null; try { - result = authenticator.onAuthenticationChallenge(realm, isUserIDRequired, isFullAccess); + result = mAuthenticator.onAuthenticationChallenge(realm, isUserIDRequired, isFullAccess); } catch (Exception e) { return false; } @@ -721,18 +690,18 @@ public class ClientSession implements ObexSession { * the response failed */ protected boolean handleAuthResp(byte[] authResp) { - if (authenticator == null) { + if (mAuthenticator == null) { return false; } - byte[] correctPassword = authenticator.onAuthenticationResponse(ObexHelper.getTagValue( + byte[] correctPassword = mAuthenticator.onAuthenticationResponse(ObexHelper.getTagValue( (byte)0x01, authResp)); if (correctPassword == null) { return false; } byte[] temp = new byte[correctPassword.length + 16]; - System.arraycopy(challengeDigest, 0, temp, 0, 16); + System.arraycopy(mChallengeDigest, 0, temp, 0, 16); System.arraycopy(correctPassword, 0, temp, 16, correctPassword.length); byte[] correctResponse = ObexHelper.computeMd5Hash(temp); @@ -747,9 +716,8 @@ public class ClientSession implements ObexSession { } public void close() throws IOException { - connectionOpen = false; - input.close(); - output.close(); - //client.close(); + mOpen = false; + mInput.close(); + mOutput.close(); } } diff --git a/obex/javax/obex/ObexHelper.java b/obex/javax/obex/ObexHelper.java index 5f1c493..6bf5e3e 100644 --- a/obex/javax/obex/ObexHelper.java +++ b/obex/javax/obex/ObexHelper.java @@ -62,11 +62,11 @@ public final class ObexHelper { * The maximum packet size for OBEX packets that this client can handle. * At present, this must be changed for each port. * - * OPTIMIZATION: The max packet size should be the Max incoming MTU minus - * OPTIMIZATION: L2CAP package headers and RFCOMM package headers. + * TODO: The max packet size should be the Max incoming MTU minus + * TODO: L2CAP package headers and RFCOMM package headers. * - * OPTIMIZATION: Retrieve the max incoming MTU from - * OPTIMIZATION: LocalDevice.getProperty(). + * TODO: Retrieve the max incoming MTU from + * TODO: LocalDevice.getProperty(). */ /** android note * set as 0xFFFE to match remote MPS @@ -293,10 +293,10 @@ public final class ObexHelper { /** * Creates the header part of OBEX packet based on the header provided. * - * OPTIMIZATION: Could use getHeaderList() to get the array of headers to - * OPTIMIZATION: include and then use the high two bits to determine the - * OPTIMIZATION: the type of the object and construct the byte array from - * OPTIMIZATION: that. This will make the size smaller. + * TODO: Could use getHeaderList() to get the array of headers to + * TODO: include and then use the high two bits to determine the + * TODO: the type of the object and construct the byte array from + * TODO: that. This will make the size smaller. * * @param head the header used to construct the byte array * diff --git a/obex/javax/obex/PrivateInputStream.java b/obex/javax/obex/PrivateInputStream.java index 4d8a537..9602649 100644 --- a/obex/javax/obex/PrivateInputStream.java +++ b/obex/javax/obex/PrivateInputStream.java @@ -39,7 +39,7 @@ import java.io.IOException; * This object provides an input stream to the Operation objects used in this * package. * - * OPTIMIZATION: Include the other read() methods defined in InputStream. + * TODO: Include the other read() methods defined in InputStream. * * @hide */ diff --git a/obex/javax/obex/ServerOperation.java b/obex/javax/obex/ServerOperation.java index bb3490b..5dcbb93 100644 --- a/obex/javax/obex/ServerOperation.java +++ b/obex/javax/obex/ServerOperation.java @@ -51,8 +51,8 @@ import java.io.ByteArrayOutputStream; * the server receives a 0x83, the client is signalling the server that it is * done with its request. * - * OPTIMIZATION: Extend the ClientOperation and reuse the methods defined - * OPTIMIZATION: in that class. + * TODO: Extend the ClientOperation and reuse the methods defined + * TODO: in that class. * * @hide */ |