About YSM
What is YSM?
YSM stands for "You
Sick Me" an ironic name I came up with while surfing the "I Seek
You" (ICQ) protocol. YSM is an Open Source ICQ client under the
GPL License. Originally coded for the Linux operating system but,
as time goes by, it's being ported to different platforms.
The next Manual section should list known supported platforms.
Since Mirabilis joined the Dark Side of the Force, and next to
AOL decided to develop an AIM Compatible Protocol so that they
wouldn't loose their current amount of ICQ users and fame+fortune,
..a new version of the ICQ protocol was born. The version Number
is known as V7. The last known and used ICQ Protocol Version
was v5 since v6 was just a transition to v7.
Between Versions 5 and 7, the protocol suffers Important and 'unforgiveable'
changes. The old used UDP is replaced by TCP, turning any
pre-existing clients in a useless state. Besides the communication
protocol, data structures have been shaped into FLAPs, SNACs
and the use of TLV's. I highly recommend a deep read of AIM's Protocol
Description by Scott Werndorfer that you can find <in aimdoc-website
>.
Anyway, thanks to TCP we are now able to implement SSL (Secure Sockets
Layer) and go through some Internet "roads" we weren't really able
to go through before (such as HTTPS), in the UDP era. Most Microsoft
Windows users must have noticed v7 once ICQ 2000 was released. Along
the interesting features, v7 brought a new friend to town, called "ads
spam".
A question flows.. is the upgrade to v7 a 'MUST do' ? Many programmers
have spent precious human time programming icq clones that can be
found anywhere, is it really necessary to code new icq clients?. The
answer is 'Yes'. Mirabilis has been leaving old protocol versions
aside and, nowadays, v5 packets are being lost and some ignored,
this leads to broken login sessions, lost messages (mostly offline)
, etc...
By the time I'm writing this YSM Manual (1st May 2002), a series of v7/v8
ICQ clients showed up. Most of these (at least c++/perl based) depend
on libicq2000 (a new project by Barnaby Gray, in c++) and mod
icq2000 (a perl library by Robin Fisher.)
Since by the time I started to code YSM (Dec. 2001) there were no C/C++
known v7 projects, I decided to begin coding a small implementation
of the new protocol basing myself on a reverse done by Massimo Melina
that can be found next to his RQ delphi client at http://rejetto.com . About one
or two months later, Ickle is released (Barnaby's C++ gtk client) with
it's own protocol implementation too.
I wanted a simple console client that required no extra libraries to compile
out of my YSM project, but I was unsure about it's future as I knew more
clients were coming out ( such as the new version of centerICQ by Konst,
which depends on Barnaby's library ). As YSM was already in a usable state
and I had done the coding split in different tidy modules, I realised YSM
could turn into an ICQ C library to be used by any C language programmer.
I was amazed of the possitive reply I got from mostly everywhere, and that's
what kept me on road.
I continued working on the YSM Client in order to improve my protocol
code and at the same time continue the development of the unique C language
ICQ clone. My idea of simplicy let YSM compile on linux, BSD, Windows,
BeOS and Qnx! (at least those were really tested, maybe there are
more platforms). Mostly YSM users were in charge of the small modifications
each port required.
After a deep research on a pretty undocumented side of the ICQ protocol,
YSM was proudly the first ICQ clone for it's supported platforms
to Download and Upload Server side contact lists.
So that's it. YSM is still being developed, and by now it's the first/only
C language client around.
I'll start working on the YSM library soon. Just trying
to help!.
Supported Operating Systems
YSM is known to run in :
- Linux
: Using the ./configure shellscript.
- BSD
: Using the ./configure shellscript.
- Windows
: Has it's "ysm.dsp" for Visual C++, and a Makefile.win for Borland.
- BeOS
: Has it's Makefile.BeOS
- QNX
: Using the ./configure shellscript.
- Know
of another operating system in which YSM runs? mail me
These micros were 32
bit x86. I once received a mail from an MIT lab with a 64 bits patch.
If you know of other than x86 platforms, please mail
me the details.
For futher instructions on Installing YSM in these platforms,
read the "Installing YSM" Manual Section.
YSM Features
These are the features I like most about my YSM client
:
- Crypto between
YSM clients using a rijndael algorithm implementation [AES in CBC mode]
[using the 'key' command].
(Note: YSM Encryption fully supports data confidentiality and it's implementation
is known to be vulnerable to Message integrity attacks, which are really
harmless. An attacker after having hijacked your tcp connection with the
ICQ server (hard to achieve) will be able to repeat messages [replay attacks,
repetition attacks, etc..] after a few successfull sniffings. This note
is just for information and you shouldn't really care since the consecuence
of a succesfull attack is harmless, the attacker will NOT be able to read
the data in your messages.)
- Downloading server-side
stored ICQ contacts.
- Uploading/Saving
in the ICQ servers local ICQ contacts
[using the 'save' command].
- ICQ Clients
Fingerprinting, makes possible the recognition of remote ICQ clients
[shown in the 'whois' command].
- The AFK mode.
[read about the 'afk' command].
- Quick and
easy to compile code, leaving aside -must have- library requirements.
- Full support for
the Windows operating system, plus some extra YSM Windows features.
- Console based,
meaning no mouse usage is required :)
- Multi Language
support.
Where to get YSM
YSM has it's Internet website at http://ysmv7.sourceforge.net
.
It's also listed in freshmeat, at http://freshmeat.net/projects/ysmicq/
For an updated list of sites linking
YSM check the Community section in YSM's website.
If anyone knows of any other places from where to download
YSM and/or would like to submit YSM somewhere, please do so and mail me about it!
YSM Vocabulary
These are the definitions of the words used in the YSM
ICQ Client that may not have an instant meaning to an YSM user :
Slave: An ICQ Contact.
AFK: "away from keyboard", is one of the YSM features.
AFK may either be activated manually or automatically (when a specified
amount of minutes without any keyboard input is reached).
When AFK is activated, a series of steps are followed:
- An auto-response
message is sent to anyone who messages you.
- The message
is logged (readable with the 'readafk' command).
- In case
you were in "FREE4CHAT" or "ONLINE", your status is changed to "AWAY".
Mood:
Status. Mood may either be "ONLINE", "AWAY", "DND", "FREECHAT", "NA",
"OCCUPIED" or "INVISIBLE".
Installing YSM
System Requirements
YSM's idea of portability is responsible for the short
length of this section :).
Running requirements
A little faith, YSM should run as fast as wind in old
systems, no particular version
of libraries are required.
Building requirements
Unix like systems require 'make' in order to use the
included Makefiles.
Windows users will need a Microsoft Visual C++ compiler.
Important Note on Threads, Must read.
The last version of YSM supports 'pthreads' ( Posix Threads
) and Windows native threads. For non Windows operating systems, if
the "configure" shellscript detects support for 'pthreads', the "YSM_WITH_THREADS"
constant will be defined. You should not worry about this constant, since
if your system lacks of pthreads support YSM will compile without any
wining in a single threaded mode disabling a few features.
Installing from sources
Pre Installation Notes
The sources for all supported OS is a unique ".tgz" file
(Tar + Gzip compression).
If you still haven't downloaded this file, don't read
any further, go back to the "About YSM" Manual Section for downloading
instructions.
These are the steps to follow on both unix like systems
and Windows:
Unix like systems:
- tar
zxvf ysmv7_x_x_x.tgz
- cd
ysmv7_x_x_x/
- ./configure
- make
- Optionally,
as root : make install
Steps 1 to 4 will
generate an ysm executable binary file in the src/ directory.
Step 5 will install the ysm binary and its manual page in
your system.
Windows systems:
- Use
Winzip or any uncompression tool for uncompressing "ysmv7_x_x_x.tgz".
- Double
click on "ysm.dsp" or open your Visual C++ program and choose File,
Open Project, then go to the "ysmv7_x_x_x/" directory and double
click on the .dsp file.
- Press
'F7' to start compiling.
Post Installation Notes
The first time you run YSM, a configuration file will
be created. In Windows systems,
I've decided to use the $USERPROFILE environment variable
as root path for the creation of the YSM directory (Where the configuration
file and extra files are stored. ) In case USERPROFILE fails to exist,
C:\ is used as the root Path.
On unix like systems, the root path is the user's Home
directory (~/).
The default name for the configuration file
is "ysm-cfg" . Windows systems will
store this file under a directory called "ysm" and unix
like systems under ".ysm" (Note the '.' (dot) before its name).
Attention: an alternate configuration path/name can
be used by specifying "-c path_to_config" to the ysm binary.
An example would be: "./ysm -c ysm-cfg" for using a local configuration
file.
For further instructions on the Configuration file, read
the "Configuring YSM" Manual Section destinated to describe the
basic configuration file parameters.
Installing from binaries
If you downloaded a pre-compiled version of YSM, just
read the "Post Installation Notes" in the previous "Installing from
sources" Manual subSection.
Configuring YSM
YSM has a two stops road for configuration. Starting with
a Pre-Compiling Configuration (usually left with defaults), and ending
with a Post-Compiling Configuration (possibly the one you are looking
for).
Pre-Compiling Configuration
The Pre-Compiling Configuration allows Multi-Language support,
between some other interesting/required options. All of them are
described in the following sub sections:
Languages
YSM has Multi-Language support. Although it is not configurable
in runtime, it's what I've been able to implement so far. Thanks
to the YSM users, many translations have been already done basing in
an original english version (By the time I'm writing this: 2 French
translations, Italian, Portuguese (Brasil), Spanish, German, Russian
and Swedish).
In order to choose the language you want, edit the "YSM_Lang.h"
file inside the "src" directory and make sure you leave the desired
language definition (i.e.: #define SPANISH) out of any comments and
alone (important for not generating conflicts).
Status Change Flood Protection
The Status Change Flood Protection is nothing more than
a comfortable policy which, is indeed, activated by default. What
the policy takes care of is not showing simple status changes of any
slaves, hence the screen is clean of constant status changing floods.
The policy permits only "Offline to Anything" and "Anything
to Offline" status changes to be shown in the screen.
In case you want to disable the Flood Protection policy,
you will need to remove the line that reads "#define YSM_SILENT_SLAVES_STATUS"
from the "YSM.h" file you will find inside the "src" directory.
YSM War Mode
The YSM War Mode is an undocumented project. For further
assistance you will have to read YSM's source code. The War Mode is
disabled by default. No, I'm not a bofh, I'm affraid of huge 4 meters
tall company lawyers.
Slash Messaging Mode
Continuing with 'comfortable features', here is the "Slash
Messaging Mode". Since the default way of messaging a slave is "m
<name|uin> data" and a big percentage of YSM users were old mICQ
users, the Slash Messaging Mode will turn messaging into "m <name|uin>/data"
.
Since the Slash Messaging Mode is -disabled- by default,
in order to enable it you will need to edit the "YSM.h" file inside
the "src" directory, and move the "#define YSM_SLAVE_SLASH_MESSAGE"
line out of the "#if 0 #endif" lines.
Post-Compiling
Configuration
Post-Compiling Configuration is an easy task in YSM. Most
Settings are stored in a
configuration file and the rest can be done in runtime inside
YSM (Check the next YSM Commands section).
The Configuration File
Although each version of YSM usually has new configuration fields,
most of these configurable settings have stored default values. This
means old configuration files fully work with new YSM releases. If you
need to set a parameter that is missing in your current version of the
configuration file, just add the required parameter between the beginning
of the file and before the [SLAVES] tag. Comments are preceeded with
a "#" sign.
These are the up-to-date available configuration settings:
(Both ' " ' should be removed when used in the configuration
file.)
Initial Status | "STATUS>"
The "STATUS>" setting let's the user choose his/her status
to be set right after logging in the ICQ service.
Its value may be any of the available Status states. (Check the
vocabulary section the word "mood").
Example: STATUS>NA
UIN Number | "UIN>"
The UIN Number is your ICQ number. This setting shouldn't be
of your worry since YSM takes care of filling the parameter after asking
you the first time you run YSM.
Example: UIN>63873081
The Password | "PASSWORD>"
This is the password for the previously specified ICQ number
(or UIN).
Instead of specifying your plaintext password, you may specify
the word "SECURE" in uppercase.
By specifying "SECURE" you will be prompted for your password
everytime you start YSM.
Example: PASSWORD>SECURE
ICQ Server Address | "SERVER>"
This is the address of the remote ICQ server. In case you need
to use another server, just replace the
default address (login.icq.com) with the one you want.
Example: SERVER>login.icq.com
ICQ Server Port | "SERVERPORT>"
This is the port of the remote ICQ server. You shouldn't worry
about setting this parameter.
The default used is 5190.
Example: SERVERPORT>5190
AFK Timeout and AFK Disable | "IDLETIME>"
This sets the amount of minutes to wait with no keyboard input
before turning into the Automatic AFK mode. You may also disable Auto-AFK
by specifying 0 minutes.
Example: IDLETIME>10 or IDLETIME>0
Default AFK Message | "AFKMESSAGE>"
This will be the default message sent in the auto-reply message.
The message will be used either when AFK is turned on manually specifying
no message or when Auto-AFK turns on.
Example: AFKMESSAGE>I'm not here right now, sorry. This
message is sent automatically. Your message has been logged.
ReadAFK Amount of Displayed Messages | "AFKMAXSHOWN>"
This is the amount of messages shown on every page displayed
by the "readafk" command.
The default value is '3'.
Example: AFKMAXSHOWN>3
HTTP/HTTPS Proxy Configuration | "PROXY>"
This is the IP address of the HTTP/HTTPS proxy to use. If you
don't wish to use a Proxy, just specify a Zero as value.
Example: PROXY>192.168.10.2 or PROXY>0
HTTP/HTTPS Proxy Configuration | "PROXY_PORT>"
This is the Port number of the Proxy in case you specified a
Proxy address.
Example: PROXY_PORT>666
HTTP/HTTPS Proxy Configuration | "PROXY_HTTPS>"
This is the flag that tells YSM wether your proxy is an HTTPS
proxy or not.
If your proxy is HTTPS, set the value to "1", else set it to
"0".
Example: PROXY_HTTPS>1 or PROXY_HTTPS>0
Init Contacts Download | "ASK_DOWNLOAD>"
If it's value is "1" you will be prompted for downloading your
server-side stored contacts everytime you start YSM.
If set to 0, contacts will be downloaded without asking.
It's default value is 0.
Example: ASK_DOWNLOAD>0
Beeping | "BEEP>"
If its value is "1", a certain amount of BEEPS will be present when receiving
messages, alerts on users, etc.
The amount of times to beep is configured using the "BEEPAMOUNT>" setting
in the configuration file.
If its value is "0", Beeping will be disabled. BEEP can be enabled/disabled
in runtime using the "BEEP" command.
It's default value is 1.
Example: BEEP>1
Amount of times to
Beep | "BEEPAMOUNT>"
This variable sets the amount of times to beep when the BEEP
variable is on.
Beeping can also be activated/deactivated using the "BEEP" command in runtime.
It's default value is 1.
Example: BEEPAMOUNT>1
Global Logging Activation | "LOGALL>"
This activates logging for every slave in your list. It will
generate a file in your YSM directory
named by the UIN of the slave where it will store the incoming/outgoing
data. The data will then be
readable by the "hist" command.
Example: LOGALL>1
Browser launching
path | "ANTISOCIAL>"
If set to "1" (true) you will stop receiving messages from ICQ users who aren't
in your slaves list.
You will still receive authorization requests and will be able to send messages/auth
replies.
It's default value is 0.
Example: ANTISOCIAL>0
Browser launching path
| "BROWSER>"
This variable has the path to your browser that will be launched using the
"BURL" command later on when running YSM. If you want to enable the "BURL"
command, put the full path to your browser.
Examples of "BROWSER" values are:
BROWSER>/usr/local/bin/mozilla
BROWSER>/usr/bin/lynx
BROWSER>c:\progra~1\iexplore~1\iexplore.exe
If set to 0, the "burl" command will be disabled.
It's default value is 0.
Example: BROWSER>0
Incoming Message Displaying Format | "MSG_KIND>"
This sets the format displayed in the screen of incoming messages.
There are three (3) message formats available:
0 - Displays a two lines message. The first line is a complete
timestamp. The second line shows the Slave name if the remote
user is a slave, the UIN, remote Status and data length next to the incoming
message data.
1 - Displays a three lines message. Timestamp, remote info
and data.
2 - Displays an IRC style message.
The default used is "2".
Verbosity / Debug Levels | "VERBOSE>"
The default level is "2".
These verbosity/debug Levels allow a quick YSM debugging possible
by increasing the verbosity level.
They also let the user remove certain strings which may be considered
'extra' in normal usage by lowering the verbosity level. These are the
verbosity levels :
0 - Base Verbosity. Required for basic output.
1 - Functional. Some Important messages are shown in this
level.
2 - Extra. Is the default Level. Has some extra information,
some users might want to lower to 1. (I wouldn't :P)
6 - Debug 1. Shows incoming SNAC and FLAP information plus
some server side notices.
7 - Debug 2. Shows incoming packets dump, downloaded Slave
additions and sent keep alive packets.
8 - Debug 3. Not yet implemented.
9 - Debug 4. Not yet implemented.
Example: VERBOSE>2
YSM Version Checking | "VERSION_CHECK>"
Version Checking allows an up-to-date version check on every
YSM startup.
It's activated by default. If a Proxy is configured, Version
checking gets disabled.
Example: VERSION_CHECK>1
Language Charset Convertions | "CHARSET_TRANS>"
If you require a special charset for sending messages, it's name
should be specified here.
Russian Generic for Trans is "CP1251".
Example: CHARSET_TRANS>CP1251
Language Charset Convertions | "CHARSET_LOCAL>"
If you require a special charset for receiving messages, it's
name should be specified here.
Russian Generic for Local is "KOI8R".
Example: CHARSET_LOCAL>KOI8R
Incoming Messages Alert Modes for Ms. Windows | "WINALERT>"
YSM when compiled for Win32 has support for different Alerting
types of new incoming messages.
The default used is "3".
Type "1" pops up the minimized console Window (if minimized)
Type "2" only
blinks in the task bar.
Type "3" pops up the minimized console Window
(if minimized) and blinks the window in the task bar.
Example: WINALERT>3
Using
YSM
Even though using YSM is a very simple task (hehe), I've decided
to open the mind of the YSM users and explain them in detail how to get
this program working. I've split this section in three different subsections,
one describing the commands, another for the keyboard hot keys and the
last one with tips and hints on how to fully become an YSM lover (leaving
subliminal messages aside).
The
YSM Commands
Configuration Commands
The following is
a description of commands I've identified as 'configuration related'
commands. [The following
rule doesn't apply to the 'nick' and 'email' commands since
their values are stored in the ICQ servers] : The values modified using these
commands are NOT stored in the configuration file. If you want to make
permanent changes to one of these settings, set its value in the configuration
file using its corresponding option previously described in the last
subsection called "The Configuration File".
Setting your Nickname | "nick"
The "nick" command is used to show or change your current ICQ Nickname.
If no arguments are supplied, the action taken is 'show your current
nickname'.
Usage: nick [new_nick_name]
Setting
your E-mail address | "email"
The "email" command is used to show or change your current E-Mail
Address.
If no arguments are supplied, the action taken is 'show your current
e-mail addy'.
Usage: email [new_email_address]
Changing
your ICQ password | "password"
The "password" command is used to change your real ICQ password.
Note: This will change your REAL account password. You will have to update
your password in the configuration file manually (in case you dont have SECURE
on).
Usage: password new_password
Logging configuration
| "log"
The "log" command allows the activation of either Global logging
or logging on a specific slave.
The data logged is outgoing and incoming messages to/from a certain
slave. A different log file
is created for each slave being logged, and the results are readable
using the "hist" command
or just by editing any of the generated files in your YSM directory.
As stated before in the previous
subsection called "The Configuration File", Global logging
is activated by default.
Global logging can be enabled/disabled by using either "ON"
or "OFF" as arguments.
For enabling/disabling logging on a specific slave, you must supply
a slave nickname to the log command.
If no arguments
are supplied, the current settings are shown.
Usage: log ON|OFF
or log [SLAVE_NICK]
Auto AFK configuration
| "afkset"
The "afkset" command can be used for enabling/disabling the Automatic
AFK mode and also
for setting the amount of minutes to wait without any keyboard
input before entering into the
Automatic AFK mode.
The Auto-AFK mode can be enabled/disabled using either "ON"
or "OFF" as arguments.
For setting a new amount of minutes for Auto-AFK, use a number
as argument.
If no arguments
are supplied, the current settings are shown.
Usage: afkset ON|OFF
or afkset [amount_of_minutes]
Beeping | "beep"
The "beep" command is used to enable or disable 'beeping' on incoming
messages.
Beeping can be enabled/disabled by using either "ON" or
"OFF" as arguments.
If no arguments are supplied, the current beep setting is shown.
Usage: beep [ON|OFF]