content: // Copyright 2011 Google Inc. All Rights Reserved.
  
  package com.example.android.wifidirect;
  
  import java.io.FileNotFoundException;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
  import java.net.InetSocketAddress;
  import java.net.Socket;
  
  import android.app.IntentService;
  import android.content.ContentResolver;
  import android.content.Context;
  import android.content.Intent;
  import android.net.Uri;
  import android.util.Log;
  
  /**
   * A service that process each file transfer request i.e Intent by opening a
   * socket connection with the WiFi Direct Group Owner and writing the file
   */
  public class FileTransferService extends IntentService {
  
  	private static final int SOCKET_TIMEOUT = 5000;
  	public static final String ACTION_SEND_FILE = "com.example.android.wifidirect.SEND_FILE";
  	public static final String EXTRAS_FILE_PATH = "file_url";
  	public static final String EXTRAS_ADDRESS = "go_host";
  	public static final String EXTRAS_PORT = "go_port";
  
  	public FileTransferService(String name) {
  		super(name);
  	}
  
  	public FileTransferService() {
  		super("FileTransferService");
  	}
  
  	/*
  	 * (non-Javadoc)
  	 * @see android.app.IntentService#onHandleIntent(android.content.Intent)
  	 */
  	@Override
  	protected void onHandleIntent(Intent intent) {
  
  		Context context = getApplicationContext();
  		if (intent.getAction().equals(ACTION_SEND_FILE)) {
  			String fileUri = intent.getExtras().getString(EXTRAS_FILE_PATH);
  			String host = intent.getExtras().getString(EXTRAS_ADDRESS);
  			Socket socket = new Socket();
  			int port = intent.getExtras().getInt(EXTRAS_PORT);
  
  			try {
  				Log.d(WiFiDirectActivity.TAG, "Opening client socket - ");
  				socket.bind(null);
  				socket.connect((new InetSocketAddress(host, port)), SOCKET_TIMEOUT);
  
  				Log.d(WiFiDirectActivity.TAG, "Client socket - " + socket.isConnected());
  				OutputStream stream = socket.getOutputStream();
  				ContentResolver cr = context.getContentResolver();
  				InputStream is = null;
  				try {
  					is = cr.openInputStream(Uri.parse(fileUri));
  				} catch (FileNotFoundException e) {
  					Log.d(WiFiDirectActivity.TAG, e.toString());
  				}
  				DeviceDetailFragment.copyFile(is, stream);
  				Log.d(WiFiDirectActivity.TAG, "Client: Data written");
  			} catch (IOException e) {
  				Log.e(WiFiDirectActivity.TAG, e.getMessage());
  			} finally {
  				if (socket != null) {
  					if (socket.isConnected()) {
  						try {
  							socket.close();
  						} catch (IOException e) {
  							// Give up
  							e.printStackTrace();
  						}
  					}
  				}
  			}
  
  		}
  	}
  }
  