/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.bluetooth.client.map; import java.io.IOException; import java.math.BigInteger; import javax.obex.ClientSession; import javax.obex.HeaderSet; import javax.obex.ResponseCodes; import android.bluetooth.client.map.BluetoothMasClient.CharsetType; import android.bluetooth.client.map.utils.ObexAppParameters; final class BluetoothMasRequestPushMessage extends BluetoothMasRequest { private static final String TYPE = "x-bt/message"; private String mMsg; private String mMsgHandle; private BluetoothMasRequestPushMessage(String folder) { mHeaderSet.setHeader(HeaderSet.TYPE, TYPE); if (folder == null) { folder = ""; } mHeaderSet.setHeader(HeaderSet.NAME, folder); } public BluetoothMasRequestPushMessage(String folder, String msg, CharsetType charset, boolean transparent, boolean retry) { this(folder); mMsg = msg; ObexAppParameters oap = new ObexAppParameters(); oap.add(OAP_TAGID_TRANSPARENT, transparent ? TRANSPARENT_ON : TRANSPARENT_OFF); oap.add(OAP_TAGID_RETRY, retry ? RETRY_ON : RETRY_OFF); oap.add(OAP_TAGID_CHARSET, charset == CharsetType.NATIVE ? CHARSET_NATIVE : CHARSET_UTF8); oap.addToHeaderSet(mHeaderSet); } @Override protected void readResponseHeaders(HeaderSet headerset) { try { String handle = (String) headerset.getHeader(HeaderSet.NAME); if (handle != null) { /* just to validate */ new BigInteger(handle, 16); mMsgHandle = handle; } } catch (NumberFormatException e) { mResponseCode = ResponseCodes.OBEX_HTTP_INTERNAL_ERROR; } catch (IOException e) { mResponseCode = ResponseCodes.OBEX_HTTP_INTERNAL_ERROR; } } public String getMsgHandle() { return mMsgHandle; } @Override public void execute(ClientSession session) throws IOException { executePut(session, mMsg.getBytes()); } }