Open realJoshByrnes opened 1 year ago
MSN Chat Control, version #9.02.0310.2401
>>> IRCVERS IRC8 MSN-OCX!9.02.0310.2401
>>> AUTH GateKeeper I :GKSSP\0\0\0\0\0\0\0
<<< AUTH GateKeeper S :GKSSP\0\0\0\0\0\0\0<CHLNGE>
>>> AUTH GateKeeper S :GKSSP\0\0\0\0\0\0\0<RSPNCE><USERID>
<<< AUTH GateKeeper * DEADBEEFDEADBEEFDEADBEEFDEADBEEF@GateKeeper 0
>>> NICK >{NickName}
<<< :TK2CHATWBA01 001 >{NickName} :Welcome to the IRC7 Chat Service server, >{NickName}
# If SubscriberInfo is set:
>>> PROP $ SUBSCRIBERINFO: {SubscriberInfo}
# If UserRole is set:
>>> PROP $ ROLE :{UserRole}
# If ChatMode == '1'
>>> CREATE {Category} %#{RoomName} {Topic} {CreationModes} {OWNERKEY} 0
# If ChatMode == '0' (Join) || '2' (Join, Create if it does not exist)
>>> FINDS %#{RoomName}
<<< :TK2CHATWBA01 613 >{NickName} :127.0.0.1 6667
>>> IRCVERS IRC8 MSN-OCX!9.02.0310.2401
>>> AUTH GateKeeperPassport I :GKSSP\0\0\0\0\0\0\0
<<< AUTH GateKeeperPassport S :GKSSP\0\0\0\0\0\0\0<CHLNGE>
>>> AUTH GateKeeperPassport S :GKSSP\0\0\0\0\0\0\0<RSPNCE>\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
<<< AUTH GateKeeperPassport S :OK
>>> AUTH GateKeeperPassport S :{PassportTicket}{PassportProfile}
<<< AUTH GateKeeperPassport * DEADBEEFDEADBEEF@GateKeeperPassport 0
>>> NICK {NickName}
<<< :TK2CHATWBA01 001 {NickName} :Welcome to the IRC7 Chat Service server, {NickName}
# If SubscriberInfo is set:
>>> PROP $ SUBSCRIBERINFO: {SubscriberInfo}
# If UserRole is set:
>>> PROP $ ROLE :{UserRole}
# If ChatMode == '1' (Create)
>>> CREATE {Category} %#{RoomName} {Topic} {CreationModes} {OWNERKEY} 0
# If ChatMode == '0' (Join) || '2' (Join, Create if it does not exist)
>>> FINDS %#{RoomName}
<<< :TK2CHATWBA01 613 {NickName} :127.0.0.1 6667
Notes:
nick
, but needs to be explicitly set for Guest mode to connect to the Channel Server.UL
(Unlisted).-
, if it's set to something other than -
, it is UTF8 encoded. eg. Now, This is a topic!
becomes %Now\c\bThis\bis\ba\btopic!
.adefghimnprstuwWxS
, including any duplicates. If no characters remain after stripping, it is set to -
is used.EN-US
annd is limited to 5 characters, any remaining characters are stripped.1
(English), must be a number, and is a string converted to an int32 (commas are removed, decimals are rounded to nearest number, and may be negative).HKEY_CURRENT_USER\Software\Microsoft\MSNChat\4.0\UserData1
>>> IRCVERS IRC8 MSN-OCX!9.02.0310.2401 {Market}
<<< :TK2CHATCHATA01 800 * 1 0 GateKeeper,NTLM 512 *
>>> AUTH GateKeeperPassport I :GKSSP\0\0\0\0\0\0\0
<<< AUTH GateKeeperPassport S :GKSSP\0\0\0\0\0\0\0<CHLNGE>
>>> AUTH GateKeeperPassport S :GKSSP\0\0\0\0\0\0\0<RSPNCE>\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
<<< AUTH GateKeeperPassport S :OK
>>> AUTH GateKeeperPassport S :{PassportTicket}{PassportProfile}
<<< AUTH GateKeeperPassport * DEADBEEFDEADBEEF@GateKeeperPassport 0
>>> PROP $ MSNREGCOOKIE :{MSNRegCookie}
# If MSNProfile is set
>>> PROP $ MSNPROFILE :{MSNProfile}
# If UserRole is set
>>> PROP $ ROLE :{UserRole}
# If SubscriberInfo is set
>>> PROP $ SUBSCRIBERINFO :{SubscriberInfo}
<<< :TK2CHATCHATA01 001 {NickName} :Welcome to the IRC7 Chat Service server, {NickName}
>>> JOIN %#{RoomName} {OWNERKEY}
<<< :{NickName} JOIN H,U,RXB :%#{RoomName}
>>> MODE %#{RoomName}
# If CREATE was sent to Directory Server, and WelcomeMsg is set
<!-- TODO: Check if ChatMode=2 and room not found. -->
>>> PROP %#{RoomName} OnJoin :{WelcomeMsg}
<<< :TK2CHATCHATA01 324 ${NickName} %#{RoomName} +tdnrflS 35
Notes:
Ticket
would become 00000006Ticket
and Profile
would become 00000007Profile
, and are sent to the server like this:
AUTH GateKeeperPassport S :00000006Ticket00000007Profile
The MSN Chat Control replies to the following CTCP Requests, but only displays replies it receives to TIME requests.
PING 946645199000
TIME 31/12/1999, 11:59:59 PM
VERSION IRC8 MSN-OCX 9.02.0310.2401
profile.msnw?hn=6269676869747465723731
, where the hn=
URL parameter is the hex encoding of the nickname. As any user can clone another user's nickname, this may lead to an increased level of trust that should not be present.
The preferred method, which is done correctly when selecting View Profile from the nicklist is for the client to request the user's PUID using the PROP command. This ensures the correct profile is shown.The OCX doesn't allow you to interact with Non-subscribers unless you are a channel operator, and then you are only able to kick them. Attempting to whisper a non-subscriber shows a message box stating {NickName} is not an MSN subscriber and cannot receive whisper messages
. If voyeur mode is set, the Whisper attempt fails silently.
If the non-subscriber is an IRC Operator, or even a channel operator (bug?), they are exempt from the Chat Control restrictions, but will still be subject to server restrictions, if applicable.
'
(IRCX Unicode Nickname) that other users can not use.It's impossible to ban a user until the internal address list is updated via WHOIS.
Notices do not appear to be shown to the client, with the exception of the TIME CTCP reply (see CTCP Requests).
There are two modes of Whisper, one is a Whisper Window (seperate dialog), and the other mode is shown in the channel.
BgColor=EFEFF7
.
It's important we document how the MSN Chat Control works
I'm tasking myself with this one. I'm not sure if I'll write it out here, or start documenting on the Wiki. Screenshots would be a bonus. I only plan on documenting the latest revision of the MSN Chat Control.