All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openas2.cmd.processor.SocketCommandProcessor Maven / Gradle / Ivy

Go to download

Open source implementation of the AS2 standard for signed encrypted and compressed document transfer

There is a newer version: 2.10.1
Show newest version
package org.openas2.cmd.processor;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openas2.OpenAS2Exception;
import org.openas2.Session;
import org.openas2.WrappedException;
import org.openas2.cmd.Command;
import org.openas2.cmd.CommandResult;
import org.openas2.util.CommandTokenizer;

/**
 * actual socket command processor
 * takes commands from socket/port and passes them to the OpenAS2Server
 * message format
 * <command userid="abc" pasword="xyz"> the actual command </command>
 * 

* when inited the valid userid and password is passed, then as each * command is processed the processCommand method verifies the two fields correctness * * @author joseph mcverry */ public class SocketCommandProcessor extends BaseCommandProcessor { SocketCommandParser parser; private BufferedReader rdr = null; private BufferedWriter wrtr = null; private SSLServerSocket sslserversocket = null; private String userid, password; private Log logger = LogFactory.getLog(SocketCommandProcessor.class.getSimpleName()); public void init(Session session, Map parameters) throws OpenAS2Exception { super.init(session, parameters); String p = parameters.get("portid"); try { int port = Integer.parseInt(p); SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); sslserversocket = (SSLServerSocket) sslserversocketfactory.createServerSocket(port); String cipherSuites = System.getProperty("CmdProcessorSocketCipher", "TLS_DH_anon_WITH_AES_256_CBC_SHA"); final String[] enabledCipherSuites = {cipherSuites}; try { sslserversocket.setEnabledCipherSuites(enabledCipherSuites); } catch (IllegalArgumentException e) { throw new OpenAS2Exception( "Cipher is not supported. Use command line switch -DCmdProcessorSocketCipher= to use one supported by your version of java security." , e); } } catch (IOException e) { e.printStackTrace(); throw new OpenAS2Exception(e); } catch (NumberFormatException e) { e.printStackTrace(); throw new OpenAS2Exception("error converting portid parameter " + e); } userid = (String) parameters.get("userid"); if (userid == null || userid.length() < 1) { throw new OpenAS2Exception("missing userid parameter"); } password = (String) parameters.get("password"); if (password == null || password.length() < 1) { throw new OpenAS2Exception("missing password parameter"); } try { parser = new SocketCommandParser(); } catch (Exception e) { // TODO Auto-generated catch block new OpenAS2Exception(e); } } public void processCommand() throws OpenAS2Exception { try (SSLSocket socket = (SSLSocket) sslserversocket.accept()) { socket.setSoTimeout(2000); rdr = new BufferedReader(new InputStreamReader(socket.getInputStream())); wrtr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); String line; line = rdr.readLine(); if (logger.isTraceEnabled()) logger.trace("Socket command processor received command: " + line); parser.parse(line); if (parser.getUserid().equals(userid) == false) { wrtr.write("Bad userid/password"); throw new OpenAS2Exception("Bad userid"); } if (parser.getPassword().equals(password) == false) { wrtr.write("Bad userid/password"); throw new OpenAS2Exception("Bad password"); } String str = parser.getCommandText(); if (str != null && str.length() > 0) { CommandTokenizer cmdTkn = new CommandTokenizer(str); if (cmdTkn.hasMoreTokens()) { String commandName = cmdTkn.nextToken().toLowerCase(); if (commandName.equals(StreamCommandProcessor.EXIT_COMMAND)) { wrtr.write("Server terminating..."); wrtr.flush(); rdr.close(); wrtr.close(); terminate(); } else { List params = new ArrayList(); while (cmdTkn.hasMoreTokens()) { params.add(cmdTkn.nextToken()); } Command cmd = getCommand(commandName); if (cmd != null) { CommandResult result = cmd.execute(params.toArray()); if (result.getType() == CommandResult.TYPE_OK) { wrtr.write(result.toXML()); } else { wrtr.write("\r\n" + StreamCommandProcessor.COMMAND_ERROR + "\r\n"); wrtr.write(result.getResult()); } } else { wrtr.write(StreamCommandProcessor.COMMAND_NOT_FOUND + "> " + commandName + "\r\n"); List l = getCommands(); wrtr.write("List of commands:" + "\r\n"); for (int i = 0; i < l.size(); i++) { cmd = l.get(i); wrtr.write(cmd.getName() + "\r\n"); } } } } } wrtr.flush(); } catch (SocketException socketError) { // shutdown case if (!sslserversocket.isClosed()) { throw new WrappedException(socketError); } } catch (IOException e) { //nothing } catch (Exception e) { //nothing } } @Override public void destroy() throws Exception { if (logger.isTraceEnabled()) logger.trace("SocketCommandProcessor.destroy called..."); sslserversocket.close(); // closes remote session super.destroy(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy