protected void openConnectionInternal()

in wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java [81:164]


    protected void openConnectionInternal() throws ConnectionException, AuthenticationException {
        AuthenticationInfo authInfo = getAuthenticationInfo();

        if (authInfo == null) {
            throw new NullPointerException("authenticationInfo cannot be null");
        }

        if (authInfo.getUserName() == null) {
            authInfo.setUserName(System.getProperty("user.name"));
        }

        String username = authInfo.getUserName();

        String password = authInfo.getPassword();

        if (username == null) {
            throw new AuthenticationException(
                    "Username not specified for repository " + getRepository().getId());
        }
        if (password == null) {
            throw new AuthenticationException(
                    "Password not specified for repository " + getRepository().getId());
        }

        String host = getRepository().getHost();

        ftp = createClient();
        ftp.setDefaultTimeout(getTimeout());
        ftp.setDataTimeout(getTimeout());
        ftp.setControlEncoding(getControlEncoding());

        ftp.addProtocolCommandListener(new PrintCommandListener(this));

        try {
            if (getRepository().getPort() != WagonConstants.UNKNOWN_PORT) {
                ftp.connect(host, getRepository().getPort());
            } else {
                ftp.connect(host);
            }

            // After connection attempt, you should check the reply code to
            // verify
            // success.
            int reply = ftp.getReplyCode();

            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();

                throw new AuthenticationException("FTP server refused connection.");
            }
        } catch (IOException e) {
            if (ftp.isConnected()) {
                try {
                    fireSessionError(e);

                    ftp.disconnect();
                } catch (IOException f) {
                    // do nothing
                }
            }

            throw new AuthenticationException("Could not connect to server.", e);
        }

        try {
            if (!ftp.login(username, password)) {
                throw new AuthenticationException("Cannot login to remote system");
            }

            fireSessionDebug("Remote system is " + ftp.getSystemName());

            // Set to binary mode.
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            ftp.setListHiddenFiles(true);

            // Use passive mode as default because most of us are
            // behind firewalls these days.
            if (isPassiveMode()) {
                ftp.enterLocalPassiveMode();
            }
        } catch (IOException e) {
            throw new ConnectionException("Cannot login to remote system", e);
        }
    }