/* * Copyright (c) 2003, The Joust Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * - Neither the name of the Joust Project nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * File created by Keith @ 5:04:14 AM * */ package edu.tufts.vue.collab.im; import net.kano.joscar.ByteBlock; import net.kano.joscar.rv.RvSession; import net.kano.joscar.rvcmd.SegmentedFilename; import net.kano.joscar.rvproto.ft.FileTransferHeader; import net.kano.joscar.rvproto.getfile.GetFileEntry; import net.kano.joscar.rvproto.getfile.GetFileList; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class GetFileThread extends Thread { private RvSession rvSession; private ServerSocket serverSocket; public GetFileThread(RvSession rvSession, ServerSocket ss) { this.rvSession = rvSession; this.serverSocket = ss; } public void run() { try { Socket socket = serverSocket.accept(); InputStream in = socket.getInputStream(); FileTransferHeader firstHdr = FileTransferHeader.readHeader(in); System.out.println("got header: " + firstHdr); FileTransferHeader ack = new FileTransferHeader(firstHdr); ack.setHeaderType(FileTransferHeader.HEADERTYPE_FILELIST_ACK); ack.setFlags(FileTransferHeader.FLAG_DEFAULT); System.out.println("sending ack: " + ack); OutputStream out = socket.getOutputStream(); ack.write(out); byte[] buffer = new byte[(int) firstHdr.getFileSize()]; for (int i = 0; i < buffer.length;) { int count = in.read(buffer, i, buffer.length - i); if (count == -1) break; i += count; } ByteBlock listBlock = ByteBlock.wrap(buffer); GetFileList list = GetFileList.readGetFileList(listBlock); GetFileEntry[] entries = list.getFileEntries(); for (int i = 0; i < entries.length; i++) { System.out.println("* " + entries[i]); } FileTransferHeader fin = new FileTransferHeader(ack); fin.setHeaderType(FileTransferHeader.HEADERTYPE_FILELIST_RECEIVED); fin.setFlags(FileTransferHeader.FLAG_DEFAULT | FileTransferHeader.FLAG_DONE); fin.write(out); FileTransferHeader dirreq = new FileTransferHeader(fin); dirreq.setHeaderType(FileTransferHeader.HEADERTYPE_FILELIST_REQDIR); dirreq.setFilename(new SegmentedFilename( new String[] { "in", "ebaything" })); dirreq.setTotalFileSize(0); dirreq.setFileSize(0); dirreq.setFileCount(0); dirreq.setFilesLeft(0); dirreq.write(out); FileTransferHeader resp = FileTransferHeader.readHeader(in); System.out.println("got response: " + resp); } catch (IOException e) { e.printStackTrace(); } } }