| /* |
| * 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.pbap; |
| |
| import android.os.Handler; |
| import android.util.Log; |
| |
| import javax.obex.Authenticator; |
| import javax.obex.PasswordAuthentication; |
| |
| class BluetoothPbapObexAuthenticator implements Authenticator { |
| |
| private final static String TAG = "BluetoothPbapObexAuthenticator"; |
| |
| private String mSessionKey; |
| |
| private boolean mReplied; |
| |
| private final Handler mCallback; |
| |
| public BluetoothPbapObexAuthenticator(Handler callback) { |
| mCallback = callback; |
| } |
| |
| public synchronized void setReply(String key) { |
| Log.d(TAG, "setReply key=" + key); |
| |
| mSessionKey = key; |
| mReplied = true; |
| |
| notify(); |
| } |
| |
| @Override |
| public PasswordAuthentication onAuthenticationChallenge(String description, |
| boolean isUserIdRequired, boolean isFullAccess) { |
| PasswordAuthentication pa = null; |
| |
| mReplied = false; |
| |
| Log.d(TAG, "onAuthenticationChallenge: sending request"); |
| mCallback.obtainMessage(BluetoothPbapObexSession.OBEX_SESSION_AUTHENTICATION_REQUEST) |
| .sendToTarget(); |
| |
| synchronized (this) { |
| while (!mReplied) { |
| try { |
| Log.v(TAG, "onAuthenticationChallenge: waiting for response"); |
| this.wait(); |
| } catch (InterruptedException e) { |
| Log.e(TAG, "Interrupted while waiting for challenge response"); |
| } |
| } |
| } |
| |
| if (mSessionKey != null && mSessionKey.length() != 0) { |
| Log.v(TAG, "onAuthenticationChallenge: mSessionKey=" + mSessionKey); |
| pa = new PasswordAuthentication(null, mSessionKey.getBytes()); |
| } else { |
| Log.v(TAG, "onAuthenticationChallenge: mSessionKey is empty, timeout/cancel occured"); |
| } |
| |
| return pa; |
| } |
| |
| @Override |
| public byte[] onAuthenticationResponse(byte[] userName) { |
| /* required only in case PCE challenges PSE which we don't do now */ |
| return null; |
| } |
| |
| } |