Short: (1.0-WIP) MSN Messenger client w/ file transfer! Author: trebs@iinet.net.au (Michael Trebilcock) Uploader: trebs@iinet.net.au (Michael Trebilcock) Type: comm/tcp Version: 1.0-WIP Architecture: m68k-amigaos AmiMSN was last updated - 29th March 2005 == NOTE == Looks like i've lost interest in this.. This always happens, lol. No doubt i'll come back in a year for nostalgic purposes and update this thing :-) Anyway, since the previous version of AmiMSN on Aminet (which was AmiMSN 0.6) was really old and outdated, I figured i'd upload the latest work in progress (technically incorrect as i've stopped progressing on it for now). ========== Updates (on extreme rare occasions) at http://members.iinet.net.au/~trebs/AmiMSN/ Introduction ============ AmiMSN is an MSN messenger client for the Amiga. It is written in AREXX and uses rexxreqtools.library, rxsocket.library, rexxdossupport.library and rexxsupport.library. It has been compressed into an executable for easy use. AmiMSN can send and receive files using the MSNFTP protocol. The sender must not be behind a firewall. It communicates directly with microsoft's own MSN messenger servers using the as of yet, undocumented MSNP11 protocol. It spoofs as MSN Messenger BETA 7.0.0632 for maximum compatibility. It is primarily a console client, but has been coded to allow any IRC client to act as it's GUI. It is similar to BitlBee but adheres a lot more closely to RFC 1459 for compatiblity with most IRC clients. Note: If you use this within WinUAE and have Norton Antivirus 2005 installed, to send files you will need to disable the worm protection included with NAV 2005. Features ======== - Spoofs as MSN Messenger BETA 7.0.0632 - Automatically set IDLE status after x amount of minutes. - File send/receive. - IRCd mode similar to BitlBee but closer RFC 1459 compliance. - Complete contact list management. - Smileys automatically converted to descriptive text (Read Installation). - Status sorting (Online users shown first in contact list). - Uses automatic adding and privacy settings. - Command to save settings/database in a human readable form. - Communicates directly with the MSN servers, no need for a Jabber account or the like. - Debug option to save all MSN server I/O to a log file. - Communicates in MSNP11 (many other clients use MSNP8). - Automatic ANSI<->Unicode (and vice versa) charset conversion. Installation ============ Place AmiMSN in a directory of your choice, and edit the AmiMSN.cfg file. If you are using a WIP (work in progress) version with a .rexx file, then type "RX AmiMSN" to run it.. Alternatively type "protect AmiMSN.rexx +s" and you will be able to run the .rexx as an executeable. CStat is for the initial connection status. It is the status you will login with. 0 = Hidden 1 = Online 2 = Busy 3 = Be Right Back 4 = Away 5 = On The Phone 6 = Out To Lunch 7 = Idle You can bypass CStat by starting AmiMSN with an argument, for example: 6. Work:AmiMSN> AmiMSN 1 6. Work:AmiMSN> AmiMSN IRCd 1 To enable automatic smiley-to-text conversion, simply have Emoticons.txt in the program directory. Configuration file settings: "Allow" is needed to make sure no outside access is permitted to AmiMSN's IRCd. Normally keep this at 127.0.0.1 unless you are connecting from a LAN. "AIdle" is to set the amount of minutes to be idle for, before automatically setting your status to "Idle". Set to 0 to disable. History ======= 1.0 (21 March 2005) * = Completed: * - Skipped to version 1.0 because of this major update. * - Fixed: Removed usage of Lower(). I didn't * know it needed rexxkuang11.library * - Fixed: Now works with all .NET passports. (Previously only * worked with hotmail.com accounts) * - File transfer via MSNFTP support added. Sender must accept * inbound connections. If you are using this through WinUAE and * have Norton Antivirus 2005, you NEED to completely disable * Norton Internet Worm Protection before you can send files. * - Changed: AmiMSN.cfg now requires you set a default initial status, * or you may start AmiMSN with an argument. Read "Installation" above. * - Fixed: ReadCList() function couldn't parse a contact that was pending * authorization and not in your forward list. This also cause the * DETAILS command to crash AmiMSN when it encountered this. * - Fixed: ADDUSER would crash AmiMSN if you tried adding someone who was * in your database but not on your forward list. * - Fixed: ADDUSER would crash AmiMSN if you tried to add someone who was * already in your contact list. * - Fixed: RX now only has to be in your path (run C:PATH to have a look). * - Fixed: Breaking the program with ctrl-c will behave nicely. * - Changed: Everything placed into one main executeable. * - Fixed: You now can't initiate a conversation with someone offline. * - Fixed: In some cases AmiMSN would try reading a message that wasn't there. * - Added: P4-Context header is now parsed. Needed for BOT2K3. * - Added: Notification server disconnection messages now parsed. * - Added: AmiMSN.cfg now has a version number. * - Added: Smileys are converted to descriptive text. * - Fixed: Crashed if non-integer parameter was used for group management. * - Speed optimizations in processing status changes. * - Changed: IM window now shows the email address of participants. * - Fixed: Accents now properly encoded for the RENAME command. *!FINALLY!* - Added: People on your "Pending list" now added to your reverse list. * - Added: Handling of hotmail email notification messages. * - Added: Revamped the DETAILS command. It is now much more presentable. * - Added: Automatically set your "Idle" status after x amount of minutes, * and a command to change your auto-idle settings without restarting. - Added: BLOCK and UNBLOCK commands to manipulate your block list. * - Changed: OUT command has now been changed to QUIT. * - Changed: Now communicates in the MSNP11 protocol. You will require * VintEval for the challenge response algorithm. * - Fixed: Unknown content received in a conversation is now ignored. * - Fixed: Messages with no text are properly shown. * - Added: Debug log file is now time-stamped. - Added: ALLOW and DISALLOW commands to manipulate your allow list. * - Added: MSNP11 PSM (Personal Message) support. Use the PSM command. * - Fixed: No longer shows useless status information, for example someone * changes their status from Online, to Online. * - Added: Extra error checking for ADDUSER/REMUSER. * - Fixed: Initial online list is now properly parsed again. * - Changed/Fixed: Revamped the RemHex() function to properly parse %25's, and filter out codes from the "Messenger Plus!" addon. * - Now shows in DETAILS command if someone has an MSN Spaces account. - Updates your AmiMSN.db file when someone changes their nickname, to compensate for the error in the MSNP10+ protocol which does not update your synchronization timestamp upon an SBP command. % - IRCd support heavily updated. * Changed: Removed PIPE: usage and replaced it with xxxClip(). IRCd mode * now works in MorphOS and AOS4. * Fixed: AmiMSN-IM sent the wrong amount of chars when a message in unicode * format was received in IRCd mode, this caused the whole IRCd to collapse. * The IRCd should at least be "stable" now. * Fixed: If a person invites another into the conversation, you will * be aware of it instead of all messages appearing to come from the * original contact. * Fixed: "Cannot send to channel message" now sent properly. * Changed: To avoid timeouts, there is now a time limit in which * you must join the IRCd, or it will automatically revert to * console mode. * Added: Idle time is reset for user in IRCd mode when they message you. * Added: As in accordance with RFC 1459, the IRCd will show the * away message for each PRIVMSG you send to a user. * Added: Setting /AWAY and /BACK on the IRCd will set your MSN status too. * Fixed: Incorrectly sent "No text to send" error message if you tried * sending a blank message to someone. * Added: Aliases.txt support for nickname renaming. Passport as first * word, alias as 2nd word. I.E: abc123@hotmail.com testnick * Fixed: "No such channel" now sent when parting a channel you are not in. * Fixed: No error message when trying to join a channel you're already in. * Fixed: You can now send USER before NICK when connecting to the IRCd. Added: AmiMSN is now an existing nickname. This will prevent "AmiMSN: No such nick/channel" in some certain circumstances. Added: Contact list management. Read "Usage" for more info. * Added: /NAMES support to list who is in a channel. * Changed: For client compatibility reasons, you will now be allowed to leave * channels, but you will be forced to rejoin them. * Changed: The "realname" field of a WHOIS reply now shows their MSN handle. * Changed: Channel topics are no longer locked. 0.6 (05 June 04): - Removed ANSI<->Unicode translation from Todo list (was already done). - IRCd: Nicknames in IRCd mode are now the prefix of their email address, this will eliminate any problems with commas in their nickname, as commas are not permitted in email addresses. It also looks a bit cleaner. - IRCd: Optimized IRC reading routines. - IRCd: Shows proper "You're not channel operator" message when you try to change a channel mode. - IRCd: You can no longer change your nickname to one currently in use. - IRCd: You can also now change the case of your nickname. - Fixed: Problems when adding a group with a space in the name. - Optimized the contact list reading function. - Microsloth finally fixed their MSNP10 protocol. Had to rearrange a few bits of code to get it working properly again when your .db file matches the one on the MSN server. If you've been having problems with 0.5, delete your .db file before using 0.6. Discovered an AmIRC bug whilst implementing REMGROUP in IRCd mode: If you have "Use pages by default" enabled, and you are forceably brought into a channel, and never click on the channel tab to see who's in it, and then leave the channel (still never clicking on the tab), AmIRC freezes. This should really be fixed, as /fake is not the only way to do it, there is SAJOIN on some IRCds. All they have to do is SAJOIN and SAPART you while you aren't paying attention, for it to freeze. 0.5 (27 May 04): - DETAILS command fixed. Checking for Automatic adding setting was the wrong way around. - DETAILS command now shows both group number and group ID. - LIST command now shows changes from REMGROUP/ADDGROUP/RENGROUP. - Small automatic adding bug fix. - No longer requires MiamiNetStat. Found an example non-blocking script that uses RxSocket.library, and learnt how to do asynchronous arexx from that. This is a major update as Miami(Dx) is no longer required to be running. As a result, conversations will have less lag. You can now use this within WinUAE and other emulators with an emulated bsdsocket.library. - TCP: device is no longer a requirement. - Converts unicode characters to ansi in conversations. - Debug log file option. Enable by adding Debug = 1 to .cfg file. - !! IRC daemon mode !! Read below in Usage for more information. - Pings the server every 60 seconds to prevent server from disconnecting you after being away for too long. - AUTO and PRIVACY command now case-insensitive. - Fixed: You can now initiate conversations in rapid succession. - Fixed a bug when listing contact list after adding someone to it after someone changed their status since you logged on. Follow me? heh 0.4: - Now works with normal AND migrated accounts. ^^ If your account is not migrated, you may need to delete the AmiMSN.db file and have it re-generated again. - LIST now shows people not in a group. - Contact list now sorted with people Online shown first. - New commands ADDUSER, REMUSER, ADDGROUP, REMGROUP RENGROUP, HELP, OUT and RAW - Local contact list (LIST) updated after add/remove. ^^ Doesn't work with ADDGROUP/REMGROUP/RENGROUP yet. - Fixed potential problems when you first connect and change a setting or start a conversation before the server sends you a challenge ping. - More error checking. - AmiMSN now compressed into an exe, and configuration settings placed in AmiMSN.cfg - Fixed small problem with "Lost connection to" before a conversation even starts. - MiamiNetStat now used every 4 seconds instead of 5. - DETAILS command now fixed for people who aren't on your FL list. 0.3: - "On The Phone" & "Out To Lunch" status bugs fixed. - Re-coded to work with the newly introduced MSNP10 protocol 0.2: - "Hidden" status bug fixed - Rename your nickname added - Checks for MD5SUM, and quits if it cannot find it - DETAILS command now reads from memory and saves to file - PRIVACY and AUTO commands added - Optimizations here and there - Nickname is shown when someone goes offline - LIST now sorts people into their groups - MiamiNetStat is now protected from deletion - Usage for REMOVE command fixed - Only one MNS.tmp file for all connections - Removed unnecessary Say() function in AmiMSN-IM.rexx - GTC (aka AUTO) setting now takes affect - Invite people into your conversation. 0.1: - First aminet release Todo ==== - IRCd: You can send and receive files via the clients DCC support. - IRCd: You now join each channel after checking who is online. Not Todo ======== - Avatar support - MSN chat room support - Emoticons support * Above is what I DO plan on NOT incorporating ;)) * Although I did get around to file transfer, so who knows. Bugs ==== - No error checking for file transfer support. - IRCd: /NAMES <#nonexistantchannel> will give weird results. - IRCd: /NAMES <#channel1>[,#channel2,etc..] not yet supported. - On rare occasions a message won't get sent properly in IRCd mode, I know why, but after an attempt to fix this bug, it continued happening. It's relatively minor anyway and doesn't affect much. Usage ===== When you run AmiMSN, it will connect, and then show a command list. Type a command to show the usage. If your email address is not verified, you must go to this URL: http://memberservices.passport.net/uiemailval.srf?id=507&lc=1033&ru=http://messenger.msn.com/ AmiMSN can now act as an IRC server. Each group will appear as a channel, and the contacts in that group will appear as users in the channel. Opped users are Online. Voiced users are Away or Busy, and standard users are Offline. To send a message to a contact, just private message them as you normally would any other user on IRC. To run as an IRC server, type "AmiMSN IRCd", then simply point AmIRC to server 127.0.0.1 port 6667. There is a timeout of 20 seconds after you start AmiMSN, if you do not connect to the IRCd during that time, it will automatically revert to console mode. This IRC daemon mode provides AmiMSN with some extra features: - Any IRC client can now act as AmiMSN's GUI. - The WHOIS command shows Idle and Signon times for each contact. - IRC client features such as sounds can be used, etc.. - You can rename everyone on your contact list.. For nickname renaming in IRCd mode, create a file called Aliases.txt, and have their .NET passport (email) as the first word, and the nickname you choose for them, as the 2nd word. Example: abc123@hotmail.com testnick Requirements ============ rxsocket.library (ftp://de.aminet.net/pub/aminet/comm/tcp/rxsocket.lha) rxlibnet.library (ftp://de.aminet.net/pub/aminet/comm/tcp/rxsocket.lha) rexxdossupport.library (ftp://de.aminet.net/pub/aminet/util/rexx/rexxdossupport.lha) rexxreqtools.library (ftp://de.aminet.net/pub/aminet/util/rexx/RexxReqTools.lha) rexxsupport.library (comes with AmigaOS) ixemul.library (ftp://de.aminet.net/pub/aminet/util/libs/ixemul-48.0.lha) MD5SUM (ftp://de.aminet.net/pub/aminet/util/crypt/MD5SUM.lha) VintEval (included in archive) Credits ======= Thanks to all of the people on www.hypothetic.org and their forums for providing the necessary information needed to code an MSN Messenger client. Special thanks to ShdW for giving me ideas and example code, and extensive testing which has led to getting rid of many bugs. Glossary ======== (FL) Forward list = People on your contact list (RL) Reverse list = People who have you on their contact list (BL) Block list = People you have blocked from seeing you online (AL) Allow list = People who are allowed to see you online (PL) Pending list = People who are pending authorization Disclaimer ========== MSN Messenger and it's protocol is copyrighted by Microsoft. I do not take any responsibility in how this program is used, or for any damage caused by this program. You use this at your own risk. .