RequestSender.java :  » Web-Services » tcpmon » tcpmon » Java Open Source

Java Open Source » Web Services » tcpmon 
tcpmon » tcpmon » RequestSender.java
/* Copyright 2004 Inderjeet Singh. All rights reserved. You may not modify, 
 * use, reproduce or distribute this software except in compliance with the 
 * terms of the license at http://tcpmon.dev.java.net/
 * $Id: RequestSender.java,v 1.3 2004/11/14 19:28:55 inder Exp $ */

package tcpmon;

import java.net.*;
import java.io.*;

/**
 *
 * @author Inderjeet Singh
 */
public class RequestSender extends Thread {
    
    public RequestSender(String data, TunnelConfig config, CallBack callback) {
        this(data.getBytes(), config, callback);
    }
    
    public RequestSender(byte[] data, TunnelConfig config, CallBack callback) {
        this.data = data;
        this.config = config;
        this.callback = callback;
        this.start();
    }
    
    public void run() {
        Socket s = null;
        CallBack.CallBackData callbackdata = new CallBack.CallBackData(config.localPort, REPORTED_CLIENT_NAME, config.serverName);
        ByteArrayOutputStream reverseData = new ByteArrayOutputStream();        
        try {
            s = new Socket(config.serverName, config.serverPort);
            InputStream forwardData = new ByteArrayInputStream(data);
            Thread forward = new StreamThread(forwardData, s.getOutputStream());
            forward.start();
            
            // Reuse the current thread for one of the streams            
            Thread reverse = new StreamThread(s.getInputStream(), reverseData);
            //reverse.start();
            reverse.run();
            
            forward.join();
            //reverse.join();
        } catch (Exception e) {
            reportException(e);
        } finally {
            try {
                if (s != null) {
                    s.close();
                }
            } catch (Exception e) {
                reportException(e);
            }
            // System.out.println(reverseData.toString());
            callbackdata.set(new String(data), reverseData.toString());
            callbackdata.setState(Tunnel.FINISHED);
            callback.connectionFinished(callbackdata);
        }
    }
    
    private void reportException(Exception e) {
        String stackTrace = Utils.extractStackTrace(e);
        CallBack.CallBackData callbackdata = new CallBack.CallBackData(config.localPort, REPORTED_CLIENT_NAME, config.serverName);
        callbackdata.set(stackTrace, "");
        callbackdata.setState(Tunnel.FAILED);
        callback.connectionFinished(callbackdata);
    }
    
    
    private byte[] data;
    private TunnelConfig config;
    private CallBack callback;
    private static final String REPORTED_CLIENT_NAME = "tcpmon-localhost";
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.