src/com/beem/project/beem/utils/FreePort.java
author Nikita Kozlov <nikita@beem-project.com>
Fri, 04 Dec 2009 17:30:17 +0100
changeset 567 896533b277d5
parent 503 93e5d2d9953f
child 577 29ac85113420
permissions -rw-r--r--
ajout des headers
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
567
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
     1
/**
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
     2
    BEEM is a videoconference application on the Android Platform.
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
     3
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
     4
    Copyright (C) 2009 by Frederic-Charles Barthelery,
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
     5
                          Jean-Manuel Da Silva,
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
     6
                          Nikita Kozlov,
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
     7
                          Philippe Lago,
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
     8
                          Jean Baptiste Vergely,
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
     9
                          Vincent Véronis.
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    10
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    11
    This file is part of BEEM.
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    12
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    13
    BEEM is free software: you can redistribute it and/or modify
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    14
    it under the terms of the GNU General Public License as published by
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    15
    the Free Software Foundation, either version 3 of the License, or
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    16
    (at your option) any later version.
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    17
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    18
    BEEM is distributed in the hope that it will be useful,
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    19
    but WITHOUT ANY WARRANTY; without even the implied warranty of
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    20
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    21
    GNU General Public License for more details.
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    22
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    23
    You should have received a copy of the GNU General Public License
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    24
    along with BEEM.  If not, see <http://www.gnu.org/licenses/>.
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    25
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    26
    Please send bug reports with examples or suggestions to
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    27
    contact@beem-project.com or http://dev.beem-project.com/
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    28
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    29
    Epitech, hereby disclaims all copyright interest in the program “Beem”
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    30
    written by Frederic-Charles Barthelery,
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    31
               Jean-Manuel Da Silva,
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    32
               Nikita Kozlov,
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    33
               Philippe Lago,
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    34
               Jean Baptiste Vergely,
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    35
               Vincent Veronis.
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    36
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    37
    Nicolas Sadirac, November 26, 2009
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    38
    President of Epitech.
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    39
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    40
    Flavien Astraud, November 26, 2009
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    41
    Head of the EIP Laboratory.
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    42
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    43
*/
358
6b9900c70fa1 suppression de quelques warnings de checkstyle
nikita@localhost.localdomain
parents:
diff changeset
    44
package com.beem.project.beem.utils;
6b9900c70fa1 suppression de quelques warnings de checkstyle
nikita@localhost.localdomain
parents:
diff changeset
    45
6b9900c70fa1 suppression de quelques warnings de checkstyle
nikita@localhost.localdomain
parents:
diff changeset
    46
import java.io.IOException;
6b9900c70fa1 suppression de quelques warnings de checkstyle
nikita@localhost.localdomain
parents:
diff changeset
    47
import java.net.ServerSocket;
6b9900c70fa1 suppression de quelques warnings de checkstyle
nikita@localhost.localdomain
parents:
diff changeset
    48
567
896533b277d5 ajout des headers
Nikita Kozlov <nikita@beem-project.com>
parents: 503
diff changeset
    49
// TODO: Auto-generated Javadoc
358
6b9900c70fa1 suppression de quelques warnings de checkstyle
nikita@localhost.localdomain
parents:
diff changeset
    50
/**
6b9900c70fa1 suppression de quelques warnings de checkstyle
nikita@localhost.localdomain
parents:
diff changeset
    51
 * Utility class to get a free port.
6b9900c70fa1 suppression de quelques warnings de checkstyle
nikita@localhost.localdomain
parents:
diff changeset
    52
 * @author nikita
6b9900c70fa1 suppression de quelques warnings de checkstyle
nikita@localhost.localdomain
parents:
diff changeset
    53
 */
6b9900c70fa1 suppression de quelques warnings de checkstyle
nikita@localhost.localdomain
parents:
diff changeset
    54
public final class FreePort {
6b9900c70fa1 suppression de quelques warnings de checkstyle
nikita@localhost.localdomain
parents:
diff changeset
    55
503
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    56
    private static final int MAGIC_10 = 10;
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    57
    private static final int MAGIC_10000 = 10000;
450
fe0ba62ee3ff Correction de l'ensemble des erreurs de CheckStyle.
dasilvj
parents: 358
diff changeset
    58
503
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    59
    /**
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    60
     * Private default constructor.
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    61
     */
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    62
    private FreePort() {
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    63
    }
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    64
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    65
    /**
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    66
     * return a free port.
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    67
     * @return free socket port.
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    68
     */
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    69
    public static int getFreePort() {
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    70
	ServerSocket ss;
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    71
	int freePort = 0;
358
6b9900c70fa1 suppression de quelques warnings de checkstyle
nikita@localhost.localdomain
parents:
diff changeset
    72
503
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    73
	for (int i = 0; i < MAGIC_10; i++) {
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    74
	    freePort = (int) (MAGIC_10000 + Math.round(Math.random() * MAGIC_10000));
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    75
	    try {
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    76
		ss = new ServerSocket(freePort);
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    77
		freePort = ss.getLocalPort();
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    78
		ss.close();
358
6b9900c70fa1 suppression de quelques warnings de checkstyle
nikita@localhost.localdomain
parents:
diff changeset
    79
		return freePort;
503
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    80
	    } catch (IOException e) {
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    81
		e.printStackTrace();
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    82
	    }
358
6b9900c70fa1 suppression de quelques warnings de checkstyle
nikita@localhost.localdomain
parents:
diff changeset
    83
	}
503
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    84
	try {
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    85
	    ss = new ServerSocket(0);
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    86
	    freePort = ss.getLocalPort();
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    87
	    ss.close();
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    88
	} catch (IOException e) {
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    89
	    e.printStackTrace();
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    90
	}
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    91
	return freePort;
93e5d2d9953f Le formatter a encore frappé.
Jean-Manuel ¨dasilvj¨ Da Silva
parents: 502
diff changeset
    92
    }
358
6b9900c70fa1 suppression de quelques warnings de checkstyle
nikita@localhost.localdomain
parents:
diff changeset
    93
}