Build against patched libyahoo2
This commit is contained in:
parent
d53b3a5433
commit
eaf1bcd9ee
21 changed files with 14222 additions and 9 deletions
|
@ -165,12 +165,13 @@ if (PROTOBUF_FOUND)
|
|||
message("Skype plugin : no (install dbus-glib-devel)")
|
||||
endif()
|
||||
|
||||
if(YAHOO2_FOUND)
|
||||
# We have our own copy now...
|
||||
# if(YAHOO2_FOUND)
|
||||
message("Libyahoo2 plugin : yes")
|
||||
include_directories(${YAHOO2_INCLUDE_DIR})
|
||||
else()
|
||||
message("Libyahoo2 plugin : no (install libyahoo2-devel)")
|
||||
endif()
|
||||
# include_directories(${YAHOO2_INCLUDE_DIR})
|
||||
# else()
|
||||
# message("Libyahoo2 plugin : no (install libyahoo2-devel)")
|
||||
# endif()
|
||||
|
||||
else()
|
||||
message("Network plugins : no (install libprotobuf-dev)")
|
||||
|
|
|
@ -11,9 +11,9 @@ if (PROTOBUF_FOUND)
|
|||
|
||||
ADD_SUBDIRECTORY(swiften)
|
||||
|
||||
if(YAHOO2_FOUND)
|
||||
# if(YAHOO2_FOUND)
|
||||
ADD_SUBDIRECTORY(libyahoo2)
|
||||
endif()
|
||||
# endif()
|
||||
|
||||
ADD_SUBDIRECTORY(template)
|
||||
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
cmake_minimum_required(VERSION 2.6)
|
||||
|
||||
FILE(GLOB SRC *.c *.cpp)
|
||||
FILE(GLOB_RECURSE SRC *.c *.cpp)
|
||||
|
||||
ADD_DEFINITIONS(-DHAVE_STDINT_H=1)
|
||||
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/yahoo)
|
||||
|
||||
ADD_EXECUTABLE(spectrum2_libyahoo2_backend ${SRC})
|
||||
|
||||
target_link_libraries(spectrum2_libyahoo2_backend transport pthread ${Boost_LIBRARIES} ${SWIFTEN_LIBRARY} ${LOG4CXX_LIBRARIES} ${YAHOO2_LIBRARY})
|
||||
target_link_libraries(spectrum2_libyahoo2_backend transport pthread ${Boost_LIBRARIES} ${SWIFTEN_LIBRARY} ${LOG4CXX_LIBRARIES})
|
||||
|
||||
INSTALL(TARGETS spectrum2_libyahoo2_backend RUNTIME DESTINATION bin)
|
||||
|
||||
|
|
208
backends/libyahoo2/yahoo/crypt.c
Normal file
208
backends/libyahoo2/yahoo/crypt.c
Normal file
|
@ -0,0 +1,208 @@
|
|||
/* One way encryption based on MD5 sum.
|
||||
Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
/* warmenhoven took this file and made it work with the md5.[ch] we
|
||||
* already had. isn't that lovely. people should just use linux or
|
||||
* freebsd, crypt works properly on those systems. i hate solaris */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#elif HAVE_STRINGS_H
|
||||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "yahoo_util.h"
|
||||
|
||||
#include "md5.h"
|
||||
|
||||
/* Define our magic string to mark salt for MD5 "encryption"
|
||||
replacement. This is meant to be the same as for other MD5 based
|
||||
encryption implementations. */
|
||||
static const char md5_salt_prefix[] = "$1$";
|
||||
|
||||
/* Table with characters for base64 transformation. */
|
||||
static const char b64t[64] =
|
||||
"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
||||
|
||||
char *yahoo_crypt(char *key, char *salt)
|
||||
{
|
||||
char *buffer = NULL;
|
||||
int buflen = 0;
|
||||
int needed = 3 + strlen(salt) + 1 + 26 + 1;
|
||||
|
||||
md5_byte_t alt_result[16];
|
||||
md5_state_t ctx;
|
||||
md5_state_t alt_ctx;
|
||||
size_t salt_len;
|
||||
size_t key_len;
|
||||
size_t cnt;
|
||||
char *cp;
|
||||
|
||||
if (buflen < needed) {
|
||||
buflen = needed;
|
||||
if ((buffer = realloc(buffer, buflen)) == NULL)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Find beginning of salt string. The prefix should normally always
|
||||
be present. Just in case it is not. */
|
||||
if (strncmp(md5_salt_prefix, salt, sizeof(md5_salt_prefix) - 1) == 0)
|
||||
/* Skip salt prefix. */
|
||||
salt += sizeof(md5_salt_prefix) - 1;
|
||||
|
||||
salt_len = MIN(strcspn(salt, "$"), 8);
|
||||
key_len = strlen(key);
|
||||
|
||||
/* Prepare for the real work. */
|
||||
md5_init(&ctx);
|
||||
|
||||
/* Add the key string. */
|
||||
md5_append(&ctx, (md5_byte_t *)key, key_len);
|
||||
|
||||
/* Because the SALT argument need not always have the salt prefix we
|
||||
add it separately. */
|
||||
md5_append(&ctx, (md5_byte_t *)md5_salt_prefix,
|
||||
sizeof(md5_salt_prefix) - 1);
|
||||
|
||||
/* The last part is the salt string. This must be at most 8
|
||||
characters and it ends at the first `$' character (for
|
||||
compatibility which existing solutions). */
|
||||
md5_append(&ctx, (md5_byte_t *)salt, salt_len);
|
||||
|
||||
/* Compute alternate MD5 sum with input KEY, SALT, and KEY. The
|
||||
final result will be added to the first context. */
|
||||
md5_init(&alt_ctx);
|
||||
|
||||
/* Add key. */
|
||||
md5_append(&alt_ctx, (md5_byte_t *)key, key_len);
|
||||
|
||||
/* Add salt. */
|
||||
md5_append(&alt_ctx, (md5_byte_t *)salt, salt_len);
|
||||
|
||||
/* Add key again. */
|
||||
md5_append(&alt_ctx, (md5_byte_t *)key, key_len);
|
||||
|
||||
/* Now get result of this (16 bytes) and add it to the other
|
||||
context. */
|
||||
md5_finish(&alt_ctx, alt_result);
|
||||
|
||||
/* Add for any character in the key one byte of the alternate sum. */
|
||||
for (cnt = key_len; cnt > 16; cnt -= 16)
|
||||
md5_append(&ctx, alt_result, 16);
|
||||
md5_append(&ctx, alt_result, cnt);
|
||||
|
||||
/* For the following code we need a NUL byte. */
|
||||
alt_result[0] = '\0';
|
||||
|
||||
/* The original implementation now does something weird: for every 1
|
||||
bit in the key the first 0 is added to the buffer, for every 0
|
||||
bit the first character of the key. This does not seem to be
|
||||
what was intended but we have to follow this to be compatible. */
|
||||
for (cnt = key_len; cnt > 0; cnt >>= 1)
|
||||
md5_append(&ctx,
|
||||
(cnt & 1) != 0 ? alt_result : (md5_byte_t *)key, 1);
|
||||
|
||||
/* Create intermediate result. */
|
||||
md5_finish(&ctx, alt_result);
|
||||
|
||||
/* Now comes another weirdness. In fear of password crackers here
|
||||
comes a quite long loop which just processes the output of the
|
||||
previous round again. We cannot ignore this here. */
|
||||
for (cnt = 0; cnt < 1000; ++cnt) {
|
||||
/* New context. */
|
||||
md5_init(&ctx);
|
||||
|
||||
/* Add key or last result. */
|
||||
if ((cnt & 1) != 0)
|
||||
md5_append(&ctx, (md5_byte_t *)key, key_len);
|
||||
else
|
||||
md5_append(&ctx, alt_result, 16);
|
||||
|
||||
/* Add salt for numbers not divisible by 3. */
|
||||
if (cnt % 3 != 0)
|
||||
md5_append(&ctx, (md5_byte_t *)salt, salt_len);
|
||||
|
||||
/* Add key for numbers not divisible by 7. */
|
||||
if (cnt % 7 != 0)
|
||||
md5_append(&ctx, (md5_byte_t *)key, key_len);
|
||||
|
||||
/* Add key or last result. */
|
||||
if ((cnt & 1) != 0)
|
||||
md5_append(&ctx, alt_result, 16);
|
||||
else
|
||||
md5_append(&ctx, (md5_byte_t *)key, key_len);
|
||||
|
||||
/* Create intermediate result. */
|
||||
md5_finish(&ctx, alt_result);
|
||||
}
|
||||
|
||||
/* Now we can construct the result string. It consists of three
|
||||
parts. */
|
||||
|
||||
strncpy(buffer, md5_salt_prefix, MAX(0, buflen));
|
||||
cp = buffer + strlen(buffer);
|
||||
buflen -= sizeof(md5_salt_prefix);
|
||||
|
||||
strncpy(cp, salt, MIN((size_t) buflen, salt_len));
|
||||
cp = cp + strlen(cp);
|
||||
buflen -= MIN((size_t) buflen, salt_len);
|
||||
|
||||
if (buflen > 0) {
|
||||
*cp++ = '$';
|
||||
--buflen;
|
||||
}
|
||||
#define b64_from_24bit(B2, B1, B0, N) \
|
||||
do { \
|
||||
unsigned int w = ((B2) << 16) | ((B1) << 8) | (B0); \
|
||||
int n = (N); \
|
||||
while (n-- > 0 && buflen > 0) { \
|
||||
*cp++ = b64t[w & 0x3f]; \
|
||||
--buflen; \
|
||||
w >>= 6; \
|
||||
}\
|
||||
} while (0)
|
||||
|
||||
b64_from_24bit(alt_result[0], alt_result[6], alt_result[12], 4);
|
||||
b64_from_24bit(alt_result[1], alt_result[7], alt_result[13], 4);
|
||||
b64_from_24bit(alt_result[2], alt_result[8], alt_result[14], 4);
|
||||
b64_from_24bit(alt_result[3], alt_result[9], alt_result[15], 4);
|
||||
b64_from_24bit(alt_result[4], alt_result[10], alt_result[5], 4);
|
||||
b64_from_24bit(0, 0, alt_result[11], 2);
|
||||
if (buflen <= 0) {
|
||||
FREE(buffer);
|
||||
} else
|
||||
*cp = '\0'; /* Terminate the string. */
|
||||
|
||||
/* Clear the buffer for the intermediate result so that people
|
||||
attaching to processes or reading core dumps cannot get any
|
||||
information. We do it in this way to clear correct_words[]
|
||||
inside the MD5 implementation as well. */
|
||||
md5_init(&ctx);
|
||||
md5_finish(&ctx, alt_result);
|
||||
memset(&ctx, '\0', sizeof(ctx));
|
||||
memset(&alt_ctx, '\0', sizeof(alt_ctx));
|
||||
|
||||
return buffer;
|
||||
}
|
5520
backends/libyahoo2/yahoo/libyahoo2.c
Normal file
5520
backends/libyahoo2/yahoo/libyahoo2.c
Normal file
File diff suppressed because it is too large
Load diff
405
backends/libyahoo2/yahoo/md5.c
Normal file
405
backends/libyahoo2/yahoo/md5.c
Normal file
|
@ -0,0 +1,405 @@
|
|||
/*
|
||||
Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
L. Peter Deutsch
|
||||
ghost@aladdin.com
|
||||
|
||||
*/
|
||||
/*
|
||||
Independent implementation of MD5 (RFC 1321).
|
||||
|
||||
This code implements the MD5 Algorithm defined in RFC 1321.
|
||||
It is derived directly from the text of the RFC and not from the
|
||||
reference implementation.
|
||||
|
||||
The original and principal author of md5.c is L. Peter Deutsch
|
||||
<ghost@aladdin.com>. Other authors are noted in the change history
|
||||
that follows (in reverse chronological order):
|
||||
|
||||
1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
|
||||
1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5).
|
||||
1999-05-03 lpd Original version.
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "md5.h"
|
||||
|
||||
#if STDC_HEADERS
|
||||
# include <string.h>
|
||||
#else
|
||||
# if !HAVE_STRCHR
|
||||
# define strchr index
|
||||
# define strrchr rindex
|
||||
# endif
|
||||
char *strchr(), *strrchr();
|
||||
# if !HAVE_MEMCPY
|
||||
# define memcpy(d, s, n) bcopy ((s), (d), (n))
|
||||
# define memmove(d, s, n) bcopy ((s), (d), (n))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef TEST
|
||||
/*
|
||||
* Compile with -DTEST to create a self-contained executable test program.
|
||||
* The test program should print out the same values as given in section
|
||||
* A.5 of RFC 1321, reproduced below.
|
||||
*/
|
||||
main()
|
||||
{
|
||||
static const char *const test[7] = {
|
||||
"", /*d41d8cd98f00b204e9800998ecf8427e */
|
||||
"945399884.61923487334tuvga", /*0cc175b9c0f1b6a831c399e269772661 */
|
||||
"abc", /*900150983cd24fb0d6963f7d28e17f72 */
|
||||
"message digest", /*f96b697d7cb7938d525a2f31aaf161d0 */
|
||||
"abcdefghijklmnopqrstuvwxyz", /*c3fcd3d76192e4007dfb496cca67e13b */
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
|
||||
/*d174ab98d277d9f5a5611c2c9f419d9f */
|
||||
"12345678901234567890123456789012345678901234567890123456789012345678901234567890" /*57edf4a22be3c955ac49da2e2107b67a */
|
||||
};
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 7; ++i) {
|
||||
md5_state_t state;
|
||||
md5_byte_t digest[16];
|
||||
int di;
|
||||
|
||||
md5_init(&state);
|
||||
md5_append(&state, (const md5_byte_t *)test[i],
|
||||
strlen(test[i]));
|
||||
md5_finish(&state, digest);
|
||||
printf("MD5 (\"%s\") = ", test[i]);
|
||||
for (di = 0; di < 16; ++di)
|
||||
printf("%02x", digest[di]);
|
||||
printf("\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif /* TEST */
|
||||
|
||||
/*
|
||||
* For reference, here is the program that computed the T values.
|
||||
*/
|
||||
#if 0
|
||||
#include <math.h>
|
||||
main()
|
||||
{
|
||||
int i;
|
||||
for (i = 1; i <= 64; ++i) {
|
||||
unsigned long v =
|
||||
(unsigned long)(4294967296.0 * fabs(sin((double)i)));
|
||||
printf("#define T%d 0x%08lx\n", i, v);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
* End of T computation program.
|
||||
*/
|
||||
#define T1 0xd76aa478
|
||||
#define T2 0xe8c7b756
|
||||
#define T3 0x242070db
|
||||
#define T4 0xc1bdceee
|
||||
#define T5 0xf57c0faf
|
||||
#define T6 0x4787c62a
|
||||
#define T7 0xa8304613
|
||||
#define T8 0xfd469501
|
||||
#define T9 0x698098d8
|
||||
#define T10 0x8b44f7af
|
||||
#define T11 0xffff5bb1
|
||||
#define T12 0x895cd7be
|
||||
#define T13 0x6b901122
|
||||
#define T14 0xfd987193
|
||||
#define T15 0xa679438e
|
||||
#define T16 0x49b40821
|
||||
#define T17 0xf61e2562
|
||||
#define T18 0xc040b340
|
||||
#define T19 0x265e5a51
|
||||
#define T20 0xe9b6c7aa
|
||||
#define T21 0xd62f105d
|
||||
#define T22 0x02441453
|
||||
#define T23 0xd8a1e681
|
||||
#define T24 0xe7d3fbc8
|
||||
#define T25 0x21e1cde6
|
||||
#define T26 0xc33707d6
|
||||
#define T27 0xf4d50d87
|
||||
#define T28 0x455a14ed
|
||||
#define T29 0xa9e3e905
|
||||
#define T30 0xfcefa3f8
|
||||
#define T31 0x676f02d9
|
||||
#define T32 0x8d2a4c8a
|
||||
#define T33 0xfffa3942
|
||||
#define T34 0x8771f681
|
||||
#define T35 0x6d9d6122
|
||||
#define T36 0xfde5380c
|
||||
#define T37 0xa4beea44
|
||||
#define T38 0x4bdecfa9
|
||||
#define T39 0xf6bb4b60
|
||||
#define T40 0xbebfbc70
|
||||
#define T41 0x289b7ec6
|
||||
#define T42 0xeaa127fa
|
||||
#define T43 0xd4ef3085
|
||||
#define T44 0x04881d05
|
||||
#define T45 0xd9d4d039
|
||||
#define T46 0xe6db99e5
|
||||
#define T47 0x1fa27cf8
|
||||
#define T48 0xc4ac5665
|
||||
#define T49 0xf4292244
|
||||
#define T50 0x432aff97
|
||||
#define T51 0xab9423a7
|
||||
#define T52 0xfc93a039
|
||||
#define T53 0x655b59c3
|
||||
#define T54 0x8f0ccc92
|
||||
#define T55 0xffeff47d
|
||||
#define T56 0x85845dd1
|
||||
#define T57 0x6fa87e4f
|
||||
#define T58 0xfe2ce6e0
|
||||
#define T59 0xa3014314
|
||||
#define T60 0x4e0811a1
|
||||
#define T61 0xf7537e82
|
||||
#define T62 0xbd3af235
|
||||
#define T63 0x2ad7d2bb
|
||||
#define T64 0xeb86d391
|
||||
|
||||
static void md5_process(md5_state_t *pms, const md5_byte_t *data /*[64] */ )
|
||||
{
|
||||
md5_word_t
|
||||
a = pms->abcd[0], b = pms->abcd[1],
|
||||
c = pms->abcd[2], d = pms->abcd[3];
|
||||
md5_word_t t;
|
||||
|
||||
#ifndef ARCH_IS_BIG_ENDIAN
|
||||
# define ARCH_IS_BIG_ENDIAN 1 /* slower, default implementation */
|
||||
#endif
|
||||
#if ARCH_IS_BIG_ENDIAN
|
||||
|
||||
/*
|
||||
* On big-endian machines, we must arrange the bytes in the right
|
||||
* order. (This also works on machines of unknown byte order.)
|
||||
*/
|
||||
md5_word_t X[16];
|
||||
const md5_byte_t *xp = data;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 16; ++i, xp += 4)
|
||||
X[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);
|
||||
|
||||
#else /* !ARCH_IS_BIG_ENDIAN */
|
||||
|
||||
/*
|
||||
* On little-endian machines, we can process properly aligned data
|
||||
* without copying it.
|
||||
*/
|
||||
md5_word_t xbuf[16];
|
||||
const md5_word_t *X;
|
||||
|
||||
if (!((data - (const md5_byte_t *)0) & 3)) {
|
||||
/* data are properly aligned */
|
||||
X = (const md5_word_t *)data;
|
||||
} else {
|
||||
/* not aligned */
|
||||
memcpy(xbuf, data, 64);
|
||||
X = xbuf;
|
||||
}
|
||||
#endif
|
||||
|
||||
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
|
||||
|
||||
/* Round 1. */
|
||||
/* Let [abcd k s i] denote the operation
|
||||
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
|
||||
#define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
|
||||
#define SET(a, b, c, d, k, s, Ti)\
|
||||
t = a + F(b,c,d) + X[k] + Ti;\
|
||||
a = ROTATE_LEFT(t, s) + b
|
||||
/* Do the following 16 operations. */
|
||||
SET(a, b, c, d, 0, 7, T1);
|
||||
SET(d, a, b, c, 1, 12, T2);
|
||||
SET(c, d, a, b, 2, 17, T3);
|
||||
SET(b, c, d, a, 3, 22, T4);
|
||||
SET(a, b, c, d, 4, 7, T5);
|
||||
SET(d, a, b, c, 5, 12, T6);
|
||||
SET(c, d, a, b, 6, 17, T7);
|
||||
SET(b, c, d, a, 7, 22, T8);
|
||||
SET(a, b, c, d, 8, 7, T9);
|
||||
SET(d, a, b, c, 9, 12, T10);
|
||||
SET(c, d, a, b, 10, 17, T11);
|
||||
SET(b, c, d, a, 11, 22, T12);
|
||||
SET(a, b, c, d, 12, 7, T13);
|
||||
SET(d, a, b, c, 13, 12, T14);
|
||||
SET(c, d, a, b, 14, 17, T15);
|
||||
SET(b, c, d, a, 15, 22, T16);
|
||||
#undef SET
|
||||
|
||||
/* Round 2. */
|
||||
/* Let [abcd k s i] denote the operation
|
||||
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
|
||||
#define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
|
||||
#define SET(a, b, c, d, k, s, Ti)\
|
||||
t = a + G(b,c,d) + X[k] + Ti;\
|
||||
a = ROTATE_LEFT(t, s) + b
|
||||
/* Do the following 16 operations. */
|
||||
SET(a, b, c, d, 1, 5, T17);
|
||||
SET(d, a, b, c, 6, 9, T18);
|
||||
SET(c, d, a, b, 11, 14, T19);
|
||||
SET(b, c, d, a, 0, 20, T20);
|
||||
SET(a, b, c, d, 5, 5, T21);
|
||||
SET(d, a, b, c, 10, 9, T22);
|
||||
SET(c, d, a, b, 15, 14, T23);
|
||||
SET(b, c, d, a, 4, 20, T24);
|
||||
SET(a, b, c, d, 9, 5, T25);
|
||||
SET(d, a, b, c, 14, 9, T26);
|
||||
SET(c, d, a, b, 3, 14, T27);
|
||||
SET(b, c, d, a, 8, 20, T28);
|
||||
SET(a, b, c, d, 13, 5, T29);
|
||||
SET(d, a, b, c, 2, 9, T30);
|
||||
SET(c, d, a, b, 7, 14, T31);
|
||||
SET(b, c, d, a, 12, 20, T32);
|
||||
#undef SET
|
||||
|
||||
/* Round 3. */
|
||||
/* Let [abcd k s t] denote the operation
|
||||
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
|
||||
#define H(x, y, z) ((x) ^ (y) ^ (z))
|
||||
#define SET(a, b, c, d, k, s, Ti)\
|
||||
t = a + H(b,c,d) + X[k] + Ti;\
|
||||
a = ROTATE_LEFT(t, s) + b
|
||||
/* Do the following 16 operations. */
|
||||
SET(a, b, c, d, 5, 4, T33);
|
||||
SET(d, a, b, c, 8, 11, T34);
|
||||
SET(c, d, a, b, 11, 16, T35);
|
||||
SET(b, c, d, a, 14, 23, T36);
|
||||
SET(a, b, c, d, 1, 4, T37);
|
||||
SET(d, a, b, c, 4, 11, T38);
|
||||
SET(c, d, a, b, 7, 16, T39);
|
||||
SET(b, c, d, a, 10, 23, T40);
|
||||
SET(a, b, c, d, 13, 4, T41);
|
||||
SET(d, a, b, c, 0, 11, T42);
|
||||
SET(c, d, a, b, 3, 16, T43);
|
||||
SET(b, c, d, a, 6, 23, T44);
|
||||
SET(a, b, c, d, 9, 4, T45);
|
||||
SET(d, a, b, c, 12, 11, T46);
|
||||
SET(c, d, a, b, 15, 16, T47);
|
||||
SET(b, c, d, a, 2, 23, T48);
|
||||
#undef SET
|
||||
|
||||
/* Round 4. */
|
||||
/* Let [abcd k s t] denote the operation
|
||||
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
|
||||
#define I(x, y, z) ((y) ^ ((x) | ~(z)))
|
||||
#define SET(a, b, c, d, k, s, Ti)\
|
||||
t = a + I(b,c,d) + X[k] + Ti;\
|
||||
a = ROTATE_LEFT(t, s) + b
|
||||
/* Do the following 16 operations. */
|
||||
SET(a, b, c, d, 0, 6, T49);
|
||||
SET(d, a, b, c, 7, 10, T50);
|
||||
SET(c, d, a, b, 14, 15, T51);
|
||||
SET(b, c, d, a, 5, 21, T52);
|
||||
SET(a, b, c, d, 12, 6, T53);
|
||||
SET(d, a, b, c, 3, 10, T54);
|
||||
SET(c, d, a, b, 10, 15, T55);
|
||||
SET(b, c, d, a, 1, 21, T56);
|
||||
SET(a, b, c, d, 8, 6, T57);
|
||||
SET(d, a, b, c, 15, 10, T58);
|
||||
SET(c, d, a, b, 6, 15, T59);
|
||||
SET(b, c, d, a, 13, 21, T60);
|
||||
SET(a, b, c, d, 4, 6, T61);
|
||||
SET(d, a, b, c, 11, 10, T62);
|
||||
SET(c, d, a, b, 2, 15, T63);
|
||||
SET(b, c, d, a, 9, 21, T64);
|
||||
#undef SET
|
||||
|
||||
/* Then perform the following additions. (That is increment each
|
||||
of the four registers by the value it had before this block
|
||||
was started.) */
|
||||
pms->abcd[0] += a;
|
||||
pms->abcd[1] += b;
|
||||
pms->abcd[2] += c;
|
||||
pms->abcd[3] += d;
|
||||
}
|
||||
|
||||
void md5_init(md5_state_t *pms)
|
||||
{
|
||||
pms->count[0] = pms->count[1] = 0;
|
||||
pms->abcd[0] = 0x67452301;
|
||||
pms->abcd[1] = 0xefcdab89;
|
||||
pms->abcd[2] = 0x98badcfe;
|
||||
pms->abcd[3] = 0x10325476;
|
||||
}
|
||||
|
||||
void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes)
|
||||
{
|
||||
const md5_byte_t *p = data;
|
||||
int left = nbytes;
|
||||
int offset = (pms->count[0] >> 3) & 63;
|
||||
md5_word_t nbits = (md5_word_t) (nbytes << 3);
|
||||
|
||||
if (nbytes <= 0)
|
||||
return;
|
||||
|
||||
/* Update the message length. */
|
||||
pms->count[1] += nbytes >> 29;
|
||||
pms->count[0] += nbits;
|
||||
if (pms->count[0] < nbits)
|
||||
pms->count[1]++;
|
||||
|
||||
/* Process an initial partial block. */
|
||||
if (offset) {
|
||||
int copy = (offset + nbytes > 64 ? 64 - offset : nbytes);
|
||||
|
||||
memcpy(pms->buf + offset, p, copy);
|
||||
if (offset + copy < 64)
|
||||
return;
|
||||
p += copy;
|
||||
left -= copy;
|
||||
md5_process(pms, pms->buf);
|
||||
}
|
||||
|
||||
/* Process full blocks. */
|
||||
for (; left >= 64; p += 64, left -= 64)
|
||||
md5_process(pms, p);
|
||||
|
||||
/* Process a final partial block. */
|
||||
if (left)
|
||||
memcpy(pms->buf, p, left);
|
||||
}
|
||||
|
||||
void md5_finish(md5_state_t *pms, md5_byte_t digest[16])
|
||||
{
|
||||
static const md5_byte_t pad[64] = {
|
||||
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
};
|
||||
md5_byte_t data[8];
|
||||
int i;
|
||||
|
||||
/* Save the length before padding. */
|
||||
for (i = 0; i < 8; ++i)
|
||||
data[i] = (md5_byte_t) (pms->count[i >> 2] >> ((i & 3) << 3));
|
||||
/* Pad to 56 bytes mod 64. */
|
||||
md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);
|
||||
/* Append the length. */
|
||||
md5_append(pms, data, 8);
|
||||
for (i = 0; i < 16; ++i)
|
||||
digest[i] = (md5_byte_t) (pms->abcd[i >> 2] >> ((i & 3) << 3));
|
||||
}
|
92
backends/libyahoo2/yahoo/md5.h
Normal file
92
backends/libyahoo2/yahoo/md5.h
Normal file
|
@ -0,0 +1,92 @@
|
|||
/*
|
||||
Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
L. Peter Deutsch
|
||||
ghost@aladdin.com
|
||||
|
||||
*/
|
||||
/*
|
||||
Independent implementation of MD5 (RFC 1321).
|
||||
|
||||
This code implements the MD5 Algorithm defined in RFC 1321.
|
||||
It is derived directly from the text of the RFC and not from the
|
||||
reference implementation.
|
||||
|
||||
The original and principal author of md5.h is L. Peter Deutsch
|
||||
<ghost@aladdin.com>. Other authors are noted in the change history
|
||||
that follows (in reverse chronological order):
|
||||
|
||||
1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
|
||||
1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
|
||||
added conditionalization for C++ compilation from Martin
|
||||
Purschke <purschke@bnl.gov>.
|
||||
1999-05-03 lpd Original version.
|
||||
*/
|
||||
|
||||
#ifndef md5_INCLUDED
|
||||
# define md5_INCLUDED
|
||||
|
||||
/*
|
||||
* This code has some adaptations for the Ghostscript environment, but it
|
||||
* will compile and run correctly in any environment with 8-bit chars and
|
||||
* 32-bit ints. Specifically, it assumes that if the following are
|
||||
* defined, they have the same meaning as in Ghostscript: P1, P2, P3,
|
||||
* ARCH_IS_BIG_ENDIAN.
|
||||
*/
|
||||
|
||||
typedef unsigned char md5_byte_t; /* 8-bit byte */
|
||||
typedef unsigned int md5_word_t; /* 32-bit word */
|
||||
|
||||
/* Define the state of the MD5 Algorithm. */
|
||||
typedef struct md5_state_s {
|
||||
md5_word_t count[2]; /* message length in bits, lsw first */
|
||||
md5_word_t abcd[4]; /* digest buffer */
|
||||
md5_byte_t buf[64]; /* accumulate block */
|
||||
} md5_state_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Initialize the algorithm. */
|
||||
#ifdef P1
|
||||
void md5_init(P1(md5_state_t *pms));
|
||||
#else
|
||||
void md5_init(md5_state_t *pms);
|
||||
#endif
|
||||
|
||||
/* Append a string to the message. */
|
||||
#ifdef P3
|
||||
void md5_append(P3(md5_state_t *pms, const md5_byte_t *data,
|
||||
int nbytes));
|
||||
#else
|
||||
void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes);
|
||||
#endif
|
||||
|
||||
/* Finish the message and return the digest. */
|
||||
#ifdef P2
|
||||
void md5_finish(P2(md5_state_t *pms, md5_byte_t digest[16]));
|
||||
#else
|
||||
void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* end extern "C" */
|
||||
#endif
|
||||
#endif /* md5_INCLUDED */
|
613
backends/libyahoo2/yahoo/sha1.c
Normal file
613
backends/libyahoo2/yahoo/sha1.c
Normal file
|
@ -0,0 +1,613 @@
|
|||
/*-
|
||||
* Copyright (c) 2001-2003 Allan Saddi <allan@saddi.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ALLAN SADDI AND HIS CONTRIBUTORS ``AS IS''
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL ALLAN SADDI OR HIS CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Define WORDS_BIGENDIAN if compiling on a big-endian architecture.
|
||||
*
|
||||
* Define SHA1_TEST to test the implementation using the NIST's
|
||||
* sample messages. The output should be:
|
||||
*
|
||||
* a9993e36 4706816a ba3e2571 7850c26c 9cd0d89d
|
||||
* 84983e44 1c3bd26e baae4aa1 f95129e5 e54670f1
|
||||
* 34aa973c d4c4daa4 f61eeb2b dbad2731 6534016f
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif /* HAVE_CONFIG_H */
|
||||
|
||||
#if HAVE_INTTYPES_H
|
||||
# include <inttypes.h>
|
||||
#else
|
||||
# if HAVE_STDINT_H
|
||||
# include <stdint.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "sha1.h"
|
||||
|
||||
#define ROTL(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
|
||||
#define ROTR(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
|
||||
|
||||
#define F_0_19(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
|
||||
#define F_20_39(x, y, z) ((x) ^ (y) ^ (z))
|
||||
#define F_40_59(x, y, z) (((x) & ((y) | (z))) | ((y) & (z)))
|
||||
#define F_60_79(x, y, z) ((x) ^ (y) ^ (z))
|
||||
|
||||
#define DO_ROUND(F, K) { \
|
||||
temp = ROTL(a, 5) + F(b, c, d) + e + *(W++) + K; \
|
||||
e = d; \
|
||||
d = c; \
|
||||
c = ROTL(b, 30); \
|
||||
b = a; \
|
||||
a = temp; \
|
||||
}
|
||||
|
||||
#define K_0_19 0x5a827999L
|
||||
#define K_20_39 0x6ed9eba1L
|
||||
#define K_40_59 0x8f1bbcdcL
|
||||
#define K_60_79 0xca62c1d6L
|
||||
|
||||
#ifndef RUNTIME_ENDIAN
|
||||
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
|
||||
#define BYTESWAP(x) (x)
|
||||
#define BYTESWAP64(x) (x)
|
||||
|
||||
#else /* WORDS_BIGENDIAN */
|
||||
|
||||
#define BYTESWAP(x) ((ROTR((x), 8) & 0xff00ff00L) | (ROTL((x), 8) & 0x00ff00ffL))
|
||||
|
||||
static uint64_t _byteswap64(uint64_t x)
|
||||
{
|
||||
uint32_t a = x >> 32;
|
||||
uint32_t b = (uint32_t) x;
|
||||
return ((uint64_t) BYTESWAP(b) << 32) | (uint64_t) BYTESWAP(a);
|
||||
}
|
||||
|
||||
#define BYTESWAP64(x) _byteswap64(x)
|
||||
|
||||
#endif /* WORDS_BIGENDIAN */
|
||||
|
||||
#else /* !RUNTIME_ENDIAN */
|
||||
|
||||
#define BYTESWAP(x) _byteswap(sc->littleEndian, x)
|
||||
#define BYTESWAP64(x) _byteswap64(sc->littleEndian, x)
|
||||
|
||||
#define _BYTESWAP(x) ((ROTR((x), 8) & 0xff00ff00L) | \
|
||||
(ROTL((x), 8) & 0x00ff00ffL))
|
||||
#define _BYTESWAP64(x) __byteswap64(x)
|
||||
|
||||
static uint64_t __byteswap64(uint64_t x)
|
||||
{
|
||||
uint32_t a = x >> 32;
|
||||
uint32_t b = (uint32_t) x;
|
||||
return ((uint64_t) _BYTESWAP(b) << 32) | (uint64_t) _BYTESWAP(a);
|
||||
}
|
||||
|
||||
static uint32_t _byteswap(int littleEndian, uint32_t x)
|
||||
{
|
||||
if (!littleEndian)
|
||||
return x;
|
||||
else
|
||||
return _BYTESWAP(x);
|
||||
}
|
||||
|
||||
static uint64_t _byteswap64(int littleEndian, uint64_t x)
|
||||
{
|
||||
if (!littleEndian)
|
||||
return x;
|
||||
else
|
||||
return _BYTESWAP64(x);
|
||||
}
|
||||
|
||||
static void setEndian(int *littleEndianp)
|
||||
{
|
||||
union {
|
||||
uint32_t w;
|
||||
uint8_t b[4];
|
||||
} endian;
|
||||
|
||||
endian.w = 1L;
|
||||
*littleEndianp = endian.b[0] != 0;
|
||||
}
|
||||
|
||||
#endif /* !RUNTIME_ENDIAN */
|
||||
|
||||
static const uint8_t padding[64] = {
|
||||
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
void SHA1Init(SHA1Context *sc)
|
||||
{
|
||||
#ifdef RUNTIME_ENDIAN
|
||||
setEndian(&sc->littleEndian);
|
||||
#endif /* RUNTIME_ENDIAN */
|
||||
|
||||
sc->totalLength = 0LL;
|
||||
sc->hash[0] = 0x67452301L;
|
||||
sc->hash[1] = 0xefcdab89L;
|
||||
sc->hash[2] = 0x98badcfeL;
|
||||
sc->hash[3] = 0x10325476L;
|
||||
sc->hash[4] = 0xc3d2e1f0L;
|
||||
sc->bufferLength = 0L;
|
||||
}
|
||||
|
||||
static void burnStack(int size)
|
||||
{
|
||||
char buf[128];
|
||||
|
||||
memset(buf, 0, sizeof(buf));
|
||||
size -= sizeof(buf);
|
||||
if (size > 0)
|
||||
burnStack(size);
|
||||
}
|
||||
|
||||
static void SHA1Guts(SHA1Context *sc, const uint32_t *cbuf)
|
||||
{
|
||||
uint32_t buf[80];
|
||||
uint32_t *W, *W3, *W8, *W14, *W16;
|
||||
uint32_t a, b, c, d, e, temp;
|
||||
int i;
|
||||
|
||||
W = buf;
|
||||
|
||||
for (i = 15; i >= 0; i--) {
|
||||
*(W++) = BYTESWAP(*cbuf);
|
||||
cbuf++;
|
||||
}
|
||||
|
||||
W16 = &buf[0];
|
||||
W14 = &buf[2];
|
||||
W8 = &buf[8];
|
||||
W3 = &buf[13];
|
||||
|
||||
for (i = 63; i >= 0; i--) {
|
||||
*W = *(W3++) ^ *(W8++) ^ *(W14++) ^ *(W16++);
|
||||
*W = ROTL(*W, 1);
|
||||
W++;
|
||||
}
|
||||
|
||||
a = sc->hash[0];
|
||||
b = sc->hash[1];
|
||||
c = sc->hash[2];
|
||||
d = sc->hash[3];
|
||||
e = sc->hash[4];
|
||||
|
||||
W = buf;
|
||||
|
||||
#ifndef SHA1_UNROLL
|
||||
#define SHA1_UNROLL 20
|
||||
#endif /* !SHA1_UNROLL */
|
||||
|
||||
#if SHA1_UNROLL == 1
|
||||
for (i = 19; i >= 0; i--)
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
|
||||
for (i = 19; i >= 0; i--)
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
|
||||
for (i = 19; i >= 0; i--)
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
|
||||
for (i = 19; i >= 0; i--)
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
#elif SHA1_UNROLL == 2
|
||||
for (i = 9; i >= 0; i--) {
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
}
|
||||
|
||||
for (i = 9; i >= 0; i--) {
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
}
|
||||
|
||||
for (i = 9; i >= 0; i--) {
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
}
|
||||
|
||||
for (i = 9; i >= 0; i--) {
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
}
|
||||
#elif SHA1_UNROLL == 4
|
||||
for (i = 4; i >= 0; i--) {
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
}
|
||||
|
||||
for (i = 4; i >= 0; i--) {
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
}
|
||||
|
||||
for (i = 4; i >= 0; i--) {
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
}
|
||||
|
||||
for (i = 4; i >= 0; i--) {
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
}
|
||||
#elif SHA1_UNROLL == 5
|
||||
for (i = 3; i >= 0; i--) {
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
}
|
||||
|
||||
for (i = 3; i >= 0; i--) {
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
}
|
||||
|
||||
for (i = 3; i >= 0; i--) {
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
}
|
||||
|
||||
for (i = 3; i >= 0; i--) {
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
}
|
||||
#elif SHA1_UNROLL == 10
|
||||
for (i = 1; i >= 0; i--) {
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
}
|
||||
|
||||
for (i = 1; i >= 0; i--) {
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
}
|
||||
|
||||
for (i = 1; i >= 0; i--) {
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
}
|
||||
|
||||
for (i = 1; i >= 0; i--) {
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
}
|
||||
#elif SHA1_UNROLL == 20
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
DO_ROUND(F_0_19, K_0_19);
|
||||
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
DO_ROUND(F_20_39, K_20_39);
|
||||
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
DO_ROUND(F_40_59, K_40_59);
|
||||
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
DO_ROUND(F_60_79, K_60_79);
|
||||
#else /* SHA1_UNROLL */
|
||||
#error SHA1_UNROLL must be 1, 2, 4, 5, 10 or 20!
|
||||
#endif
|
||||
|
||||
sc->hash[0] += a;
|
||||
sc->hash[1] += b;
|
||||
sc->hash[2] += c;
|
||||
sc->hash[3] += d;
|
||||
sc->hash[4] += e;
|
||||
}
|
||||
|
||||
void SHA1Update(SHA1Context *sc, const void *vdata, uint32_t len)
|
||||
{
|
||||
const uint8_t *data = vdata;
|
||||
uint32_t bufferBytesLeft;
|
||||
uint32_t bytesToCopy;
|
||||
int needBurn = 0;
|
||||
|
||||
#ifdef SHA1_FAST_COPY
|
||||
if (sc->bufferLength) {
|
||||
bufferBytesLeft = 64L - sc->bufferLength;
|
||||
|
||||
bytesToCopy = bufferBytesLeft;
|
||||
if (bytesToCopy > len)
|
||||
bytesToCopy = len;
|
||||
|
||||
memcpy(&sc->buffer.bytes[sc->bufferLength], data, bytesToCopy);
|
||||
|
||||
sc->totalLength += bytesToCopy * 8L;
|
||||
|
||||
sc->bufferLength += bytesToCopy;
|
||||
data += bytesToCopy;
|
||||
len -= bytesToCopy;
|
||||
|
||||
if (sc->bufferLength == 64L) {
|
||||
SHA1Guts(sc, sc->buffer.words);
|
||||
needBurn = 1;
|
||||
sc->bufferLength = 0L;
|
||||
}
|
||||
}
|
||||
|
||||
while (len > 63) {
|
||||
sc->totalLength += 512L;
|
||||
|
||||
SHA1Guts(sc, data);
|
||||
needBurn = 1;
|
||||
|
||||
data += 64L;
|
||||
len -= 64L;
|
||||
}
|
||||
|
||||
if (len) {
|
||||
memcpy(&sc->buffer.bytes[sc->bufferLength], data, len);
|
||||
|
||||
sc->totalLength += len * 8L;
|
||||
|
||||
sc->bufferLength += len;
|
||||
}
|
||||
#else /* SHA1_FAST_COPY */
|
||||
while (len) {
|
||||
bufferBytesLeft = 64L - sc->bufferLength;
|
||||
|
||||
bytesToCopy = bufferBytesLeft;
|
||||
if (bytesToCopy > len)
|
||||
bytesToCopy = len;
|
||||
|
||||
memcpy(&sc->buffer.bytes[sc->bufferLength], data, bytesToCopy);
|
||||
|
||||
sc->totalLength += bytesToCopy * 8L;
|
||||
|
||||
sc->bufferLength += bytesToCopy;
|
||||
data += bytesToCopy;
|
||||
len -= bytesToCopy;
|
||||
|
||||
if (sc->bufferLength == 64L) {
|
||||
SHA1Guts(sc, sc->buffer.words);
|
||||
needBurn = 1;
|
||||
sc->bufferLength = 0L;
|
||||
}
|
||||
}
|
||||
#endif /* SHA1_FAST_COPY */
|
||||
|
||||
if (needBurn)
|
||||
burnStack(sizeof(uint32_t[86]) + sizeof(uint32_t *[5]) +
|
||||
sizeof(int));
|
||||
}
|
||||
|
||||
void SHA1Final(SHA1Context *sc, uint8_t hash[SHA1_HASH_SIZE])
|
||||
{
|
||||
uint32_t bytesToPad;
|
||||
uint64_t lengthPad;
|
||||
int i;
|
||||
|
||||
bytesToPad = 120L - sc->bufferLength;
|
||||
if (bytesToPad > 64L)
|
||||
bytesToPad -= 64L;
|
||||
|
||||
lengthPad = BYTESWAP64(sc->totalLength);
|
||||
|
||||
SHA1Update(sc, padding, bytesToPad);
|
||||
SHA1Update(sc, &lengthPad, 8L);
|
||||
|
||||
if (hash) {
|
||||
for (i = 0; i < SHA1_HASH_WORDS; i++) {
|
||||
#ifdef SHA1_FAST_COPY
|
||||
*((uint32_t *)hash) = BYTESWAP(sc->hash[i]);
|
||||
#else /* SHA1_FAST_COPY */
|
||||
hash[0] = (uint8_t) (sc->hash[i] >> 24);
|
||||
hash[1] = (uint8_t) (sc->hash[i] >> 16);
|
||||
hash[2] = (uint8_t) (sc->hash[i] >> 8);
|
||||
hash[3] = (uint8_t) sc->hash[i];
|
||||
#endif /* SHA1_FAST_COPY */
|
||||
hash += 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef SHA1_TEST
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
SHA1Context foo;
|
||||
uint8_t hash[SHA1_HASH_SIZE];
|
||||
char buf[1000];
|
||||
int i;
|
||||
|
||||
SHA1Init(&foo);
|
||||
SHA1Update(&foo, "abc", 3);
|
||||
SHA1Final(&foo, hash);
|
||||
|
||||
for (i = 0; i < SHA1_HASH_SIZE;) {
|
||||
printf("%02x", hash[i++]);
|
||||
if (!(i % 4))
|
||||
printf(" ");
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
SHA1Init(&foo);
|
||||
SHA1Update(&foo,
|
||||
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56);
|
||||
SHA1Final(&foo, hash);
|
||||
|
||||
for (i = 0; i < SHA1_HASH_SIZE;) {
|
||||
printf("%02x", hash[i++]);
|
||||
if (!(i % 4))
|
||||
printf(" ");
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
SHA1Init(&foo);
|
||||
memset(buf, 'a', sizeof(buf));
|
||||
for (i = 0; i < 1000; i++)
|
||||
SHA1Update(&foo, buf, sizeof(buf));
|
||||
SHA1Final(&foo, hash);
|
||||
|
||||
for (i = 0; i < SHA1_HASH_SIZE;) {
|
||||
printf("%02x", hash[i++]);
|
||||
if (!(i % 4))
|
||||
printf(" ");
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
#endif /* SHA1_TEST */
|
69
backends/libyahoo2/yahoo/sha1.h
Normal file
69
backends/libyahoo2/yahoo/sha1.h
Normal file
|
@ -0,0 +1,69 @@
|
|||
/*-
|
||||
* Copyright (c) 2001-2003 Allan Saddi <allan@saddi.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ALLAN SADDI AND HIS CONTRIBUTORS ``AS IS''
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL ALLAN SADDI OR HIS CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SHA1_H
|
||||
#define _SHA1_H
|
||||
|
||||
#if HAVE_INTTYPES_H
|
||||
# include <inttypes.h>
|
||||
#else
|
||||
# if HAVE_STDINT_H
|
||||
# include <stdint.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#define SHA1_HASH_SIZE 20
|
||||
|
||||
/* Hash size in 32-bit words */
|
||||
#define SHA1_HASH_WORDS 5
|
||||
|
||||
struct _SHA1Context {
|
||||
uint64_t totalLength;
|
||||
uint32_t hash[SHA1_HASH_WORDS];
|
||||
uint32_t bufferLength;
|
||||
union {
|
||||
uint32_t words[16];
|
||||
uint8_t bytes[64];
|
||||
} buffer;
|
||||
#ifdef RUNTIME_ENDIAN
|
||||
int littleEndian;
|
||||
#endif /* RUNTIME_ENDIAN */
|
||||
};
|
||||
|
||||
typedef struct _SHA1Context SHA1Context;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void SHA1Init(SHA1Context *sc);
|
||||
void SHA1Update(SHA1Context *sc, const void *data, uint32_t len);
|
||||
void SHA1Final(SHA1Context *sc, uint8_t hash[SHA1_HASH_SIZE]);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* _SHA1_H */
|
225
backends/libyahoo2/yahoo/yahoo2.h
Normal file
225
backends/libyahoo2/yahoo/yahoo2.h
Normal file
|
@ -0,0 +1,225 @@
|
|||
/*
|
||||
* libyahoo2: yahoo2.h
|
||||
*
|
||||
* Copyright (C) 2002-2004, Philip S Tellis <philip.tellis AT gmx.net>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef YAHOO2_H
|
||||
#define YAHOO2_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "yahoo2_types.h"
|
||||
|
||||
/* returns the socket descriptor object for a given pager connection. shouldn't be needed */
|
||||
void *yahoo_get_fd(int id);
|
||||
|
||||
/* says how much logging to do */
|
||||
/* see yahoo2_types.h for the different values */
|
||||
int yahoo_set_log_level(enum yahoo_log_level level);
|
||||
enum yahoo_log_level yahoo_get_log_level(void);
|
||||
|
||||
/* these functions should be self explanatory */
|
||||
/* who always means the buddy you're acting on */
|
||||
/* id is the successful value returned by yahoo_init */
|
||||
|
||||
/* init returns a connection id used to identify the connection hereon */
|
||||
/* or 0 on failure */
|
||||
/* you must call init before calling any other function */
|
||||
/*
|
||||
* 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
|
||||
* 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 * ""
|
||||
* local_host char * ""
|
||||
* conn_type int Y_WCM_DSL
|
||||
*
|
||||
* You should set at least local_host if you intend to use webcams
|
||||
*/
|
||||
int yahoo_init_with_attributes(const char *username,
|
||||
const char *password, ...);
|
||||
|
||||
/* yahoo_init does the same as yahoo_init_with_attributes, assuming defaults
|
||||
* for all attributes */
|
||||
int yahoo_init(const char *username, const char *password);
|
||||
|
||||
/* release all resources held by this session */
|
||||
/* you need to call yahoo_close for a session only if
|
||||
* yahoo_logoff is never called for it (ie, it was never logged in) */
|
||||
void yahoo_close(int id);
|
||||
/* login logs in to the server */
|
||||
/* initial is of type enum yahoo_status. see yahoo2_types.h */
|
||||
void yahoo_login(int id, int initial);
|
||||
void yahoo_logoff(int id);
|
||||
/* reloads status of all buddies */
|
||||
void yahoo_refresh(int id);
|
||||
/* activates/deactivates an identity */
|
||||
void yahoo_set_identity_status(int id, const char *identity,
|
||||
int active);
|
||||
/* regets the entire buddy list from the server */
|
||||
void yahoo_get_list(int id);
|
||||
/* download buddy contact information from your yahoo addressbook */
|
||||
void yahoo_get_yab(int id);
|
||||
/* add/modify an address book entry. if yab->dbid is set, it will */
|
||||
/* modify that entry else it creates a new entry */
|
||||
void yahoo_set_yab(int id, struct yab *yab);
|
||||
void yahoo_keepalive(int id);
|
||||
void yahoo_chat_keepalive(int id);
|
||||
|
||||
/* from is the identity you're sending from. if NULL, the default is used */
|
||||
/* utf8 is whether msg is a utf8 string or not. */
|
||||
void yahoo_send_im(int id, const char *from, const char *who,
|
||||
const char *msg, int utf8, int picture);
|
||||
void yahoo_send_buzz(int id, const char *from, const char *who);
|
||||
/* if type is true, send typing notice, else send stopped typing notice */
|
||||
void yahoo_send_typing(int id, const char *from, const char *who,
|
||||
int typ);
|
||||
|
||||
/* used to set away/back status. */
|
||||
/* away says whether the custom message is an away message or a sig */
|
||||
void yahoo_set_away(int id, enum yahoo_status state, const char *msg,
|
||||
int away);
|
||||
|
||||
void yahoo_add_buddy(int id, const char *who, const char *group,
|
||||
const char *msg);
|
||||
void yahoo_remove_buddy(int id, const char *who, const char *group);
|
||||
void yahoo_confirm_buddy(int id, const char *who, int reject,
|
||||
const char *msg);
|
||||
void yahoo_stealth_buddy(int id, const char *who, int unstealth);
|
||||
/* if unignore is true, unignore, else ignore */
|
||||
void yahoo_ignore_buddy(int id, const char *who, int unignore);
|
||||
void yahoo_change_buddy_group(int id, const char *who,
|
||||
const char *old_group, const char *new_group);
|
||||
void yahoo_group_rename(int id, const char *old_group,
|
||||
const char *new_group);
|
||||
|
||||
void yahoo_conference_invite(int id, const char *from, YList *who,
|
||||
const char *room, const char *msg);
|
||||
void yahoo_conference_addinvite(int id, const char *from,
|
||||
const char *who, const char *room, const YList *members,
|
||||
const char *msg);
|
||||
void yahoo_conference_decline(int id, const char *from, YList *who,
|
||||
const char *room, const char *msg);
|
||||
void yahoo_conference_message(int id, const char *from, YList *who,
|
||||
const char *room, const char *msg, int utf8);
|
||||
void yahoo_conference_logon(int id, const char *from, YList *who,
|
||||
const char *room);
|
||||
void yahoo_conference_logoff(int id, const char *from, YList *who,
|
||||
const char *room);
|
||||
|
||||
/* Get a list of chatrooms */
|
||||
void yahoo_get_chatrooms(int id, int chatroomid);
|
||||
/* join room with specified roomname and roomid */
|
||||
void yahoo_chat_logon(int id, const char *from, const char *room,
|
||||
const char *roomid);
|
||||
/* Send message "msg" to room with specified roomname, msgtype is 1-normal message or 2-/me mesage */
|
||||
void yahoo_chat_message(int id, const char *from, const char *room,
|
||||
const char *msg, const int msgtype, const int utf8);
|
||||
/* Log off chat */
|
||||
void yahoo_chat_logoff(int id, const char *from);
|
||||
|
||||
/* requests a webcam feed */
|
||||
/* who is the person who's webcam you would like to view */
|
||||
/* if who is null, then you're the broadcaster */
|
||||
void yahoo_webcam_get_feed(int id, const char *who);
|
||||
void yahoo_webcam_close_feed(int id, const char *who);
|
||||
|
||||
/* sends an image when uploading */
|
||||
/* image points to a JPEG-2000 image, length is the length of the image */
|
||||
/* in bytes. The timestamp is the time in milliseconds since we started the */
|
||||
/* webcam. */
|
||||
void yahoo_webcam_send_image(int id, unsigned char *image,
|
||||
unsigned int length, unsigned int timestamp);
|
||||
|
||||
/* this function should be called if we want to allow a user to watch the */
|
||||
/* webcam. Who is the user we want to accept. */
|
||||
/* Accept user (accept = 1), decline user (accept = 0) */
|
||||
void yahoo_webcam_accept_viewer(int id, const char *who, int accept);
|
||||
|
||||
/* send an invitation to a user to view your webcam */
|
||||
void yahoo_webcam_invite(int id, const char *who);
|
||||
|
||||
/* will set up a connection and initiate file transfer.
|
||||
* callback will be called with the fd that you should write
|
||||
* the file data to
|
||||
*/
|
||||
void yahoo_send_file(int id, const char *who, const char *msg,
|
||||
const char *name, unsigned long size,
|
||||
yahoo_get_fd_callback callback, void *data);
|
||||
|
||||
/*
|
||||
* Respond to a file transfer request. Be sure to provide the callback data
|
||||
* since that is your only chance to recognize future callbacks
|
||||
*/
|
||||
void yahoo_send_file_transfer_response(int client_id, int response,
|
||||
char *id, void *data);
|
||||
|
||||
|
||||
/* send a search request
|
||||
*/
|
||||
void yahoo_search(int id, enum yahoo_search_type t, const char *text,
|
||||
enum yahoo_search_gender g, enum yahoo_search_agerange ar,
|
||||
int photo, int yahoo_only);
|
||||
|
||||
/* continue last search
|
||||
* should be called if only (start+found >= total)
|
||||
*
|
||||
* where the above three are passed to ext_yahoo_got_search_result
|
||||
*/
|
||||
void yahoo_search_again(int id, int start);
|
||||
|
||||
/* these should be called when input is available on a fd */
|
||||
/* registered by ext_yahoo_add_handler */
|
||||
/* if these return negative values, errno may be set */
|
||||
int yahoo_read_ready(int id, void *fd, void *data);
|
||||
int yahoo_write_ready(int id, void *fd, void *data);
|
||||
|
||||
/* utility functions. these do not hit the server */
|
||||
enum yahoo_status yahoo_current_status(int id);
|
||||
const YList *yahoo_get_buddylist(int id);
|
||||
const YList *yahoo_get_ignorelist(int id);
|
||||
const YList *yahoo_get_identities(int id);
|
||||
/* 'which' could be y, t, c or login. This may change in later versions. */
|
||||
const char *yahoo_get_cookie(int id, const char *which);
|
||||
|
||||
/* returns the url used to get user profiles - you must append the user id */
|
||||
/* as of now this is http://profiles.yahoo.com/ */
|
||||
/* You'll have to do urlencoding yourself, but see yahoo_httplib.h first */
|
||||
const char *yahoo_get_profile_url(void);
|
||||
|
||||
void yahoo_buddyicon_request(int id, const char *who);
|
||||
|
||||
#include "yahoo_httplib.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
776
backends/libyahoo2/yahoo/yahoo2_callbacks.h
Normal file
776
backends/libyahoo2/yahoo/yahoo2_callbacks.h
Normal file
|
@ -0,0 +1,776 @@
|
|||
/*
|
||||
* libyahoo2: yahoo2_callbacks.h
|
||||
*
|
||||
* Copyright (C) 2002-2004, Philip S Tellis <philip.tellis AT gmx.net>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* The functions in this file *must* be defined in your client program
|
||||
* If you want to use a callback structure instead of direct functions,
|
||||
* then you must define USE_STRUCT_CALLBACKS in all files that #include
|
||||
* this one.
|
||||
*
|
||||
* Register the callback structure by calling yahoo_register_callbacks -
|
||||
* declared in this file and defined in libyahoo2.c
|
||||
*/
|
||||
|
||||
#ifndef YAHOO2_CALLBACKS_H
|
||||
#define YAHOO2_CALLBACKS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "yahoo2_types.h"
|
||||
|
||||
/*
|
||||
* yahoo2_callbacks.h
|
||||
*
|
||||
* Callback interface for libyahoo2
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
YAHOO_INPUT_READ = 1 << 0,
|
||||
YAHOO_INPUT_WRITE = 1 << 1,
|
||||
YAHOO_INPUT_EXCEPTION = 1 << 2
|
||||
} yahoo_input_condition;
|
||||
|
||||
/*
|
||||
* A callback function called when an asynchronous connect completes.
|
||||
*
|
||||
* Params:
|
||||
* fd - The file descriptor object that has been connected, or NULL on
|
||||
* error
|
||||
* error - The value of errno set by the call to connect or 0 if no error
|
||||
* Set both fd and error to 0 if the connect was cancelled by the
|
||||
* user
|
||||
* callback_data - the callback_data passed to the ext_yahoo_connect_async
|
||||
* function
|
||||
*/
|
||||
typedef void (*yahoo_connect_callback) (void *fd, int error,
|
||||
void *callback_data);
|
||||
|
||||
/*
|
||||
* The following functions need to be implemented in the client
|
||||
* interface. They will be called by the library when each
|
||||
* event occurs.
|
||||
*/
|
||||
|
||||
/*
|
||||
* should we use a callback structure or directly call functions
|
||||
* if you want the structure, you *must* define USE_STRUCT_CALLBACKS
|
||||
* both when you compile the library, and when you compile your code
|
||||
* that uses the library
|
||||
*/
|
||||
|
||||
#define YAHOO_CALLBACK_TYPE(x) (*x)
|
||||
struct yahoo_callbacks {
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_login_response
|
||||
* Called when the login process is complete
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* succ - enum yahoo_login_status
|
||||
* url - url to reactivate account if locked
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_login_response) (int id, int succ,
|
||||
const char *url);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_buddies
|
||||
* Called when the contact list is got from the server
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* buds - the buddy list
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_buddies) (int id, YList *buds);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_ignore
|
||||
* Called when the ignore list is got from the server
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* igns - the ignore list
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_ignore) (int id, YList *igns);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_identities
|
||||
* Called when the contact list is got from the server
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* ids - the identity list
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_identities) (int id, YList *ids);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_cookies
|
||||
* Called when the cookie list is got from the server
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_cookies) (int id);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_ping
|
||||
* Called when the ping packet is received from the server
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* errormsg - optional error message
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_ping) (int id,
|
||||
const char *errormsg);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_status_changed
|
||||
* Called when remote user's status changes.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* who - the handle of the remote user
|
||||
* stat - status code (enum yahoo_status)
|
||||
* msg - the message if stat == YAHOO_STATUS_CUSTOM
|
||||
* away - whether the contact is away or not (YAHOO_STATUS_CUSTOM)
|
||||
* idle - this is the number of seconds he is idle [if he is idle]
|
||||
* mobile - this is set for mobile users/buddies
|
||||
* TODO: add support for pager, chat, and game states
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_status_changed) (int id,
|
||||
const char *who, int stat, const char *msg, int away, int idle,
|
||||
int mobile);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_buzz
|
||||
* Called when remote user sends you a buzz.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the identity the message was sent to
|
||||
* who - the handle of the remote user
|
||||
* tm - timestamp of message if offline
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_buzz) (int id, const char *me,
|
||||
const char *who, long tm);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_im
|
||||
* Called when remote user sends you a message.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the identity the message was sent to
|
||||
* who - the handle of the remote user
|
||||
* msg - the message - NULL if stat == 2
|
||||
* tm - timestamp of message if offline
|
||||
* stat - message status - 0
|
||||
* 1
|
||||
* 2 == error sending message
|
||||
* 5
|
||||
* utf8 - whether the message is encoded as utf8 or not
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_im) (int id, const char *me,
|
||||
const char *who, const char *msg, long tm, int stat, int utf8);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_conf_invite
|
||||
* Called when remote user sends you a conference invitation.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the identity the invitation was sent to
|
||||
* who - the user inviting you
|
||||
* room - the room to join
|
||||
* msg - the message
|
||||
* members - the initial members of the conference (null terminated list)
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_conf_invite) (int id,
|
||||
const char *me, const char *who, const char *room,
|
||||
const char *msg, YList *members);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_conf_userdecline
|
||||
* Called when someone declines to join the conference.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the identity in the conference
|
||||
* who - the user who has declined
|
||||
* room - the room
|
||||
* msg - the declining message
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_conf_userdecline) (int id,
|
||||
const char *me, const char *who, const char *room,
|
||||
const char *msg);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_conf_userjoin
|
||||
* Called when someone joins the conference.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the identity in the conference
|
||||
* who - the user who has joined
|
||||
* room - the room joined
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_conf_userjoin) (int id,
|
||||
const char *me, const char *who, const char *room);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_conf_userleave
|
||||
* Called when someone leaves the conference.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the identity in the conference
|
||||
* who - the user who has left
|
||||
* room - the room left
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_conf_userleave) (int id,
|
||||
const char *me, const char *who, const char *room);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_chat_cat_xml
|
||||
* Called when ?
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* xml - ?
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_chat_cat_xml) (int id,
|
||||
const char *xml);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_chat_join
|
||||
* Called when joining the chatroom.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the identity in the chatroom
|
||||
* room - the room joined, used in all other chat calls, freed by
|
||||
* library after call
|
||||
* topic - the topic of the room, freed by library after call
|
||||
* members - the initial members of the chatroom (null terminated YList
|
||||
* of yahoo_chat_member's) Must be freed by the client
|
||||
* fd - the object where the connection is coming from (for tracking)
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_chat_join) (int id, const char *me,
|
||||
const char *room, const char *topic, YList *members, void *fd);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_chat_userjoin
|
||||
* Called when someone joins the chatroom.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the identity in the chatroom
|
||||
* room - the room joined
|
||||
* who - the user who has joined, Must be freed by the client
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_chat_userjoin) (int id,
|
||||
const char *me, const char *room,
|
||||
struct yahoo_chat_member *who);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_chat_userleave
|
||||
* Called when someone leaves the chatroom.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the identity in the chatroom
|
||||
* room - the room left
|
||||
* who - the user who has left (Just the User ID)
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_chat_userleave) (int id,
|
||||
const char *me, const char *room, const char *who);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_chat_message
|
||||
* Called when someone messages in the chatroom.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the identity in the chatroom
|
||||
* room - the room
|
||||
* who - the user who messaged (Just the user id)
|
||||
* msg - the message
|
||||
* msgtype - 1 = Normal message
|
||||
* 2 = /me type message
|
||||
* utf8 - whether the message is utf8 encoded or not
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_chat_message) (int id,
|
||||
const char *me, const char *who, const char *room,
|
||||
const char *msg, int msgtype, int utf8);
|
||||
|
||||
/*
|
||||
*
|
||||
* Name: ext_yahoo_chat_yahoologout
|
||||
* called when yahoo disconnects your chat session
|
||||
* Note this is called whenver a disconnect happens, client or server
|
||||
* requested. Care should be taken to make sure you know the origin
|
||||
* of the disconnect request before doing anything here (auto-join's etc)
|
||||
* Params:
|
||||
* id - the id that identifies this connection
|
||||
* me - the identity in the chatroom
|
||||
* Returns:
|
||||
* nothing.
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_chat_yahoologout) (int id,
|
||||
const char *me);
|
||||
|
||||
/*
|
||||
*
|
||||
* Name: ext_yahoo_chat_yahooerror
|
||||
* called when yahoo sends back an error to you
|
||||
* Note this is called whenver chat message is sent into a room
|
||||
* in error (fd not connected, room doesn't exists etc)
|
||||
* Care should be taken to make sure you know the origin
|
||||
* of the error before doing anything about it.
|
||||
* Params:
|
||||
* id - the id that identifies this connection
|
||||
* me - the identity in the chatroom
|
||||
* Returns:
|
||||
* nothing.
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_chat_yahooerror) (int id,
|
||||
const char *me);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_conf_message
|
||||
* Called when someone messages in the conference.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the identity the conf message was sent to
|
||||
* who - the user who messaged
|
||||
* room - the room
|
||||
* msg - the message
|
||||
* utf8 - whether the message is utf8 encoded or not
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_conf_message) (int id,
|
||||
const char *me, const char *who, const char *room,
|
||||
const char *msg, int utf8);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_file
|
||||
* Called when someone sends you a file
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the identity the file was sent to
|
||||
* who - the user who sent the file
|
||||
* msg - the message
|
||||
* fname- the file name if direct transfer
|
||||
* fsize- the file size if direct transfer
|
||||
* trid - transfer id. Unique for this transfer
|
||||
*
|
||||
* NOTE: Subsequent callbacks for file transfer do not send all of this
|
||||
* information again since it is wasteful. Implementations are expected to
|
||||
* save this information and supply it as callback data when the file or
|
||||
* confirmation is sent
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_file) (int id, const char *me,
|
||||
const char *who, const char *msg, const char *fname,
|
||||
unsigned long fesize, char *trid);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_ft_data
|
||||
* Called multiple times when parts of the file are received
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* in - The data
|
||||
* len - Length of the data
|
||||
* data - callback data
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_ft_data) (int id,
|
||||
const unsigned char *in, int len, void *data);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_file_transfer_done
|
||||
* File transfer is done
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* result - To notify if it finished successfully or with a failure
|
||||
* data - callback data
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_file_transfer_done) (int id,
|
||||
int result, void *data);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_contact_added
|
||||
* Called when a contact is added to your list
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* myid - the identity he was added to
|
||||
* who - who was added
|
||||
* msg - any message sent
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_contact_added) (int id,
|
||||
const char *myid, const char *who, const char *msg);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_rejected
|
||||
* Called when a contact rejects your add
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* who - who rejected you
|
||||
* msg - any message sent
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_rejected) (int id, const char *who,
|
||||
const char *msg);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_typing_notify
|
||||
* Called when remote user starts or stops typing.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the handle of the identity the notification is sent to
|
||||
* who - the handle of the remote user
|
||||
* stat - 1 if typing, 0 if stopped typing
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_typing_notify) (int id,
|
||||
const char *me, const char *who, int stat);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_game_notify
|
||||
* Called when remote user starts or stops a game.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the handle of the identity the notification is sent to
|
||||
* who - the handle of the remote user
|
||||
* stat - 1 if game, 0 if stopped gaming
|
||||
* msg - game description and/or other text
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_game_notify) (int id, const char *me,
|
||||
const char *who, int stat, const char *msg);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_mail_notify
|
||||
* Called when you receive mail, or with number of messages
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* from - who the mail is from - NULL if only mail count
|
||||
* subj - the subject of the mail - NULL if only mail count
|
||||
* cnt - mail count - 0 if new mail notification
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_mail_notify) (int id,
|
||||
const char *from, const char *subj, int cnt);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_system_message
|
||||
* System message
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the handle of the identity the notification is sent to
|
||||
* who - the source of the system message (there are different types)
|
||||
* msg - the message
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_system_message) (int id,
|
||||
const char *me, const char *who, const char *msg);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_buddyicon
|
||||
* Buddy icon received
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the handle of the identity the notification is sent to
|
||||
* who - the person the buddy icon is for
|
||||
* url - the url to use to load the icon
|
||||
* checksum - the checksum of the icon content
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_buddyicon) (int id,
|
||||
const char *me, const char *who, const char *url, int checksum);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_buddyicon_checksum
|
||||
* Buddy icon checksum received
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the handle of the identity the notification is sent to
|
||||
* who - the yahoo id of the buddy icon checksum is for
|
||||
* checksum - the checksum of the icon content
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_buddyicon_checksum) (int id,
|
||||
const char *me, const char *who, int checksum);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_buddyicon_request
|
||||
* Buddy icon request received
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - the handle of the identity the notification is sent to
|
||||
* who - the yahoo id of the buddy that requested the buddy icon
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_buddyicon_request) (int id,
|
||||
const char *me, const char *who);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_buddyicon_request
|
||||
* Buddy icon request received
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* url - remote url, the uploaded buddy icon can be fetched from
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_buddyicon_uploaded) (int id,
|
||||
const char *url);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_webcam_image
|
||||
* Called when you get a webcam update
|
||||
* An update can either be receiving an image, a part of an image or
|
||||
* just an update with a timestamp
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* who - the user who's webcam we're viewing
|
||||
* image - image data
|
||||
* image_size - length of the image in bytes
|
||||
* real_size - actual length of image data
|
||||
* timestamp - milliseconds since the webcam started
|
||||
*
|
||||
* If the real_size is smaller then the image_size then only part of
|
||||
* the image has been read. This function will keep being called till
|
||||
* the total amount of bytes in image_size has been read. The image
|
||||
* received is in JPEG-2000 Code Stream Syntax (ISO/IEC 15444-1).
|
||||
* The size of the image will be either 160x120 or 320x240.
|
||||
* Each webcam image contains a timestamp. This timestamp should be
|
||||
* used to keep the image in sync since some images can take longer
|
||||
* to transport then others. When image_size is 0 we can still receive
|
||||
* a timestamp to stay in sync
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_webcam_image) (int id,
|
||||
const char *who, const unsigned char *image,
|
||||
unsigned int image_size, unsigned int real_size,
|
||||
unsigned int timestamp);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_webcam_invite
|
||||
* Called when you get a webcam invitation
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - identity the invitation is to
|
||||
* from - who the invitation is from
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_webcam_invite) (int id,
|
||||
const char *me, const char *from);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_webcam_invite_reply
|
||||
* Called when you get a response to a webcam invitation
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* me - identity the invitation response is to
|
||||
* from - who the invitation response is from
|
||||
* accept - 0 (decline), 1 (accept)
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_webcam_invite_reply) (int id,
|
||||
const char *me, const char *from, int accept);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_webcam_closed
|
||||
* Called when the webcam connection closed
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* who - the user who we where connected to
|
||||
* reason - reason why the connection closed
|
||||
* 1 = user stopped broadcasting
|
||||
* 2 = user cancelled viewing permission
|
||||
* 3 = user declines permission
|
||||
* 4 = user does not have webcam online
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_webcam_closed) (int id,
|
||||
const char *who, int reason);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_search_result
|
||||
* Called when the search result received from server
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* found - total number of results returned in the current result set
|
||||
* start - offset from where the current result set starts
|
||||
* total - total number of results available (start + found <= total)
|
||||
* contacts - the list of results as a YList of yahoo_found_contact
|
||||
* these will be freed after this function returns, so
|
||||
* if you need to use the information, make a copy
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_search_result) (int id,
|
||||
int found, int start, int total, YList *contacts);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_error
|
||||
* Called on error.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* err - the error message
|
||||
* fatal- whether this error is fatal to the connection or not
|
||||
* num - Which error is this
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_error) (int id, const char *err,
|
||||
int fatal, int num);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_webcam_viewer
|
||||
* Called when a viewer disconnects/connects/requests to connect
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* who - the viewer
|
||||
* connect - 0=disconnect 1=connect 2=request
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_webcam_viewer) (int id,
|
||||
const char *who, int connect);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_webcam_data_request
|
||||
* Called when you get a request for webcam images
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* send - whether to send images or not
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_webcam_data_request) (int id,
|
||||
int send);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_log
|
||||
* Called to log a message.
|
||||
* Params:
|
||||
* fmt - the printf formatted message
|
||||
* Returns:
|
||||
* 0
|
||||
*/
|
||||
int YAHOO_CALLBACK_TYPE(ext_yahoo_log) (const char *fmt, ...);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_add_handler
|
||||
* Add a listener for the fd. Must call yahoo_read_ready
|
||||
* when a YAHOO_INPUT_READ fd is ready and yahoo_write_ready
|
||||
* when a YAHOO_INPUT_WRITE fd is ready.
|
||||
* Params:
|
||||
* id - the id that identifies the server connection
|
||||
* fd - the fd object on which to listen
|
||||
* cond - the condition on which to call the callback
|
||||
* data - callback data to pass to yahoo_*_ready
|
||||
*
|
||||
* Returns: a tag to be used when removing the handler
|
||||
*/
|
||||
int YAHOO_CALLBACK_TYPE(ext_yahoo_add_handler) (int id, void *fd,
|
||||
yahoo_input_condition cond, void *data);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_remove_handler
|
||||
* Remove the listener for the fd.
|
||||
* Params:
|
||||
* id - the id that identifies the connection
|
||||
* tag - the handler tag to remove
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_remove_handler) (int id, int tag);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_connect
|
||||
* Connect to a host:port
|
||||
* Params:
|
||||
* host - the host to connect to
|
||||
* port - the port to connect on
|
||||
* Returns:
|
||||
* a unix file descriptor to the socket
|
||||
*/
|
||||
int YAHOO_CALLBACK_TYPE(ext_yahoo_connect) (const char *host, int port);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_connect_async
|
||||
* Connect to a host:port asynchronously. This function should return
|
||||
* immediately returing a tag used to identify the connection handler,
|
||||
* or a pre-connect error (eg: host name lookup failure).
|
||||
* Once the connect completes (successfully or unsuccessfully), callback
|
||||
* should be called (see the signature for yahoo_connect_callback).
|
||||
* The callback may safely be called before this function returns, but
|
||||
* it should not be called twice.
|
||||
* Params:
|
||||
* id - the id that identifies this connection
|
||||
* host - the host to connect to
|
||||
* port - the port to connect on
|
||||
* callback - function to call when connect completes
|
||||
* callback_data - data to pass to the callback function
|
||||
* use_ssl - Whether we need an SSL connection
|
||||
* Returns:
|
||||
* a tag signifying the connection attempt
|
||||
*/
|
||||
int YAHOO_CALLBACK_TYPE(ext_yahoo_connect_async) (int id,
|
||||
const char *host, int port, yahoo_connect_callback callback,
|
||||
void *callback_data, int use_ssl);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_get_ip_addr
|
||||
* get IP Address for a domain name
|
||||
* Params:
|
||||
* domain - Domain name
|
||||
* Returns:
|
||||
* Newly allocated string containing the IP Address in IPv4 notation
|
||||
*/
|
||||
char *YAHOO_CALLBACK_TYPE(ext_yahoo_get_ip_addr) (const char *domain);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_write
|
||||
* Write data from the buffer into the socket for the specified connection
|
||||
* Params:
|
||||
* fd - the file descriptor object that identifies this connection
|
||||
* buf - Buffer to write the data from
|
||||
* len - Length of the data
|
||||
* Returns:
|
||||
* Number of bytes written or -1 for error
|
||||
*/
|
||||
int YAHOO_CALLBACK_TYPE(ext_yahoo_write) (void *fd, char *buf, int len);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_read
|
||||
* Read data into a buffer from socket for the specified connection
|
||||
* Params:
|
||||
* fd - the file descriptor object that identifies this connection
|
||||
* buf - Buffer to read the data into
|
||||
* len - Max length to read
|
||||
* Returns:
|
||||
* Number of bytes read or -1 for error
|
||||
*/
|
||||
int YAHOO_CALLBACK_TYPE(ext_yahoo_read) (void *fd, char *buf, int len);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_close
|
||||
* Close the file descriptor object and free its resources. Libyahoo2 will not
|
||||
* use this object again.
|
||||
* Params:
|
||||
* fd - the file descriptor object that identifies this connection
|
||||
* Returns:
|
||||
* Nothing
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_close) (void *fd);
|
||||
|
||||
/*
|
||||
* Name: ext_yahoo_got_buddy_change_group
|
||||
* Acknowledgement of buddy changing group
|
||||
* Params:
|
||||
* id: client id
|
||||
* me: The user
|
||||
* who: Buddy name
|
||||
* old_group: Old group name
|
||||
* new_group: New group name
|
||||
* Returns:
|
||||
* Nothing
|
||||
*/
|
||||
void YAHOO_CALLBACK_TYPE(ext_yahoo_got_buddy_change_group) (int id,
|
||||
const char *me, const char *who, const char *old_group,
|
||||
const char *new_group);
|
||||
|
||||
};
|
||||
|
||||
/*
|
||||
* if using a callback structure, call yahoo_register_callbacks
|
||||
* before doing anything else
|
||||
*/
|
||||
void yahoo_register_callbacks(struct yahoo_callbacks *tyc);
|
||||
|
||||
#undef YAHOO_CALLBACK_TYPE
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
396
backends/libyahoo2/yahoo/yahoo2_types.h
Normal file
396
backends/libyahoo2/yahoo/yahoo2_types.h
Normal file
|
@ -0,0 +1,396 @@
|
|||
/*
|
||||
* libyahoo2: yahoo2_types.h
|
||||
*
|
||||
* Copyright (C) 2002-2004, Philip S Tellis <philip.tellis AT gmx.net>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef YAHOO2_TYPES_H
|
||||
#define YAHOO2_TYPES_H
|
||||
|
||||
#include "yahoo_list.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
enum yahoo_service { /* these are easier to see in hex */
|
||||
YAHOO_SERVICE_LOGON = 1,
|
||||
YAHOO_SERVICE_LOGOFF,
|
||||
YAHOO_SERVICE_ISAWAY,
|
||||
YAHOO_SERVICE_ISBACK,
|
||||
YAHOO_SERVICE_IDLE, /* 5 (placemarker) */
|
||||
YAHOO_SERVICE_MESSAGE,
|
||||
YAHOO_SERVICE_IDACT,
|
||||
YAHOO_SERVICE_IDDEACT,
|
||||
YAHOO_SERVICE_MAILSTAT,
|
||||
YAHOO_SERVICE_USERSTAT, /* 0xa */
|
||||
YAHOO_SERVICE_NEWMAIL,
|
||||
YAHOO_SERVICE_CHATINVITE,
|
||||
YAHOO_SERVICE_CALENDAR,
|
||||
YAHOO_SERVICE_NEWPERSONALMAIL,
|
||||
YAHOO_SERVICE_NEWCONTACT,
|
||||
YAHOO_SERVICE_ADDIDENT, /* 0x10 */
|
||||
YAHOO_SERVICE_ADDIGNORE,
|
||||
YAHOO_SERVICE_PING,
|
||||
YAHOO_SERVICE_GOTGROUPRENAME, /* < 1, 36(old), 37(new) */
|
||||
YAHOO_SERVICE_SYSMESSAGE = 0x14,
|
||||
YAHOO_SERVICE_SKINNAME = 0x15,
|
||||
YAHOO_SERVICE_PASSTHROUGH2 = 0x16,
|
||||
YAHOO_SERVICE_CONFINVITE = 0x18,
|
||||
YAHOO_SERVICE_CONFLOGON,
|
||||
YAHOO_SERVICE_CONFDECLINE,
|
||||
YAHOO_SERVICE_CONFLOGOFF,
|
||||
YAHOO_SERVICE_CONFADDINVITE,
|
||||
YAHOO_SERVICE_CONFMSG,
|
||||
YAHOO_SERVICE_CHATLOGON,
|
||||
YAHOO_SERVICE_CHATLOGOFF,
|
||||
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,
|
||||
YAHOO_SERVICE_VERIFY,
|
||||
YAHOO_SERVICE_P2PFILEXFER,
|
||||
YAHOO_SERVICE_PEERTOPEER = 0x4F, /* Checks if P2P possible */
|
||||
YAHOO_SERVICE_WEBCAM,
|
||||
YAHOO_SERVICE_AUTHRESP = 0x54,
|
||||
YAHOO_SERVICE_LIST,
|
||||
YAHOO_SERVICE_AUTH = 0x57,
|
||||
YAHOO_SERVICE_AUTHBUDDY = 0x6d,
|
||||
YAHOO_SERVICE_ADDBUDDY = 0x83,
|
||||
YAHOO_SERVICE_REMBUDDY,
|
||||
YAHOO_SERVICE_IGNORECONTACT, /* > 1, 7, 13 < 1, 66, 13, 0 */
|
||||
YAHOO_SERVICE_REJECTCONTACT,
|
||||
YAHOO_SERVICE_GROUPRENAME = 0x89, /* > 1, 65(new), 66(0), 67(old) */
|
||||
YAHOO_SERVICE_Y7_PING = 0x8A,
|
||||
YAHOO_SERVICE_CHATONLINE = 0x96, /* > 109(id), 1, 6(abcde) < 0,1 */
|
||||
YAHOO_SERVICE_CHATGOTO,
|
||||
YAHOO_SERVICE_CHATJOIN, /* > 1 104-room 129-1600326591 62-2 */
|
||||
YAHOO_SERVICE_CHATLEAVE,
|
||||
YAHOO_SERVICE_CHATEXIT = 0x9b,
|
||||
YAHOO_SERVICE_CHATADDINVITE = 0x9d,
|
||||
YAHOO_SERVICE_CHATLOGOUT = 0xa0,
|
||||
YAHOO_SERVICE_CHATPING,
|
||||
YAHOO_SERVICE_COMMENT = 0xa8,
|
||||
YAHOO_SERVICE_GAME_INVITE = 0xb7,
|
||||
YAHOO_SERVICE_STEALTH_PERM = 0xb9,
|
||||
YAHOO_SERVICE_STEALTH_SESSION = 0xba,
|
||||
YAHOO_SERVICE_AVATAR = 0xbc,
|
||||
YAHOO_SERVICE_PICTURE_CHECKSUM = 0xbd,
|
||||
YAHOO_SERVICE_PICTURE = 0xbe,
|
||||
YAHOO_SERVICE_PICTURE_UPDATE = 0xc1,
|
||||
YAHOO_SERVICE_PICTURE_UPLOAD = 0xc2,
|
||||
YAHOO_SERVICE_YAB_UPDATE = 0xc4,
|
||||
YAHOO_SERVICE_Y6_VISIBLE_TOGGLE = 0xc5, /* YMSG13, key 13: 2 = invisible, 1 = visible */
|
||||
YAHOO_SERVICE_Y6_STATUS_UPDATE = 0xc6, /* YMSG13 */
|
||||
YAHOO_SERVICE_PICTURE_STATUS = 0xc7, /* YMSG13, key 213: 0 = none, 1 = avatar, 2 = picture */
|
||||
YAHOO_SERVICE_VERIFY_ID_EXISTS = 0xc8,
|
||||
YAHOO_SERVICE_AUDIBLE = 0xd0,
|
||||
YAHOO_SERVICE_Y7_PHOTO_SHARING = 0xd2,
|
||||
YAHOO_SERVICE_Y7_CONTACT_DETAILS = 0xd3, /* YMSG13 */
|
||||
YAHOO_SERVICE_Y7_CHAT_SESSION = 0xd4,
|
||||
YAHOO_SERVICE_Y7_AUTHORIZATION = 0xd6, /* YMSG13 */
|
||||
YAHOO_SERVICE_Y7_FILETRANSFER = 0xdc, /* YMSG13 */
|
||||
YAHOO_SERVICE_Y7_FILETRANSFERINFO, /* YMSG13 */
|
||||
YAHOO_SERVICE_Y7_FILETRANSFERACCEPT, /* YMSG13 */
|
||||
YAHOO_SERVICE_Y7_MINGLE = 0xe1, /* YMSG13 */
|
||||
YAHOO_SERVICE_Y7_CHANGE_GROUP = 0xe7, /* YMSG13 */
|
||||
YAHOO_SERVICE_MYSTERY = 0xef, /* Don't know what this is for */
|
||||
YAHOO_SERVICE_Y8_STATUS = 0xf0, /* YMSG15 */
|
||||
YAHOO_SERVICE_Y8_LIST = 0Xf1, /* YMSG15 */
|
||||
YAHOO_SERVICE_MESSAGE_CONFIRM = 0xfb,
|
||||
YAHOO_SERVICE_WEBLOGIN = 0x0226,
|
||||
YAHOO_SERVICE_SMS_MSG = 0x02ea
|
||||
};
|
||||
|
||||
enum yahoo_status {
|
||||
YAHOO_STATUS_AVAILABLE = 0,
|
||||
YAHOO_STATUS_BRB,
|
||||
YAHOO_STATUS_BUSY,
|
||||
YAHOO_STATUS_NOTATHOME,
|
||||
YAHOO_STATUS_NOTATDESK,
|
||||
YAHOO_STATUS_NOTINOFFICE,
|
||||
YAHOO_STATUS_ONPHONE,
|
||||
YAHOO_STATUS_ONVACATION,
|
||||
YAHOO_STATUS_OUTTOLUNCH,
|
||||
YAHOO_STATUS_STEPPEDOUT,
|
||||
YAHOO_STATUS_INVISIBLE = 12,
|
||||
YAHOO_STATUS_CUSTOM = 99,
|
||||
YAHOO_STATUS_IDLE = 999,
|
||||
YAHOO_STATUS_OFFLINE = 0x5a55aa56 /* don't ask */
|
||||
};
|
||||
|
||||
enum ypacket_status {
|
||||
YPACKET_STATUS_DISCONNECTED = -1,
|
||||
YPACKET_STATUS_DEFAULT = 0,
|
||||
YPACKET_STATUS_SERVERACK = 1,
|
||||
YPACKET_STATUS_GAME = 0x2,
|
||||
YPACKET_STATUS_AWAY = 0x4,
|
||||
YPACKET_STATUS_CONTINUED = 0x5,
|
||||
YPACKET_STATUS_INVISIBLE = 12,
|
||||
YPACKET_STATUS_NOTIFY = 0x16, /* TYPING */
|
||||
YPACKET_STATUS_WEBLOGIN = 0x5a55aa55,
|
||||
YPACKET_STATUS_OFFLINE = 0x5a55aa56
|
||||
};
|
||||
|
||||
#define YAHOO_STATUS_GAME 0x2 /* Games don't fit into the regular status model */
|
||||
|
||||
enum yahoo_login_status {
|
||||
YAHOO_LOGIN_OK = 0,
|
||||
YAHOO_LOGIN_LOGOFF = 1,
|
||||
YAHOO_LOGIN_UNAME = 3,
|
||||
YAHOO_LOGIN_PASSWD = 13,
|
||||
YAHOO_LOGIN_LOCK = 14,
|
||||
YAHOO_LOGIN_DUPL = 99,
|
||||
YAHOO_LOGIN_SOCK = -1,
|
||||
YAHOO_LOGIN_UNKNOWN = 999
|
||||
};
|
||||
|
||||
enum yahoo_error {
|
||||
E_UNKNOWN = -1,
|
||||
E_CONNECTION = -2,
|
||||
E_SYSTEM = -3,
|
||||
E_CUSTOM = 0,
|
||||
|
||||
/* responses from ignore buddy */
|
||||
E_IGNOREDUP = 2,
|
||||
E_IGNORENONE = 3,
|
||||
E_IGNORECONF = 12,
|
||||
|
||||
/* conference */
|
||||
E_CONFNOTAVAIL = 20
|
||||
};
|
||||
|
||||
enum yahoo_log_level {
|
||||
YAHOO_LOG_NONE = 0,
|
||||
YAHOO_LOG_FATAL,
|
||||
YAHOO_LOG_ERR,
|
||||
YAHOO_LOG_WARNING,
|
||||
YAHOO_LOG_NOTICE,
|
||||
YAHOO_LOG_INFO,
|
||||
YAHOO_LOG_DEBUG
|
||||
};
|
||||
|
||||
enum yahoo_file_transfer {
|
||||
YAHOO_FILE_TRANSFER_INIT = 1,
|
||||
YAHOO_FILE_TRANSFER_ACCEPT = 3,
|
||||
YAHOO_FILE_TRANSFER_REJECT = 4,
|
||||
YAHOO_FILE_TRANSFER_DONE = 5,
|
||||
YAHOO_FILE_TRANSFER_RELAY,
|
||||
YAHOO_FILE_TRANSFER_FAILED,
|
||||
YAHOO_FILE_TRANSFER_UNKNOWN
|
||||
};
|
||||
|
||||
#define YAHOO_PROTO_VER 0x0010
|
||||
|
||||
/* Yahoo style/color directives */
|
||||
#define YAHOO_COLOR_BLACK "\033[30m"
|
||||
#define YAHOO_COLOR_BLUE "\033[31m"
|
||||
#define YAHOO_COLOR_LIGHTBLUE "\033[32m"
|
||||
#define YAHOO_COLOR_GRAY "\033[33m"
|
||||
#define YAHOO_COLOR_GREEN "\033[34m"
|
||||
#define YAHOO_COLOR_PINK "\033[35m"
|
||||
#define YAHOO_COLOR_PURPLE "\033[36m"
|
||||
#define YAHOO_COLOR_ORANGE "\033[37m"
|
||||
#define YAHOO_COLOR_RED "\033[38m"
|
||||
#define YAHOO_COLOR_OLIVE "\033[39m"
|
||||
#define YAHOO_COLOR_ANY "\033[#"
|
||||
#define YAHOO_STYLE_ITALICON "\033[2m"
|
||||
#define YAHOO_STYLE_ITALICOFF "\033[x2m"
|
||||
#define YAHOO_STYLE_BOLDON "\033[1m"
|
||||
#define YAHOO_STYLE_BOLDOFF "\033[x1m"
|
||||
#define YAHOO_STYLE_UNDERLINEON "\033[4m"
|
||||
#define YAHOO_STYLE_UNDERLINEOFF "\033[x4m"
|
||||
#define YAHOO_STYLE_URLON "\033[lm"
|
||||
#define YAHOO_STYLE_URLOFF "\033[xlm"
|
||||
|
||||
enum yahoo_connection_type {
|
||||
YAHOO_CONNECTION_PAGER = 0,
|
||||
YAHOO_CONNECTION_FT,
|
||||
YAHOO_CONNECTION_YAB,
|
||||
YAHOO_CONNECTION_WEBCAM_MASTER,
|
||||
YAHOO_CONNECTION_WEBCAM,
|
||||
YAHOO_CONNECTION_CHATCAT,
|
||||
YAHOO_CONNECTION_SEARCH,
|
||||
YAHOO_CONNECTION_AUTH
|
||||
};
|
||||
|
||||
enum yahoo_webcam_direction_type {
|
||||
YAHOO_WEBCAM_DOWNLOAD = 0,
|
||||
YAHOO_WEBCAM_UPLOAD
|
||||
};
|
||||
|
||||
enum yahoo_stealth_visibility_type {
|
||||
YAHOO_STEALTH_DEFAULT = 0,
|
||||
YAHOO_STEALTH_ONLINE,
|
||||
YAHOO_STEALTH_PERM_OFFLINE
|
||||
};
|
||||
|
||||
/* chat member attribs */
|
||||
#define YAHOO_CHAT_MALE 0x8000
|
||||
#define YAHOO_CHAT_FEMALE 0x10000
|
||||
#define YAHOO_CHAT_FEMALE 0x10000
|
||||
#define YAHOO_CHAT_DUNNO 0x400
|
||||
#define YAHOO_CHAT_WEBCAM 0x10
|
||||
|
||||
enum yahoo_webcam_conn_type { Y_WCM_DIALUP, Y_WCM_DSL, Y_WCM_T1 };
|
||||
|
||||
struct yahoo_webcam {
|
||||
int direction; /* Uploading or downloading */
|
||||
int conn_type; /* 0=Dialup, 1=DSL/Cable, 2=T1/Lan */
|
||||
|
||||
char *user; /* user we are viewing */
|
||||
char *server; /* webcam server to connect to */
|
||||
int port; /* webcam port to connect on */
|
||||
char *key; /* key to connect to the server with */
|
||||
char *description; /* webcam description */
|
||||
char *my_ip; /* own ip number */
|
||||
};
|
||||
|
||||
struct yahoo_webcam_data {
|
||||
unsigned int data_size;
|
||||
unsigned int to_read;
|
||||
unsigned int timestamp;
|
||||
unsigned char packet_type;
|
||||
};
|
||||
|
||||
struct yahoo_data {
|
||||
char *user;
|
||||
char *password;
|
||||
|
||||
char *cookie_y;
|
||||
char *cookie_t;
|
||||
char *cookie_c;
|
||||
char *cookie_b;
|
||||
char *login_cookie;
|
||||
char *crumb;
|
||||
char *seed;
|
||||
|
||||
YList *buddies;
|
||||
YList *ignore;
|
||||
YList *identities;
|
||||
char *login_id;
|
||||
|
||||
int current_status;
|
||||
int initial_status;
|
||||
int logged_in;
|
||||
|
||||
int session_id;
|
||||
|
||||
int client_id;
|
||||
|
||||
char *rawbuddylist;
|
||||
char *ignorelist;
|
||||
|
||||
void *server_settings;
|
||||
|
||||
struct yahoo_process_status_entry *half_user;
|
||||
};
|
||||
|
||||
struct yab {
|
||||
int yid;
|
||||
char *id;
|
||||
char *fname;
|
||||
char *lname;
|
||||
char *nname;
|
||||
char *email;
|
||||
char *hphone;
|
||||
char *wphone;
|
||||
char *mphone;
|
||||
int dbid;
|
||||
};
|
||||
|
||||
struct yahoo_buddy {
|
||||
char *group;
|
||||
char *id;
|
||||
char *real_name;
|
||||
struct yab *yab_entry;
|
||||
};
|
||||
|
||||
enum yahoo_search_type {
|
||||
YAHOO_SEARCH_KEYWORD = 0,
|
||||
YAHOO_SEARCH_YID,
|
||||
YAHOO_SEARCH_NAME
|
||||
};
|
||||
|
||||
enum yahoo_search_gender {
|
||||
YAHOO_GENDER_NONE = 0,
|
||||
YAHOO_GENDER_MALE,
|
||||
YAHOO_GENDER_FEMALE
|
||||
};
|
||||
|
||||
enum yahoo_search_agerange {
|
||||
YAHOO_AGERANGE_NONE = 0
|
||||
};
|
||||
|
||||
struct yahoo_found_contact {
|
||||
char *id;
|
||||
char *gender;
|
||||
char *location;
|
||||
int age;
|
||||
int online;
|
||||
};
|
||||
|
||||
/*
|
||||
* Function pointer to be passed to http get/post and send file
|
||||
*/
|
||||
typedef void (*yahoo_get_fd_callback) (int id, void *fd, int error,
|
||||
void *data);
|
||||
|
||||
/*
|
||||
* Function pointer to be passed to yahoo_get_url_handle
|
||||
*/
|
||||
typedef void (*yahoo_get_url_handle_callback) (int id, void *fd,
|
||||
int error, const char *filename, unsigned long size,
|
||||
void *data);
|
||||
|
||||
struct yahoo_chat_member {
|
||||
char *id;
|
||||
int age;
|
||||
int attribs;
|
||||
char *alias;
|
||||
char *location;
|
||||
};
|
||||
|
||||
struct yahoo_process_status_entry {
|
||||
char *name; /* 7 name */
|
||||
int state; /* 10 state */
|
||||
int flags; /* 13 flags, bit 0 = pager, bit 1 = chat, bit 2 = game */
|
||||
int mobile; /* 60 mobile */
|
||||
char *msg; /* 19 custom status message */
|
||||
int away; /* 47 away (or invisible) */
|
||||
int buddy_session; /* 11 state */
|
||||
int f17; /* 17 in chat? then what about flags? */
|
||||
int idle; /* 137 seconds idle */
|
||||
int f138; /* 138 state */
|
||||
char *f184; /* 184 state */
|
||||
int f192; /* 192 state */
|
||||
int f10001; /* 10001 state */
|
||||
int f10002; /* 10002 state */
|
||||
int f198; /* 198 state */
|
||||
char *f197; /* 197 state */
|
||||
char *f205; /* 205 state */
|
||||
int f213; /* 213 state */
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
36
backends/libyahoo2/yahoo/yahoo_debug.h
Normal file
36
backends/libyahoo2/yahoo/yahoo_debug.h
Normal file
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* libyahoo2: yahoo_debug.h
|
||||
*
|
||||
* Copyright (C) 2002-2004, Philip S Tellis <philip.tellis AT gmx.net>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
extern int yahoo_log_message(char *fmt, ...);
|
||||
|
||||
#define NOTICE(x) if(yahoo_get_log_level() >= YAHOO_LOG_NOTICE) { yahoo_log_message x; yahoo_log_message("\n"); }
|
||||
|
||||
#define LOG(x) if(yahoo_get_log_level() >= YAHOO_LOG_INFO) { yahoo_log_message("%s:%d: ", __FILE__, __LINE__); \
|
||||
yahoo_log_message x; \
|
||||
yahoo_log_message("\n"); }
|
||||
|
||||
#define WARNING(x) if(yahoo_get_log_level() >= YAHOO_LOG_WARNING) { yahoo_log_message("%s:%d: warning: ", __FILE__, __LINE__); \
|
||||
yahoo_log_message x; \
|
||||
yahoo_log_message("\n"); }
|
||||
|
||||
#define DEBUG_MSG(x) if(yahoo_get_log_level() >= YAHOO_LOG_DEBUG) { yahoo_log_message("%s:%d: debug: ", __FILE__, __LINE__); \
|
||||
yahoo_log_message x; \
|
||||
yahoo_log_message("\n"); }
|
4810
backends/libyahoo2/yahoo/yahoo_fn.c
Normal file
4810
backends/libyahoo2/yahoo/yahoo_fn.c
Normal file
File diff suppressed because it is too large
Load diff
32
backends/libyahoo2/yahoo/yahoo_fn.h
Normal file
32
backends/libyahoo2/yahoo/yahoo_fn.h
Normal file
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* libyahoo2 - originally from gaim patches by Amatus
|
||||
*
|
||||
* Copyright (C) 2003-2004
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#define IDENT 1 /* identify function */
|
||||
#define XOR 2 /* xor with arg1 */
|
||||
#define MULADD 3 /* multipy by arg1 then add arg2 */
|
||||
#define LOOKUP 4 /* lookup each byte in the table pointed to by arg1 */
|
||||
#define BITFLD 5 /* reorder bits according to table pointed to by arg1 */
|
||||
|
||||
struct yahoo_fn {
|
||||
int type;
|
||||
long arg1, arg2;
|
||||
};
|
||||
|
||||
int yahoo_xfrm(int table, int depth, int seed);
|
404
backends/libyahoo2/yahoo/yahoo_httplib.c
Normal file
404
backends/libyahoo2/yahoo/yahoo_httplib.c
Normal file
|
@ -0,0 +1,404 @@
|
|||
/*
|
||||
* libyahoo2: yahoo_httplib.c
|
||||
*
|
||||
* Copyright (C) 2002-2004, Philip S Tellis <philip.tellis AT gmx.net>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#if STDC_HEADERS
|
||||
# include <string.h>
|
||||
#else
|
||||
# if !HAVE_STRCHR
|
||||
# define strchr index
|
||||
# define strrchr rindex
|
||||
# endif
|
||||
char *strchr(), *strrchr();
|
||||
# if !HAVE_MEMCPY
|
||||
# define memcpy(d, s, n) bcopy ((s), (d), (n))
|
||||
# define memmove(d, s, n) bcopy ((s), (d), (n))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
#if HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#include <ctype.h>
|
||||
#include "yahoo2.h"
|
||||
#include "yahoo2_callbacks.h"
|
||||
#include "yahoo_httplib.h"
|
||||
#include "yahoo_util.h"
|
||||
|
||||
#include "yahoo_debug.h"
|
||||
#ifdef __MINGW32__
|
||||
# include <winsock2.h>
|
||||
# define snprintf _snprintf
|
||||
#endif
|
||||
|
||||
extern struct yahoo_callbacks *yc;
|
||||
#define YAHOO_CALLBACK(x) yc->x
|
||||
|
||||
extern enum yahoo_log_level log_level;
|
||||
|
||||
int yahoo_tcp_readline(char *ptr, int maxlen, void *fd)
|
||||
{
|
||||
int n, rc;
|
||||
char c;
|
||||
|
||||
for (n = 1; n < maxlen; n++) {
|
||||
|
||||
do {
|
||||
rc = YAHOO_CALLBACK(ext_yahoo_read) (fd, &c, 1);
|
||||
} while (rc == -1 && (errno == EINTR || errno == EAGAIN)); /* this is bad - it should be done asynchronously */
|
||||
|
||||
if (rc == 1) {
|
||||
if (c == '\r') /* get rid of \r */
|
||||
continue;
|
||||
*ptr = c;
|
||||
if (c == '\n')
|
||||
break;
|
||||
ptr++;
|
||||
} else if (rc == 0) {
|
||||
if (n == 1)
|
||||
return (0); /* EOF, no data */
|
||||
else
|
||||
break; /* EOF, w/ data */
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
*ptr = 0;
|
||||
return (n);
|
||||
}
|
||||
|
||||
static int url_to_host_port_path(const char *url,
|
||||
char *host, int *port, char *path, int *ssl)
|
||||
{
|
||||
char *urlcopy = NULL;
|
||||
char *slash = NULL;
|
||||
char *colon = NULL;
|
||||
|
||||
/*
|
||||
* http://hostname
|
||||
* http://hostname/
|
||||
* http://hostname/path
|
||||
* http://hostname/path:foo
|
||||
* http://hostname:port
|
||||
* http://hostname:port/
|
||||
* http://hostname:port/path
|
||||
* http://hostname:port/path:foo
|
||||
* and https:// variants of the above
|
||||
*/
|
||||
|
||||
if (strstr(url, "http://") == url) {
|
||||
urlcopy = strdup(url + 7);
|
||||
} else if (strstr(url, "https://") == url) {
|
||||
urlcopy = strdup(url + 8);
|
||||
*ssl = 1;
|
||||
} else {
|
||||
WARNING(("Weird url - unknown protocol: %s", url));
|
||||
return 0;
|
||||
}
|
||||
|
||||
slash = strchr(urlcopy, '/');
|
||||
colon = strchr(urlcopy, ':');
|
||||
|
||||
if (!colon || (slash && slash < colon)) {
|
||||
if (*ssl)
|
||||
*port = 443;
|
||||
else
|
||||
*port = 80;
|
||||
} else {
|
||||
*colon = 0;
|
||||
*port = atoi(colon + 1);
|
||||
}
|
||||
|
||||
if (!slash) {
|
||||
strcpy(path, "/");
|
||||
} else {
|
||||
strcpy(path, slash);
|
||||
*slash = 0;
|
||||
}
|
||||
|
||||
strcpy(host, urlcopy);
|
||||
|
||||
FREE(urlcopy);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int isurlchar(unsigned char c)
|
||||
{
|
||||
return (isalnum(c));
|
||||
}
|
||||
|
||||
char *yahoo_urlencode(const char *instr)
|
||||
{
|
||||
int ipos = 0, bpos = 0;
|
||||
char *str = NULL;
|
||||
int len = strlen(instr);
|
||||
|
||||
if (!(str = y_new(char, 3 *len + 1)))
|
||||
return "";
|
||||
|
||||
while (instr[ipos]) {
|
||||
while (isurlchar(instr[ipos]))
|
||||
str[bpos++] = instr[ipos++];
|
||||
if (!instr[ipos])
|
||||
break;
|
||||
|
||||
snprintf(&str[bpos], 4, "%%%02x", instr[ipos] & 0xff);
|
||||
bpos += 3;
|
||||
ipos++;
|
||||
}
|
||||
str[bpos] = '\0';
|
||||
|
||||
/* free extra alloc'ed mem. */
|
||||
len = strlen(str);
|
||||
str = y_renew(char, str, len + 1);
|
||||
|
||||
return (str);
|
||||
}
|
||||
|
||||
char *yahoo_urldecode(const char *instr)
|
||||
{
|
||||
int ipos = 0, bpos = 0;
|
||||
char *str = NULL;
|
||||
char entity[3] = { 0, 0, 0 };
|
||||
unsigned dec;
|
||||
int len = strlen(instr);
|
||||
|
||||
if (!(str = y_new(char, len + 1)))
|
||||
return "";
|
||||
|
||||
while (instr[ipos]) {
|
||||
while (instr[ipos] && instr[ipos] != '%')
|
||||
if (instr[ipos] == '+') {
|
||||
str[bpos++] = ' ';
|
||||
ipos++;
|
||||
} else
|
||||
str[bpos++] = instr[ipos++];
|
||||
if (!instr[ipos])
|
||||
break;
|
||||
|
||||
if (instr[ipos + 1] && instr[ipos + 2]) {
|
||||
ipos++;
|
||||
entity[0] = instr[ipos++];
|
||||
entity[1] = instr[ipos++];
|
||||
sscanf(entity, "%2x", &dec);
|
||||
str[bpos++] = (char)dec;
|
||||
} else {
|
||||
str[bpos++] = instr[ipos++];
|
||||
}
|
||||
}
|
||||
str[bpos] = '\0';
|
||||
|
||||
/* free extra alloc'ed mem. */
|
||||
len = strlen(str);
|
||||
str = y_renew(char, str, len + 1);
|
||||
|
||||
return (str);
|
||||
}
|
||||
|
||||
char *yahoo_xmldecode(const char *instr)
|
||||
{
|
||||
int ipos = 0, bpos = 0, epos = 0;
|
||||
char *str = NULL;
|
||||
char entity[4] = { 0, 0, 0, 0 };
|
||||
char *entitymap[5][2] = {
|
||||
{"amp;", "&"},
|
||||
{"quot;", "\""},
|
||||
{"lt;", "<"},
|
||||
{"gt;", "<"},
|
||||
{"nbsp;", " "}
|
||||
};
|
||||
unsigned dec;
|
||||
int len = strlen(instr);
|
||||
|
||||
if (!(str = y_new(char, len + 1)))
|
||||
return "";
|
||||
|
||||
while (instr[ipos]) {
|
||||
while (instr[ipos] && instr[ipos] != '&')
|
||||
if (instr[ipos] == '+') {
|
||||
str[bpos++] = ' ';
|
||||
ipos++;
|
||||
} else
|
||||
str[bpos++] = instr[ipos++];
|
||||
if (!instr[ipos] || !instr[ipos + 1])
|
||||
break;
|
||||
ipos++;
|
||||
|
||||
if (instr[ipos] == '#') {
|
||||
ipos++;
|
||||
epos = 0;
|
||||
while (instr[ipos] != ';')
|
||||
entity[epos++] = instr[ipos++];
|
||||
sscanf(entity, "%u", &dec);
|
||||
str[bpos++] = (char)dec;
|
||||
ipos++;
|
||||
} else {
|
||||
int i;
|
||||
for (i = 0; i < 5; i++)
|
||||
if (!strncmp(instr + ipos, entitymap[i][0],
|
||||
strlen(entitymap[i][0]))) {
|
||||
str[bpos++] = entitymap[i][1][0];
|
||||
ipos += strlen(entitymap[i][0]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
str[bpos] = '\0';
|
||||
|
||||
/* free extra alloc'ed mem. */
|
||||
len = strlen(str);
|
||||
str = y_renew(char, str, len + 1);
|
||||
|
||||
return (str);
|
||||
}
|
||||
|
||||
typedef void (*http_connected) (int id, void *fd, int error);
|
||||
|
||||
struct callback_data {
|
||||
int id;
|
||||
yahoo_get_fd_callback callback;
|
||||
char *request;
|
||||
void *user_data;
|
||||
};
|
||||
|
||||
static void connect_complete(void *fd, int error, void *data)
|
||||
{
|
||||
struct callback_data *ccd = data;
|
||||
if (error == 0)
|
||||
YAHOO_CALLBACK(ext_yahoo_write) (fd, ccd->request,
|
||||
strlen(ccd->request));
|
||||
free(ccd->request);
|
||||
ccd->callback(ccd->id, fd, error, ccd->user_data);
|
||||
FREE(ccd);
|
||||
}
|
||||
|
||||
static void yahoo_send_http_request(int id, char *host, int port, char *request,
|
||||
yahoo_get_fd_callback callback, void *data, int use_ssl)
|
||||
{
|
||||
struct callback_data *ccd = y_new0(struct callback_data, 1);
|
||||
ccd->callback = callback;
|
||||
ccd->id = id;
|
||||
ccd->request = strdup(request);
|
||||
ccd->user_data = data;
|
||||
|
||||
YAHOO_CALLBACK(ext_yahoo_connect_async) (id, host, port,
|
||||
connect_complete, ccd, use_ssl);
|
||||
}
|
||||
|
||||
void yahoo_http_post(int id, const char *url, const char *cookies,
|
||||
long content_length, yahoo_get_fd_callback callback, void *data)
|
||||
{
|
||||
char host[255];
|
||||
int port = 80;
|
||||
char path[255];
|
||||
char buff[1024];
|
||||
int ssl = 0;
|
||||
|
||||
if (!url_to_host_port_path(url, host, &port, path, &ssl))
|
||||
return;
|
||||
|
||||
/* thanks to kopete dumpcap */
|
||||
snprintf(buff, sizeof(buff),
|
||||
"POST %s HTTP/1.1\r\n"
|
||||
"Cookie: %s\r\n"
|
||||
"User-Agent: Mozilla/5.0\r\n"
|
||||
"Host: %s\r\n"
|
||||
"Content-Length: %ld\r\n"
|
||||
"Cache-Control: no-cache\r\n"
|
||||
"\r\n", path, cookies, host, content_length);
|
||||
|
||||
yahoo_send_http_request(id, host, port, buff, callback, data, ssl);
|
||||
}
|
||||
|
||||
void yahoo_http_get(int id, const char *url, const char *cookies, int http11,
|
||||
int keepalive, yahoo_get_fd_callback callback, void *data)
|
||||
{
|
||||
char host[255];
|
||||
int port = 80;
|
||||
char path[255];
|
||||
char buff[2048];
|
||||
char cookiebuff[1024];
|
||||
int ssl = 0;
|
||||
|
||||
if (!url_to_host_port_path(url, host, &port, path, &ssl))
|
||||
return;
|
||||
|
||||
/* Allow cases when we don't need to send a cookie */
|
||||
if (cookies)
|
||||
snprintf(cookiebuff, sizeof(cookiebuff), "Cookie: %s\r\n",
|
||||
cookies);
|
||||
else
|
||||
cookiebuff[0] = '\0';
|
||||
|
||||
snprintf(buff, sizeof(buff),
|
||||
"GET %s HTTP/1.%s\r\n"
|
||||
"%sHost: %s\r\n"
|
||||
"User-Agent: Mozilla/4.5 [en] (" "1" "/" "1" ")\r\n"
|
||||
"Accept: */*\r\n"
|
||||
"%s" "\r\n", path, http11?"1":"0", cookiebuff, host,
|
||||
keepalive? "Connection: Keep-Alive\r\n":"Connection: close\r\n");
|
||||
|
||||
yahoo_send_http_request(id, host, port, buff, callback, data, ssl);
|
||||
}
|
||||
|
||||
void yahoo_http_head(int id, const char *url, const char *cookies, int len,
|
||||
char *payload, yahoo_get_fd_callback callback, void *data)
|
||||
{
|
||||
char host[255];
|
||||
int port = 80;
|
||||
char path[255];
|
||||
char buff[2048];
|
||||
char cookiebuff[1024];
|
||||
int ssl = 0;
|
||||
|
||||
if (!url_to_host_port_path(url, host, &port, path, &ssl))
|
||||
return;
|
||||
|
||||
/* Allow cases when we don't need to send a cookie */
|
||||
if (cookies)
|
||||
snprintf(cookiebuff, sizeof(cookiebuff), "Cookie: %s\r\n",
|
||||
cookies);
|
||||
else
|
||||
cookiebuff[0] = '\0';
|
||||
|
||||
snprintf(buff, sizeof(buff),
|
||||
"HEAD %s HTTP/1.0\r\n"
|
||||
"Accept: */*\r\n"
|
||||
"Host: %s:%d\r\n"
|
||||
"User-Agent: Mozilla/4.5 [en] (" "1" "/" "1" ")\r\n"
|
||||
"%s"
|
||||
"Content-Length: %d\r\n"
|
||||
"Cache-Control: no-cache\r\n"
|
||||
"\r\n%s", path, host, port, cookiebuff, len,
|
||||
payload?payload:"");
|
||||
|
||||
yahoo_send_http_request(id, host, port, buff, callback, data, ssl);
|
||||
}
|
||||
|
48
backends/libyahoo2/yahoo/yahoo_httplib.h
Normal file
48
backends/libyahoo2/yahoo/yahoo_httplib.h
Normal file
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* libyahoo2: yahoo_httplib.h
|
||||
*
|
||||
* Copyright (C) 2002-2004, Philip S Tellis <philip.tellis AT gmx.net>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef YAHOO_HTTPLIB_H
|
||||
#define YAHOO_HTTPLIB_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "yahoo2_types.h"
|
||||
|
||||
char *yahoo_urlencode(const char *instr);
|
||||
char *yahoo_urldecode(const char *instr);
|
||||
char *yahoo_xmldecode(const char *instr);
|
||||
|
||||
int yahoo_tcp_readline(char *ptr, int maxlen, void *fd);
|
||||
void yahoo_http_post(int id, const char *url, const char *cookies,
|
||||
long size, yahoo_get_fd_callback callback, void *data);
|
||||
void yahoo_http_get(int id, const char *url, const char *cookies,
|
||||
int http11, int keepalive, yahoo_get_fd_callback callback,
|
||||
void *data);
|
||||
void yahoo_http_head(int id, const char *url, const char *cookies,
|
||||
int size, char *payload, yahoo_get_fd_callback callback,
|
||||
void *data);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
233
backends/libyahoo2/yahoo/yahoo_list.c
Normal file
233
backends/libyahoo2/yahoo/yahoo_list.c
Normal file
|
@ -0,0 +1,233 @@
|
|||
/*
|
||||
* yahoo_list.c: linked list routines
|
||||
*
|
||||
* Some code copyright (C) 2002-2004, Philip S Tellis <philip.tellis AT gmx.net>
|
||||
* Other code copyright Meredydd Luff <meredydd AT everybuddy.com>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* Some of this code was borrowed from elist.c in the eb-lite sources
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "yahoo_list.h"
|
||||
|
||||
YList *y_list_append(YList *list, void *data)
|
||||
{
|
||||
YList *n;
|
||||
YList *new_list = malloc(sizeof(YList));
|
||||
YList *attach_to = NULL;
|
||||
|
||||
new_list->next = NULL;
|
||||
new_list->data = data;
|
||||
|
||||
for (n = list; n != NULL; n = n->next) {
|
||||
attach_to = n;
|
||||
}
|
||||
|
||||
if (attach_to == NULL) {
|
||||
new_list->prev = NULL;
|
||||
return new_list;
|
||||
} else {
|
||||
new_list->prev = attach_to;
|
||||
attach_to->next = new_list;
|
||||
return list;
|
||||
}
|
||||
}
|
||||
|
||||
YList *y_list_prepend(YList *list, void *data)
|
||||
{
|
||||
YList *n = malloc(sizeof(YList));
|
||||
|
||||
n->next = list;
|
||||
n->prev = NULL;
|
||||
n->data = data;
|
||||
if (list)
|
||||
list->prev = n;
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
YList *y_list_concat(YList *list, YList *add)
|
||||
{
|
||||
YList *l;
|
||||
|
||||
if (!list)
|
||||
return add;
|
||||
|
||||
if (!add)
|
||||
return list;
|
||||
|
||||
for (l = list; l->next; l = l->next) ;
|
||||
|
||||
l->next = add;
|
||||
add->prev = l;
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
YList *y_list_remove(YList *list, void *data)
|
||||
{
|
||||
YList *n;
|
||||
|
||||
for (n = list; n != NULL; n = n->next) {
|
||||
if (n->data == data) {
|
||||
list = y_list_remove_link(list, n);
|
||||
y_list_free_1(n);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/* Warning */
|
||||
/* link MUST be part of list */
|
||||
/* caller must free link using y_list_free_1 */
|
||||
YList *y_list_remove_link(YList *list, const YList *link)
|
||||
{
|
||||
if (!link)
|
||||
return list;
|
||||
|
||||
if (link->next)
|
||||
link->next->prev = link->prev;
|
||||
if (link->prev)
|
||||
link->prev->next = link->next;
|
||||
|
||||
if (link == list)
|
||||
list = link->next;
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
int y_list_length(const YList *list)
|
||||
{
|
||||
int retval = 0;
|
||||
const YList *n = list;
|
||||
|
||||
for (n = list; n != NULL; n = n->next) {
|
||||
retval++;
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* well, you could just check for list == NULL, but that would be
|
||||
* implementation dependent
|
||||
*/
|
||||
int y_list_empty(const YList *list)
|
||||
{
|
||||
if (!list)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
int y_list_singleton(const YList *list)
|
||||
{
|
||||
if (!list || list->next)
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
YList *y_list_copy(YList *list)
|
||||
{
|
||||
YList *n;
|
||||
YList *copy = NULL;
|
||||
|
||||
for (n = list; n != NULL; n = n->next) {
|
||||
copy = y_list_append(copy, n->data);
|
||||
}
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
void y_list_free_1(YList *list)
|
||||
{
|
||||
free(list);
|
||||
}
|
||||
|
||||
void y_list_free(YList *list)
|
||||
{
|
||||
YList *n = list;
|
||||
|
||||
while (n != NULL) {
|
||||
YList *next = n->next;
|
||||
free(n);
|
||||
n = next;
|
||||
}
|
||||
}
|
||||
|
||||
YList *y_list_find(YList *list, const void *data)
|
||||
{
|
||||
YList *l;
|
||||
for (l = list; l && l->data != data; l = l->next) ;
|
||||
|
||||
return l;
|
||||
}
|
||||
|
||||
void y_list_foreach(YList *list, YListFunc fn, void *user_data)
|
||||
{
|
||||
for (; list; list = list->next)
|
||||
fn(list->data, user_data);
|
||||
}
|
||||
|
||||
YList *y_list_find_custom(YList *list, const void *data, YListCompFunc comp)
|
||||
{
|
||||
YList *l;
|
||||
for (l = list; l; l = l->next)
|
||||
if (comp(l->data, data) == 0)
|
||||
return l;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
YList *y_list_nth(YList *list, int n)
|
||||
{
|
||||
int i = n;
|
||||
for (; list && i; list = list->next, i--) ;
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
YList *y_list_insert_sorted(YList *list, void *data, YListCompFunc comp)
|
||||
{
|
||||
YList *l, *n, *prev = NULL;
|
||||
if (!list)
|
||||
return y_list_append(list, data);
|
||||
|
||||
n = malloc(sizeof(YList));
|
||||
n->data = data;
|
||||
for (l = list; l && comp(l->data, n->data) <= 0; l = l->next)
|
||||
prev = l;
|
||||
|
||||
if (l) {
|
||||
n->prev = l->prev;
|
||||
l->prev = n;
|
||||
} else
|
||||
n->prev = prev;
|
||||
|
||||
n->next = l;
|
||||
|
||||
if (n->prev) {
|
||||
n->prev->next = n;
|
||||
return list;
|
||||
} else {
|
||||
return n;
|
||||
}
|
||||
|
||||
}
|
76
backends/libyahoo2/yahoo/yahoo_list.h
Normal file
76
backends/libyahoo2/yahoo/yahoo_list.h
Normal file
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
* yahoo_list.h: linked list routines
|
||||
*
|
||||
* Some code copyright (C) 2002-2004, Philip S Tellis <philip.tellis AT gmx.net>
|
||||
* Other code copyright Meredydd Luff <meredydd AT everybuddy.com>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This is a replacement for the GList. It only provides functions that
|
||||
* we use in Ayttm. Thanks to Meredyyd from everybuddy dev for doing
|
||||
* most of it.
|
||||
*/
|
||||
|
||||
#ifndef __YLIST_H__
|
||||
#define __YLIST_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct _YList {
|
||||
struct _YList *next;
|
||||
struct _YList *prev;
|
||||
void *data;
|
||||
} YList;
|
||||
|
||||
typedef int (*YListCompFunc) (const void *, const void *);
|
||||
typedef void (*YListFunc) (void *, void *);
|
||||
|
||||
YList *y_list_append(YList *list, void *data);
|
||||
YList *y_list_prepend(YList *list, void *data);
|
||||
YList *y_list_remove_link(YList *list, const YList *link);
|
||||
YList *y_list_remove(YList *list, void *data);
|
||||
|
||||
YList *y_list_insert_sorted(YList *list, void *data,
|
||||
YListCompFunc comp);
|
||||
|
||||
YList *y_list_copy(YList *list);
|
||||
|
||||
YList *y_list_concat(YList *list, YList *add);
|
||||
|
||||
YList *y_list_find(YList *list, const void *data);
|
||||
YList *y_list_find_custom(YList *list, const void *data,
|
||||
YListCompFunc comp);
|
||||
|
||||
YList *y_list_nth(YList *list, int n);
|
||||
|
||||
void y_list_foreach(YList *list, YListFunc fn, void *user_data);
|
||||
|
||||
void y_list_free_1(YList *list);
|
||||
void y_list_free(YList *list);
|
||||
int y_list_length(const YList *list);
|
||||
int y_list_empty(const YList *list);
|
||||
int y_list_singleton(const YList *list);
|
||||
|
||||
#define y_list_next(list) list->next
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
162
backends/libyahoo2/yahoo/yahoo_util.c
Normal file
162
backends/libyahoo2/yahoo/yahoo_util.c
Normal file
|
@ -0,0 +1,162 @@
|
|||
/*
|
||||
* libyahoo2: yahoo_util.c
|
||||
*
|
||||
* Copyright (C) 2002-2004, Philip S Tellis <philip.tellis AT gmx.net>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if STDC_HEADERS
|
||||
# include <string.h>
|
||||
#else
|
||||
# if !HAVE_STRCHR
|
||||
# define strchr index
|
||||
# define strrchr rindex
|
||||
# endif
|
||||
char *strchr(), *strrchr();
|
||||
# if !HAVE_MEMCPY
|
||||
# define memcpy(d, s, n) bcopy ((s), (d), (n))
|
||||
# define memmove(d, s, n) bcopy ((s), (d), (n))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "yahoo_util.h"
|
||||
|
||||
char *y_string_append(char *string, char *append)
|
||||
{
|
||||
int size = strlen(string) + strlen(append) + 1;
|
||||
char *new_string = y_renew(char, string, size);
|
||||
|
||||
if (new_string == NULL) {
|
||||
new_string = y_new(char, size);
|
||||
strcpy(new_string, string);
|
||||
FREE(string);
|
||||
}
|
||||
|
||||
strcat(new_string, append);
|
||||
|
||||
return new_string;
|
||||
}
|
||||
|
||||
char *y_str_to_utf8(const char *in)
|
||||
{
|
||||
unsigned int n, i = 0;
|
||||
char *result = NULL;
|
||||
|
||||
if (in == NULL || *in == '\0')
|
||||
return strdup("");
|
||||
|
||||
result = y_new(char, strlen(in) * 2 + 1);
|
||||
|
||||
/* convert a string to UTF-8 Format */
|
||||
for (n = 0; n < strlen(in); n++) {
|
||||
unsigned char c = (unsigned char)in[n];
|
||||
|
||||
if (c < 128) {
|
||||
result[i++] = (char)c;
|
||||
} else {
|
||||
result[i++] = (char)((c >> 6) | 192);
|
||||
result[i++] = (char)((c & 63) | 128);
|
||||
}
|
||||
}
|
||||
result[i] = '\0';
|
||||
return result;
|
||||
}
|
||||
|
||||
char *y_utf8_to_str(const char *in)
|
||||
{
|
||||
int i = 0;
|
||||
unsigned int n;
|
||||
char *result = NULL;
|
||||
|
||||
if (in == NULL || *in == '\0')
|
||||
return strdup("");
|
||||
|
||||
result = y_new(char, strlen(in) + 1);
|
||||
|
||||
/* convert a string from UTF-8 Format */
|
||||
for (n = 0; n < strlen(in); n++) {
|
||||
unsigned char c = in[n];
|
||||
|
||||
if (c < 128) {
|
||||
result[i++] = (char)c;
|
||||
} else {
|
||||
result[i++] = (c << 6) | (in[++n] & 63);
|
||||
}
|
||||
}
|
||||
result[i] = '\0';
|
||||
return result;
|
||||
}
|
||||
|
||||
#if !HAVE_GLIB
|
||||
|
||||
void y_strfreev(char **vector)
|
||||
{
|
||||
char **v;
|
||||
for (v = vector; *v; v++) {
|
||||
FREE(*v);
|
||||
}
|
||||
FREE(vector);
|
||||
}
|
||||
|
||||
char **y_strsplit(char *str, char *sep, int nelem)
|
||||
{
|
||||
char **vector;
|
||||
char *s, *p;
|
||||
int i = 0;
|
||||
int l = strlen(sep);
|
||||
if (nelem <= 0) {
|
||||
char *s;
|
||||
nelem = 0;
|
||||
if (*str) {
|
||||
for (s = strstr(str, sep); s;
|
||||
s = strstr(s + l, sep), nelem++) ;
|
||||
if (strcmp(str + strlen(str) - l, sep))
|
||||
nelem++;
|
||||
}
|
||||
}
|
||||
|
||||
vector = y_new(char *, nelem + 1);
|
||||
|
||||
for (p = str, s = strstr(p, sep); i < nelem && s;
|
||||
p = s + l, s = strstr(p, sep), i++) {
|
||||
int len = s - p;
|
||||
vector[i] = y_new(char, len + 1);
|
||||
strncpy(vector[i], p, len);
|
||||
vector[i][len] = '\0';
|
||||
}
|
||||
|
||||
if (i < nelem && *str) /* str didn't end with sep, and str isn't empty */
|
||||
vector[i++] = strdup(p);
|
||||
|
||||
vector[i] = NULL;
|
||||
|
||||
return vector;
|
||||
}
|
||||
|
||||
void *y_memdup(const void *addr, int n)
|
||||
{
|
||||
void *new_chunk = malloc(n);
|
||||
if (new_chunk)
|
||||
memcpy(new_chunk, addr, n);
|
||||
return new_chunk;
|
||||
}
|
||||
|
||||
#endif
|
103
backends/libyahoo2/yahoo/yahoo_util.h
Normal file
103
backends/libyahoo2/yahoo/yahoo_util.h
Normal file
|
@ -0,0 +1,103 @@
|
|||
/*
|
||||
* libyahoo2: yahoo_util.h
|
||||
*
|
||||
* Copyright (C) 2002-2004, Philip S Tellis <philip.tellis AT gmx.net>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __YAHOO_UTIL_H__
|
||||
#define __YAHOO_UTIL_H__
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_GLIB
|
||||
# include <glib.h>
|
||||
|
||||
# define FREE(x) if(x) {g_free(x); x=NULL;}
|
||||
|
||||
# define y_new g_new
|
||||
# define y_new0 g_new0
|
||||
# define y_renew g_renew
|
||||
|
||||
# define y_memdup g_memdup
|
||||
# define y_strsplit g_strsplit
|
||||
# define y_strfreev g_strfreev
|
||||
# ifndef strdup
|
||||
# define strdup g_strdup
|
||||
# endif
|
||||
# ifndef strncasecmp
|
||||
# define strncasecmp g_strncasecmp
|
||||
# define strcasecmp g_strcasecmp
|
||||
# endif
|
||||
|
||||
# define snprintf g_snprintf
|
||||
# define vsnprintf g_vsnprintf
|
||||
|
||||
#else
|
||||
|
||||
# include <stdlib.h>
|
||||
# include <stdarg.h>
|
||||
|
||||
# define FREE(x) if(x) {free(x); x=NULL;}
|
||||
|
||||
# define y_new(type, n) (type *)malloc(sizeof(type) * (n))
|
||||
# define y_new0(type, n) (type *)calloc((n), sizeof(type))
|
||||
# define y_renew(type, mem, n) (type *)realloc(mem, n)
|
||||
|
||||
void *y_memdup(const void *addr, int n);
|
||||
char **y_strsplit(char *str, char *sep, int nelem);
|
||||
void y_strfreev(char **vector);
|
||||
|
||||
#ifndef _WIN32
|
||||
int strncasecmp(const char *s1, const char *s2, size_t n);
|
||||
int strcasecmp(const char *s1, const char *s2);
|
||||
|
||||
char *strdup(const char *s);
|
||||
|
||||
int snprintf(char *str, size_t size, const char *format, ...);
|
||||
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#endif
|
||||
|
||||
#ifndef FALSE
|
||||
#define FALSE 0
|
||||
#endif
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(x,y) ((x)<(y)?(x):(y))
|
||||
#endif
|
||||
|
||||
#ifndef MAX
|
||||
#define MAX(x,y) ((x)>(y)?(x):(y))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The following three functions return newly allocated memory.
|
||||
* You must free it yourself
|
||||
*/
|
||||
char *y_string_append(char *str, char *append);
|
||||
char *y_str_to_utf8(const char *in);
|
||||
char *y_utf8_to_str(const char *in);
|
||||
|
||||
#endif
|
Loading…
Add table
Reference in a new issue