package com.nabalive.server.jabber.packet; import com.nabalive.common.server.Packet; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.handler.codec.base64.Base64; import org.jboss.netty.util.CharsetUtil; import java.util.UUID; /** * Created by IntelliJ IDEA. * User: Julien Cheype * Date: 11/24/11 */ public abstract class BasePacket implements Packet { protected abstract int getType(); protected abstract ChannelBuffer getData(); public ChannelBuffer getFullData() { final ChannelBuffer channelBuffer = ChannelBuffers.dynamicBuffer(); channelBuffer.writeByte(0x7f); channelBuffer.writeByte(getType()); final ChannelBuffer encryptedData = getData(); int len = encryptedData.readableBytes(); byte[] lenBytes = new byte[]{(byte) (len >>> 16), (byte) (len >>> 8), (byte) len}; channelBuffer.writeBytes(lenBytes); channelBuffer.writeBytes(encryptedData); channelBuffer.writeByte(0xFF); return channelBuffer; } public String getBase64() { return Base64.encode(getFullData(), false).toString(CharsetUtil.UTF_8); } public String getXmpp(String from, String to) { StringBuilder msg = new StringBuilder(); msg.append("<message from='" + from + "' "); msg.append("to='" + to + "' "); msg.append("id='" + UUID.randomUUID().toString() + "'>"); msg.append("<packet xmlns='violet:packet' format='1.0' ttl='604800'>"); msg.append(getBase64()); msg.append("</packet></message>"); return msg.toString(); } }