본문 바로가기

3.구현/VC++

MSN 메신저에서 채팅 절차

이글은 http://www.tlsecurity.net/Textware/Misc/draft-movva-msn-messenger-protocol-00.txt의 내용을 간단하게 번역한 내용입니다.

역자: Ospace(ospace114@empal.com)
일자: 2007.12.05

MSN메신저에서 인스탄스 메시징은 세션기반으로 작동합니다. 대화를 하려는 사람들은 세션을 생성해야 대화를 할 수 있다. 우리는 채팅하려는 사용자와 채팅 세션을 시작하기 전까지는 메시지를 송수신할 수 없다. 이를 위한 기본적인 두가지 메소드는 다음과 같다.

-. 사용자는 다른 사용자에게 채팅 세션 요청을 보낸다.
-. 사용자는 다른 사용자로 부터 채팅 세션 요청을 받는다.

사용자는 채팅세션을 요청을 송신

사용자는 서버에게 SwitchBoard(SB)서버의 주소를 요청하는 명령어를 보낸다. 모든 인스탄스 메시징 대화은 SB를 통해서 이뤄진다.

XFR 9 SB

서버는 SB 서버에 대한 ip주소과 port, 긜고 CKI해쉬 값을 를 돌려보낸다. CKI는 보안 패킷이고 사용자는 해쉬를 이용해서 SB 서버에 연결한다.

XFR 9 SB 64.4.13.88:1863 CKI 989457642.2070896604

이제 SB서버와 새 연결을 만들 수 있게됬다. 이전 연결은 여전히 유지되어야 한다. 이 연결을 잃어버리면 서버에서 로그아웃된다.
SB 서버에 연결된 후에 다음 명령어를 SB서버에 보낸다.

USR 1 venky_dude@hotmail.com 989457642.2070896604

CKI 해쉬가 정확하다면 SB서버는 다음과 같이 응답할 것이다.

USR 1 OK venky_dude@hotmail.com venkat

이후에는 사용자는 다름 사용자에게 채트 세션으로 불러("Call")올 수 있다.
이는 다음 명령을 전송하면된다.

CAL 2 dadexxx@hotmail.com

서버는 세션 ID를 다른 사용자에게로 응답한다.

CAL 2 RINGING 11717653

다른 사용자가 응답할때 SB 서버는 다음과 같은 명령을 보낼 수 있다.

JOI deadlee@hotmail.com Venkatesh

이는 다른 사용자는 대화에 참가했다고 알린다는 의미이고 이제 메시지는 전송과 수신할 준비가 되었다.

사용자가 채팅 세션 요구를 수신

NS서서가 다음 메시지를 보냄으로서 우리가 채트 세션에 초대된다.

RNG 11742066 64.4.13.74:1863 CKI 989495494.750408580 deaxxx@hotmail.com Vendatesh

여기 NS 서버가 우리에게 보낸 세션 ID, SB 서버의 IP 주소와 포트 긜고 CKI해쉬이다. 그리고 해당 사용자는 우라와 대화 시작하려고 한다.
이제 SB서버와 새로운 연결을 만든다. MSN 메신저 서버와 연결을 계속 유지한다. 만약 이 연결을 잃어버리면 로그아웃된다.
SB 서버에 연결하고 다음 명령어를 보낸다.

ANS 1 venky_dude@hotmail.com 989495494.750408580 11742066

여기서 우리 로그인 이름과 수신한 CKI해쉬와 세션 ID를 보낸다.
그러면 서버는 다음과 같이 응답을 돌려보낸다.

IPO 1 1 1 deadxxx@hotmail.com Venkatesh

그리고

ANS 1 OK

우리는 이제 메시지를 송수신할 준비가 되었다.
메시지를 송수신하기 전에 어떻게 메시지가 구성되는지 보자. 메시지를 보낼때 다음과 같은 모습으로 헤더정보를 생성한다.

MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=0; PF=22**

메시지를 보내는 경우는 다음과 같이 도니다.

MSG 2 N 137 MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=0; PF=22**

hello

MSG다음에 오는 숫자 2는 trial id로 매번 메시지를 보낼 때마다 증가시킨다. 137은 메시지 총 길이를 말한다. 예를 들어 헤더 길이와 "hello"같은 실제 메시지길이로 계산된다.

수신되는 메시지도 거의 비슷한다.

다음이 수신된 메시지 예이다.

MSG deaxxxx@hotmail.com Venkatesh 137
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=0; PF=22**

hello

다른 사용자가 메시지를 입력할때 다음과 같은 메시지를 받는다.

MSG deaxxxx@hotmail.com Venkatesh 100
MIME-Version: 1.0
Content-Type: text/x-msmsgscontrol
TypingUser: deaxxxx@hotmail.com

(끝)
휴~ 이제야 끝났네요. 짧은 시간에 간단히 번역한거라 중간에 어색하거나 틀린 내용이 있을 수 있다는 점을 유념하세요. 혹시 그런 부분이 있다면 덧글을 달아두거나 혹은 메일로 보내면 빠른 시간 내에 확인하겠습니다. 이글을 유용했으면 하네요.

추가로 MSN Messenger protocol에대해서 더욱 관심이 많다면 다음 사이트를 참조하세요. 매우 유용할거에요.

이상으로 번역을 마치겠습니다.
Ospace is Zero-space!!

History

2009.01.14 ospace 오탈자 수정, 서식 보기 쉽게 수정, 추가 링크 수정.

반응형