summaryrefslogtreecommitdiff
path: root/protocols/Yahoo/src/libyahoo2/Docs
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Yahoo/src/libyahoo2/Docs')
-rw-r--r--protocols/Yahoo/src/libyahoo2/Docs/AUTHORS10
-rw-r--r--protocols/Yahoo/src/libyahoo2/Docs/COPYING340
-rw-r--r--protocols/Yahoo/src/libyahoo2/Docs/ChangeLog280
-rw-r--r--protocols/Yahoo/src/libyahoo2/Docs/NEWS88
-rw-r--r--protocols/Yahoo/src/libyahoo2/Docs/README442
-rw-r--r--protocols/Yahoo/src/libyahoo2/Docs/TODO8
-rw-r--r--protocols/Yahoo/src/libyahoo2/Docs/ymsg-9.txt326
7 files changed, 1494 insertions, 0 deletions
diff --git a/protocols/Yahoo/src/libyahoo2/Docs/AUTHORS b/protocols/Yahoo/src/libyahoo2/Docs/AUTHORS
new file mode 100644
index 0000000000..2cc592900c
--- /dev/null
+++ b/protocols/Yahoo/src/libyahoo2/Docs/AUTHORS
@@ -0,0 +1,10 @@
+libyahoo2: library for Yahoo! Messenger new protocol
+
+Philip S Tellis <philip . tellis AT gmx . net> Maintainer
+Steve McAndrewSmith <steve AT finalge . org> Code cleanups
+Michaël Kamp <miksun AT users . sourceforge . net> Webcam Support
+Wayne Parrott <wayne_p AT pacific . net . au> Yahoo Chat
+Doug Davis <dougd AT airmail . net> Various Patches
+Konstantin Klyagin <konst AT konst . org. ua> Yahoo Search
+
+libyahoo2 is derivative of gaim: http://gaim.sourceforge.net/
diff --git a/protocols/Yahoo/src/libyahoo2/Docs/COPYING b/protocols/Yahoo/src/libyahoo2/Docs/COPYING
new file mode 100644
index 0000000000..fbdd65f6f8
--- /dev/null
+++ b/protocols/Yahoo/src/libyahoo2/Docs/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/protocols/Yahoo/src/libyahoo2/Docs/ChangeLog b/protocols/Yahoo/src/libyahoo2/Docs/ChangeLog
new file mode 100644
index 0000000000..ecf16131c5
--- /dev/null
+++ b/protocols/Yahoo/src/libyahoo2/Docs/ChangeLog
@@ -0,0 +1,280 @@
+* Fri Jan 16 2003 Alan Humpherys
+- remove_handler also takes client_id
+
+* Wed Jan 14 2003 Doug Davis
+- fix auth
+
+* Mon Dec 29 2003 Philip Tellis 0.7.3
+- up version number
+
+* Thu Dec 25 2003 Philip Tellis
+- asynchronous writes as well (might break file send)
+- better support for webcam broadcast
+- webcam images sent in chunks rather than as a single image
+- check for EAGAIN on send, defer if it is returned
+- add handler returns a tag, which is passed to remove handler to remove it
+- api has changed
+
+* Wed Dec 10 2003 Philip Tellis
+- initialise some unintialised variables
+
+* Tue Dec 9 2003 Philip Tellis
+- Yahoo Search - by Konstantin Klyagin - centericq
+
+* Tue Dec 9 2003 Philip Tellis
+- Typing notification fix from Gena01
+- Don't send VERIFY as first packet, since we don't know what do
+do if it fails anyway.
+TODO revert when we figure this out
+
+* Wed Oct 22 2003 Philip Tellis
+- Identify failed login because of incorrect username
+
+* Wed Oct 8 2003 Philip Tellis
+- Fix bug with double processing of format string in error logging
+- log_level no longer global, use yahoo_get_log_level() instead (was
+only used internally)
+
+* Tue Sep 30 2003 Doug Davis
+- chat room logout and error code
+
+* Tue Sep 30 2003 Philip
+- fix for auth to work with big endian machines too
+
+* Mon Sep 29 2003 Philip
+- attribute new auth to Cerulean studios (which is where gaim got it from)
+
+* Sun Sep 28 2003 Philip 0.7.2-2
+- made yahoo_init do what it did before, and renamed the new yahoo_init
+to yahoo_init_with_attributes. This should help not break old code.
+
+* Sun Sep 28 2003 Philip
+- changed g_malloc0 to malloc - thanks to Pixador
+
+* Sun Sep 28 2003 Philip 0.7.2
+- Auth fixed by Sean Egan (gaim).
+
+* Sat Sep 27 2003 Philip
+- Added more fallback ports
+- Fix crash in process_auth
+
+* Wed Sep 24 2003 Philip
+- Messenger host name changed to scs.msg.yahoo.com
+
+* Mon Sep 22 2003 Philip
+- Forgot a strdup
+
+* Sat Sep 20 2003 Philip
+- Support protocol 0x0b
+
+* Sat Sep 20 2003 Philip
+- Formatting fixes and yahoo_list memory management fixes
+
+* Sat Sep 20 2003 Philip
+- No more extern vars (almost)
+- yahoo_init now takes optional key/value pairs to set server settings
+see the README or yahoo2.h for full details
+- These variables no longer need to be exported from the sourcefile that
+uses the library
+
+* Fri Sep 12 2003 Philip 0.7.1
+- configure checks for socket library and won't build sample client
+if not found
+
+* Thu Sep 11 2003 Philip
+- Up version number to 0x0a so that we don't get blocked
+
+* Thu Jun 5 2003 Philip
+- fix a bunch of memory leaks
+
+* Sun May 25 2003 Philip
+- Add option to disable building sample client
+
+* Sat May 24 2003 Philip 0.7.0-1
+- Fix configure error because of old missing script in distribution
+
+* Mon May 19 2003 Philip (version 0.7.0)
+- Update README
+- release 0.7.0
+
+* Tue May 6 2003 Mik
+- fixes for webcam uploading
+- extra callback for closing connection
+
+* Thu May 1 2003 Philip
+- allow closing of webcam connections
+- more reliable finding of webcam connections
+
+* Thu May 1 2003 Philip
+- send who's images along with webcam image
+
+* Thu May 1 2003 Philip
+- get idle time from server
+- changes to webcam support to not require the user to worry about keys and
+servers
+
+* Sun Apr 20 2003 Philip
+- fixes for multiple connects and bugs introduced when adding async connects
+
+* Sat Apr 19 2003 Philip
+- Add asynchronous connects
+- Each `id' represents a single login session and everything to do with it
+- add_handler and yahoo_(read|write)_ready take a void * data argument
+- possibly introduce many bugs :D
+
+* Thu Apr 10 2003 Wayne
+- Added callback for the list of chatrooms
+
+* Thu Mar 29 2003 Wayne
+- Added basic support for pulling down the list of chatrooms
+
+* Mon Mar 24 2003 Mik
+- Seperate webcam struct to public and private data
+- Rename webcam struct to yahoo_webcam
+
+* Fri Mar 21 2003 Philip
+- Don't dereference yd after it has been freed
+
+* Fri Mar 21 2003 Mik
+- Clean up webcam data when yahoo data is cleaned up
+- Added connection type to webcam
+- Removed static for callbacks in sample_client
+
+* Wed Mar 19 2003 Mik
+- Added perliminary webcam upload support
+- Added descriptions for the webcam functions
+
+* Tue Mar 18 2003 Wayne Parrott
+- Added preliminary yahoo chat support
+
+* Sun Mar 16 2003 Philip
+- Fixed double deletion problem with yab
+- Fixed memory leak with non-pager connections
+
+* Fri Mar 14 2003 Philip
+- Announce login success earlier
+
+* Thu Mar 13 2003 Mik
+- Add preliminary webcam support
+
+* Thu Mar 6 2003 Philip
+- Remove requests for unnecessary data in addressbook code
+
+* Tue Mar 4 2003 Philip
+- Fix read past end of string in yahoo_getyab
+
+* Wed Feb 19 2003 Philip (version 0.6.3)
+- Make dist depend on libyahoo2.spec and libyahoo2.pc
+- Change version number to 0.6.3
+
+* Thu Feb 13 2003 Philip
+- added check for null connection when reading from socket.
+thanks to Alan Humpherys
+
+* Thu Feb 6 2003 Philip
+- renamed yahoo_add_yab to yahoo_set_yab
+
+* Wed Feb 5 2003 Philip
+- Support for modifying an address book entry
+
+* Mon Jan 27 2003 Philip
+- Support for adding address book entry on the server
+
+* Thu Jan 24 2003 Philip
+- Download address book from server and fill in real_name field
+of yahoo_buddy
+
+* Tue Jan 21 2003 Philip
+- Added CHAT service codes from yach
+- Fixed the problem with Offline UTF-8 encoded messages
+it no longer sends an extra bell
+- Implemented group renaming
+
+* Sat Jan 18 2003 Philip
+- utf-8 encoding/decoding functions are in yahoo_util
+- detect whether it is utf-8 or not from utf-8 flag in message
+
+* Wed Jan 15 2003 Philip
+- added utf-8 decode to conference messages too. I need to move this into
+a separate function
+
+* Tue Jan 14 2003 Philip
+- changed the accent character hack to proper UTF-8 decode supplied by Alan
+
+* Mon Jan 13 2003 Philip Tellis
+- sample client handles accented characters correctly.
+
+* Thu Dec 18 2002 Philip Tellis
+- sample client now handles sending of bell with ^G and sounding of bell
+when it receives it
+
+* Tue Dec 10 2002 Philip Tellis (version 0.6.2)
+- Added some prototypes for snprintf, strdup and vsnprintf (when compiling
+with -ansi -pedantic and without glib
+- Updated version number for release
+
+* Mon Dec 9 2002 Philip Tellis
+- Changed u_char to unsigned char
+- Fixed yahoo_get16 and yahoo_get32 to work with big endian systems also
+
+* Tue Nov 19 2002 Philip Tellis
+- Added code to process a voice chat invite. Doesn't do anything.
+
+* Mon Nov 18 2002 Philip Tellis
+- Multiple offline messages are now received correctly
+- Memory leaks cleaned up
+- Check for glib-2 as well as glib-1
+- dropped port 21 from port scan
+- Added a spec file for RPM
+
+* Sat Nov 16 2002 Rodney Dawes
+- Make libyahoo2 versioned
+- Add a pkgconfig file
+- Install headers in $(pkgincludedir)
+- Make yahoo sample client a noinst program
+- Require autoconf >= 2.50
+- Cleanups in configure.ac
+
+* Wed Nov 13 2002 Philip Tellis
+- libyahoo2 now automatically scans ports 21, 23, 25 and 80 if it cannot
+connect on the default port.
+
+* Wed Nov 06 2002 Philip Tellis
+- added protocol documentation
+
+* Tue Nov 05 2002 Philip Tellis
+- compiles with -ansi and -pedantic
+
+* Sat Oct 19 2002 Philip Tellis
+- no longer strip colour/style codes from messages
+- added colour entry for any colour to yahoo2_types.h (Nelson Ferreira)
+
+
+* Fri Oct 18 2002 Philip Tellis (version 0.6.1)
+- fixed segfault on some weird notification packets
+- fixes for conference add invite
+- identity support for conferences
+
+- sample console client can handle conferencing
+
+* Wed Oct 9 2002 Philip Tellis (version 0.6)
+- Removed glib dependencies. Will use glib only if available
+- Configure time option --with-struct-callbacks to use a callback struct
+instead of callback functions (see yahoo2_callbacks.h and the README)
+- Code cleanups by Steve McAndrewSmith
+- Get identities from server
+- Activate/Deactivate identities
+- Use identities when sending messages
+- Fixed buffer overflow in key/value pair reading
+
+- sample console client no longer requires gtk!
+
+* Mon Jul 22 2002 Philip Tellis (version 0.5)
+- Added basic documentation to README
+- Several minor code fixes and cleanups
+
+* Sat Jul 20 2002 Philip Tellis (version 0.5.cvs)
+This is an initial public release as a separate library
+I'll put a feature list in later.
+0.5 is just a random version number, I figure it's got half the features
+of where it should be when complete.
diff --git a/protocols/Yahoo/src/libyahoo2/Docs/NEWS b/protocols/Yahoo/src/libyahoo2/Docs/NEWS
new file mode 100644
index 0000000000..e4021883a1
--- /dev/null
+++ b/protocols/Yahoo/src/libyahoo2/Docs/NEWS
@@ -0,0 +1,88 @@
+* 29-Dec-2003
+
+Releasing 0.7.3 with some new features thanks to Konst, Doug and Gena
+
+* 9-Dec-2003
+
+Well, we now have contributions from the CenterICQ and Miranda IM teams.
+Good going methinks.
+
+* 28-Sep-2003
+
+Releasing 0.7.2 with the new auth code. Fixed by gaim.
+
+* 12-Sep-2003
+
+Releasing 0.7.1 which has a newer protocol version number. This should hold
+for a while.
+
+* 19-May-2003
+
+Released 0.7. It has webcam support, yahoo chat support and a new connection
+handling system. Asynchronous connects are also possible.
+
+* 18-Mar-2003
+
+Michaël Kamp has added Webcam support, and Wayne Parrott has started on Yahoo
+Chat support. Things are starting to move.
+
+Welcome to these two new members of the team.
+
+
+* 19-Feb-2003
+
+Released 0.6.3 - no real changes from 11th Feb.
+
+
+* 11-Feb-2003
+
+Added address book support. Rodney Dawes helped make the library
+versioned. I've also added the htdocs to CVS to make updates easier.
+0.6.2 should come out Real Soon Now.
+
+The mailing list has been alive for a while. There's been some good
+discussions.
+
+Also added documentation for the YMSG-9 protocol and the Addressbook
+structure.
+
+libyahoo2 is used in Ayttm - a fork of everybuddy.
+
+There have been requests for a Java version/wrapper. Any volunteers?
+
+
+* 18-Oct-2002
+
+This is a service release, mainly to fix the segfault on certain error
+notification packets.
+
+
+* 9-Oct-2002
+
+0.6 has been released. Also just found out that libyahoo2 is also used in
+GNUYahoo
+
+
+* 28-Sep-2002
+
+Well, I added documentation some time ago. It's in the README file. I
+suppose people have found it.
+
+The good news now is that libyahoo2 is being used in many clients, the
+bad news is that there's very little discussion on the mailing list.
+
+From what has been reported to me, and what I've heard, it seems that
+libyahoo2 is being used in Everybuddy, Fire, Proteus, Kopete, centericq.
+
+
+Hope to come out with 0.6 Real Soon Now.
+
+
+* 20-Jul-2002
+
+Umm, ok, it's been in everybuddy for a few months, and now I'm releasing
+it as a separate project.
+
+libyahoo2 has its own life now.
+
+Philip
diff --git a/protocols/Yahoo/src/libyahoo2/Docs/README b/protocols/Yahoo/src/libyahoo2/Docs/README
new file mode 100644
index 0000000000..281de5c7c3
--- /dev/null
+++ b/protocols/Yahoo/src/libyahoo2/Docs/README
@@ -0,0 +1,442 @@
+README for libyahoo2
+====================
+
+* Using the library
+
+Ok, here's a short, quick intro on how to use the library.
+Full documentation will come later.
+
+First include the two headers.
+
+#include <libyahoo2/yahoo2.h>
+#include <libyahoo2/yahoo2_callbacks.h>
+
+
+yahoo2.h contains functions that you can call. The data structures used
+are defined in yahoo2_types.h, which is included by yahoo2.h
+
+yahoo2_callbacks.h contains prototypes for functions that you *must*
+implement. *All* these functions must be implemented by your code. You
+can choose at configure time whether these are implemented as callback
+functions or as a callback structure.
+
+If compiled as a callback structure, you must call yahoo_register_callbacks
+before doing anything else.
+
+What each function is supposed to do and return is documented in
+yahoo2_callbacks.h
+
+
+
+Ok, assuming you've implemented all those functions to do what they're
+supposed to do, this is the process flow:
+
+1. Login
+
+Before logging in, you must initialise the connection by calling yahoo_init
+and passing the username and password of the account. yahoo_init returns
+a connection id that will be used to identify this connection for all other
+calls.
+
+You may use yahoo_init_with_attributes if you need to set any server settings.
+
+int yahoo_init(const char *username, const char *password);
+int yahoo_init_with_attributes(const char *username, const char *password, ...);
+
+The optional parameters to init are key/value pairs that specify server
+settings to use. This list must be NULL terminated - even if the list is
+empty. If a parameter isn't set, a default value will be used. Parameter
+keys are strings, parameter values are either strings or ints, depending on
+the key. Values passed in are copied, so you can use const/auto/static/
+pointers/whatever you want. Parameters are:
+
+ NAME TYPE DEFAULT DESCRIPTION
+ ------------------- ------- --------------------------- --------------
+ pager_host char * scs.msg.yahoo.com
+
+ pager_port int 5050
+
+ filetransfer_host char * filetransfer.msg.yahoo.com
+
+ filetransfer_port int 80
+
+ webcam_host char * webcam.yahoo.com
+
+ webcam_port int 5100
+
+ webcam_description char * "" Webcam description
+
+ local_host char * "" local IP address
+ regardless of whether
+ you're behind a
+ firewall or not
+
+ conn_type int Y_WCM_DSL see yahoo2_types.h
+
+
+You should set at least local_host if you intend to use webcams
+yahoo_init uses default values for all of the above.
+
+Remember to close the connection by calling yahoo_close when you no longer
+need it. This will free all resources allocated to the connection.
+
+void yahoo_close(int id);
+
+After initialising, you may call yahoo_login, with the id and the initial
+login status.
+
+void yahoo_login(int id, int initial);
+
+The initial status is one of enum yahoo_status (NOTE, only INVISIBLE and
+ONLINE are known to work at all times).
+
+When the login procedure is complete, the library will call
+ext_yahoo_login_response with a status code. See yahoo2_types for an
+enumeration of these codes.
+
+The buddy list and cookies will not be available at the time when
+ext_yahoo_login_response is called. You should wait for ext_yahoo_got_buddies
+and ext_yahoo_got_cookies.
+
+
+2. Buddies and Addressbook
+
+When the library receives the buddy list from the server, it will call
+ext_yahoo_got_buddies with the buddy list as a parameter. The library
+will call ext_yahoo_got_ignore when it receives the ignore list.
+
+- To get the buddy list at any other time, make a call to yahoo_get_buddylist,
+and use the return value of that call.
+
+- Similarly, for the ignorelist, call yahoo_get_ignorelist.
+
+These lists will be returned from the library's cache. To force a reload
+from the server, make a call to yahoo_get_list.
+
+Buddy nicknames and other contact information is stored in your yahoo address
+book. To retrieve this information, call yahoo_get_yab. call yahoo_set_yab
+to create or modify an addressbook entry. Call these functions only after
+ext_yahoo_got_cookies has been called.
+
+- To refresh the status of all buddies, make a call to yahoo_refresh.
+
+- To add a buddy, call yahoo_add_buddy:
+void yahoo_add_buddy(id, char *who, char *group);
+
+You can add a buddy to multiple groups by calling this function once for
+each group.
+
+- To remove a buddy, call yahoo_remove_buddy:
+void yahoo_remove_buddy(id, char *who, char *group);
+
+Remove buddy removes the buddy from the specified group. To completely
+remove a buddy, call this function for all groups that the buddy is in.
+
+- If a buddy adds you, and you do nothing, that buddy is accpeted (that's the
+way the protocol works). If you want to reject the buddy, make a call to
+yahoo_reject_buddy:
+
+void yahoo_reject_buddy(id, char * who, char *msg);
+
+where msg is the rejection message.
+
+- To change a buddy's group, call yahoo_change_buddy_group:
+void yahoo_change_buddy_group(id, char * who, char *old_group, char *new_group);
+
+- To ignore/unignore a buddy, call yahoo_ignore_buddy:
+void yahoo_ignore_buddy(id, char *who, int unignore);
+
+If unignore is TRUE, the buddy is unignored, if it is FALSE, the buddy is
+ignored.
+
+- You can also rename a group with:
+void yahoo_group_rename(id, char *old_group, char *new_group);
+
+
+
+
+3. Sending an IM
+
+To send an IM, make a call to yahoo_send_im
+
+void yahoo_send_im(int id, char * from, char *who, char *what, int utf8);
+
+id is the id that the connection is identified with, who is who you want
+to message, what is the message to be sent.
+
+The parameter from is the identity that you want to use to send the message.
+If this is NULL, your default identity will be used.
+
+utf8 is a boolean field that specifies whether the message you're sending
+has been encoded in utf8 or not. libyahoo2 will not do the encoding
+for you - you have to do it yourself.
+
+You may use the utility functions y_str_to_utf8 and y_utf8_to_str in
+yahoo_util to do this encoding. You must free the pointers returned by
+these functions.
+
+UTF8 encoding may also be used in messages received. It is not sent or
+received for invitations/rejection messages.
+
+You can also send typing notifications with yahoo_send_typing.
+
+
+4. Changing your status
+
+To change your status on the server, call yahoo_set_away.
+
+void yahoo_set_away(id, enum yahoo_status status, char *msg, int away);
+
+id is the identifying id, status is your new status.
+msg is a custom status message in case status == YAHOO_STATUS_CUSTOM
+and away is a flag that says whether the custom message is an away message
+or just a regular signature (this affects the kind of icon against your
+name in the official Yahoo Messenger client).
+
+
+5. Conferencing
+
+To start a conference, call yahoo_conference_invite with a list of initial
+members, the room name, and a welcome message.
+
+To add more people to the conference after it has started, call
+yahoo_conference_addinvite.
+
+If someone adds you to the conference, you can either accept by calling
+yahoo_conference_logon, or decline by calling yahoo_conference_decline
+
+You can log off from the conference by calling yahoo_conference_logoff.
+
+Send a message by calling yahoo_conference_message.
+
+The parameter from is the identity that you want to use to send the message.
+If this is NULL, your default identity will be used.
+
+NOTE: Except for yahoo_conference_addinvite, all conference functions take
+the list of members as an argument.
+
+Have a look at yahoo2_callbacks.h for conference callbacks. Beware that
+there's a chance you could get a conf_userjoin even before you get an
+invitation to that conference.
+
+
+6. File Transfer
+
+To send a file, call yahoo_send_file(id, who, msg, name, size).
+
+This will set up the initial file send connection and return a unix file
+descriptor that you must write to. You then write the file's contents to
+this fd.
+
+Receiving a file is similar. You will receive a call to ext_yahoo_got_file
+with the file's url as one of the parameters. When you are ready to start
+downloading the file, make a call to yahoo_get_url_handle:
+
+ fd = yahoo_get_url_handle(id, url, &fname, &fsize);
+
+fname and fsize are used to store the file's name and size
+
+Yahoo's file transfer is implemented using HTTP. It can either be peer
+to peer or via the yahoo file transfer servers. The latter is used in
+case a peer to peer connection cannot be set up - for example, in the
+case of a firewall.
+
+libyahoo2 supports both types of file transfer for receiving, but only
+sends files using the yahoo file transfer server.
+
+If anyone's interested in implementing peer to peer file send, this is
+how it happens.
+
+First a PEERTOPEER packet is sent to check if it is possible. This will
+mark the connection between these two hosts as p2p compatible. No further
+PEERTOPEER packets will be sent between these two hosts for the duration
+that the connection is alive.
+
+After the first P2P packet, the initiater will start an HTTP server on
+some port (really any port), and send the url across to the other end.
+
+After this, the first host will always play the part of the server for
+all file transfers. If a transfer is from the server, it uses GET, if
+it is from the client to the server, it uses POST. There is no encoding
+used for POST.
+
+You'll still have to study it a bit, but IMO the major complexity is in
+putting a http server in the lib, and whether we want to do that.
+
+
+7. Webcam
+
+To make a request for a webcam feed, call yahoo_webcam_get_feed with the
+user's yahoo id. You call this function in response to someone's webcam
+invitation as well.
+
+void yahoo_webcam_get_feed(int id, const char *who);
+
+The response may take a while as there's a lot of work done from the time
+you make a request till the time you start receiving a feed. There is
+no feedback from the library during this time. The function returns
+immediately.
+
+To close an open feed, simply call yahoo_webcam_close_feed
+
+void yahoo_webcam_close_feed(int id, const char *who);
+
+NOTE: it is possible to have two open webcam feeds with a single user
+if you open a second without closing the first. Results are unpredictable
+if you call close on a non-unique id/who combination.
+
+Webcam broadcast has not been fully tested.
+
+To invite a user to view your webcam, call yahoo_webcam_invite with the
+user's yahoo_id
+
+void yahoo_webcam_invite(int id, const char *who);
+
+To close this user's connection, call yahoo_webcam_close_feed. To
+accept/reject a request from a user to view your webcam, call
+yahoo_webcam_accept_viewer:
+
+void yahoo_webcam_accept_viewer(int id, const char *who, int accept);
+
+accept may be 1 or 0.
+
+Consult yahoo2_callbacks for the callbacks that are called on webcam
+events.
+
+You will require to be able to decode jpeg2000 images to view the webcam
+feed. You could use a library like GraphicsMagick (BSD Licence) or jasper
+(possibly non-Free) to do this.
+
+8. Yahoo Chat
+
+To retrieve a list of yahoo chatrooms, call yahoo_get_chatrooms. The
+response callback will return the xml for the chatrooms. You must parse
+this yourself.
+
+To log in to a chat room, call yahoo_chat_logon, and to log off, call
+yahoo_chat_logoff. To send a chat message, call yahoo_chat_message.
+
+Chatting is similar to conferencing. Consult yahoo2_callbacks.h for the
+list of chat callbacks.
+
+
+9. Callbacks
+
+The library may request you to register io handlers using ext_yahoo_add_handler.
+Whenever an input condition occurs, you must call one of the callback functions.
+For a read condition, call yahoo_read_ready, for a write condition, call
+yahoo_write_ready.
+
+ext_yahoo_connect_async is an asynchronous connect call. It will register a
+callback function that must be called when the connect completes. This
+callback is of type yahoo_connect_callback. Consult yahoo2_callbacks.h for
+full details on what your async connect should return.
+
+You must also call yahoo_keepalive at regular intervals (10 minutes?) to keep
+the connection alive.
+
+
+10. Identities
+
+libyahoo2 will now get your identities from the server (if you don't know
+what that is, then you aren't using it). Use yahoo_get_identities to get
+your list of identities. libyahoo2 will also call ext_got_identities when
+it first gets the list of identities.
+
+To activate/deactivate an identity, call yahoo_set_identity_status:
+ yahoo_set_identity_status(id, char * identity, int active);
+
+If active is non-zero, activate the identity, else deactivate it.
+
+If you try to activate/deactivate an identity that isn't yours, you'll
+get a call back to ext_yahoo_error with a custom error message. This
+message is from the yahoo servers. Don't complain to me about it. I
+know it sucks that we can't do translation of these strings.
+
+
+11. Search
+
+To search for contacts, use the two functions:
+
+ yahoo_search(id, type, text, gender, agerange, photo, yahoo_only);
+and
+ yahoo_search_again(id, int start);
+
+The first is used for a first time search. Check yahoo2_types.h for
+valid values for each of the parameters. text is a text string to
+search for.
+
+The search results are returned through ext_yahoo_got_search_result.
+
+Results are limited to 20 per query, so if you want to continue the
+search, call yahoo_search_again to get 20 more results. You may
+specify the start value, or use -1 to just get the next 20 results.
+
+
+12. Other functions
+
+You can call yahoo_get_cookie to get the cookies for your connection. I
+think these can be used when starting a browser to get information from
+the yahoo servers. See the comments in yahoo2.h for more information.
+
+You can also call yahoo_urldecode and yahoo_urlencode utility functions
+to url decode/encode a given string. This will be useful for getting the
+filename from a url in the file receive code.
+
+
+* Platforms
+
+libyahoo2 is known to compile on:
+ - Debian 2.2 (linux 2.4) i386, Alpha, PPC RS/6000 and Sparc Ultra60
+ - Redhat 6.0, 7.1 and 7.3 (linux 2.2 and 2.4)
+ - MacOS X 10.1 PPC - G4
+ - FreeBSD 4.6-Stable
+ - Sun Solaris (8)
+
+Thanks to Sourceforge's compile farms for letting me test it there
+
+* Copyright
+
+libyahoo2 is Copyright (C) 2002-2004 Philip S Tellis
+Portions of this code was taken and adapted from the yahoo module for
+gaim released under the GNU GPL. This code is also released under the
+GNU GPL.
+
+This code is derivitive of Gaim <http://gaim.sourceforge.net>
+copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
+ 1998-1999, Adam Fritzler <afritz@marko.net>
+ 1998-2002, Rob Flynn <rob@marko.net>
+ 2000-2002, Eric Warmenhoven <eric@warmenhoven.org>
+ 2001-2002, Brian Macke <macke@strangelove.net>
+ 2001, Anand Biligiri S <abiligiri@users.sf.net>
+ 2001, Valdis Kletnieks
+ 2002, Sean Egan <bj91704@binghamton.edu>
+ 2002, Toby Gray <toby.gray@ntlworld.com>
+
+This library also uses code from other libraries, namely:
+ Portions from libfaim copyright 1998, 1999 Adam Fritzler
+ <afritz@auk.cx>
+ Portions of Sylpheed copyright 2000-2002 Hiroyuki Yamamoto
+ <hiro-y@kcn.ne.jp>
+
+
+* Licence
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+You should have received a copy of the GNU General Public License
+along with this program in the file named Copying; if not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+MA 02111-1307 USA
+
+
+* Warranty
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
diff --git a/protocols/Yahoo/src/libyahoo2/Docs/TODO b/protocols/Yahoo/src/libyahoo2/Docs/TODO
new file mode 100644
index 0000000000..f005ec9bf2
--- /dev/null
+++ b/protocols/Yahoo/src/libyahoo2/Docs/TODO
@@ -0,0 +1,8 @@
+Changing user profiles
+Voice Chat
+Video Chat
+
+
+Bugs:
+Check which pointers are freed by the lib and which must be freed by the
+client, and document these.
diff --git a/protocols/Yahoo/src/libyahoo2/Docs/ymsg-9.txt b/protocols/Yahoo/src/libyahoo2/Docs/ymsg-9.txt
new file mode 100644
index 0000000000..d017013d7d
--- /dev/null
+++ b/protocols/Yahoo/src/libyahoo2/Docs/ymsg-9.txt
@@ -0,0 +1,326 @@
+Yahoo Messenger Protocol v 9
+----------------------------
+
+The Yahoo Messenger Protocol is an application layer protocol running most
+of the time over TCP, but in some cases over HTTP as well. Throughout
+this document, we will speak about the YMSG packets, after stripping out
+any other protocol data, but will mention this other data if it is of
+relevance.
+
+This document is incomplete. For anything not mentioned here, refer to the
+source of libyahoo2.
+
+
+1. The YMSG packet structure
+
+The YMSG packet structure is as follows:
+
+(each byte is represented by 5 spaces in the following diagram,
+including the | at the end)
+
+ <------- 4B -------><------- 4B -------><---2B--->
+ +-------------------+-------------------+---------+
+ | Y M S G | version | pkt_len |
+ +---------+---------+---------+---------+---------+
+ | service | status | session_id |
+ +---------+-------------------+-------------------+
+ | |
+ : D A T A :
+ | 0 - 65535* |
+ +-------------------------------------------------+
+
+
+* 65535 is the theoretical limit, since the length field is two bytes
+long. Practically though, the data section does not exceed about 1000
+bytes.
+
+All numeric fields are stored in network byte order. i.e. Most
+significant byte first.
+
+YMSG - The first four bytes of all packets are always YMSG - the
+ protocol name.
+
+version - The next four bytes are for the protocol version number.
+ For version 9, these are 0x09 0x00 0x00 0x00
+ NOTE: The last three bytes of this may just be padding bytes.
+
+pkt_len - A two byte value, in network byte order, stating how many bytes
+ are in the _data_ section of the packet. In practice, this
+ value does not exceed about 1000.
+
+service - This is an opcode that tells the client/server what kind of
+ service is requested/being responded to. There are 45 known
+ services. See the services section of this document for a
+ full listing.
+
+status - In case of a response from the server, indicates the status
+ of the request (success/failure/etc.). For a request, it is 0
+ in most cases, except for packets that set the user's status
+ (set status, typing notify, etc.)
+
+session - The session id is used primarily when connecting through a HTTP
+id proxy. It is set in all cases, but has no effect in a direct
+ connection. When the client sends the first packet, it is 0,
+ the server responds with a session id that is used by the client
+ and the server in all further packets. The server may change
+ the session id, in which case the client must use the new
+ session id henceforth.
+
+DATA - The data section is pkt_len bytes long and consists of a series
+ of key/value pairs. All keys are numeric strings. The packet
+ contains their numeric values in the ASCII character set. e.g.
+ 1 == 0x31, 21 == 0x32 0x31
+
+ The maximum number of digits in a key is unknown, although keys
+ of up to three digits have been seen.
+
+ Every key and value is terminated by a two byte sequence of
+ 0xc0 0x80. Some keys may have empty values.
+
+ The actual keys sent, and their meanings depend on the service
+ in use.
+
+ e.g. The packet data to send an instant message looks like this:
+
+ 0x30 0xc080 yahoo_id 0xc080 0x31 0xc080 active_id 0xc080 0x35
+ 0xc080 recipient_id 0xc080 0x3134 0xc080 message_text 0xc080
+
+ The 0xc080 byte sequence is a separator. The values 0x30, 0x31,
+ 0x35 and 0x3134 are the keys. Convert them to their ASCII
+ equivalents and you get 0, 1, 5, 14 (0x3134 == 0x31 0x34)
+
+
+2. Services
+
+There are 45 known services at the moment, although more may exist. All
+known services are listed below along with the hex values that they
+correspond to. Any service without a hex value is one more than the
+previous value. i.e. YAHOO_SERVICE_LOGOFF=0x02 and
+YAHOO_SERVICE_ISBACK=0x04.
+
+ YAHOO_SERVICE_LOGON = 0x01
+ YAHOO_SERVICE_LOGOFF
+ YAHOO_SERVICE_ISAWAY
+ YAHOO_SERVICE_ISBACK
+ YAHOO_SERVICE_IDLE = 0x05
+ YAHOO_SERVICE_MESSAGE
+ YAHOO_SERVICE_IDACT
+ YAHOO_SERVICE_IDDEACT
+ YAHOO_SERVICE_MAILSTAT
+ YAHOO_SERVICE_USERSTAT = 0x0a
+ YAHOO_SERVICE_NEWMAIL
+ YAHOO_SERVICE_CHATINVITE
+ YAHOO_SERVICE_CALENDAR
+ YAHOO_SERVICE_NEWPERSONALMAIL
+ YAHOO_SERVICE_NEWCONTACT = 0x0f
+ YAHOO_SERVICE_ADDIDENT = 0x10
+ YAHOO_SERVICE_ADDIGNORE
+ YAHOO_SERVICE_PING
+ YAHOO_SERVICE_GROUPRENAME
+ YAHOO_SERVICE_SYSMESSAGE = 0x14
+ YAHOO_SERVICE_PASSTHROUGH2 = 0x16
+ YAHOO_SERVICE_CONFINVITE = 0x18
+ YAHOO_SERVICE_CONFLOGON
+ YAHOO_SERVICE_CONFDECLINE = 0x1a
+ YAHOO_SERVICE_CONFLOGOFF
+ YAHOO_SERVICE_CONFADDINVITE
+ YAHOO_SERVICE_CONFMSG
+ YAHOO_SERVICE_CHATLOGON
+ YAHOO_SERVICE_CHATLOGOFF = 0x1f
+ YAHOO_SERVICE_CHATMSG = 0x20
+ YAHOO_SERVICE_GAMELOGON = 0x28
+ YAHOO_SERVICE_GAMELOGOFF
+ YAHOO_SERVICE_GAMEMSG = 0x2a
+ YAHOO_SERVICE_FILETRANSFER = 0x46
+ YAHOO_SERVICE_VOICECHAT = 0x4a
+ YAHOO_SERVICE_NOTIFY = 0x4b
+ YAHOO_SERVICE_P2PFILEXFER = 0x4d
+ YAHOO_SERVICE_PEERTOPEER = 0x4f
+ YAHOO_SERVICE_AUTHRESP = 0x54
+ YAHOO_SERVICE_LIST = 0x55
+ YAHOO_SERVICE_AUTH = 0x57
+ YAHOO_SERVICE_ADDBUDDY = 0x83
+ YAHOO_SERVICE_REMBUDDY = 0x84
+ YAHOO_SERVICE_IGNORECONTACT = 0x85
+ YAHOO_SERVICE_REJECTCONTACT = 0x86
+
+Most of the service codes should be self explanatory. Those that aren't
+are listed here:
+
+IDACT/IDDEACT - activate/deactivate an identity
+NOTIFY - typing/game notification
+FILETRASNFER - transfer a file using the yahoo filetransfer server as an
+ intermediate
+P2PFILEXFER - transfer a file between two peers, yahoo server not used
+PEERTOPEER - check if peer to peer connections are possible
+AUTH - Send initial login packet (username), response contains
+ challenge string
+AUTHRESP - Send response to challenge string, or, if received from
+ server, contains reason for login failure
+LOGON/LOGOFF - a buddy logged in/out
+
+
+3. Status codes
+
+The status code is a four byte value. Most status codes are two bytes
+long. The status codes (in decimal except for offline and typing) are:
+
+ YAHOO_STATUS_AVAILABLE = 0
+ YAHOO_STATUS_BRB
+ YAHOO_STATUS_BUSY
+ YAHOO_STATUS_NOTATHOME
+ YAHOO_STATUS_NOTATDESK
+ YAHOO_STATUS_NOTINOFFICE = 5
+ YAHOO_STATUS_ONPHONE
+ YAHOO_STATUS_ONVACATION
+ YAHOO_STATUS_OUTTOLUNCH
+ YAHOO_STATUS_STEPPEDOUT = 9
+ YAHOO_STATUS_INVISIBLE = 12
+ YAHOO_STATUS_CUSTOM = 99
+ YAHOO_STATUS_IDLE = 999
+ YAHOO_STATUS_OFFLINE = 0x5a55aa56
+ YAHOO_STATUS_TYPING = 0x16
+
+You may choose either AVAILABLE or INVISIBLE as your initial login status.
+TYPING is used only when sending a TYPING notification packet.
+
+
+4. Session states
+
+A Yahoo session has two states, Authentication and Messaging.
+
+4.1. Authentication
+
+The session starts in the authentication state. The client sends the username
+to the server. The server responds with a challenge string. The client
+responds to this challenge with two response strings. If authentication is
+successful, the connection goes into the messaging state, else, an error
+response is sent back.
+
+4.2. Messaging state
+
+After successful authentication, the session goes into the messaging state.
+The server sends the buddy list, ignore list, identity list and a list of
+cookies to the client. These might all be sent in a single packet. It then
+sends the list of online buddies along with their status codes. All this is
+sent without the client requesting anything.
+
+At this time, any offline messages are also delivered to the client.
+
+In the messaging state, a client may send/receive messages, join conferences,
+send/receive files, change state, etc.
+
+Messaging state is terminated when the user goes offline by sending a LOGOFF
+packet.
+
+
+5. Requests
+
+5.1. Authentication
+
+The first packet sent from the client is the authentication request
+packet. This consists of the user's yahoo id, or any identity
+corresponding to that yahoo id. The AUTH packet has one key/value pair.
+
+ service: YAHOO_SERVICE_AUTH
+ status: YAHOO_STATUS_AVAILABLE
+
+ 1: yahoo_id
+
+The server responds with a Challenge string. The client then hashes the
+username and password with this challenge string, and sends it back as an
+AUTH_RESP packet.
+
+ service: YAHOO_SERVICE_AUTHRESP
+ status: initial login status
+
+ 0: yahoo_id
+ 6: response_string_1
+ 96: response_string_2
+ 1: active_id
+
+
+5.2. Sending a message
+
+ service: YAHOO_SERVICE_MESSAGE
+ status: 0
+
+ 0: yahoo_id
+ 1: active_id
+ 5: recipient_id
+ 14: message to send
+
+5.3. Send typing start/stop notification
+
+ service: YAHOO_SERVICE_NOTIFY
+ status: YAHOO_STATUS_TYPING
+
+ 4: active_id
+ 5: recipient_id
+ 13: 1 or 0 depending on whether this is a typing start or stop
+ packet
+ 14: <space>
+ 49: TYPING /* The literal string */
+
+5.4. Set status
+
+ service: YAHOO_SERVICE_ISBACK or YAHOO_SERVICE_ISAWAY
+ status: the status to set to
+
+ 10: status_code
+ if custom_status:
+ 19: custom away message
+ 47: 0 or 1 depending on whether it is away or not
+
+
+5.5. Logoff
+
+ service: YAHOO_SERVICE_LOGOFF
+ status: YAHOO_STATUS_AVAILABLE
+
+ no key value pairs
+
+5.6. Keep alive - sent every 20 minutes
+
+ service: YAHOO_SERVICE_PING
+ status: YAHOO_STATUS_AVAILABLE
+
+ no key value pairs
+
+5.7. Add buddy
+
+ service: YAHOO_SERVICE_ADDBUDDY
+ status: YAHOO_STATUS_AVAILABLE
+
+ 1: yahoo_id
+ 7: buddy_to_add
+ 65: group to add to
+
+5.8. Remove buddy
+
+ service: YAHOO_SERVICE_REMBUDDY
+ status: YAHOO_STATUS_AVAILABLE
+
+ 1: yahoo_id
+ 7: buddy_to_remove
+ 65: group to remove from
+
+
+5.9. Reject buddy add
+
+ service: YAHOO_SERVICE_REJECTCONTACT
+ status: YAHOO_STATUS_AVAILABLE
+
+ 1: yahoo_id
+ 7: buddy_to_reject
+ 14: reject message
+
+
+-----------------------------------------------------------------------
+
+What? Is that all?
+
+ Use the source Luke!
+
+-----------------------------------------------------------------------
+