Loading src/com/android/bluetooth/pbap/BluetoothPbapObexServer.java +4 −39 Original line number Diff line number Diff line Loading @@ -670,51 +670,16 @@ public class BluetoothPbapObexServer extends ServerRequestHandler { return ResponseCodes.OBEX_HTTP_OK; } byte[] vcardBytes = vcardString.getBytes(); int vcardStringLen = vcardBytes.length; if (D) Log.d(TAG, "Send Data: len=" + vcardStringLen); OutputStream outputStream = null; int pushResult = ResponseCodes.OBEX_HTTP_OK; try { outputStream = op.openOutputStream(); outputStream.write(vcardString.getBytes()); if (V) Log.v(TAG, "Send Data complete!"); } catch (IOException e) { Log.e(TAG, "open outputstrem failed" + e.toString()); return ResponseCodes.OBEX_HTTP_INTERNAL_ERROR; } int position = 0; long timestamp = 0; int outputBufferSize = op.getMaxPacketSize(); if (V) Log.v(TAG, "outputBufferSize = " + outputBufferSize); while (position != vcardStringLen) { if (sIsAborted) { ((ServerOperation)op).isAborted = true; sIsAborted = false; break; } if (V) timestamp = System.currentTimeMillis(); int readLength = outputBufferSize; if (vcardStringLen - position < outputBufferSize) { readLength = vcardStringLen - position; } byte[] subByteArray = Arrays.copyOfRange(vcardBytes, position, position + readLength); try { outputStream.write(subByteArray, 0, readLength); } catch (IOException e) { Log.e(TAG, "write outputstrem failed" + e.toString()); Log.e(TAG, "open/write outputstrem failed" + e.toString()); pushResult = ResponseCodes.OBEX_HTTP_INTERNAL_ERROR; break; } if (V) { Log.v(TAG, "Sending vcard String position = " + position + " readLength " + readLength + " bytes took " + (System.currentTimeMillis() - timestamp) + " ms"); } position += readLength; } if (V) Log.v(TAG, "Send Data complete!"); if (!closeStream(outputStream, op)) { pushResult = ResponseCodes.OBEX_HTTP_INTERNAL_ERROR; Loading src/com/android/bluetooth/pbap/BluetoothPbapVcardManager.java +17 −53 Original line number Diff line number Diff line Loading @@ -68,8 +68,6 @@ public class BluetoothPbapVcardManager { private Context mContext; private StringBuilder mVcardResults = null; static final String[] PHONES_PROJECTION = new String[] { Data._ID, // 0 CommonDataKinds.Phone.TYPE, // 1 Loading Loading @@ -522,21 +520,17 @@ public class BluetoothPbapVcardManager { } /** * Handler to emit VCard String to PCE once size grow to maxPacketSize. * Handler to emit vCards to PCE. */ public class HandlerForStringBuffer { private Operation operation; private OutputStream outputStream; private int maxPacketSize; private String phoneOwnVCard = null; public HandlerForStringBuffer(Operation op, String ownerVCard) { operation = op; maxPacketSize = operation.getMaxPacketSize(); if (V) Log.v(TAG, "getMaxPacketSize() = " + maxPacketSize); if (ownerVCard != null) { phoneOwnVCard = ownerVCard; if (V) Log.v(TAG, "phone own number vcard:"); Loading @@ -544,66 +538,36 @@ public class BluetoothPbapVcardManager { } } public boolean onInit(Context context) { private boolean write(String vCard) { try { outputStream = operation.openOutputStream(); mVcardResults = new StringBuilder(); if (phoneOwnVCard != null) { mVcardResults.append(phoneOwnVCard); } } catch (IOException e) { Log.e(TAG, "open outputstrem failed" + e.toString()); return false; } if (V) Log.v(TAG, "openOutputStream() ok."); if (vCard != null) { outputStream.write(vCard.getBytes()); return true; } public boolean onEntryCreated(String vcard) { int vcardLen = vcard.length(); if (V) Log.v(TAG, "The length of this vcard is: " + vcardLen); mVcardResults.append(vcard); int vcardByteLen = mVcardResults.toString().getBytes().length; if (V) Log.v(TAG, "The byte length of this vcardResults is: " + vcardByteLen); if (vcardByteLen >= maxPacketSize) { long timestamp = 0; int position = 0; // Need while loop to handle the big vcard case while (!BluetoothPbapObexServer.sIsAborted && position < (vcardByteLen - maxPacketSize)) { if (V) timestamp = System.currentTimeMillis(); String subStr = mVcardResults.toString().substring(position, position + maxPacketSize); try { outputStream.write(subStr.getBytes(), 0, maxPacketSize); } catch (IOException e) { Log.e(TAG, "write outputstrem failed" + e.toString()); } return false; } if (V) Log.v(TAG, "Sending vcard String " + maxPacketSize + " bytes took " + (System.currentTimeMillis() - timestamp) + " ms"); position += maxPacketSize; } mVcardResults.delete(0, position); public boolean onInit(Context context) { try { outputStream = operation.openOutputStream(); if (phoneOwnVCard != null) { return write(phoneOwnVCard); } return true; } catch (IOException e) { Log.e(TAG, "open outputstrem failed" + e.toString()); } return false; } public void onTerminate() { // Send out last packet byte[] lastBytes = mVcardResults.toString().getBytes(); try { outputStream.write(lastBytes, 0, lastBytes.length); } catch (IOException e) { Log.e(TAG, "write outputstrem failed" + e.toString()); public boolean onEntryCreated(String vcard) { return write(vcard); } if (V) Log.v(TAG, "Last packet sent out, sending process complete!"); public void onTerminate() { if (!BluetoothPbapObexServer.closeStream(outputStream, operation)) { if (V) Log.v(TAG, "CloseStream failed!"); } else { Loading Loading
src/com/android/bluetooth/pbap/BluetoothPbapObexServer.java +4 −39 Original line number Diff line number Diff line Loading @@ -670,51 +670,16 @@ public class BluetoothPbapObexServer extends ServerRequestHandler { return ResponseCodes.OBEX_HTTP_OK; } byte[] vcardBytes = vcardString.getBytes(); int vcardStringLen = vcardBytes.length; if (D) Log.d(TAG, "Send Data: len=" + vcardStringLen); OutputStream outputStream = null; int pushResult = ResponseCodes.OBEX_HTTP_OK; try { outputStream = op.openOutputStream(); outputStream.write(vcardString.getBytes()); if (V) Log.v(TAG, "Send Data complete!"); } catch (IOException e) { Log.e(TAG, "open outputstrem failed" + e.toString()); return ResponseCodes.OBEX_HTTP_INTERNAL_ERROR; } int position = 0; long timestamp = 0; int outputBufferSize = op.getMaxPacketSize(); if (V) Log.v(TAG, "outputBufferSize = " + outputBufferSize); while (position != vcardStringLen) { if (sIsAborted) { ((ServerOperation)op).isAborted = true; sIsAborted = false; break; } if (V) timestamp = System.currentTimeMillis(); int readLength = outputBufferSize; if (vcardStringLen - position < outputBufferSize) { readLength = vcardStringLen - position; } byte[] subByteArray = Arrays.copyOfRange(vcardBytes, position, position + readLength); try { outputStream.write(subByteArray, 0, readLength); } catch (IOException e) { Log.e(TAG, "write outputstrem failed" + e.toString()); Log.e(TAG, "open/write outputstrem failed" + e.toString()); pushResult = ResponseCodes.OBEX_HTTP_INTERNAL_ERROR; break; } if (V) { Log.v(TAG, "Sending vcard String position = " + position + " readLength " + readLength + " bytes took " + (System.currentTimeMillis() - timestamp) + " ms"); } position += readLength; } if (V) Log.v(TAG, "Send Data complete!"); if (!closeStream(outputStream, op)) { pushResult = ResponseCodes.OBEX_HTTP_INTERNAL_ERROR; Loading
src/com/android/bluetooth/pbap/BluetoothPbapVcardManager.java +17 −53 Original line number Diff line number Diff line Loading @@ -68,8 +68,6 @@ public class BluetoothPbapVcardManager { private Context mContext; private StringBuilder mVcardResults = null; static final String[] PHONES_PROJECTION = new String[] { Data._ID, // 0 CommonDataKinds.Phone.TYPE, // 1 Loading Loading @@ -522,21 +520,17 @@ public class BluetoothPbapVcardManager { } /** * Handler to emit VCard String to PCE once size grow to maxPacketSize. * Handler to emit vCards to PCE. */ public class HandlerForStringBuffer { private Operation operation; private OutputStream outputStream; private int maxPacketSize; private String phoneOwnVCard = null; public HandlerForStringBuffer(Operation op, String ownerVCard) { operation = op; maxPacketSize = operation.getMaxPacketSize(); if (V) Log.v(TAG, "getMaxPacketSize() = " + maxPacketSize); if (ownerVCard != null) { phoneOwnVCard = ownerVCard; if (V) Log.v(TAG, "phone own number vcard:"); Loading @@ -544,66 +538,36 @@ public class BluetoothPbapVcardManager { } } public boolean onInit(Context context) { private boolean write(String vCard) { try { outputStream = operation.openOutputStream(); mVcardResults = new StringBuilder(); if (phoneOwnVCard != null) { mVcardResults.append(phoneOwnVCard); } } catch (IOException e) { Log.e(TAG, "open outputstrem failed" + e.toString()); return false; } if (V) Log.v(TAG, "openOutputStream() ok."); if (vCard != null) { outputStream.write(vCard.getBytes()); return true; } public boolean onEntryCreated(String vcard) { int vcardLen = vcard.length(); if (V) Log.v(TAG, "The length of this vcard is: " + vcardLen); mVcardResults.append(vcard); int vcardByteLen = mVcardResults.toString().getBytes().length; if (V) Log.v(TAG, "The byte length of this vcardResults is: " + vcardByteLen); if (vcardByteLen >= maxPacketSize) { long timestamp = 0; int position = 0; // Need while loop to handle the big vcard case while (!BluetoothPbapObexServer.sIsAborted && position < (vcardByteLen - maxPacketSize)) { if (V) timestamp = System.currentTimeMillis(); String subStr = mVcardResults.toString().substring(position, position + maxPacketSize); try { outputStream.write(subStr.getBytes(), 0, maxPacketSize); } catch (IOException e) { Log.e(TAG, "write outputstrem failed" + e.toString()); } return false; } if (V) Log.v(TAG, "Sending vcard String " + maxPacketSize + " bytes took " + (System.currentTimeMillis() - timestamp) + " ms"); position += maxPacketSize; } mVcardResults.delete(0, position); public boolean onInit(Context context) { try { outputStream = operation.openOutputStream(); if (phoneOwnVCard != null) { return write(phoneOwnVCard); } return true; } catch (IOException e) { Log.e(TAG, "open outputstrem failed" + e.toString()); } return false; } public void onTerminate() { // Send out last packet byte[] lastBytes = mVcardResults.toString().getBytes(); try { outputStream.write(lastBytes, 0, lastBytes.length); } catch (IOException e) { Log.e(TAG, "write outputstrem failed" + e.toString()); public boolean onEntryCreated(String vcard) { return write(vcard); } if (V) Log.v(TAG, "Last packet sent out, sending process complete!"); public void onTerminate() { if (!BluetoothPbapObexServer.closeStream(outputStream, operation)) { if (V) Log.v(TAG, "CloseStream failed!"); } else { Loading