View Javadoc

1   /**
2    *  BlueCove - Java library for Bluetooth
3    *  Copyright (C) 2008 Michael Lifshits
4    *  Copyright (C) 2008 Vlad Skarzhevskyy
5    *
6    *  Licensed to the Apache Software Foundation (ASF) under one
7    *  or more contributor license agreements.  See the NOTICE file
8    *  distributed with this work for additional information
9    *  regarding copyright ownership.  The ASF licenses this file
10   *  to you under the Apache License, Version 2.0 (the
11   *  "License"); you may not use this file except in compliance
12   *  with the License.  You may obtain a copy of the License at
13   *
14   *    http://www.apache.org/licenses/LICENSE-2.0
15   *
16   *  Unless required by applicable law or agreed to in writing,
17   *  software distributed under the License is distributed on an
18   *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19   *  KIND, either express or implied.  See the License for the
20   *  specific language governing permissions and limitations
21   *  under the License.
22   *
23   *  @author vlads
24   *  @version $Id: ConnectionBufferRFCOMM.java 2578 2008-12-14 05:29:37Z skarzhevskyy $
25   */
26  package com.intel.bluetooth.emu;
27  
28  import java.io.IOException;
29  import java.io.InputStream;
30  import java.io.OutputStream;
31  
32  /**
33   * 
34   */
35  class ConnectionBufferRFCOMM extends ConnectionBuffer {
36  
37  	ConnectionBufferRFCOMM(long remoteAddress, String portID, InputStream is, OutputStream os) {
38  		super(remoteAddress, portID, is, os);
39  	}
40  
41  	void rfWrite(byte[] b) throws IOException {
42  		monitor.writeTimeStamp = System.currentTimeMillis();
43  		monitor.writeOperations++;
44  		monitor.writeBytes += b.length;
45  		os.write(b);
46  	}
47  	
48  	/**
49  	 * Block till client reads all data.
50  	 */
51  	void rfFlush() throws IOException {
52  	    os.flush();
53  	}
54  
55  	int rfAvailable() throws IOException {
56  		return is.available();
57  	}
58  
59  	byte[] rfRead(int len) throws IOException {
60  		byte[] b = new byte[len];
61  		int rc = is.read(b);
62  		if (rc == -1) {
63  			return null;
64  		}
65  		monitor.readTimeStamp = System.currentTimeMillis();
66  		monitor.readOperations++;
67  		monitor.readBytes += rc;
68  
69  		if (rc == len) {
70  			return b;
71  		} else {
72  			byte[] b2 = new byte[rc];
73  			System.arraycopy(b, 0, b2, 0, rc);
74  			return b2;
75  		}
76  	}
77  
78  }