/******************************************************************************* * Copyright (c) 2013 Hani Naguib. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * Hani Naguib - initial API and implementation ******************************************************************************/ package com.gvmax.relay.servlets; import java.io.IOException; import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.appengine.api.xmpp.JID; import com.google.appengine.api.xmpp.Message; import com.google.appengine.api.xmpp.MessageBuilder; import com.google.appengine.api.xmpp.XMPPService; import com.google.appengine.api.xmpp.XMPPServiceFactory; import com.gvmax.common.util.Enc; import com.gvmax.common.util.StringUtil; public class XmppOutServlet extends HttpServlet { private static final Logger logger = Logger.getLogger(XmppOutServlet.class.getName()); private static final long serialVersionUID = 1L; @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Enc enc = new Enc(Config.ENC_KEY, 128); String from = enc.decrypt(req.getParameter("from")); String to = enc.decrypt(req.getParameter("to")); String message = enc.decrypt(req.getParameter("message")); message = message.replaceAll("\\\\u0009 \\\\u0009\\\\u0009\\\\u0009\\\\u0009 \\\\u0009 \\\\u0009 \\\\u0009 \\\\u0009 \\\\u0009 \\\\u0009 \\\\u0009\\\\u0009 \\\\u0009", ""); message = message.replaceAll("\\u0009 \\u0009\\u0009\\u0009\\u0009 \\u0009 \\u0009 \\u0009 \\u0009 \\u0009 \\u0009 \\u0009\\u0009 \\u0009", ""); if (from == null || to == null || message == null) { return; } message = message.replaceAll("\\\\u0009 \\\\u0009\\\\u0009\\\\u0009\\\\u0009 \\\\u0009 \\\\u0009 \\\\u0009 \\\\u0009 \\\\u0009 \\\\u0009 \\\\u0009\\\\u0009 \\\\u0009", ""); message = message.replaceAll("\\u0009 \\u0009\\u0009\\u0009\\u0009 \\u0009 \\u0009 \\u0009 \\u0009 \\u0009 \\u0009 \\u0009\\u0009 \\u0009", ""); JID fromJid = new JID(from); JID toJid = new JID(to); XMPPService xmpp = XMPPServiceFactory.getXMPPService(); boolean presence = xmpp.getPresence(toJid, fromJid).isAvailable(); if (!presence) { logger.warning("unable to send xmpp: not present: from = " + from); resp.getWriter().print("not present"); } else { String[] msgs = new String[] { message }; if (message.length() > 2000) { msgs = StringUtil.split(message, 2000); } for (String msgText : msgs) { Message msg = new MessageBuilder().withFromJid(fromJid).withRecipientJids(toJid).withBody(msgText).build(); xmpp.sendMessage(msg); } logger.info("sent xmpp from = " + from); resp.getWriter().print("ok"); } resp.flushBuffer(); } }