﻿파일전송을 위한 쿠키 생성 -------------------------------------------------------

1.P2P Cookie  
[MYCMN]:[INDEX]
INDEX Init Value = 2 Digit Random Number

2. FileTransfer Cookie
[INDEX][MYCMN][RANDOM_NUMBER]
INDEX Init Value = 0
RANDOM_NUMBER = 3 Digit Random Number 

----------------------------------------------------------------------------------

1. 나가 상대에게 파일전송
	1.1 파일전송을 상대가 거절 하면
		[ Chat ] {WHSP 2 test01@nate.com FILE REQUEST%091%09LGPL.TXT|26935|230:268:507}
		[ Chat ] {WHSP 2}
		[ Chat ] {WHSP 0 test01@nate.com FILE NACK%091%09LGPL.TXT|26935|230:268:507}

-----------------------------------------------------------------------------------

나(윈도우) => 상대(윈도우) FR서버 경우 파일 보내기.
1. 나 <= DP서버 <= 상대
CTOC 0 userXXX@nate.com 45
REQC NEW 59.8.174.176:5004 10003209611:9860

2. 나 => DP서버 => 상대
CTOC 54 userXXXX@nate.com N 48
REQC RES 192.168.100.113:5004 10003209611:9860

3. 나 <= DP서버
PNAK 54

CTOC 0 user001@nate.com 57
REQC FR 211.234.239.177:5004 10003209611:9867 488334237


-----------------------------------

상대(윈도우) => 나(윈도우) 파일 받기. (직접)
1. 나 => DP서버 => 상대
CTOC 726 userXXXX@nate.com N 48
REQC NEW 192.168.100.113:5004 12345678901:7839
// REQC NEW 124.136.183.198:5004 12345678901:2250
(나 <= 서버)
PNAK 726

2. 나 <= DP서버 <= 상대
CTOC 0 userXXXX@nate.com 48
REQC RES 124.136.183.135:5004 12345678901:7839

3. 나 => 상대 (5004)
ATHC 0 test01@nate.com userXXXX@nate.com 12345678901:7839  6004 0

4. 나 <= 상대 (5004)
ATHC 0 100 6004 0

5. 나 => 상대 (5004)
FILE 0 ACCEPT 8:2147483647:780 0

6. 나 <= 상대 (5004)
FILE 0 INFO FILENAME 826796 CHAT 0

7. 나 => 상대 (5004)
FILE 1 START 0 0

8. 나 <= 상대 (5004)
FILE 1 DATA 8191
...

9. 
-------------------

윈도우(나)에서 윈도우(너)로 파일보내기

1. 나=>너 WHSP 12 user001@nate.com FILE REQUEST%091%09file_transfer1.png|27636|71:2147483647:156
( 나<=서버 WHSP 12 )

2. 나<=너 CTOC 0 user001@nate.com 45
REQC NEW 59.8.174.176:5004 10003209611:7652

3. 나=>너 CTOC 446 user001@nate.com N 48
REQC RES 192.168.100.113:5004 10003209611:7652
( 나<=서버 )PNAK 446

4. 나<=너 ATHC 0 test01@nate.com user001@nate.com 10003209611:7652  6004 0
5. 나=>너 ATHC 0 100 6004 0

6. 나<=너 FILE 0 ACCEPT 71:2147483647:156 0
7. 나=>너 FILE 0 INFO FILENAME 27636 CHAT 0
8. 나<=너 FILE 1 START 0 0
9. 나=>너 FILE 1 DATA 8191
...
10 나=>너 FILE 2 DATA 8191
...
...
...
11 나<=너 FILE 2 END N 0

--------------------------------------------------------------------------------

SendFileInfo에 SS_Session_Key, DP_Session_Key 를 모두 가지고 있게 함.

CTOC 315 test01@lycos.co.kr N 48
REQC NEW 192.168.100.113:5004 12345678901:2746

REQC NEW 124.136.183.198:5004 12345678901:0
CTOC 7 test01@nate.com N 46
REQC NEW 124.136.183.198 5004 12345678901:0

(2007-05-10 22:39:02) --> CTOC 6 test01@nate.com N 45
(2007-05-10 22:40:28) --> CTOC 6 test01@nate.com N 48
REQC NEW 124.136.183.198:5004 12345678901:2250

REQC NEW 124.136.183.198:5004 12345678901:0
(2007-05-10 22:39:02) <-- PNAK 6
(2007-05-10 22:39:02) <-- CTOC 0 test01@nate.com 45
REQC RES 192.168.100.113:5004 12345678901:0

fileNameLabel - fileListView[1]
fileListView[0] : 
fileListView[1] : ID
fileListView[2] : FileName
fileListView[3] : Size
fileListView[4] : Speed
fileListView[5] : %
fileListView[6] : Status


WHSP [TID] [TARGET_ID] FILE [COMMAND]{TAB}[FILECOUNT]{TAB}[FILENAME|FILESIZE|COOKIE]

%09 는 TAB 키입니다.
COMMAND에는
REQUEST : 파일 수신 요청
CANCEL : 파일 수신 요청 취소
NACK : 파일 수신 거절

(2007-04-30 21:33:51) [ Receive ] >> {WHSP 0 test01@nate.com FILE REQUEST%091%09대화.png|79587|22:2147483647:32}
(2007-04-30 21:33:56) [ Receive ] >> {WHSP 0 test01@nate.com FILE CANCEL%091%0922:2147483647:32}

[진행 순서]

>> REQUEST
<< REQC NEW [ID] [IP] [PORT] [P2P Cookie]

(2007-05-02 09:51:41) [ Send    ] << {WHSP 0 test01@lycos.co.kr FILE REQUEST%091%09abc.png|79587|22}
(2007-05-02 09:51:41) [ Receive ] >> {280 0}


안성환 ( [안성환:개발]식탐을 버리자! ) 님의 말 :
장과장님.. 280 원인은
1) 채팅방에 사람이 없는 경우
2) 자기 자신에게 WHSP를 보내는 경우 
딱 두가지인데요.

DP서버로 전송 받음.
(2007-05-03 19:34:12) <-- CTOC 0 test01@nate.com 47
REQC NEW 192.168.100.113:5004 12345678901:735
(2007-05-03 19:34:12) <-- PING 0
(2007-05-03 19:34:12) --> PING 8 
(2007-05-03 19:34:22) <-- CTOC 0 test01@nate.com 56
REQC FR 211.234.239.173:5004 12345678901:735 860322075
// REQC NEW 124.136.183.198:5004 11232:1223454

File Socket에서 받은 데이터 5004번.
knateon: File Transfer : [ATHC 0 test01@nate.com test01@lycos.co.kr 12345678901:645  6004 0
]

ATHC 0 100 6004 0 
    
이렇게 전송을 해줘야 합니다. 

Trid가 빠져있고  뒤쪽에 Port와 플래그를 붙여서 넘겨줘야 합니다. 

그 이후에는 

>> FILE 0 ACCEPT 
<< FILE 0 INFO
>> FILE 1 START 
<< FILE 1 DATA...

이렇게 진행됩니다. 

6004번 포트와 0플래그가 뭔지 설명 부탁드려도 괜찮을까요?
홍승일 ( [승일] Improvisation by Inspiration. ) 님의 말 :
그부분은 노대리한테 확인해보셔야 할거 같습니다.ㅎㅎ P2P네고 Manager라는게 있어서..
플래그가 있으면 P2P네고메니져라는 걸 사용하고 
거기서 사용하는 포트가 6004입니다.
더 자세한 내용은 노대리에게.ㅎㅎ

※ 포트확인은 클라이언트 시작에서 5004, 6004번 써도 되는지 확인한다.
6004은 dp의 Overhead를 줄이기위해 클라이언트 대 클라이언트 간에 네고를 위핸 포트이다.
DP를 통해 CTOC RECQ NEW를 보내게 되면 DP서버가 오버헤드에 걸린다.
그래서, 클라이언트 6004번으로 CTOC명령을 대신한다.
주명령은 PTPC이고 CTOC와 명령은 같다.

(2007-05-04 15:57:33) <-- CTOC 0 test01@nate.com 49
REQC PTPN 192.168.100.113:6004 12345678901:7568

(2007-05-04 16:39:00) <-- CTOC 0 test01@nate.com 48
REQC NEW 192.168.100.113:5004 12345678901:7573

--------------------------------------
내가 파일 보낼때.
1. Chatting 창
--> WHSP 2 test01@nate.com FILE REQUEST%091%09knateon15.png|290605|838472:934
<-- WHSP 2

2. DP서버
 2.1 상대편에서 파일을 "수락" 하면,
<-- CTOC 7 test01@nate.com N 47
REQC NEW 124.136.183.198:5004 12345678901:645
--> CTOC 7 test01@nate.com N 47
REQC RES 124.136.183.198:5004 12345678901:645

3. P2P 세션 ( 5004포트 )
--> ATHC 0 test01@nate.com test01@lycos.co.kr 12345678901:645  6004 0
<-- ATHC 0 100 6004 0

구현> 소켓으로 124.136.183.198:5004 번으로 접속.
접속하기 전에, 소켓 리스트를 가지고 있어야 함. 어디에? 
knateon Main에서? 엉.
접속 후, nego 과정을 거쳐, 파일을 보내게 된다.
nego과정은 text로 파일에 대한 정보 등을 보내게 된다.
nego과정
--> ATHC 0 test01@nate.com test01@lycos.co.kr 12345678901:645  6004 0
<-- ATHC 0 100 6004 0
<-- FILE 0 ACCEPT 
--> FILE 0 INFO
<-- FILE 1 START 
--> FILE 1 DATA...

음. 파일전송 정보를 보여줘야 하는데...
이벤트로 처리때 마다 정보를 갱신하는 방법을 써야 겠다.
한 패킷이 8192byte이니...
8192byte 보낼때, 혹은 받을때 이벤트로 보여준다.
파일 전송 정보를 가지고 있는 QListView 역시
knateon Main에 둬야 겠군. 그래야 이벤트 처리를 하지.

접속이 되고, 접속 이벤트를 등록했음.
그럼, 접속이 되었으니, nego과정으로 들어 가야 겠군.
네고 과정은 어디서 하는게 좋을까?
p2pclient에서 하는게 좋을것 같은데...
그리고, 이벤트는 등록을 해서, 리스트에 넣을때 쓰면 되겠군.

(2007-05-29 14:02:10) <-- [ P2P ] {FILE 1 DATA 8191}

※ 파일 받기.
1. WHSP 받음.
나 <-- 서버 
// WHSP 0 test01@nate.com FILE REQUEST%091%09겨울.jpg|105542|11:2147483647:306
WHSP 0 test01@lycos.co.kr FILE REQUEST%091%09knateon15.png|290605|838472:934
(서버 --> 상대 WHSP 0)

나 --> 서버 
CTOC 476 test01@lycos.co.kr N 48
REQC NEW 192.168.100.113:5004 12345678901:5514

(상대 -> 서버)
CTOC 751 test01@lycos.co.kr N 48
REQC RES 192.168.100.113:5004 12345678901:5514


test01@nate.com에서 파일 받기를 수락했을때.

CTOC 370 test01@lycos.co.kr N 48
REQC NEW 192.168.100.113:5004 12345678901:5512

WHSP 4 test01@lycos.co.kr FILE CANCEL%091%09838472:934



