From 48540940b6c28bb4378abfeb500ec45a625b37b6 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Tue, 15 May 2012 10:38:20 +0000 Subject: initial commit git-svn-id: http://svn.miranda-ng.org/main/trunk@2 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/Yahoo/libyahoo2/Docs/AUTHORS | 10 + protocols/Yahoo/libyahoo2/Docs/COPYING | 340 +++++++++++++++++++++++ protocols/Yahoo/libyahoo2/Docs/ChangeLog | 280 +++++++++++++++++++ protocols/Yahoo/libyahoo2/Docs/NEWS | 88 ++++++ protocols/Yahoo/libyahoo2/Docs/README | 442 ++++++++++++++++++++++++++++++ protocols/Yahoo/libyahoo2/Docs/TODO | 8 + protocols/Yahoo/libyahoo2/Docs/ymsg-9.txt | 326 ++++++++++++++++++++++ 7 files changed, 1494 insertions(+) create mode 100644 protocols/Yahoo/libyahoo2/Docs/AUTHORS create mode 100644 protocols/Yahoo/libyahoo2/Docs/COPYING create mode 100644 protocols/Yahoo/libyahoo2/Docs/ChangeLog create mode 100644 protocols/Yahoo/libyahoo2/Docs/NEWS create mode 100644 protocols/Yahoo/libyahoo2/Docs/README create mode 100644 protocols/Yahoo/libyahoo2/Docs/TODO create mode 100644 protocols/Yahoo/libyahoo2/Docs/ymsg-9.txt (limited to 'protocols/Yahoo/libyahoo2/Docs') diff --git a/protocols/Yahoo/libyahoo2/Docs/AUTHORS b/protocols/Yahoo/libyahoo2/Docs/AUTHORS new file mode 100644 index 0000000000..2cc592900c --- /dev/null +++ b/protocols/Yahoo/libyahoo2/Docs/AUTHORS @@ -0,0 +1,10 @@ +libyahoo2: library for Yahoo! Messenger new protocol + +Philip S Tellis Maintainer +Steve McAndrewSmith Code cleanups +Michaël Kamp Webcam Support +Wayne Parrott Yahoo Chat +Doug Davis Various Patches +Konstantin Klyagin Yahoo Search + +libyahoo2 is derivative of gaim: http://gaim.sourceforge.net/ diff --git a/protocols/Yahoo/libyahoo2/Docs/COPYING b/protocols/Yahoo/libyahoo2/Docs/COPYING new file mode 100644 index 0000000000..fbdd65f6f8 --- /dev/null +++ b/protocols/Yahoo/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. + + + Copyright (C) + + 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. + + , 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/libyahoo2/Docs/ChangeLog b/protocols/Yahoo/libyahoo2/Docs/ChangeLog new file mode 100644 index 0000000000..ecf16131c5 --- /dev/null +++ b/protocols/Yahoo/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/libyahoo2/Docs/NEWS b/protocols/Yahoo/libyahoo2/Docs/NEWS new file mode 100644 index 0000000000..e4021883a1 --- /dev/null +++ b/protocols/Yahoo/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/libyahoo2/Docs/README b/protocols/Yahoo/libyahoo2/Docs/README new file mode 100644 index 0000000000..281de5c7c3 --- /dev/null +++ b/protocols/Yahoo/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 +#include + + +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 +copyright (C) 1998-1999, Mark Spencer + 1998-1999, Adam Fritzler + 1998-2002, Rob Flynn + 2000-2002, Eric Warmenhoven + 2001-2002, Brian Macke + 2001, Anand Biligiri S + 2001, Valdis Kletnieks + 2002, Sean Egan + 2002, Toby Gray + +This library also uses code from other libraries, namely: + Portions from libfaim copyright 1998, 1999 Adam Fritzler + + Portions of Sylpheed copyright 2000-2002 Hiroyuki Yamamoto + + + +* 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/libyahoo2/Docs/TODO b/protocols/Yahoo/libyahoo2/Docs/TODO new file mode 100644 index 0000000000..f005ec9bf2 --- /dev/null +++ b/protocols/Yahoo/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/libyahoo2/Docs/ymsg-9.txt b/protocols/Yahoo/libyahoo2/Docs/ymsg-9.txt new file mode 100644 index 0000000000..d017013d7d --- /dev/null +++ b/protocols/Yahoo/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: + 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! + +----------------------------------------------------------------------- + -- cgit v1.2.3