diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..547646a --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +Makefile +config.h diff --git a/Makefile b/Makefile deleted file mode 100644 index c7e68f3..0000000 --- a/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -srcdir=. - -CFLAGS=-g -O2 -LDFLAGS= -CPPFLAGS= -DEFS=-DHAVE_CONFIG_H -COMPILE_FLAGS=${CFLAGS} ${CPPFLAGS} ${DEFS} -Wall -Wextra -Werror -Wno-deprecated -fno-strict-aliasing -fno-omit-frame-pointer -ggdb - -EXTRA_LIBS= -lreadline -lrt -lconfig -LOCAL_LDFLAGS=-lm -lcrypto -lz -lssl -rdynamic -ggdb ${EXTRA_LIBS} -LINK_FLAGS=${LDFLAGS} ${LOCAL_LDFLAGS} - -HEADERS= ${srcdir}/constants.h ${srcdir}/include.h ${srcdir}/interface.h ${srcdir}/LICENSE.h ${srcdir}/loop.h ${srcdir}/mtproto-client.h ${srcdir}/mtproto-common.h ${srcdir}/net.h ${srcdir}/no-preview.h ${srcdir}/queries.h ${srcdir}/structures.h ${srcdir}/telegram.h ${srcdir}/tree.h ${srcdir}/config.h ${srcdir}/binlog.h -INCLUDE=-I. -I${srcdir} -CC=gcc -OBJECTS=main.o loop.o interface.o net.o mtproto-common.o mtproto-client.o queries.o structures.o binlog.o - -.SUFFIXES: - -.SUFFIXES: .c .h .o - -all: telegram - -${OBJECTS}: ${HEADERS} - -telegram: ${OBJECTS} - ${CC} ${OBJECTS} ${LINK_FLAGS} -o $@ - -.c.o : - ${CC} ${COMPILE_FLAGS} ${INCLUDE} -c $< -o $@ - - -clean: - rm -rf *.o telegram > /dev/null || echo "all clean" - diff --git a/Makefile.in b/Makefile.in index 1bf9014..6600ce9 100644 --- a/Makefile.in +++ b/Makefile.in @@ -7,7 +7,7 @@ DEFS=@DEFS@ COMPILE_FLAGS=${CFLAGS} ${CPPFLAGS} ${DEFS} -Wall -Wextra -Werror -Wno-deprecated -fno-strict-aliasing -fno-omit-frame-pointer -ggdb EXTRA_LIBS=@EXTRA_LIBS@ -LOCAL_LDFLAGS=-lm -lcrypto -lz -lssl -rdynamic -ggdb ${EXTRA_LIBS} +LOCAL_LDFLAGS=-lm -lcrypto -lz -lssl -rdynamic -ggdb -lconfig -lreadline -lexecinfo ${EXTRA_LIBS} LINK_FLAGS=${LDFLAGS} ${LOCAL_LDFLAGS} HEADERS= ${srcdir}/constants.h ${srcdir}/include.h ${srcdir}/interface.h ${srcdir}/LICENSE.h ${srcdir}/loop.h ${srcdir}/mtproto-client.h ${srcdir}/mtproto-common.h ${srcdir}/net.h ${srcdir}/no-preview.h ${srcdir}/queries.h ${srcdir}/structures.h ${srcdir}/telegram.h ${srcdir}/tree.h ${srcdir}/config.h ${srcdir}/binlog.h @@ -31,5 +31,5 @@ telegram: ${OBJECTS} clean: - rm -rf *.o telegram > /dev/null || echo "all clean" + rm -rf *.o telegram config.log config.status > /dev/null || echo "all clean" diff --git a/README.md b/README.md index c82dee5..e82c523 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,18 @@ The client depends on [readline library](http://cnswww.cns.cwru.edu/php/chet/rea $ ./configure && make Thanks to [@jfontan](https://github.com/vysheng/tg/issues/3#issuecomment-28293731) for this solution. + +#### FreeBSD + +Install these ports: + +* devel/libconfig +* devel/libexecinfo + +Then build: + + $ env CC=clang CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ./configure + $ make #### Other UNIX diff --git a/config.h b/config.h deleted file mode 100644 index 73aaaf3..0000000 --- a/config.h +++ /dev/null @@ -1,106 +0,0 @@ -/* config.h. Generated from config.h.in by configure. */ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* enable libconfig */ -#define ENABLE_LIBCONFIG 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_FCNTL_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the `crypto' library (-lcrypto). */ -#define HAVE_LIBCRYPTO 1 - -/* Define to 1 if you have the `edit' library (-ledit). */ -/* #undef HAVE_LIBEDIT */ - -/* Define to 1 if you have the `m' library (-lm). */ -#define HAVE_LIBM 1 - -/* Define to 1 if your system has a GNU libc compatible `malloc' function, and - to 0 otherwise. */ -#define HAVE_MALLOC 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MALLOC_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have the `memset' function. */ -#define HAVE_MEMSET 1 - -/* Define to 1 if your system has a GNU libc compatible `realloc' function, - and to 0 otherwise. */ -#define HAVE_REALLOC 1 - -/* Define to 1 if you have the `select' function. */ -#define HAVE_SELECT 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the `strdup' function. */ -#define HAVE_STRDUP 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the `strndup' function. */ -#define HAVE_STRNDUP 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_SOCKET_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "telegram" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "telegram 0.1" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "telegram" - -/* Define to the home page for this package. */ -#define PACKAGE_URL "" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "0.1" - -/* Use libedit */ -/* #undef READLINE_EDIT */ - -/* Use gnu libreadline */ -#define READLINE_GNU 1 - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Define to rpl_malloc if the replacement function should be used. */ -/* #undef malloc */ - -/* Define to rpl_realloc if the replacement function should be used. */ -/* #undef realloc */ - -/* Define to `unsigned int' if does not define. */ -/* #undef size_t */ diff --git a/loop.c b/loop.c index 970c1a7..1dd73f8 100644 --- a/loop.c +++ b/loop.c @@ -18,6 +18,7 @@ */ #define READLINE_CALLBACKS #include "config.h" +#define _GNU_SOURCE #include #include diff --git a/mtproto-client.c b/mtproto-client.c index 4c86857..b766c40 100644 --- a/mtproto-client.c +++ b/mtproto-client.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -34,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -46,6 +48,10 @@ #include "structures.h" #include "binlog.h" +#if defined(__FreeBSD__) +#define __builtin_bswap32(x) bswap32(x) +#endif + #define sha1 SHA1 #include "mtproto-common.h" @@ -1585,7 +1591,7 @@ int rpc_execute (struct connection *c, int op, int len) { logprintf ( "have %d Response bytes\n", Response_len); } -#ifndef __MACH__ +#if !defined(__MACH__) && !defined(__FreeBSD__) setsockopt (c->fd, IPPROTO_TCP, TCP_QUICKACK, (int[]){0}, 4); #endif int o = c_state; @@ -1593,19 +1599,19 @@ int rpc_execute (struct connection *c, int op, int len) { switch (o) { case st_reqpq_sent: process_respq_answer (c, Response/* + 8*/, Response_len/* - 12*/); -#ifndef __MACH__ +#if !defined(__MACH__) && !defined(__FreeBSD__) setsockopt (c->fd, IPPROTO_TCP, TCP_QUICKACK, (int[]){0}, 4); #endif return 0; case st_reqdh_sent: process_dh_answer (c, Response/* + 8*/, Response_len/* - 12*/); -#ifndef __MACH__ +#if !defined(__MACH__) && !defined(__FreeBSD__) setsockopt (c->fd, IPPROTO_TCP, TCP_QUICKACK, (int[]){0}, 4); #endif return 0; case st_client_dh_sent: process_auth_complete (c, Response/* + 8*/, Response_len/* - 12*/); -#ifndef __MACH__ +#if !defined(__MACH__) && !defined(__FreeBSD__) setsockopt (c->fd, IPPROTO_TCP, TCP_QUICKACK, (int[]){0}, 4); #endif return 0; @@ -1615,7 +1621,7 @@ int rpc_execute (struct connection *c, int op, int len) { } else { process_rpc_message (c, (void *)(Response/* + 8*/), Response_len/* - 12*/); } -#ifndef __MACH__ +#if !defined(__MACH__) && !defined(__FreeBSD__) setsockopt (c->fd, IPPROTO_TCP, TCP_QUICKACK, (int[]){0}, 4); #endif return 0; @@ -1643,7 +1649,7 @@ int tc_becomes_ready (struct connection *c) { assert (write_out (c, &byte, 1) == 1); flush_out (c); -#ifndef __MACH__ +#if !defined(__MACH__) && !defined(__FreeBSD__) setsockopt (c->fd, IPPROTO_TCP, TCP_QUICKACK, (int[]){0}, 4); #endif int o = c_state; diff --git a/net.c b/net.c index 92372dc..e31fda8 100644 --- a/net.c +++ b/net.c @@ -21,8 +21,11 @@ #include #include #include +#include #include #include +#include +#include #include #include #include @@ -37,7 +40,7 @@ #include "tree.h" #include "interface.h" -#ifdef __MACH__ +#if defined(__MACH__) || defined(__FreeBSD__) #define POLLRDHUP 0 #endif