title: Bluetooth peer connection reset
body: <p>Hi friends,
                I'm trying to send an file from android device to specific bluetooth device by using third party api called bluecove with obex. I can able to connect the device when connection header set I'm facing up an problem that <strong>peer connection reset.</strong></p>
  
  <p>Here my below code snippet. any help on this appreciated.</p>
  
  <p>In my activity I'm using below code to process send file </p>
  
  <pre><code>BlueCoveImpl.setConfigObject(
                  BlueCoveConfigProperties.PROPERTY_ANDROID_CONTEXT,
                  this);
  String deviceAddress = "0007ABB6D96E";
              int channel = 9;
              String obexURL = "btgoep://" + deviceAddress + ":"
                      + "0000110600001000800000805f9b34fb" + ";android=true";
  
              // String obexURL = "btgoep://" + deviceAddress + ":" + channel
              // + ";android=true";
              String fileToSend = "sdcard/DSCN9379.jpg";
              System.out.println("Connecting to " + obexURL);
              FileInputStream stream = new FileInputStream(fileToSend);
              File f = new File(fileToSend);
              int size = (int) f.length();
              byte file[] = new byte[size];
              stream.read(file);
              String filename = f.getName();
              System.out
                      .println("***************Now sending file to device*****************");
              SendFileTask task = new SendFileTask(MainActivity.this, obexURL,
                      file, filename);
              Thread thread = new Thread(task);
              thread.start();
  </code></pre>
  
  <p>================ below that i'm trying to connect bluecove connection class object with header set as follows.</p>
  
  <pre><code>package com.example.bluecovesample;
  
  import java.io.OutputStream;
  
  import javax.microedition.io.Connection;
  import javax.microedition.io.Connector;
  import javax.obex.ClientSession;
  import javax.obex.HeaderSet;
  import javax.obex.Operation;
  import javax.obex.ResponseCodes;
  
  //import static write ;  
  import android.content.Context;
  import android.widget.Toast;
  
  public class SendFileTask implements Runnable {
  
      private byte[] file;
      private String filename;
      public static final int WRITE = 2;
  
      String logString;
  
      int responseCode;
      Context context;
      String obexURL;
  
      public SendFileTask(Context ctx, String obexUrl, byte[] file,
              String filename) {
          this.context = ctx;
          this.obexURL = obexUrl;
          this.file = file;
          this.filename = filename;
  
      }
  
      public void run() {
          Connection connection = null;
          try {
              System.out.println(obexURL);
              // for ( int i = 0; i 3; i++ )
              {
                  // connection = Connector.open("btgoep://"+btConnectionURL+
                  // ":6");
                  connection = Connector.open(obexURL);
              }
              // connection obtained
  
              // now, let's create a session and a headerset objects
              ClientSession cs = (ClientSession) connection;
  
              HeaderSet hs = cs.createHeaderSet();
              // toastMsg(hs.toString());
              // now let's send the connect header
              // cs.notifyAll();
  
              **cs.connect(hs);**
  
              hs.setHeader(HeaderSet.NAME, filename);
              // System.out.println("sfname:"+filename);
              int dotIndex = filename.lastIndexOf(".");
              // System.out.println("doti:"+dotIndex);
              String extension = filename.substring(dotIndex).toLowerCase();
              // System.out.println("sfname:"+extension);
  
              if (extension.equals(".txt")) {
                  hs.setHeader(HeaderSet.TYPE, "text/plain");
              } else if (extension.equals(".jpg") || extension.equals(".jpeg")) {
                  hs.setHeader(HeaderSet.TYPE, "image/jpeg");
              } else if (extension.equals(".mpeg") || extension.equals(".mpg")
                      || extension.equals(".mp3")) {
                  hs.setHeader(HeaderSet.TYPE, "video/mpeg");
              } else if (extension.equals(".wav")) {
                  hs.setHeader(HeaderSet.TYPE, "audio/x-wav");
              } else if (extension.equals(".3gp")) {
                  hs.setHeader(HeaderSet.TYPE, "image/jpeg");
              } else if (extension.equals("mid") || extension.equals("rmi")) {
                  hs.setHeader(HeaderSet.TYPE, "audio/mid");
              }
  
              hs.setHeader(HeaderSet.LENGTH, new Long(file.length));
  
              Operation putOperation = cs.put(hs);
  
              // System.out.println("response code:"+putOperation.getResponseCode());
  
              // putOperation.getResponseCode();
              // this.responseCode = putOperation.getResponseCode();
  
              OutputStream outputStream = putOperation.openOutputStream();
              outputStream.write(file);
              // file push complete
  
              outputStream.close();
              responseCode = putOperation.getResponseCode();
  
              putOperation.close();
  
              cs.disconnect(null);
  
              connection.close();
  
              // file successfully sent
  
              System.out.println("RESPONSE CODE " + responseCode);
              if (responseCode == ResponseCodes.OBEX_HTTP_OK) {
                  System.out.println("FILE SUCCESSFULLY SENT " + filename);
              }
  
              else {
                  System.out.println("FILE SUCCESSFULLY NOT SENT" + filename
                          + " not in exception");
  
              }
  
          } catch (Exception e) {
  
              System.out.println("FILE SUCCESSFULLY NOT SENT" + filename
                      + " in exception");
              // System.out.println("In exception");
              e.printStackTrace();
  
              try {
                  connection.close();
              } catch (Exception ex) {
                  System.out.println("error closing connection" + ex.toString());
              }
          }
      }
  
      private void toastMsg(String msg) {
          Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
      }
  
  }
  </code></pre>
  
  <p>While executing the above code i got connection accept notification dialog on destination device and then notified that peer connection  rest at while executing line *cs.connect(hs); in my logcat. 
  Logcat stack trace :</p>
  
  <blockquote>
    <p>07-11 14:48:07.044: W/System.err(4527): java.io.IOException:
    Connection reset by peer 07-11 14:48:07.052: W/System.err(4527):  at
    android.bluetooth.BluetoothSocket.readNative(Native Method) 07-11
    14:48:07.059: W/System.err(4527):     at
    android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:336) 07-11
    14:48:07.059: W/System.err(4527):     at
    android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96)
    07-11 14:48:07.059: W/System.err(4527):   at
    com.intel.bluetooth.BluetoothStackAndroid.connectionRfRead(BluetoothStackAndroid.java:437)
    07-11 14:48:07.059: W/System.err(4527):   at
    com.intel.bluetooth.BluetoothRFCommInputStream.read(BluetoothRFCommInputStream.java:139)
    07-11 14:48:07.059: W/System.err(4527):   at
    com.intel.bluetooth.obex.OBEXUtils.readFully(OBEXUtils.java:71) 07-11
    14:48:07.059: W/System.err(4527):     at
    com.intel.bluetooth.obex.OBEXSessionBase.readPacket(OBEXSessionBase.java:217)
    07-11 14:48:07.059: W/System.err(4527):   at
    com.intel.bluetooth.obex.OBEXClientSessionImpl.connectImpl(OBEXClientSessionImpl.java:100)
    07-11 14:48:07.059: W/System.err(4527):   at
    com.intel.bluetooth.obex.OBEXClientSessionImpl.connect(OBEXClientSessionImpl.java:85)
    07-11 14:48:07.059: W/System.err(4527):   at
    com.example.bluecovesample.SendFileTask.run(SendFileTask.java:78)
    07-11 14:48:07.059: W/System.err(4527):   at
    java.lang.Thread.run(Thread.java:1019)</p>
  </blockquote>