Home | History | Annotate | Download | only in pbap
      1 /*
      2  * Copyright (c) 2008-2009, Motorola, Inc.
      3  *
      4  * All rights reserved.
      5  *
      6  * Redistribution and use in source and binary forms, with or without
      7  * modification, are permitted provided that the following conditions are met:
      8  *
      9  * - Redistributions of source code must retain the above copyright notice,
     10  * this list of conditions and the following disclaimer.
     11  *
     12  * - Redistributions in binary form must reproduce the above copyright notice,
     13  * this list of conditions and the following disclaimer in the documentation
     14  * and/or other materials provided with the distribution.
     15  *
     16  * - Neither the name of the Motorola, Inc. nor the names of its contributors
     17  * may be used to endorse or promote products derived from this software
     18  * without specific prior written permission.
     19  *
     20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     23  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
     24  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     25  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     30  * POSSIBILITY OF SUCH DAMAGE.
     31  */
     32 
     33 package com.android.bluetooth.pbap;
     34 
     35 import android.os.Handler;
     36 import android.os.Message;
     37 import android.util.Log;
     38 
     39 import javax.obex.Authenticator;
     40 import javax.obex.PasswordAuthentication;
     41 
     42 /**
     43  * BluetoothPbapAuthenticator is a used by BluetoothObexServer for obex
     44  * authentication procedure.
     45  */
     46 public class BluetoothPbapAuthenticator implements Authenticator {
     47     private static final String TAG = "BluetoothPbapAuthenticator";
     48 
     49     private boolean mChallenged;
     50 
     51     private boolean mAuthCancelled;
     52 
     53     private String mSessionKey;
     54 
     55     private Handler mCallback;
     56 
     57     public BluetoothPbapAuthenticator(final Handler callback) {
     58         mCallback = callback;
     59         mChallenged = false;
     60         mAuthCancelled = false;
     61         mSessionKey = null;
     62     }
     63 
     64     public final synchronized void setChallenged(final boolean bool) {
     65         mChallenged = bool;
     66     }
     67 
     68     public final synchronized void setCancelled(final boolean bool) {
     69         mAuthCancelled = bool;
     70     }
     71 
     72     public final synchronized void setSessionKey(final String string) {
     73         mSessionKey = string;
     74     }
     75 
     76     private void waitUserConfirmation() {
     77         Message msg = Message.obtain(mCallback);
     78         msg.what = BluetoothPbapService.MSG_OBEX_AUTH_CHALL;
     79         msg.sendToTarget();
     80         synchronized (this) {
     81             while (!mChallenged && !mAuthCancelled) {
     82                 try {
     83                     wait();
     84                 } catch (InterruptedException e) {
     85                     Log.e(TAG, "Interrupted while waiting on isChalled");
     86                 }
     87             }
     88         }
     89     }
     90 
     91     public PasswordAuthentication onAuthenticationChallenge(final String description,
     92             final boolean isUserIdRequired, final boolean isFullAccess) {
     93         waitUserConfirmation();
     94         if (mSessionKey.trim().length() != 0) {
     95             PasswordAuthentication pa = new PasswordAuthentication(null, mSessionKey.getBytes());
     96             return pa;
     97         }
     98         return null;
     99     }
    100 
    101     // TODO: Reserved for future use only, in case PSE challenge PCE
    102     public byte[] onAuthenticationResponse(final byte[] userName) {
    103         byte[] b = null;
    104         return b;
    105     }
    106 }
    107