Use new API, fix build system.

This commit is contained in:
Ben Wiederhake 2015-10-02 17:02:03 +02:00
parent 858177626c
commit 47bd4b2b33
13 changed files with 52 additions and 104 deletions

View file

@ -2,9 +2,6 @@ srcdir=@srcdir@
CFLAGS=@CFLAGS@ @PURPLE_CFLAGS@ @DEFS@ -Wall -Wextra -Wno-deprecated-declarations -Wno-unused-parameter -I${srcdir} -I. -fno-strict-aliasing -fPIC
LDFLAGS=@LDFLAGS@ @OPENSSL_LDFLAGS@ @PURPLE_LIBS@ @LIBS@ -lcrypto -rdynamic -ggdb
CPPFLAGS=@CPPFLAGS@ -DFLAGS
COMPILE_FLAGS=${CFLAGS} ${CPPFLAGS}
LINK_FLAGS=${LDFLAGS}
DIR_PERM=0755
FILE_PERM=0644
@ -12,11 +9,10 @@ CC=@CC@
PKG_CONFIG=@PKG_CONFIG@
DEP=dep
AUTO=auto
EXE=bin
OBJ=objs
LIB=libs
DIR_LIST=${DEP} ${AUTO} ${EXE} ${OBJ} ${LIB} ${DEP}/auto ${OBJ}/auto ${DEP}/lodepng ${OBJ}/lodepng
DIR_LIST=${DEP} ${EXE} ${OBJ} ${LIB} ${DEP}/lodepng ${OBJ}/lodepng
PLUGIN_OBJECTS=${OBJ}/tgp-net.o ${OBJ}/tgp-timers.o ${OBJ}/msglog.o ${OBJ}/telegram-base.o ${OBJ}/telegram-purple.o ${OBJ}/tgp-2prpl.o ${OBJ}/tgp-structs.o ${OBJ}/tgp-utils.o ${OBJ}/tgp-chat.o ${OBJ}/tgp-ft.o ${OBJ}/tgp-msg.o ${OBJ}/tgp-request.o ${OBJ}/lodepng/lodepng.o
ALL_OBJS=${PLUGIN_OBJECTS}
@ -32,11 +28,7 @@ all: ${PRPL_LIBNAME}
PLUGIN_DIR_PURPLE=$(shell ${PKG_CONFIG} --variable=plugindir purple)
DATA_ROOT_DIR_PURPLE=$(shell ${PKG_CONFIG} --variable=datarootdir purple)
include ${srcdir}/Makefile.tl-parser
include ${srcdir}/Makefile.tgl
create_dirs: ${DIR_LIST}
create_dirs_and_headers: ${DIR_LIST} ${AUTO}/auto-skip.h ${AUTO}/auto-fetch.h ${AUTO}/auto-store.h ${AUTO}/auto-types.h
${DIR_LIST}:
@test -d $@ || mkdir -p $@
@ -46,9 +38,23 @@ DEPENDENCE_LIST=${DEPENDENCE}
-include ${DEPENDENCE_LIST}
${PLUGIN_OBJECTS}: ${OBJ}/%.o: ${srcdir}/%.c | create_dirs_and_headers
# The dependency on tgl/libs/libtgl.a ensures that "make -C tgl" was called,
# and most importantly: It ensures that all automatic headers exist.
${PLUGIN_OBJECTS}: ${OBJ}/%.o: ${srcdir}/%.c ${LIB}/libtgl.a | create_dirs
echo $@ && ${CC} ${CFLAGS} ${CPPFLAGS} -I ${srcdir}/tgl -I ${srcdir}/lodepng -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<
tgl/Makefile.in:
@echo "tgl/Makefile.in not found. Maybe you need to 'git submodule update --init --recursive' ?" && exit 1
tgl/Makefile: tgl/Makefile.in
cd tgl && ./configure -q
tgl/libs/libtgl.a: tgl/Makefile
+make -C tgl
${LIB}/libtgl.a: tgl/libs/libtgl.a | create_dirs
cp $< $@
${PRPL_LIBNAME}: ${PLUGIN_OBJECTS} ${LIB}/libtgl.a | create_dirs
${CC} -shared -o $@ $^ ${LDFLAGS}
@ -98,4 +104,3 @@ debug: install
clean:
rm -rf ${DIR_LIST} *.so *.a *.o telegram config.log config.status $(PRPL_C_OBJS) $(PRPL_LIBNAME) > /dev/null || echo "all clean"

View file

@ -1,56 +0,0 @@
TGL_OBJECTS=${OBJ}/mtproto-common.o ${OBJ}/mtproto-client.o ${OBJ}/queries.o ${OBJ}/structures.o ${OBJ}/binlog.o ${OBJ}/tgl.o ${OBJ}/updates.o ${OBJ}/tg-mime-types.o ${OBJ}/mtproto-utils.o
TGL_OBJECTS_AUTO=${OBJ}/auto/auto-skip.o ${OBJ}/auto/auto-fetch.o ${OBJ}/auto/auto-store.o ${OBJ}/auto/auto-autocomplete.o ${OBJ}/auto/auto-types.o ${OBJ}/auto/auto-fetch-ds.o ${OBJ}/auto/auto-free-ds.o ${OBJ}/auto/auto-store-ds.o ${OBJ}/auto/auto-print-ds.o
TLD_OBJECTS=${OBJ}/dump-tl-file.o
GENERATE_OBJECTS=${OBJ}/generate.o
TGL_COMMON_OBJECTS=${OBJ}/tools.o
TGL_OBJ_C=${GENERATE_OBJECTS} ${TGL_COMMON_OBJECTS} ${TGL_OBJECTS} ${TLD_OBJECTS}
AR?=ar
.SUFFIXES:
.SUFFIXES: .c .h .o
dump-tl: ${EXE}/dump-tl-file
${TGL_OBJECTS}: ${AUTO}/constants.h ${AUTO}/auto-skip.h ${AUTO}/auto-fetch.h ${AUTO}/auto-store.h ${AUTO}/auto-autocomplete.h ${AUTO}/auto-types.h ${AUTO}/auto-fetch-ds.h ${AUTO}/auto-free-ds.h ${AUTO}/auto-store-ds.h ${AUTO}/auto-print-ds.h
${TGL_OBJ_C}: ${OBJ}/%.o: ${srcdir}/tgl/%.c | create_dirs
${CC} ${INCLUDE} ${COMPILE_FLAGS} -iquote ${srcdir}/tgl -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<
${TGL_OBJECTS_AUTO}: ${OBJ}/auto/%.o: ${AUTO}/%.c | create_dirs
${CC} ${INCLUDE} ${COMPILE_FLAGS} -iquote ${srcdir}/tgl -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<
#${OBJ}/auto/auto.o: ${AUTO}/auto.c
# ${CC} ${INCLUDE} ${COMPILE_FLAGS} -iquote ${srcdir}/tgl -c -MP -MD -MF ${DEP}/auto/auto.d -MQ ${OBJ}/auto/auto.o -o $@ $<
${LIB}/libtgl.a: ${TGL_OBJECTS} ${TGL_COMMON_OBJECTS} ${TGL_OBJECTS_AUTO}
rm -f $@ && ${AR} ruv $@ $^
${EXE}/generate: ${GENERATE_OBJECTS} ${TGL_COMMON_OBJECTS}
${CC} ${GENERATE_OBJECTS} ${TGL_COMMON_OBJECTS} ${LINK_FLAGS} -o $@
${AUTO}/scheme.tlo: ${AUTO}/scheme.tl ${EXE}/tl-parser
${EXE}/tl-parser -e $@ ${AUTO}/scheme.tl
${AUTO}/scheme.tl: ${srcdir}/tgl/scheme.tl ${srcdir}/tgl/encrypted_scheme.tl ${srcdir}/tgl/binlog.tl ${srcdir}/tgl/append.tl ${srcdir}/tgl/mtproto.tl | ${AUTO}
cat $^ > $@
${AUTO}/scheme2.tl: ${AUTO}/scheme.tl ${EXE}/tl-parser
${EXE}/tl-parser -E ${AUTO}/scheme.tl 2> $@ || ( cat $@ && rm $@ && false )
${AUTO}/auto-%.c: ${AUTO}/scheme.tlo ${EXE}/generate auto/constants.h ${AUTO}/auto-%.h | create_dirs_and_headers
${EXE}/generate -g $(patsubst ${AUTO}/auto-%.c,%,$@) ${AUTO}/scheme.tlo > $@ || rm $@
${AUTO}/auto-%.h: ${AUTO}/scheme.tlo ${EXE}/generate
${EXE}/generate -g $(patsubst ${AUTO}/auto-%.h,%-header,$@) ${AUTO}/scheme.tlo > $@ || rm $@
${AUTO}/constants.h: ${AUTO}/scheme2.tl ${srcdir}/tgl/gen_constants_h.awk
awk -f ${srcdir}/tgl/gen_constants_h.awk < $< > $@
${EXE}/dump-tl-file: ${OBJ}/auto/auto.o ${TLD_OBJECTS}
${CC} ${OBJ}/auto/auto.o ${TLD_OBJECTS} ${LINK_FLAGS} -o $@

View file

@ -1,9 +0,0 @@
TL_PARSER_OBJECTS=${OBJ}/tl-parser.o ${OBJ}/tlc.o ${OBJ}/crc32.o
ALL_OBJS+=${TL_PARSER_OBJS}
${TL_PARSER_OBJECTS}: ${OBJ}/%.o: ${srcdir}/tgl/tl-parser/%.c | create_dirs
${CC} ${INCLUDE} ${COMPILE_FLAGS} -iquote ${srcdir}/tgl/tl-parser -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<
${EXE}/tl-parser: ${TL_PARSER_OBJECTS}
${CC} $^ ${LINK_FLAGS} -o $@

View file

@ -30,6 +30,7 @@
#include <tgl.h>
#include <tgl-binlog.h>
#include <tgl-methods-in.h>
#include <tgl-queries.h>
#include <glib.h>
#include <request.h>
@ -184,7 +185,7 @@ void read_dc (struct tgl_state *TLS, int auth_file_fd, int id, unsigned ver) {
assert (read (auth_file_fd, &auth_key_id, 8) == 8);
assert (read (auth_file_fd, auth_key, 256) == 256);
bl_do_dc_option (TLS, id, "DC", 2, ip, l, port);
bl_do_dc_option (TLS, 0, id, "DC", 2, ip, l, port);
bl_do_set_auth_key (TLS, id, auth_key);
bl_do_dc_signed (TLS, id);
}
@ -203,16 +204,16 @@ int error_if_val_false (struct tgl_state *TLS, int val, const char *cause, const
void empty_auth_file (struct tgl_state *TLS) {
if (TLS->test_mode) {
bl_do_dc_option (TLS, 1, "", 0, TG_SERVER_TEST_1, strlen (TG_SERVER_TEST_1), 443);
bl_do_dc_option (TLS, 2, "", 0, TG_SERVER_TEST_2, strlen (TG_SERVER_TEST_2), 443);
bl_do_dc_option (TLS, 3, "", 0, TG_SERVER_TEST_3, strlen (TG_SERVER_TEST_3), 443);
bl_do_dc_option (TLS, 0, 1, "", 0, TG_SERVER_TEST_1, strlen (TG_SERVER_TEST_1), 443);
bl_do_dc_option (TLS, 0, 2, "", 0, TG_SERVER_TEST_2, strlen (TG_SERVER_TEST_2), 443);
bl_do_dc_option (TLS, 0, 3, "", 0, TG_SERVER_TEST_3, strlen (TG_SERVER_TEST_3), 443);
bl_do_set_working_dc (TLS, TG_SERVER_TEST_DEFAULT);
} else {
bl_do_dc_option (TLS, 1, "", 0, TG_SERVER_1, strlen (TG_SERVER_1), 443);
bl_do_dc_option (TLS, 2, "", 0, TG_SERVER_2, strlen (TG_SERVER_2), 443);
bl_do_dc_option (TLS, 3, "", 0, TG_SERVER_3, strlen (TG_SERVER_3), 443);
bl_do_dc_option (TLS, 4, "", 0, TG_SERVER_4, strlen (TG_SERVER_4), 443);
bl_do_dc_option (TLS, 5, "", 0, TG_SERVER_5, strlen (TG_SERVER_5), 443);
bl_do_dc_option (TLS, 0, 1, "", 0, TG_SERVER_1, strlen (TG_SERVER_1), 443);
bl_do_dc_option (TLS, 0, 2, "", 0, TG_SERVER_2, strlen (TG_SERVER_2), 443);
bl_do_dc_option (TLS, 0, 3, "", 0, TG_SERVER_3, strlen (TG_SERVER_3), 443);
bl_do_dc_option (TLS, 0, 4, "", 0, TG_SERVER_4, strlen (TG_SERVER_4), 443);
bl_do_dc_option (TLS, 0, 5, "", 0, TG_SERVER_5, strlen (TG_SERVER_5), 443);
bl_do_set_working_dc (TLS, TG_SERVER_DEFAULT);
}
}
@ -256,7 +257,7 @@ void read_auth_file (struct tgl_state *TLS) {
assert (!l);
}
if (our_id) {
bl_do_set_our_id (TLS, our_id);
bl_do_set_our_id (TLS, TGL_MK_USER (our_id));
}
close (auth_file_fd);
}
@ -346,7 +347,7 @@ void read_secret_chat (struct tgl_state *TLS, int fd, int v) {
assert (read (fd, &out_seq_no, 4) == 4);
}
bl_do_encr_chat_new (TLS, id,
bl_do_encr_chat (TLS, id,
&access_hash, &date, &admin_id, &user_id,
key, NULL, sha, &state, &ttl, &layer,
&in_seq_no, &last_in_seq_no, &out_seq_no,
@ -443,7 +444,7 @@ void tgp_create_group_chat_by_usernames (struct tgl_state *TLS, const char *titl
int use_print_names) {
tgl_peer_id_t ids[num_users + 1];
int i, j = 0;
ids[j++] = TGL_MK_USER(TLS->our_id);
ids[j++] = TLS->our_id;
for (i = 0; i < num_users; i++) if (str_not_empty (users[i])) {
tgl_peer_t *P = NULL;
if (use_print_names) {
@ -451,7 +452,7 @@ void tgp_create_group_chat_by_usernames (struct tgl_state *TLS, const char *titl
} else {
P = tgl_peer_get (TLS, TGL_MK_USER(atoi (users[i])));
}
if (P && tgl_get_peer_id (P->id) != TLS->our_id) {
if (P && tgl_get_peer_id (P->id) != tgl_get_peer_id (TLS->our_id)) {
debug ("Adding %s: %d", P->print_name, tgl_get_peer_id (P->id));
ids[j++] = P->id;
} else {

View file

@ -58,6 +58,7 @@
#include <tgl.h>
#include <tgl-binlog.h>
#include <tgl-queries.h>
#include <tools.h>
#include <tgl-methods-in.h>
@ -123,7 +124,7 @@ static void _update_buddy (struct tgl_state *TLS, tgl_peer_t *user, unsigned fla
}
static void update_user_handler (struct tgl_state *TLS, struct tgl_user *user, unsigned flags) {
if (TLS->our_id == tgl_get_peer_id (user->id) && flags & TGL_UPDATE_NAME) {
if (tgl_get_peer_id (TLS->our_id) == tgl_get_peer_id (user->id) && flags & TGL_UPDATE_NAME) {
p2tgl_connection_set_display_name (TLS, (tgl_peer_t *)user);
return;
}
@ -213,7 +214,7 @@ static void update_marked_read (struct tgl_state *TLS, int num, struct tgl_messa
int i;
for (i = 0; i < num; i++) if (list[i]) {
tgl_peer_id_t to_id;
if (tgl_get_peer_type (list[i]->to_id) == TGL_PEER_USER && tgl_get_peer_id (list[i]->to_id) == TLS->our_id) {
if (tgl_get_peer_type (list[i]->to_id) == TGL_PEER_USER && tgl_get_peer_id (list[i]->to_id) == tgl_get_peer_id (TLS->our_id)) {
to_id = list[i]->from_id;
} else {
to_id = list[i]->to_id;
@ -320,7 +321,7 @@ static void on_userpic_loaded (struct tgl_state *TLS, void *extra, int success,
}
static void on_get_dialog_list_done (struct tgl_state *TLS, void *callback_extra, int success, int size,
tgl_peer_id_t peers[], int last_msg_id[], int unread_count[]) {
tgl_peer_id_t peers[], tgl_message_id_t *last_msg_id[], int unread_count[]) {
connection_data *conn = TLS->ev_base;
@ -331,7 +332,7 @@ static void on_get_dialog_list_done (struct tgl_state *TLS, void *callback_extra
switch (tgl_get_peer_type (peers[i])) {
case TGL_PEER_USER:
assert (UC);
if (tgl_get_peer_id (UC->id) == TLS->our_id) {
if (tgl_get_peer_id (UC->id) == tgl_get_peer_id (TLS->our_id)) {
p2tgl_connection_set_display_name (TLS, UC);
continue;
}
@ -502,7 +503,7 @@ void export_chat_link_checked (struct tgl_state *TLS, const char *name) {
failure ("Chat \"%s\" not found, not exporting link.", name);
return;
}
if (C->chat.admin_id != TLS->our_id) {
if (C->chat.admin_id != tgl_get_peer_id (TLS->our_id)) {
purple_notify_error (_telegram_protocol, "Failure", "Creating Chat Link Failed",
"You need to be admin of the group to do that.");
return;
@ -517,7 +518,7 @@ void leave_and_delete_chat (PurpleBlistNode *node, gpointer data) {
tgl_peer_t *P = tgl_peer_get (conn->TLS, p2tgl_chat_get_id (PC));
if (P && P->chat.users_num) {
tgl_do_del_user_from_chat (conn->TLS, P->id, TGL_MK_USER(conn->TLS->our_id),
tgl_do_del_user_from_chat (conn->TLS, P->id, conn->TLS->our_id,
tgp_notify_on_error_gw, NULL);
serv_got_chat_left (conn->gc, tgl_get_peer_id (P->id));
}
@ -726,7 +727,7 @@ static void tgprpl_remove_buddy (PurpleConnection *gc, PurpleBuddy *buddy, Purpl
/* TODO: implement the api call cancel secret chats. Currently the chat will only be marked as
deleted on our side so that it won't be added on startup
(when the secret chat file is loaded) */
bl_do_encr_chat_delete (conn->TLS, &peer->encr_chat);
bl_do_peer_delete (conn->TLS, peer->encr_chat.id);
}
}
@ -750,7 +751,7 @@ static int tgprpl_send_chat (PurpleConnection * gc, int id, const char *message,
connection_data *conn = purple_connection_get_protocol_data (gc);
int ret = tgp_msg_send (conn->TLS, message, TGL_MK_CHAT(id));
if (ret != 0) {
p2tgl_got_chat_in (conn->TLS, TGL_MK_CHAT(id), TGL_MK_USER(conn->TLS->our_id), message,
p2tgl_got_chat_in (conn->TLS, TGL_MK_CHAT(id), conn->TLS->our_id, message,
PURPLE_MESSAGE_RECV, time(NULL));
}
return ret;

2
tgl

@ -1 +1 @@
Subproject commit 126b42c6d281841acc541735e845d94c54298f46
Subproject commit ed4e304be425afecdf954e3d88fae98b80e6ff50

View file

@ -275,7 +275,7 @@ void p2tgl_prpl_got_user_status (struct tgl_state *TLS, tgl_peer_id_t user, stru
if (status->online == 1) {
p2tgl_prpl_got_set_status_online (TLS, user);
} else {
debug ("%d: when=%d", user.id, status->when);
debug ("%d: when=%d", tgl_get_peer_id (user), status->when);
if (tgp_time_n_days_ago (purple_account_get_int (data->pa, "inactive-days-offline", TGP_DEFAULT_INACTIVE_DAYS_OFFLINE)) > status->when && status->when) {
debug ("offline");
p2tgl_prpl_got_set_status_offline (TLS, user);

View file

@ -25,6 +25,7 @@
#include "telegram-base.h"
#include <tgl.h>
#include <tgl-queries.h>
#include <assert.h>
GHashTable *tgp_chat_info_new (struct tgl_state *TLS, struct tgl_chat *chat) {

View file

@ -18,6 +18,7 @@
Copyright Matthias Jentsch 2014-2015
*/
#include <tgl-queries.h>
#include "tgp-utils.h"
#include "tgp-ft.h"
#include "tgp-structs.h"

View file

@ -28,6 +28,8 @@
#include <errno.h>
#include <locale.h>
#include <tgl-queries.h>
#include "telegram-purple.h"
#include "telegram-base.h"
#include "tgp-structs.h"
@ -115,7 +117,7 @@ static char *format_service_msg (struct tgl_state *TLS, struct tgl_message *M) {
g_free (alias);
p2tgl_conv_del_user (TLS, conv, txt_action, M->action.user);
if (M->action.user == TLS->our_id) {
if (M->action.user == tgl_get_peer_id (TLS->our_id)) {
purple_conv_chat_left (purple_conversation_get_chat_data (conv));
}

View file

@ -22,6 +22,7 @@
#include <tgl.h>
#include <tgl-binlog.h>
#include <tgl-methods-in.h>
#include <tgl-queries.h>
#define _(m) m
@ -191,7 +192,7 @@ static void accept_secret_chat_cb (gpointer _data, const gchar *code) {
static void decline_secret_chat_cb (gpointer _data, const gchar *code) {
struct accept_secret_chat_data *data = _data;
bl_do_encr_chat_delete (data->TLS, data->U);
bl_do_peer_delete (data->TLS, data->U->id);
purple_blist_remove_buddy (p2tgl_buddy_find(data->TLS, data->U->id));
g_free (data);

View file

@ -27,6 +27,7 @@
#include <glib.h>
#include <tgl.h>
#include <tgl-queries.h>
static void pending_reads_free_cb (gpointer data) {
free (data);
@ -42,7 +43,7 @@ void pending_reads_send_all (GQueue *queue, struct tgl_state *TLS) {
tgl_peer_id_t *pending;
while ((pending = (tgl_peer_id_t*) g_queue_pop_head(queue))) {
tgl_do_mark_read (TLS, *pending, tgp_notify_on_error_gw, NULL);
debug ("tgl_do_mark_read (%d)", pending->id);
debug ("tgl_do_mark_read (%d)", tgl_get_peer_id (*pending));
free (pending);
}
}

View file

@ -80,7 +80,7 @@ int tgp_outgoing_msg (struct tgl_state *TLS, struct tgl_message *M) {
}
int tgp_our_msg (struct tgl_state *TLS, struct tgl_message *M) {
return TLS->our_id == tgl_get_peer_id(M->from_id);
return tgl_get_peer_id (TLS->our_id) == tgl_get_peer_id (M->from_id);
}
tgl_peer_t *find_peer_by_name (struct tgl_state *TLS, const char *who) {
@ -94,7 +94,7 @@ tgl_peer_t *find_peer_by_name (struct tgl_state *TLS, const char *who) {
}
tgl_peer_t *tgp_encr_chat_get_partner (struct tgl_state *TLS, struct tgl_secret_chat *chat) {
return tgl_peer_get (TLS, TGL_MK_USER(chat->admin_id == TLS->our_id ? chat->user_id : chat->admin_id));
return tgl_peer_get (TLS, TGL_MK_USER(chat->admin_id == tgl_get_peer_id (TLS->our_id) ? chat->user_id : chat->admin_id));
}
long tgp_time_n_days_ago (int days) {