/* * Copyright 2006-2010 Daniel Henninger. All rights reserved. * * This software is published under the terms of the GNU Public License (GPL), * a copy of which is included in this distribution. */ package net.sf.kraken.protocols.irc; import net.sf.kraken.BaseTransport; import net.sf.kraken.KrakenPlugin; import net.sf.kraken.registration.Registration; import net.sf.kraken.session.TransportSession; import net.sf.kraken.type.PresenceType; import net.sf.kraken.type.TransportLoginStatus; import org.apache.log4j.Logger; import org.jivesoftware.util.LocaleUtils; import org.xmpp.packet.JID; /*** * IRC Transport Interface. * * This handles the bulk of the XMPP work via BaseTransport and provides * some gateway specific interactions. * * @author Daniel Henninger */ public class IRCTransport extends BaseTransport<IRCBuddy> { static Logger Log = Logger.getLogger(IRCTransport.class); /** * @see net.sf.kraken.BaseTransport#getTerminologyUsername() */ @Override public String getTerminologyUsername() { return LocaleUtils.getLocalizedString("gateway.irc.username", "kraken"); } /** * @see net.sf.kraken.BaseTransport#getTerminologyPassword() */ @Override public String getTerminologyPassword() { return LocaleUtils.getLocalizedString("gateway.irc.password", "kraken"); } /** * @see net.sf.kraken.BaseTransport#getTerminologyNickname() */ @Override public String getTerminologyNickname() { return LocaleUtils.getLocalizedString("gateway.irc.nickname", "kraken"); } /** * @see net.sf.kraken.BaseTransport#getTerminologyRegistration() */ @Override public String getTerminologyRegistration() { return LocaleUtils.getLocalizedString("gateway.irc.registration", "kraken"); } /** * @see net.sf.kraken.BaseTransport#isPasswordRequired() */ @Override public Boolean isPasswordRequired() { return false; } /** * @see net.sf.kraken.BaseTransport#isNicknameRequired() */ @Override public Boolean isNicknameRequired() { return true; } /** * @see net.sf.kraken.BaseTransport#isUsernameValid(String) */ @Override public Boolean isUsernameValid(String username) { return username.matches("\\w+"); } /** * Handles creating a IRC session and triggering a login. * * @param registration Registration information to be used to log in. * @param jid JID that is logged into the transport. * @param presenceType Type of presence. * @param verboseStatus Longer status description. */ @Override public TransportSession<IRCBuddy> registrationLoggedIn(Registration registration, JID jid, PresenceType presenceType, String verboseStatus, Integer priority) { TransportSession<IRCBuddy> session = new IRCSession(registration, jid, this, priority); session.setLoginStatus(TransportLoginStatus.LOGGING_IN); session.logIn(presenceType, verboseStatus); return session; } /** * Handles logging out of a IRC session. * * @param session The session to be disconnected. */ @Override public void registrationLoggedOut(TransportSession<IRCBuddy> session) { session.setLoginStatus(TransportLoginStatus.LOGGING_OUT); session.logOut(); } /** * Converts a jabber status to an IRC away message (or not). * * @param jabStatus Jabber presence type. * @param verboseStatus Verbose status information. * @return IRC status string. */ public String convertJabStatusToIRC(PresenceType jabStatus, String verboseStatus) { if (jabStatus == PresenceType.available) { return null; } else if (jabStatus == PresenceType.away) { return (verboseStatus == null || verboseStatus.equals("")) ? LocaleUtils.getLocalizedString("gateway.irc.away", "kraken") : LocaleUtils.getLocalizedString("gateway.irc.away", "kraken")+": "+verboseStatus; } else if (jabStatus == PresenceType.xa) { return (verboseStatus == null || verboseStatus.equals("")) ? LocaleUtils.getLocalizedString("gateway.irc.extendedaway", "kraken") : LocaleUtils.getLocalizedString("gateway.irc.extendedaway", "kraken")+": "+verboseStatus; } else if (jabStatus == PresenceType.dnd) { return (verboseStatus == null || verboseStatus.equals("")) ? LocaleUtils.getLocalizedString("gateway.irc.donotdisturb", "kraken") : LocaleUtils.getLocalizedString("gateway.irc.donotdisturb", "kraken")+": "+verboseStatus; } else if (jabStatus == PresenceType.chat) { return null; } else if (jabStatus == PresenceType.unavailable) { // This should never show up. return null; } else { return null; } } @Override public void start() { super.start(); mucTransport = new IRCMUCTransport(this); try { componentManager.addComponent("conference.irc", mucTransport); } catch (Exception e) { Log.error("Error starting IRC MUC component: ", e); } } @Override public void shutdown() { mucTransport.shutdown(); try { componentManager.removeComponent("conference.irc"); } catch (Exception e) { Log.error("Error shutting down IRC MUC component: ", e); } super.shutdown(); } static { KrakenPlugin.setLoggerProperty("log4j.additivity.f00f.net.irc.martyr", "false"); KrakenPlugin.setLoggerProperty("log4j.logger.f00f.net.irc.martyr", "DEBUG, openfiredebug"); } }