109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly/* 209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * Copyright (c) 2008-2009, Motorola, Inc. 309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * 409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * All rights reserved. 509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * 609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * Redistribution and use in source and binary forms, with or without 709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * modification, are permitted provided that the following conditions are met: 809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * 909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * - Redistributions of source code must retain the above copyright notice, 1009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * this list of conditions and the following disclaimer. 1109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * 1209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * - Redistributions in binary form must reproduce the above copyright notice, 1309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * this list of conditions and the following disclaimer in the documentation 1409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * and/or other materials provided with the distribution. 1509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * 1609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * - Neither the name of the Motorola, Inc. nor the names of its contributors 1709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * may be used to endorse or promote products derived from this software 1809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * without specific prior written permission. 1909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * 2009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 2409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * POSSIBILITY OF SUCH DAMAGE. 3109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly */ 3209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 3309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellypackage com.android.bluetooth.opp; 3409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 356769b59d715ea98bd72eafcfea9acd2714a887daTao Liejunimport com.android.bluetooth.R; 366769b59d715ea98bd72eafcfea9acd2714a887daTao Liejun 3709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.app.Activity; 3809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.content.ContentValues; 3909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.content.Context; 4009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.content.Intent; 4109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.database.Cursor; 4209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.net.Uri; 4309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.os.Bundle; 44888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport android.os.Handler; 45888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport android.os.Message; 4609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.util.Log; 4709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.widget.Button; 4809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.widget.EditText; 4909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.view.View; 5009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.view.View.OnClickListener; 5109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 52888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport java.io.DataInputStream; 53888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport java.io.DataOutputStream; 54888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport java.io.File; 55888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport java.io.FileOutputStream; 56888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport java.io.IOException; 57888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport java.io.InputStream; 58888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport java.io.OutputStream; 59888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport java.net.ServerSocket; 60888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport java.net.Socket; 61888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport java.net.SocketException; 62888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 63888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport javax.obex.Authenticator; 64888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport javax.obex.HeaderSet; 65888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport javax.obex.ObexTransport; 66888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport javax.obex.Operation; 67888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport javax.obex.ResponseCodes; 68888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport javax.obex.ServerRequestHandler; 69888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunimport javax.obex.ServerSession; 70888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 7109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellypublic class TestActivity extends Activity { 7209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 7309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public String currentInsert; 7409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 7509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public int mCurrentByte = 0; 7609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 7709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly EditText mUpdateView; 7809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 7909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly EditText mAckView; 8009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 8109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly EditText mDeleteView; 8209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 8309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly EditText mInsertView; 8409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 8509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly EditText mAddressView; 8609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 8709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly EditText mMediaView; 8809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 8909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly TestTcpServer server; 9009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 9109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /** Called when the activity is first created. */ 9209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly @Override 9309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public void onCreate(Bundle savedInstanceState) { 9409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly super.onCreate(savedInstanceState); 9509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 9609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Intent intent = getIntent(); 9709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 9809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly String action = intent.getAction(); 9909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 10009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Context c = getBaseContext(); 10109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 10209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly if (Intent.ACTION_SEND.equals(action)) { 10309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* 10409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * Other application is trying to share a file via Bluetooth, 10509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * probably Pictures, or vCard. The Intent should contain an 10609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * EXTRA_STREAM with the data to attach. 10709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly */ 10809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 10909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly String type = intent.getType(); 11009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Uri stream = (Uri)intent.getParcelableExtra(Intent.EXTRA_STREAM); 11109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 11209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly if (stream != null && type != null) { 11309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* 11409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * if (MimeUtility.mimeTypeMatches(type, 11509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * Email.ACCEPTABLE_ATTACHMENT_SEND_TYPES)) { 11609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * addAttachment(stream); 11709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly */ 11809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Log.v(Constants.TAG, " Get share intent with Uri " + stream + " mimetype is " 11909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly + type); 12009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // Log.v(Constants.TAG, " trying Uri function " + 12109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // stream.getAuthority() + " " + Uri.parse(stream)); 12209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Cursor cursor = c.getContentResolver().query(stream, null, null, null, null); 12309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly cursor.close(); 12409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 12509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 12609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* start insert a record */ 12709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* 12809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * ContentValues values = new ContentValues(); 12909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * values.put(BluetoothShare.URI, stream.toString()); 13009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * values.put(BluetoothShare.DESTINATION, "FF:FF:FF:00:00:00"); 13109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * values.put(BluetoothShare.DIRECTION, 13209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * BluetoothShare.DIRECTION_OUTBOUND); final Uri contentUri = 13309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * getContentResolver().insert(BluetoothShare.CONTENT_URI, values); 13409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * Log.v(Constants.TAG, "insert contentUri: " + contentUri); 13509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly */ 13609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 13709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* 13809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * Context c = getBaseContext(); c.startService(new Intent(c, 13909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * BluetoothOppService.class)); 14009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly */ 14109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 14209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly setContentView(R.layout.testactivity_main); 14309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 144af9af3c451fde7712e86c9430169c306b91836a4Jackson Fan Button mInsertRecord = (Button)findViewById(R.id.insert_record); 145af9af3c451fde7712e86c9430169c306b91836a4Jackson Fan Button mDeleteRecord = (Button)findViewById(R.id.delete_record); 146af9af3c451fde7712e86c9430169c306b91836a4Jackson Fan Button mUpdateRecord = (Button)findViewById(R.id.update_record); 14709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 148af9af3c451fde7712e86c9430169c306b91836a4Jackson Fan Button mAckRecord = (Button)findViewById(R.id.ack_record); 14909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 150af9af3c451fde7712e86c9430169c306b91836a4Jackson Fan Button mDeleteAllRecord = (Button)findViewById(R.id.deleteAll_record); 151af9af3c451fde7712e86c9430169c306b91836a4Jackson Fan mUpdateView = (EditText)findViewById(R.id.update_text); 152af9af3c451fde7712e86c9430169c306b91836a4Jackson Fan mAckView = (EditText)findViewById(R.id.ack_text); 153af9af3c451fde7712e86c9430169c306b91836a4Jackson Fan mDeleteView = (EditText)findViewById(R.id.delete_text); 154af9af3c451fde7712e86c9430169c306b91836a4Jackson Fan mInsertView = (EditText)findViewById(R.id.insert_text); 15509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 156af9af3c451fde7712e86c9430169c306b91836a4Jackson Fan mAddressView = (EditText)findViewById(R.id.address_text); 157af9af3c451fde7712e86c9430169c306b91836a4Jackson Fan mMediaView = (EditText)findViewById(R.id.media_text); 15809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 15909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mInsertRecord.setOnClickListener(insertRecordListener); 16009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mDeleteRecord.setOnClickListener(deleteRecordListener); 16109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mUpdateRecord.setOnClickListener(updateRecordListener); 16209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mAckRecord.setOnClickListener(ackRecordListener); 16309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mDeleteAllRecord.setOnClickListener(deleteAllRecordListener); 16409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 165af9af3c451fde7712e86c9430169c306b91836a4Jackson Fan Button mStartTcpServer = (Button)findViewById(R.id.start_server); 16609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mStartTcpServer.setOnClickListener(startTcpServerListener); 16709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 168af9af3c451fde7712e86c9430169c306b91836a4Jackson Fan Button mNotifyTcpServer = (Button)findViewById(R.id.notify_server); 16909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mNotifyTcpServer.setOnClickListener(notifyTcpServerListener); 17009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* parse insert result Uri */ 17109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* 17209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * String id = contentUri.getPathSegments().get(1); Log.v(Constants.TAG, 17309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * "insert record id is " + id); Uri contentUri1 = 17409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * Uri.parse(BluetoothShare.CONTENT_URI + "/" + id); 17509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly */ 17609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* update a single column of a record */ 17709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* 17809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * ContentValues updateValues = new ContentValues(); 17909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * updateValues.put(BluetoothShare.TOTAL_BYTES, 120000); 18009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * getContentResolver().update(contentUri1,updateValues,null,null); 18109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly */ 18209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* query a single column of a record */ 18309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* 18409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * Cursor queryC = getContentResolver().query(contentUri1, null, null, 18509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * null, null); if (queryC != null) { if (queryC.moveToFirst()) { int 18609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * currentByteColumn = 18709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * queryC.getColumnIndexOrThrow(BluetoothShare.CURRENT_BYTES); int 18809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * currentByte = queryC.getInt(currentByteColumn); 18909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly */ 19009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* update a column of a record */ 19109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* 19209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * for(int i =0;i<100;i++){ currentByte ++; 19309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * updateValues.put(BluetoothShare.CURRENT_BYTES, currentByte); 19409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * getContentResolver().update(contentUri1,updateValues,null,null); } } 19509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * } 19609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly */ 19709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* query whole data base */ 19809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* 19909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * Cursor c = managedQuery(contentUri1, new String [] {"_id", 20009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * BluetoothShare.URI, BluetoothShare.STATUS, 20109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * BluetoothShare.TOTAL_BYTES, BluetoothShare.CURRENT_BYTES, 20209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * BluetoothShare._DATA, BluetoothShare.DIRECTION, 20309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * BluetoothShare.MIMETYPE, BluetoothShare.DESTINATION, 20409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * BluetoothShare.VISIBILITY, BluetoothShare.USER_CONFIRMATION, 20509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * BluetoothShare.TIMESTAMP}, null, null, null); Log.v(Constants.TAG, 20609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * "query " + contentUri1 +" get " + c.getCount()+" records"); 20709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly */ 20809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* delete a record */ 20909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly /* 21009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * Uri contentUri2 = Uri.parse(BluetoothShare.CONTENT_URI + "/" + 1); 21109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * getContentResolver().delete(contentUri2, null, null); 21209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly */ 21309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 21409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 21509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 21609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public OnClickListener insertRecordListener = new OnClickListener() { 21709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public void onClick(View view) { 21809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 21909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly String address = null; 22009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly if (mAddressView.getText().length() != 0) { 22109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly address = mAddressView.getText().toString(); 22209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Log.v(Constants.TAG, "Send to address " + address); 22309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 22409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly if (address == null) { 22509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly address = "00:17:83:58:5D:CC"; 22609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 22709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 22809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Integer media = null; 22909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly if (mMediaView.getText().length() != 0) { 23009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly media = Integer.parseInt(mMediaView.getText().toString().trim()); 23109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Log.v(Constants.TAG, "Send media no. " + media); 23209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 23309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly if (media == null) { 23409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly media = 1; 23509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 23609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly ContentValues values = new ContentValues(); 23709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly values.put(BluetoothShare.URI, "content://media/external/images/media/" + media); 23809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // values.put(BluetoothShare.DESTINATION, "FF:FF:FF:00:00:00"); 23909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // baibai Q9 test 24009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // values.put(BluetoothShare.DESTINATION, "12:34:56:78:9A:BC"); 24109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // java's nokia 24209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // values.put(BluetoothShare.DESTINATION, "00:1B:33:F0:58:FB"); 24309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // Assis phone 24409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // values.put(BluetoothShare.DESTINATION, "00:17:E5:5D:74:F3"); 24509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // Jackson E6 24609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // values.put(BluetoothShare.DESTINATION, "00:1A:1B:7F:1E:F0"); 24709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // Baibai V950 24809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // values.put(BluetoothShare.DESTINATION, "00:17:83:58:5D:CC"); 24909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // Baibai NSC1173 25009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // values.put(BluetoothShare.DESTINATION, "00:16:41:49:5B:F3"); 25109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 25209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly values.put(BluetoothShare.DESTINATION, address); 25309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 25409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly values.put(BluetoothShare.DIRECTION, BluetoothShare.DIRECTION_OUTBOUND); 25509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 25609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Long ts = System.currentTimeMillis(); 25709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly values.put(BluetoothShare.TIMESTAMP, ts); 25809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 25909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Integer records = null; 26009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly if (mInsertView.getText().length() != 0) { 26109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly records = Integer.parseInt(mInsertView.getText().toString().trim()); 26209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Log.v(Constants.TAG, "parseInt " + records); 26309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 26409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly if (records == null) { 26509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly records = 1; 26609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 26709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly for (int i = 0; i < records; i++) { 26809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Uri contentUri = getContentResolver().insert(BluetoothShare.CONTENT_URI, values); 26909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Log.v(Constants.TAG, "insert contentUri: " + contentUri); 27009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly currentInsert = contentUri.getPathSegments().get(1); 27109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Log.v(Constants.TAG, "currentInsert = " + currentInsert); 27209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 27309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 27409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 27509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly }; 27609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 27709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public OnClickListener deleteRecordListener = new OnClickListener() { 27809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public void onClick(View view) { 27909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Uri contentUri = Uri.parse(BluetoothShare.CONTENT_URI + "/" 28009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly + mDeleteView.getText().toString()); 28109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly getContentResolver().delete(contentUri, null, null); 28209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 28309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly }; 28409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 28509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public OnClickListener updateRecordListener = new OnClickListener() { 28609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public void onClick(View view) { 28709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Uri contentUri = Uri.parse(BluetoothShare.CONTENT_URI + "/" 28809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly + mUpdateView.getText().toString()); 28909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly ContentValues updateValues = new ContentValues(); 29009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // mCurrentByte ++; 29109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // updateValues.put(BluetoothShare.TOTAL_BYTES, "120000"); 29209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // updateValues.put(BluetoothShare.CURRENT_BYTES, mCurrentByte); 29309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // updateValues.put(BluetoothShare.VISIBILITY, 29409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // BluetoothShare.VISIBILITY_HIDDEN); 29509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly updateValues.put(BluetoothShare.USER_CONFIRMATION, 29609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly BluetoothShare.USER_CONFIRMATION_CONFIRMED); 29709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly getContentResolver().update(contentUri, updateValues, null, null); 29809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 29909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly }; 30009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 30109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public OnClickListener ackRecordListener = new OnClickListener() { 30209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public void onClick(View view) { 30309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Uri contentUri = Uri.parse(BluetoothShare.CONTENT_URI + "/" 30409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly + mAckView.getText().toString()); 30509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly ContentValues updateValues = new ContentValues(); 30609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // mCurrentByte ++; 30709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // updateValues.put(BluetoothShare.TOTAL_BYTES, "120000"); 30809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // updateValues.put(BluetoothShare.CURRENT_BYTES, mCurrentByte); 30909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly updateValues.put(BluetoothShare.VISIBILITY, BluetoothShare.VISIBILITY_HIDDEN); 31009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // updateValues.put(BluetoothShare.USER_CONFIRMATION, 31109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // BluetoothShare.USER_CONFIRMATION_CONFIRMED); 31209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly getContentResolver().update(contentUri, updateValues, null, null); 31309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 31409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly }; 31509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 31609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public OnClickListener deleteAllRecordListener = new OnClickListener() { 31709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public void onClick(View view) { 31809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Uri contentUri = Uri.parse(BluetoothShare.CONTENT_URI + ""); 31909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly getContentResolver().delete(contentUri, null, null); 32009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 32109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly }; 32209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 32309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public OnClickListener startTcpServerListener = new OnClickListener() { 32409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public void onClick(View view) { 32509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly server = new TestTcpServer(); 32609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Thread server_thread = new Thread(server); 32709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly server_thread.start(); 32809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 32909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 33009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly }; 33109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 33209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public OnClickListener notifyTcpServerListener = new OnClickListener() { 33309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public void onClick(View view) { 33409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly final Thread notifyThread = new Thread() { 33509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public void run() { 33609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly synchronized (server) { 33709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly server.a = true; 33809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly server.notify(); 33909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 34009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 34109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 34209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly }; 34309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly notifyThread.start(); 34409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 34509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 34609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly }; 34709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly} 348888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 349888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun/** 350888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun * This class listens on OPUSH channel for incoming connection 351888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun */ 352888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunclass TestTcpListener { 353888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 354888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun private static final String TAG = "BtOppRfcommListener"; 355888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 356888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun private static final boolean D = Constants.DEBUG; 357888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 358888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun private static final boolean V = Constants.VERBOSE; 359888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 360888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun private volatile boolean mInterrupted; 361888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 362888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun private Thread mSocketAcceptThread; 363888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 364888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun private Handler mCallback; 365888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 366888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun private static final int ACCEPT_WAIT_TIMEOUT = 5000; 367888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 368888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public static final int DEFAULT_OPP_CHANNEL = 12; 369888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 370888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public static final int MSG_INCOMING_BTOPP_CONNECTION = 100; 371888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 372888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun private int mBtOppRfcommChannel = -1; 373888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 374888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public TestTcpListener() { 375888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun this(DEFAULT_OPP_CHANNEL); 376888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 377888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 378888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public TestTcpListener(int channel) { 379888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun mBtOppRfcommChannel = channel; 380888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 381888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 382888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public synchronized boolean start(Handler callback) { 383888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun if (mSocketAcceptThread == null) { 384888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun mCallback = callback; 385888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun mSocketAcceptThread = new Thread(TAG) { 386888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun ServerSocket mServerSocket; 387888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 388888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public void run() { 389888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun if (D) Log.d(TAG, "RfcommSocket listen thread starting"); 390888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun try { 391888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun if (V) 392888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun Log.v(TAG, "Create server RfcommSocket on channel" 393888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun + mBtOppRfcommChannel); 394888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun mServerSocket = new ServerSocket(6500, 1); 395888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } catch (IOException e) { 396888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun Log.e(TAG, "Error listing on channel" + mBtOppRfcommChannel); 397888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun mInterrupted = true; 398888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 399888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun while (!mInterrupted) { 400888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun try { 401888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun mServerSocket.setSoTimeout(ACCEPT_WAIT_TIMEOUT); 402888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun Socket clientSocket = mServerSocket.accept(); 403888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun if (clientSocket == null) { 404888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun if (V) Log.v(TAG, "incomming connection time out"); 405888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } else { 406888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun if (D) Log.d(TAG, "RfcommSocket connected!"); 407888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun Log.d(TAG, "remote addr is " 408888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun + clientSocket.getRemoteSocketAddress()); 409888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun TestTcpTransport transport = new TestTcpTransport(clientSocket); 410888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun Message msg = Message.obtain(); 411888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun msg.setTarget(mCallback); 412888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun msg.what = MSG_INCOMING_BTOPP_CONNECTION; 413888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun msg.obj = transport; 414888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun msg.sendToTarget(); 415888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 416888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } catch (SocketException e) { 417888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun Log.e(TAG, "Error accept connection " + e); 418888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } catch (IOException e) { 419888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun Log.e(TAG, "Error accept connection " + e); 420888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 421888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 422888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun if (mInterrupted) { 423888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun Log.e(TAG, "socketAcceptThread thread was interrupted (2), exiting"); 424888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 425888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 426888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun if (D) Log.d(TAG, "RfcommSocket listen thread finished"); 427888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 428888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun }; 429888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun mInterrupted = false; 430888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun mSocketAcceptThread.start(); 431888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 432888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 433888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun return true; 434888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 435888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 436888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 437888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public synchronized void stop() { 438888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun if (mSocketAcceptThread != null) { 439888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun if (D) Log.d(TAG, "stopping Connect Thread"); 440888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun mInterrupted = true; 441888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun try { 442888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun mSocketAcceptThread.interrupt(); 443888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun if (V) Log.v(TAG, "waiting for thread to terminate"); 444888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun mSocketAcceptThread.join(); 445888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun mSocketAcceptThread = null; 446888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun mCallback = null; 447888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } catch (InterruptedException e) { 448888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun if (V) Log.v(TAG, "Interrupted waiting for Accept Thread to join"); 449888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 450888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 451888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 452888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 453888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun} 454888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 455888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunclass TestTcpServer extends ServerRequestHandler implements Runnable { 456888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun private static final String TAG = "ServerRequestHandler"; 457888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 458888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun private static final boolean V = Constants.VERBOSE; 459888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 460888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun static final int port = 6500; 461888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 462888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public boolean a = false; 463888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 464888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun // TextView serverStatus = null; 465888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public void run() { 466888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun try { 467888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun updateStatus("[server:] listen on port " + port); 468888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun TestTcpSessionNotifier rsn = new TestTcpSessionNotifier(port); 469888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 470888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun updateStatus("[server:] Now waiting for a client to connect"); 471888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun rsn.acceptAndOpen(this); 472888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun updateStatus("[server:] A client is now connected"); 473888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } catch (Exception ex) { 474888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun updateStatus("[server:] Caught the error: " + ex); 475888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 476888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 477888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 478888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public TestTcpServer() { 479888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun updateStatus("enter construtor of TcpServer"); 480888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 481888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 482888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public int onConnect(HeaderSet request, HeaderSet reply) { 483888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 484888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun updateStatus("[server:] The client has created an OBEX session"); 485888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun /* sleep for 2000 ms to wait for the batch contains all ShareInfos */ 486888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun synchronized (this) { 487888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun try { 488888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun while (!a) { 489888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun wait(500); 490888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 491888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } catch (InterruptedException e) { 492888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun if (V) Log.v(TAG, "Interrupted waiting for markBatchFailed"); 493888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 494888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 495888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun updateStatus("[server:] we accpet the seesion"); 496888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun return ResponseCodes.OBEX_HTTP_OK; 497888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 498888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 499888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public int onPut(Operation op) { 500888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun FileOutputStream fos = null; 501888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun try { 502888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun java.io.InputStream is = op.openInputStream(); 503888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 504888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun updateStatus("Got data bytes " + is.available() + " name " 505888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun + op.getReceivedHeader().getHeader(HeaderSet.NAME) + " type " + op.getType()); 506888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 507888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun File f = new File((String)op.getReceivedHeader().getHeader(HeaderSet.NAME)); 508888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun fos = new FileOutputStream(f); 509888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun byte b[] = new byte[1000]; 510888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun int len; 511888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 512888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun while (is.available() > 0 && (len = is.read(b)) > 0) { 513888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun fos.write(b, 0, len); 514888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 515888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 516888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun fos.close(); 517888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun is.close(); 518888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun updateStatus("[server:] Wrote data to " + f.getAbsolutePath()); 519888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } catch (Exception e) { 520888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun if (fos != null) { 521888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun try { 522888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun fos.close(); 523888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } catch (IOException e1) { 524888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun e1.printStackTrace(); 525888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 526888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 527888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun e.printStackTrace(); 528888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 529888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun return ResponseCodes.OBEX_HTTP_OK; 530888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 531888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 532888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public void onDisconnect(HeaderSet req, HeaderSet resp) { 533888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun updateStatus("[server:] The client has disconnected the OBEX session"); 534888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 535888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 536888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public void updateStatus(String message) { 537888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun Log.v(TAG, "\n" + message); 538888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 539888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 540888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public void onAuthenticationFailure(byte[] userName) { 541888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 542888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 543888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public int onSetPath(HeaderSet request, HeaderSet reply, boolean backup, boolean create) { 544888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 545888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun return ResponseCodes.OBEX_HTTP_NOT_IMPLEMENTED; 546888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 547888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 548888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public int onDelete(HeaderSet request, HeaderSet reply) { 549888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun return ResponseCodes.OBEX_HTTP_NOT_IMPLEMENTED; 550888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 551888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 552888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public int onGet(Operation op) { 553888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun return ResponseCodes.OBEX_HTTP_NOT_IMPLEMENTED; 554888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 555888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 556888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun} 557888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 558888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunclass TestTcpSessionNotifier { 559888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun /* implements SessionNotifier */ 560888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 561888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun ServerSocket server = null; 562888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 563888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun Socket conn = null; 564888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 565888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun private static final String TAG = "TestTcpSessionNotifier"; 566888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 567888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public TestTcpSessionNotifier(int port) throws IOException { 568888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun server = new ServerSocket(port); 569888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 570888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 571888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public ServerSession acceptAndOpen(ServerRequestHandler handler, Authenticator auth) 572888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun throws IOException { 573888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun try { 574888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun conn = server.accept(); 575888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 576888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } catch (Exception ex) { 577888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun Log.v(TAG, "ex"); 578888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 579888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 580888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun TestTcpTransport tt = new TestTcpTransport(conn); 581888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 582888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun return new ServerSession((ObexTransport)tt, handler, auth); 583888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 584888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 585888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 586888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public ServerSession acceptAndOpen(ServerRequestHandler handler) throws IOException { 587888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 588888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun return acceptAndOpen(handler, null); 589888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 590888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 591888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 592888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun} 593888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 594888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejunclass TestTcpTransport implements ObexTransport { 595888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 596888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun Socket s = null; 597888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 598888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public TestTcpTransport(Socket s) { 599888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun super(); 600888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun this.s = s; 601888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 602888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 603888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public void close() throws IOException { 604888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun s.close(); 605888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 606888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 607888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public DataInputStream openDataInputStream() throws IOException { 608888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun return new DataInputStream(openInputStream()); 609888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 610888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 611888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public DataOutputStream openDataOutputStream() throws IOException { 612888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun return new DataOutputStream(openOutputStream()); 613888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 614888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 615888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public InputStream openInputStream() throws IOException { 616888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun return s.getInputStream(); 617888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 618888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 619888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public OutputStream openOutputStream() throws IOException { 620888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun return s.getOutputStream(); 621888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 622888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 623888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public void connect() throws IOException { 624888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun // TODO Auto-generated method stub 625888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 626888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 627888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 628888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public void create() throws IOException { 629888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun // TODO Auto-generated method stub 630888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 631888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 632888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 633888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public void disconnect() throws IOException { 634888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun // TODO Auto-generated method stub 635888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 636888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 637888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 638888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public void listen() throws IOException { 639888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun // TODO Auto-generated method stub 640888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 641888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 642888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 643888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun public boolean isConnected() throws IOException { 644888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun return s.isConnected(); 645888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun } 646888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun 647888485a3f5fe991116c5536bb6d6903d47b63a70Tao Liejun} 648