1192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta/* 2192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Copyright (C) 2014 The Android Open Source Project 3192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 4192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Licensed under the Apache License, Version 2.0 (the "License"); 5192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * you may not use this file except in compliance with the License. 6192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * You may obtain a copy of the License at 7192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 8192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * http://www.apache.org/licenses/LICENSE-2.0 9192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * 10192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * Unless required by applicable law or agreed to in writing, software 11192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * distributed under the License is distributed on an "AS IS" BASIS, 12192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * See the License for the specific language governing permissions and 14192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta * limitations under the License. 15192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta */ 16192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 17192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptapackage android.bluetooth.client.map; 18192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 19192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport android.util.Log; 20192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 21192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 22192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport android.bluetooth.client.map.BluetoothMasClient.CharsetType; 23192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport android.bluetooth.client.map.utils.ObexAppParameters; 24192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 25192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport java.io.ByteArrayOutputStream; 26192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport java.io.IOException; 27192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport java.io.InputStream; 28192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 29192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport javax.obex.ClientSession; 30192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport javax.obex.HeaderSet; 31192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptaimport javax.obex.ResponseCodes; 32192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 33192d793d2586b620027edd5b45ff4c72a86cc7beHemant Guptafinal class BluetoothMasRequestGetMessage extends BluetoothMasRequest { 34192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 35192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private static final String TAG = "BluetoothMasRequestGetMessage"; 36192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 37192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private static final String TYPE = "x-bt/message"; 38192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 39192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta private BluetoothMapBmessage mBmessage; 40192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 41192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public BluetoothMasRequestGetMessage(String handle, CharsetType charset, boolean attachment) { 42192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 43192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mHeaderSet.setHeader(HeaderSet.NAME, handle); 44192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 45192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mHeaderSet.setHeader(HeaderSet.TYPE, TYPE); 46192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 47192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta ObexAppParameters oap = new ObexAppParameters(); 48192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 49192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_CHARSET, CharsetType.UTF_8.equals(charset) ? CHARSET_UTF8 50192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta : CHARSET_NATIVE); 51192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 52192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.add(OAP_TAGID_ATTACHMENT, attachment ? ATTACHMENT_ON : ATTACHMENT_OFF); 53192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 54192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta oap.addToHeaderSet(mHeaderSet); 55192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 56192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 57192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta @Override 58192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta protected void readResponse(InputStream stream) { 59192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 60192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta ByteArrayOutputStream baos = new ByteArrayOutputStream(); 61192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta byte[] buf = new byte[1024]; 62192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 63192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta try { 64192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta int len; 65192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta while ((len = stream.read(buf)) != -1) { 66192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta baos.write(buf, 0, len); 67192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 68192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } catch (IOException e) { 69192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta Log.e(TAG, "I/O exception while reading response", e); 70192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 71192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 72192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta String bmsg = baos.toString(); 73192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 74192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mBmessage = BluetoothMapBmessageParser.createBmessage(bmsg); 75192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 76192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta if (mBmessage == null) { 77192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta mResponseCode = ResponseCodes.OBEX_HTTP_INTERNAL_ERROR; 78192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 79192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 80192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 81192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public BluetoothMapBmessage getMessage() { 82192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta return mBmessage; 83192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 84192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta 85192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta @Override 86192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta public void execute(ClientSession session) throws IOException { 87192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta executeGet(session); 88192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta } 89192d793d2586b620027edd5b45ff4c72a86cc7beHemant Gupta} 90