// Path: java/anyremote/client/android/util/ISocket.java
// public interface ISocket {
// 	public void close();
// 	// public boolean isConnected(); BluetoothSocket API level 14 or higher
// 	public InputStream getInputStream();
// 	public OutputStream getOutputStream();
// 
// }
// 
// Path: java/anyremote/client/android/util/ProtocolMessage.java
// public class ProtocolMessage {
// 	public static final int FULL     = 0;
// 	public static final int FIRST    = 1;
// 	public static final int INTERMED = 2;
// 	public static final int LAST     = 3;
// 	
// 	public int id;
// 	public int stage;
// 	public Vector tokens;
// }
// 
// Path: java/anyremote/client/android/util/UserException.java
// public class UserException extends Exception {
// 	private String error, details;
// 	
// 	static final long serialVersionUID = 1232123;
// 
// 	public UserException(String error, String details) {
// 
// 		this(error, details, null);
// 	}
// 
// 	public UserException(String error, String details, Exception ex) {
// 
// 		this.error = error;
// 
// 		if (details == null) {
// 			if (ex != null && ex.getMessage() != null) {
// 				this.details = ex.getMessage();
// 			} else {
// 				this.details = "";
// 			}
// 		} else {
// 			if (ex != null && ex.getMessage() != null) {
// 				if (details.endsWith(".")) {
// 					details = details.substring(0, details.length() - 1);
// 				}
// 				this.details = details + " (" + ex.getMessage() + ").";
// 			} else {
// 				this.details = details;
// 			}
// 		}
// 
// 	}
// 
// 	// Get the error details
// 	public String getDetails() {
// 		return details;
// 	}
// 
// 	// Get the error title
// 	public String getError() {
// 		return error;
// 	}
// }


import java.util.Vector;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import anyremote.client.android.util.ISocket;
import anyremote.client.android.util.ProtocolMessage;
import anyremote.client.android.util.UserException;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
	 * 
	 * @param m
	 *            The message to send. Content does not get changed.
	 */
	public void send(String m) {
		synchronized (dos) {
			if (closed)
				return;

			try {
				sendPrivate(m);
			} catch (IOException e) {
				downPrivate();
				notifyDisconnected("Connection broken", "IO Error while sending data", e);
			} catch (Exception e) {
				downPrivate();
				anyRemote._log("Connection", " Exception " + e.toString());
				notifyDisconnected("Connection broken", "Exception", e);
			}
		}
	}

	private void downPrivate() {
		sock.close();
		closed = true;
		anyRemote._log("Connection", "socket closed");
	}

	/** See {@link #notifyDisconnected(UserException)}. */
	private void notifyDisconnected(String error, String details, Exception e) {
// Path: java/anyremote/client/android/util/ISocket.java
// public interface ISocket {
// 	public void close();
// 	// public boolean isConnected(); BluetoothSocket API level 14 or higher
// 	public InputStream getInputStream();
// 	public OutputStream getOutputStream();
// 
// }
// 
// Path: java/anyremote/client/android/util/ProtocolMessage.java
// public class ProtocolMessage {
// 	public static final int FULL     = 0;
// 	public static final int FIRST    = 1;
// 	public static final int INTERMED = 2;
// 	public static final int LAST     = 3;
// 	
// 	public int id;
// 	public int stage;
// 	public Vector tokens;
// }
// 
// Path: java/anyremote/client/android/util/UserException.java
// public class UserException extends Exception {
// 	private String error, details;
// 	
// 	static final long serialVersionUID = 1232123;
// 
// 	public UserException(String error, String details) {
// 
// 		this(error, details, null);
// 	}
// 
// 	public UserException(String error, String details, Exception ex) {
// 
// 		this.error = error;
// 
// 		if (details == null) {
// 			if (ex != null && ex.getMessage() != null) {
// 				this.details = ex.getMessage();
// 			} else {
// 				this.details = "";
// 			}
// 		} else {
// 			if (ex != null && ex.getMessage() != null) {
// 				if (details.endsWith(".")) {
// 					details = details.substring(0, details.length() - 1);
// 				}
// 				this.details = details + " (" + ex.getMessage() + ").";
// 			} else {
// 				this.details = details;
// 			}
// 		}
// 
// 	}
// 
// 	// Get the error details
// 	public String getDetails() {
// 		return details;
// 	}
// 
// 	// Get the error title
// 	public String getError() {
// 		return error;
// 	}
// }


// Path: java/anyremote/client/android/Connection.java
import java.util.Vector;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import anyremote.client.android.util.ISocket;
import anyremote.client.android.util.ProtocolMessage;
import anyremote.client.android.util.UserException;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

	 * 
	 * @param m
	 *            The message to send. Content does not get changed.
	 */
	public void send(String m) {
		synchronized (dos) {
			if (closed)
				return;

			try {
				sendPrivate(m);
			} catch (IOException e) {
				downPrivate();
				notifyDisconnected("Connection broken", "IO Error while sending data", e);
			} catch (Exception e) {
				downPrivate();
				anyRemote._log("Connection", " Exception " + e.toString());
				notifyDisconnected("Connection broken", "Exception", e);
			}
		}
	}

	private void downPrivate() {
		sock.close();
		closed = true;
		anyRemote._log("Connection", "socket closed");
	}

	/** See {@link #notifyDisconnected(UserException)}. */
	private void notifyDisconnected(String error, String details, Exception e) {
		notifyDisconnected(new UserException(error, details, e));