// Path: src/main/java/br/com/soapboxrace/xmpp/jaxb/XMPP_IQPingType.java
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "XMPP_IQPingType", propOrder = { "type", "id", "from", "to", "ping" })
// @XmlRootElement(name = "iq")
// public class XMPP_IQPingType {
// 	@XmlAttribute(name = "type", required = true)
// 	private String type;
// 	@XmlAttribute(name = "id")
// 	private String id;
// 	@XmlAttribute(name = "from")
// 	private String from;
// 	@XmlAttribute(name = "to")
// 	private String to;
// 	@XmlElement(namespace = "urn:xmpp:ping")
// 	private String ping;
// 
// 	public String getType() {
// 		return type;
// 	}
// 
// 	public void setType(String type) {
// 		this.type = type;
// 	}
// 
// 	public String getId() {
// 		return id;
// 	}
// 
// 	public void setId(String id) {
// 		this.id = id;
// 	}
// 
// 	public String getFrom() {
// 		return from;
// 	}
// 
// 	public void setFrom(String from) {
// 		this.from = from;
// 	}
// 
// 	public String getTo() {
// 		return to;
// 	}
// 
// 	public void setTo(String to) {
// 		this.to = to;
// 	}
// 
// 	public String getPing() {
// 		return ping;
// 	}
// 
// 	public void setPing(String ping) {
// 		this.ping = ping;
// 	}
// }
// 
// Path: src/main/java/br/com/soapboxrace/xmpp/jaxb/XMPP_IQPongType.java
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "XMPP_IQPongType", propOrder = { "from", "to", "id", "type" })
// @XmlRootElement(name = "iq")
// public class XMPP_IQPongType {
// 	@XmlAttribute(name = "from")
// 	private String from;
// 	@XmlAttribute(name = "to")
// 	private String to;
// 	@XmlAttribute(name = "id")
// 	private String id;
// 	@XmlAttribute(name = "type", required = true)
// 	private String type = "result";
// 
// 	public XMPP_IQPongType() {
// 	}
// 
// 	public XMPP_IQPongType(String id) {
// 		from = String.format("nfsw.engine.engine@%s/EA_Chat", Session.getXmppIp());
// 		to = Session.getXmppIp();
// 		this.id = id;
// 	}
// 
// 	public String getFrom() {
// 		return from;
// 	}
// 
// 	public void setFrom(String from) {
// 		this.from = from;
// 	}
// 
// 	public String getTo() {
// 		return to;
// 	}
// 
// 	public void setTo(String to) {
// 		this.to = to;
// 	}
// 
// 	public String getId() {
// 		return id;
// 	}
// 
// 	public void setId(String id) {
// 		this.id = id;
// 	}
// 
// 	public String getType() {
// 		return type;
// 	}
// 
// 	public void setType(String type) {
// 		this.type = type;
// 	}
// }


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import br.com.soapboxrace.jaxb.util.MarshalXML;
import br.com.soapboxrace.jaxb.util.UnmarshalXML;
import br.com.soapboxrace.xmpp.jaxb.XMPP_IQPingType;
import br.com.soapboxrace.xmpp.jaxb.XMPP_IQPongType;
		setReaderWriter();
	}

	public Socket getSocket() {
		return socket;
	}

	private void setReaderWriter() {
		try {
			reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
			writer = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream()));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public String read() {
		String msg = null;
		char[] buffer = new char[8192];
		int charsRead = 0;
		try {
			if ((charsRead = reader.read(buffer)) != -1) {
				msg = new String(buffer).substring(0, charsRead);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("S->C [" + msg + "]");
		if (msg.contains("<ping xmlns=\"urn:xmpp:ping\"/>")) {
			XMPP_IQPingType openfirePing = (XMPP_IQPingType) UnmarshalXML.unMarshal(msg, new XMPP_IQPingType());
// Path: src/main/java/br/com/soapboxrace/xmpp/jaxb/XMPP_IQPingType.java
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "XMPP_IQPingType", propOrder = { "type", "id", "from", "to", "ping" })
// @XmlRootElement(name = "iq")
// public class XMPP_IQPingType {
// 	@XmlAttribute(name = "type", required = true)
// 	private String type;
// 	@XmlAttribute(name = "id")
// 	private String id;
// 	@XmlAttribute(name = "from")
// 	private String from;
// 	@XmlAttribute(name = "to")
// 	private String to;
// 	@XmlElement(namespace = "urn:xmpp:ping")
// 	private String ping;
// 
// 	public String getType() {
// 		return type;
// 	}
// 
// 	public void setType(String type) {
// 		this.type = type;
// 	}
// 
// 	public String getId() {
// 		return id;
// 	}
// 
// 	public void setId(String id) {
// 		this.id = id;
// 	}
// 
// 	public String getFrom() {
// 		return from;
// 	}
// 
// 	public void setFrom(String from) {
// 		this.from = from;
// 	}
// 
// 	public String getTo() {
// 		return to;
// 	}
// 
// 	public void setTo(String to) {
// 		this.to = to;
// 	}
// 
// 	public String getPing() {
// 		return ping;
// 	}
// 
// 	public void setPing(String ping) {
// 		this.ping = ping;
// 	}
// }
// 
// Path: src/main/java/br/com/soapboxrace/xmpp/jaxb/XMPP_IQPongType.java
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "XMPP_IQPongType", propOrder = { "from", "to", "id", "type" })
// @XmlRootElement(name = "iq")
// public class XMPP_IQPongType {
// 	@XmlAttribute(name = "from")
// 	private String from;
// 	@XmlAttribute(name = "to")
// 	private String to;
// 	@XmlAttribute(name = "id")
// 	private String id;
// 	@XmlAttribute(name = "type", required = true)
// 	private String type = "result";
// 
// 	public XMPP_IQPongType() {
// 	}
// 
// 	public XMPP_IQPongType(String id) {
// 		from = String.format("nfsw.engine.engine@%s/EA_Chat", Session.getXmppIp());
// 		to = Session.getXmppIp();
// 		this.id = id;
// 	}
// 
// 	public String getFrom() {
// 		return from;
// 	}
// 
// 	public void setFrom(String from) {
// 		this.from = from;
// 	}
// 
// 	public String getTo() {
// 		return to;
// 	}
// 
// 	public void setTo(String to) {
// 		this.to = to;
// 	}
// 
// 	public String getId() {
// 		return id;
// 	}
// 
// 	public void setId(String id) {
// 		this.id = id;
// 	}
// 
// 	public String getType() {
// 		return type;
// 	}
// 
// 	public void setType(String type) {
// 		this.type = type;
// 	}
// }


// Path: src/main/java/br/com/soapboxrace/xmpp/openfire/OpenFireTalk.java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import br.com.soapboxrace.jaxb.util.MarshalXML;
import br.com.soapboxrace.jaxb.util.UnmarshalXML;
import br.com.soapboxrace.xmpp.jaxb.XMPP_IQPingType;
import br.com.soapboxrace.xmpp.jaxb.XMPP_IQPongType;

		setReaderWriter();
	}

	public Socket getSocket() {
		return socket;
	}

	private void setReaderWriter() {
		try {
			reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
			writer = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream()));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public String read() {
		String msg = null;
		char[] buffer = new char[8192];
		int charsRead = 0;
		try {
			if ((charsRead = reader.read(buffer)) != -1) {
				msg = new String(buffer).substring(0, charsRead);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("S->C [" + msg + "]");
		if (msg.contains("<ping xmlns=\"urn:xmpp:ping\"/>")) {
			XMPP_IQPingType openfirePing = (XMPP_IQPingType) UnmarshalXML.unMarshal(msg, new XMPP_IQPingType());
			write(MarshalXML.marshal(new XMPP_IQPongType(openfirePing.getId())));