001/** 002 * 003 * Copyright 2018-2021 Florian Schmaus 004 * 005 * This file is part of smack-examples. 006 * 007 * smack-examples is free software; you can redistribute it and/or modify 008 * it under the terms of the GNU General Public License as published by 009 * the Free Software Foundation; either version 3 of the License, or 010 * (at your option) any later version. 011 * 012 * This program is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 015 * GNU General Public License for more details. 016 * 017 * You should have received a copy of the GNU General Public License 018 * along with this program; if not, write to the Free Software Foundation, 019 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 020 */ 021package org.igniterealtime.smack.examples; 022 023import java.io.BufferedWriter; 024import java.io.IOException; 025import java.io.OutputStreamWriter; 026import java.io.PrintWriter; 027import java.nio.charset.StandardCharsets; 028 029import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode; 030import org.jivesoftware.smack.SmackException; 031import org.jivesoftware.smack.XMPPException; 032import org.jivesoftware.smack.c2s.ModularXmppClientToServerConnection; 033import org.jivesoftware.smack.c2s.ModularXmppClientToServerConnectionConfiguration; 034import org.jivesoftware.smack.compression.CompressionModuleDescriptor; 035import org.jivesoftware.smack.compression.XMPPInputOutputStream; 036import org.jivesoftware.smack.compression.XMPPInputOutputStream.FlushMethod; 037import org.jivesoftware.smack.debugger.ConsoleDebugger; 038import org.jivesoftware.smack.debugger.SmackDebuggerFactory; 039import org.jivesoftware.smack.sm.StreamManagementModuleDescriptor; 040import org.jivesoftware.smack.tcp.XmppTcpTransportModuleDescriptor; 041 042public class Nio { 043 044 public static void main(String[] args) throws SmackException, IOException, XMPPException, InterruptedException { 045 doNio(args[0], args[1], args[2]); 046 } 047 048 public static void doNio(String username, String password, String service) 049 throws SmackException, IOException, XMPPException, InterruptedException { 050 boolean useTls = true; 051 boolean useStreamMangement = false; 052 boolean useCompression = true; 053 boolean useFullFlush = true; 054 boolean javaNetDebug = false; 055 boolean smackDebug = true; 056 057 if (useFullFlush) { 058 XMPPInputOutputStream.setFlushMethod(FlushMethod.FULL_FLUSH); 059 } 060 061 if (javaNetDebug) { 062 System.setProperty("javax.net.debug", "all"); 063 } 064 065 final SecurityMode securityMode; 066 if (useTls) { 067 securityMode = SecurityMode.required; 068 } else { 069 securityMode = SecurityMode.disabled; 070 } 071 072 final SmackDebuggerFactory smackDebuggerFactory; 073 if (smackDebug) { 074 smackDebuggerFactory = ConsoleDebugger.Factory.INSTANCE; 075 } else { 076 smackDebuggerFactory = null; 077 } 078 079 ModularXmppClientToServerConnectionConfiguration.Builder configurationBuilder = ModularXmppClientToServerConnectionConfiguration.builder() 080 .setUsernameAndPassword(username, password) 081 .setXmppDomain(service) 082 .setDebuggerFactory(smackDebuggerFactory) 083 .setSecurityMode(securityMode) 084 .removeAllModules() 085 .addModule(XmppTcpTransportModuleDescriptor.class); 086 087 if (useCompression) { 088 configurationBuilder.addModule(CompressionModuleDescriptor.class); 089 configurationBuilder.setCompressionEnabled(true); 090 } 091 if (useStreamMangement) { 092 configurationBuilder.addModule(StreamManagementModuleDescriptor.class); 093 } 094 095 ModularXmppClientToServerConnectionConfiguration configuration = configurationBuilder.build(); 096 097 PrintWriter printWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out, StandardCharsets.UTF_8))); 098 configuration.printStateGraphInDotFormat(printWriter, false); 099 printWriter.flush(); 100 101 ModularXmppClientToServerConnection connection = new ModularXmppClientToServerConnection(configuration); 102 103 connection.setReplyTimeout(5 * 60 * 1000); 104 105 XmppTools.modularConnectionTest(connection, "flo@geekplace.eu"); 106 } 107 108}