rath.msnm.ftp
Class FileMessageProcessor

java.lang.Object
  |
  +--rath.msnm.ftp.FileMessageProcessor

public class FileMessageProcessor
extends Object

파일 송수신에 사용되는 각 트랜잭션들을 관리하고 인증에 관련된 Cookie나 실제로 파일을 전송하는 thread를 띄우는등의 역할을 모두 처리하는 클래스이다.

아래는 이 클래스가 할 수 있는 일을 나열한다.

Version:
$Id: FileMessageProcessor.java,v 1.1.1.1 2002/03/03 21:32:36 xrath Exp $, since 2002/01/10
Author:
Jang-Ho Hwang, rath@xrath.com

Constructor Summary
FileMessageProcessor(SwitchboardSession session)
          +* session에서 일어나는 모든 File에 전송에 관련된 메시지를 처리하고 관리하는 객체를 생성한다.
 
Method Summary
static boolean isAutoReceive()
          파일 자동수신 모드인지 확인한다. default값은 true이다.
 void processAccept(MimeMessage mime)
          송신요청을 수신자가 '허락'하였다는 메시지를 처리한다.
 void processCancel(MimeMessage mime)
          송신요청을 수신자가 '거절'하였다는 메시지를 처리한다.
 void processDownload(MimeMessage mime)
          toReceiveMap에 요청된 cookie가 있는지 조사하여 무결성을 지켜야만 한다.
protected  void processInvite(MimeMessage mime)
          상대방으로부터 도착한 파일전송 요청을 처리한다.
 void processMessage(IncomingMessage msg, MimeMessage mime)
          파일 송수신에 관련된 메시지들을 처리하는 모든 메소드들에 대한 Entry point가 되는 메소드이다.
 void registerReceive(int cookie, File file)
          파일 수신을 허락했다는 사실을 이 session에 등록한다.
 void registerSend(ToSendFile file)
          파일 송신 요청을 했다는 사실을 이 session에 등록한다.
static void setAutoReceive(boolean auto)
          파일 자동수신 모드를 설정한다.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FileMessageProcessor

public FileMessageProcessor(SwitchboardSession session)
+* session에서 일어나는 모든 File에 전송에 관련된 메시지를 처리하고 관리하는 객체를 생성한다.

Method Detail

processMessage

public void processMessage(IncomingMessage msg,
                           MimeMessage mime)
파일 송수신에 관련된 메시지들을 처리하는 모든 메소드들에 대한 Entry point가 되는 메소드이다.

Parameters:
msg - 상대방으로부터 받은 메시지
mime - 실제 파일전송에 관련된 내용이 담긴 Mime 메시지로 FileTransferMessage이다. 단, FileTransferMessage의 인스턴스는 아니므로 cast는 할 수 없다.

processInvite

protected void processInvite(MimeMessage mime)
                      throws IOException
상대방으로부터 도착한 파일전송 요청을 처리한다. 이 메소드에서는 MIME 메시지에서 필요한 정보만을 골라 MsnFileEvent를 발송하는 일을 한다. 만약, $setAutoReceive 메소드로 자동수신 옵션을 true로 해놓았다면 이벤트를 발송하지 않고 곧바로 수신허락 메시지를 송신한다.

자동 수신모드가 설정되어있을 경우, 수신되는 파일은 기본적으로 current directory에 저장될 것이다. 만약 이것을 수정하고 싶다면, System property의 msnm.file.download.dir에 받고자하는 디렉토리를 설정하면 된다.

IOException

setAutoReceive

public static void setAutoReceive(boolean auto)
파일 자동수신 모드를 설정한다.


isAutoReceive

public static boolean isAutoReceive()
파일 자동수신 모드인지 확인한다. default값은 true이다.


registerSend

public void registerSend(ToSendFile file)
파일 송신 요청을 했다는 사실을 이 session에 등록한다. 이 메소드는 프로그래머가 직접 호출할 필요는 없다. public으로 선언된 이유는 단지, rath.msnm.SwitchboardSession 클래스의 sendFileRequest메소드에서 registerSend를 호출해야될 필요가 있기 때문이다.

등록에 대한 해제는 수신 허락/거절 메시지가 오면 자동으로 된다. 만약 도착하지 않는다면, 영원히 Map에서 해제되지 않는다.


registerReceive

public void registerReceive(int cookie,
                            File file)
파일 수신을 허락했다는 사실을 이 session에 등록한다. 이 메소드는 프로그래머가 직접 호출할 필요는 없다.

등록에 대한 해제는 최종 송신 허가메시지가 오면 자동으로 된다. 만약 도착하지 않는다면, 영원히 Map에서 해제되지 않는다.


processAccept

public void processAccept(MimeMessage mime)
                   throws FileNotFoundException,
                          IOException
송신요청을 수신자가 '허락'하였다는 메시지를 처리한다.

이벤트를 발송시킨 후, File을 전송하기 위한 FileServer thread를 생성하고 시작한다. 그 후 registerSend로 등록된 내부 Map에서 제거된다.

FileNotFoundException
IOException

processCancel

public void processCancel(MimeMessage mime)
송신요청을 수신자가 '거절'하였다는 메시지를 처리한다.

이벤트를 발송시킨 후, registerSend로 등록된 내부 Map에서 제거된다.


processDownload

public void processDownload(MimeMessage mime)
toReceiveMap에 요청된 cookie가 있는지 조사하여 무결성을 지켜야만 한다. 송신측에서 '이제 받아가라~' 하는 메시지에 대한 처리를 해주어야 한다. Mime 메시지의 정보에 따라 AuthCookie, host, port 정보를 가지고 송신자의 서버에 접속하여 파일을 다운로드 하고, BYE~