blob: 8d7c4b771bf86cf0f4391a076a374b4e4bc1d488 [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.rhino.transport;
import java.io.IOException;
import java.net.Socket;
import org.eclipse.wst.jsdt.debug.transport.Connection;
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 RhinoTransportService extends SocketTransportService {
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.transport.socket.SocketTransportService#getConnection(java.net.Socket)
*/
public SocketConnection getConnection(Socket socket) throws IOException {
return new RhinoSocketConnection(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 {
Packet packet = connection.readPacket();
if (packet instanceof RhinoRequest) {
RhinoRequest request = (RhinoRequest) packet;
if (!request.getCommand().equals(JSONConstants.CONNECT)) {
throw new IOException("failure establishing connection"); //$NON-NLS-1$
}
RhinoResponse response = new RhinoResponse(request.getSequence(), request.getCommand());
connection.writePacket(response);
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 {
RhinoRequest request = new RhinoRequest(JSONConstants.CONNECT);
connection.writePacket(request);
Packet packet = connection.readPacket();
if (packet instanceof RhinoResponse) {
RhinoResponse response = (RhinoResponse) packet;
if (!response.getCommand().equals(JSONConstants.CONNECT) || response.getRequestSequence() != request.getSequence() || !response.isSuccess() || !response.isRunning()) {
throw new IOException("failure establishing connection"); //$NON-NLS-1$
}
return;
}
throw new IOException("failure establishing connection"); //$NON-NLS-1$
}
}