/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ package org.apache.vysper.smack; import java.util.Random; import org.jivesoftware.smack.Chat; import org.jivesoftware.smack.ConnectionConfiguration; import org.jivesoftware.smack.MessageListener; import org.jivesoftware.smack.PacketListener; import org.jivesoftware.smack.Roster; import org.jivesoftware.smack.SASLAuthentication; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.filter.PacketFilter; import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smack.packet.PacketExtension; import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smackx.packet.Time; import org.jivesoftware.smackx.packet.Version; /** */ public class BasicClient { static class IQListener implements PacketListener { public void processPacket(Packet packet) { IQ iq = (IQ) packet; String iqString = iq.toString(); System.out.println("T" + System.currentTimeMillis() + " IQ: " + iqString + ": " + iq.toXML()); } } static class PresenceListener implements PacketListener { public void processPacket(Packet packet) { Presence presence = (Presence) packet; String iqString = presence.toString(); final PacketExtension extension = presence.getExtension("http://jabber.org/protocol/caps"); if (extension != null) System.out.println("T" + System.currentTimeMillis() + " Pres: " + iqString + ": " + presence.toXML()); } } public static void main(String[] args) throws XMPPException { String me = args.length > 0 ? args[0] : "user1"; String to = args.length < 2 ? null : args[1]; try { ConnectionConfiguration connectionConfiguration = new ConnectionConfiguration("localhost"); // ConnectionConfiguration connectionConfiguration = new ConnectionConfiguration("xmpp.eu"); connectionConfiguration.setCompressionEnabled(false); connectionConfiguration.setSelfSignedCertificateEnabled(true); connectionConfiguration.setExpiredCertificatesCheckEnabled(false); connectionConfiguration.setDebuggerEnabled(true); connectionConfiguration.setSASLAuthenticationEnabled(true); connectionConfiguration.setSecurityMode(ConnectionConfiguration.SecurityMode.required); XMPPConnection.DEBUG_ENABLED = true; XMPPConnection connection = new XMPPConnection(connectionConfiguration); connection.connect(); SASLAuthentication saslAuthentication = connection.getSASLAuthentication(); // saslAuthentication.authenticateAnonymously(); // saslAuthentication.authenticate("user1@vysper.org", "password1", "test"); // if (!saslAuthentication.isAuthenticated()) return; connection.login(me + "@vysper.org", "password1"); connection.getRoster().setSubscriptionMode(Roster.SubscriptionMode.accept_all); connection.addPacketListener(new IQListener(), new PacketFilter() { public boolean accept(Packet packet) { return packet instanceof IQ; } }); connection.addPacketListener(new PresenceListener(), new PacketFilter() { public boolean accept(Packet packet) { return packet instanceof Presence; } }); Chat chat = null; if (to != null) { Presence presence = new Presence(Presence.Type.subscribe); presence.setFrom(connection.getUser()); String toEntity = to + "@vysper.org"; presence.setTo(toEntity); connection.sendPacket(presence); chat = connection.getChatManager().createChat(toEntity, new MessageListener() { public void processMessage(Chat inchat, Message message) { System.out.println("log received message: " + message.getBody()); } }); } connection.sendPacket(new Presence(Presence.Type.available, "pommes", 1, Presence.Mode.available)); Thread.sleep(1000); // query server version sendIQGetWithTimestamp(connection, new Version()); // query server time sendIQGetWithTimestamp(connection, new Time()); /* while (to != null) { // chat.sendMessage("Hello " + to + " at " + new Date()); try { Thread.sleep((new Random().nextInt(15)+1)*1000 ); } catch (InterruptedException e) { ; } }*/ for (int i = 0; i < 10; i++) { connection.sendPacket(new Presence(Presence.Type.available, "pommes", 1, Presence.Mode.available)); try { Thread.sleep((new Random().nextInt(15) + 10) * 1000); } catch (InterruptedException e) { ; } connection.sendPacket(new Presence(Presence.Type.available, "nickes", 1, Presence.Mode.away)); try { Thread.sleep((new Random().nextInt(15) + 10) * 1000); } catch (InterruptedException e) { ; } } for (int i = 0; i < 2000; i++) { try { Thread.sleep(500); } catch (InterruptedException e) { ; } } connection.disconnect(); } catch (Throwable e) { try { Thread.sleep(120 * 1000); } catch (InterruptedException ie) { ; } e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } System.exit(0); } private static void sendIQGetWithTimestamp(XMPPConnection connection, IQ iq) { iq.setType(IQ.Type.GET); connection.sendPacket(iq); System.out.println("T" + System.currentTimeMillis() + " IQ request sent"); } }