/**
* Copyright (C) 2010-2014 Leon Blakey <lord.quackstar at gmail.com>
*
* This file is part of PircBotX.
*
* PircBotX is free software: you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* PircBotX is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* PircBotX. If not, see <http://www.gnu.org/licenses/>.
*/
package org.pircbotx.output;
import com.google.common.base.Joiner;
import java.net.InetAddress;
import lombok.RequiredArgsConstructor;
import org.pircbotx.PircBotX;
import org.pircbotx.dcc.DccHandler;
/**
* Implementation of the DCC protocol. <b>NOTE: This class will not handle the
* actual chat or sending of files. Use the dcc methods in {@link OutputUser}
* </b>
*
* @author Leon Blakey
*/
@RequiredArgsConstructor
public class OutputDCC {
protected static final Joiner SPACE_JOINER = Joiner.on(' ');
protected final PircBotX bot;
public void dcc(String target, String service, Object... parameters) {
bot.sendIRC().ctcpCommand(target, SPACE_JOINER.join("DCC", service, parameters));
}
public void fileRequest(String target, String filename, InetAddress senderAddress, int senderPort, long filesize) {
dcc(target, "SEND", filename, DccHandler.addressToInteger(senderAddress), senderPort, filesize);
}
public void fileResumeRequest(String target, String filename, int senderPort, long position) {
dcc(target, "RESUME", filename, senderPort, position);
}
public void fileResumeAccept(String target, String filename, int senderPort, long position) {
dcc(target, "ACCEPT", filename, senderPort, position);
}
public void filePassiveRequest(String target, String filename, InetAddress senderAddress, long filesize, String transferToken) {
dcc(target, "SEND", filename, DccHandler.addressToInteger(senderAddress), 0, filesize, transferToken);
}
public void filePassiveAccept(String target, String filename, InetAddress receiverAddress, int receiverPort, long filesize, String transferToken) {
dcc(target, "SEND", filename, DccHandler.addressToInteger(receiverAddress), receiverPort, filesize, transferToken);
}
public void filePassiveResumeRequest(String target, String filename, long position, String transferToken) {
dcc(target, "RESUME", filename, 0, position, transferToken);
}
public void filePassiveResumeAccept(String target, String filename, long position, String transferToken) {
dcc(target, "ACCEPT", filename, 0, position, transferToken);
}
public void chatRequest(String target, InetAddress address, int port) {
dcc(target, "CHAT", "chat", DccHandler.addressToInteger(address), port);
}
public void chatPassiveRequest(String target, InetAddress address, String chatToken) {
dcc(target, "CHAT", "chat", DccHandler.addressToInteger(address), 0, chatToken);
}
public void chatPassiveAccept(String target, InetAddress address, int port, String chatToken) {
dcc(target, "CHAT", "chat", DccHandler.addressToInteger(address), port, chatToken);
}
}