blob: 006584d1bfc1aaeec04fb6442a8d666303342b05 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 IBM Corporation and others All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors: IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.jsdt.debug.internal.crossfire.transport;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.wst.jsdt.debug.transport.Connection;
import org.eclipse.wst.jsdt.debug.transport.ListenerKey;
import org.eclipse.wst.jsdt.debug.transport.packet.Packet;
import org.eclipse.wst.jsdt.debug.transport.socket.SocketConnection;
import org.eclipse.wst.jsdt.debug.transport.socket.SocketTransportService;
/**
* Implementation of a transport service that using a {@link Socket} for communication
*
* @since 1.0
*/
public class CFTransportService extends SocketTransportService {
static final Class serverSocketClass = ServerSocket.class; // temporary used to pre-load the ServerSocket.class
/**
* Map of {@link ListenerKey} to {@link ServerSocket}s
*/
Map listeners = new HashMap();
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.transport.socket.SocketTransportService#getConnection(java.net.Socket)
*/
public SocketConnection getConnection(Socket socket) throws IOException {
return new CFSocketConnection(socket);
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.transport.socket.SocketTransportService#handleAccept(org.eclipse.wst.jsdt.debug.transport.Connection)
*/
public void handleAccept(Connection connection) throws IOException {
if(connection instanceof CFSocketConnection) {
CFSocketConnection cfconn = (CFSocketConnection) connection;
Packet packet = cfconn.readHandShake();
if (!(packet instanceof HandShakePacket)) {
throw new IOException("failure establishing connection"); //$NON-NLS-1$
}
cfconn.writeHandShake();
return;
}
throw new IOException("failure establishing connection"); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.transport.socket.SocketTransportService#handleAttach(org.eclipse.wst.jsdt.debug.transport.Connection)
*/
public void handleAttach(Connection connection) throws IOException {
if(connection instanceof CFSocketConnection) {
CFSocketConnection cfconn = (CFSocketConnection) connection;
cfconn.writeHandShake();
Packet packet = cfconn.readHandShake();
if (!(packet instanceof HandShakePacket)) {
throw new IOException("failure establishing connection"); //$NON-NLS-1$
}
return;
}
throw new IOException("failure establishing connection"); //$NON-NLS-1$
}
}