Merge change I65208317 into eclair

* changes:
  Update OBEX to fix missing several contact entries issue.
This commit is contained in:
Android (Google) Code Review
2009-11-10 16:36:40 -08:00
3 changed files with 52 additions and 18 deletions

View File

@@ -269,7 +269,7 @@ public final class ClientOperation implements Operation, BaseStream {
if (mPrivateOutput == null) {
// there are 3 bytes operation headers and 3 bytes body headers //
mPrivateOutput = new PrivateOutputStream(this, mMaxPacketSize - 6);
mPrivateOutput = new PrivateOutputStream(this, getMaxPacketSize());
}
mPrivateOutputOpen = true;
@@ -278,7 +278,13 @@ public final class ClientOperation implements Operation, BaseStream {
}
public int getMaxPacketSize() {
return mMaxPacketSize - 6;
return mMaxPacketSize - 6 - getHeaderLength();
}
public int getHeaderLength() {
// OPP may need it
byte[] headerArray = ObexHelper.createHeader(mRequestHeader, false);
return headerArray.length;
}
/**

View File

@@ -163,6 +163,8 @@ public interface Operation {
long getLength();
int getHeaderLength();
String getType();
InputStream openInputStream() throws IOException;

View File

@@ -124,21 +124,30 @@ public final class ServerOperation implements Operation, BaseStream {
* It is a PUT request.
*/
mGetOperation = false;
} else {
/*
* Determine if the final bit is set
*/
if ((request & 0x80) == 0) {
finalBitSet = false;
} else {
finalBitSet = true;
mRequestFinished = true;
}
} else if ((request == 0x03) || (request == 0x83)) {
/*
* It is a GET request.
*/
mGetOperation = true;
}
/*
* Determine if the final bit is set
*/
if ((request & 0x80) == 0) {
// For Get request, final bit set is decided by server side logic
finalBitSet = false;
if (request == 0x83) {
mRequestFinished = true;
}
} else {
finalBitSet = true;
mRequestFinished = true;
throw new IOException("ServerOperation can not handle such request");
}
int length = in.read();
@@ -216,12 +225,9 @@ public final class ServerOperation implements Operation, BaseStream {
}
// wait for get request finished !!!!
while (mGetOperation && !finalBitSet) {
while (mGetOperation && !mRequestFinished) {
sendReply(ResponseCodes.OBEX_HTTP_CONTINUE);
}
if (finalBitSet && mGetOperation) {
mRequestFinished = true;
}
}
public boolean isValidBody() {
@@ -333,6 +339,12 @@ public final class ServerOperation implements Operation, BaseStream {
out.write(headerArray);
}
// For Get operation: if response code is OBEX_HTTP_OK, then this is the
// last packet; so set finalBitSet to true.
if (mGetOperation && type == ResponseCodes.OBEX_HTTP_OK) {
finalBitSet = true;
}
if ((finalBitSet) || (headerArray.length < (mMaxPacketLength - 20))) {
if (bodyLength > 0) {
/*
@@ -410,9 +422,10 @@ public final class ServerOperation implements Operation, BaseStream {
}
} else {
if ((headerID == ObexHelper.OBEX_OPCODE_PUT_FINAL)
|| (headerID == ObexHelper.OBEX_OPCODE_GET_FINAL)) {
if ((headerID == ObexHelper.OBEX_OPCODE_PUT_FINAL)) {
finalBitSet = true;
} else if (headerID == ObexHelper.OBEX_OPCODE_GET_FINAL) {
mRequestFinished = true;
}
/*
@@ -584,7 +597,20 @@ public final class ServerOperation implements Operation, BaseStream {
}
public int getMaxPacketSize() {
return mMaxPacketLength - 6;
return mMaxPacketLength - 6 - getHeaderLength();
}
public int getHeaderLength() {
long id = mListener.getConnectionId();
if (id == -1) {
replyHeader.mConnectionID = null;
} else {
replyHeader.mConnectionID = ObexHelper.convertToByteArray(id);
}
byte[] headerArray = ObexHelper.createHeader(replyHeader, false);
return headerArray.length;
}
/**
@@ -623,7 +649,7 @@ public final class ServerOperation implements Operation, BaseStream {
}
if (mPrivateOutput == null) {
mPrivateOutput = new PrivateOutputStream(this, mMaxPacketLength - 6);
mPrivateOutput = new PrivateOutputStream(this, getMaxPacketSize());
}
mPrivateOutputOpen = true;
return mPrivateOutput;