pidgin/pidgin

facebook: Store sent message id in lastmid, to deduplicate echoed messages

This is crappy and error prone, just like the rest of the duplicate
message handling code. It works, but it's going to get some echoes now
and then, particularly in quick moving groupchats.

I'm pretty sure this is a bug in the server, but the official clients
have much more elaborate deduplication built-in, so they won't notice.
#
# Makefile.mingw
#
# Description: Makefile for win32 (mingw) version of libpurple
#
PIDGIN_TREE_TOP := ..
include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
TARGET = libpurple
ifeq ($(CYRUS_SASL), 1)
NEEDED_DLLS = $(CYRUS_SASL_TOP)/bin/libsasl2-3.dll
CYRUS_SASL_PLUGINS = \
$(CYRUS_SASL_TOP)/lib/sasl2/libanonymous-3.dll \
$(CYRUS_SASL_TOP)/lib/sasl2/libcrammd5-3.dll \
$(CYRUS_SASL_TOP)/lib/sasl2/libdigestmd5-3.dll \
$(CYRUS_SASL_TOP)/lib/sasl2/libplain-3.dll
endif
##
## INCLUDE PATHS
##
INCLUDE_PATHS += \
-I$(PURPLE_TOP) \
-I$(PURPLE_TOP)/win32 \
-I$(PIDGIN_TREE_TOP) \
-I$(GTK_TOP)/include \
-I$(GTK_TOP)/include/glib-2.0 \
-I$(GTK_TOP)/lib/glib-2.0/include \
-I$(JSON_GLIB_TOP)/include/json-glib-1.0 \
-I$(LIBXML2_TOP)/include/libxml2 \
-I$(NSS_TOP)/include/nspr4 \
-I$(NSS_TOP)/include/nss3 \
-I$(GNUTLS_TOP)/include \
$(VV_INCLUDE_PATHS)
LIB_PATHS += -L$(GTK_TOP)/lib \
-L$(JSON_GLIB_TOP)/lib \
-L$(LIBXML2_TOP)/lib \
-L$(NSS_TOP)/lib \
-L$(GNUTLS_TOP)/lib \
$(VV_LIB_PATHS)
##
## SOURCES, OBJECTS
##
ifeq "$(USE_VV)" "1"
VV_SRC = \
media/backend-fs2.c \
media/backend-iface.c \
media/codec.c
else
VV_SRC =
endif
BUILT_SRC = marshallers.c enums.c
C_SRC = \
$(BUILT_SRC) \
account.c \
accounts.c \
accountopt.c \
blistnode.c \
blistnodetypes.c \
buddylist.c \
buddyicon.c \
certificate.c \
ciphers/aescipher.c \
ciphers/descipher.c \
ciphers/des3cipher.c \
ciphers/hmaccipher.c \
ciphers/md4hash.c \
ciphers/md5hash.c \
ciphers/pbkdf2cipher.c \
ciphers/rc4cipher.c \
ciphers/sha1hash.c \
ciphers/sha256hash.c \
cipher.c \
circularbuffer.c \
cmds.c \
connection.c \
conversation.c \
conversationtypes.c \
conversations.c \
core.c \
debug.c \
dnsquery.c \
dnssrv.c \
e2ee.c \
eventloop.c \
http.c \
idle.c \
image.c \
image-store.c \
keyring.c \
log.c \
media/candidate.c \
media/enum-types.c \
mediamanager.c \
media.c \
memorypool.c \
mime.c \
nat-pmp.c \
network.c \
notify.c \
ntlm.c \
plugins.c \
pluginpref.c \
pounce.c \
prefs.c \
presence.c \
proxy.c \
protocol.c \
protocols.c \
request.c \
request-datasheet.c \
roomlist.c \
savedstatuses.c \
server.c \
signals.c \
smiley.c \
smiley-custom.c \
smiley-list.c \
smiley-parser.c \
smiley-theme.c \
sound-theme-loader.c \
sound-theme.c \
sound.c \
sslconn.c \
status.c \
stringref.c \
stun.c \
theme-loader.c \
theme-manager.c \
theme.c \
trie.c \
upnp.c \
util.c \
version.c \
whiteboard.c \
xfer.c \
xmlnode.c \
win32/giowin32.c \
win32/libc_interface.c \
win32/win32dep.c \
$(VV_SRC)
RC_SRC = win32/libpurplerc.rc
ENUM_HEADERS = \
account.h \
cipher.h \
connection.h \
conversation.h \
conversationtypes.h \
roomlist.h \
status.h \
xfer.h
OBJECTS = $(C_SRC:%.c=%.o) $(RC_SRC:%.rc=%.o)
##
## LIBRARIES
##
LIBS = \
-ldnsapi \
-lglib-2.0 \
-lgthread-2.0 \
-lgobject-2.0 \
-lgmodule-2.0 \
-lintl \
-lws2_32 \
-lxml2 \
-ljson-glib-1.0 \
-lnss3 \
-lnspr4 \
-lgnutls \
-lz \
$(VV_LIBS)
include $(PIDGIN_COMMON_RULES)
##
## TARGET DEFINITIONS
##
.PHONY: all install install_shallow clean
all: $(TARGET).dll
$(MAKE_at) $(MAKE) -C $(PURPLE_PROTOS_TOP) -f $(MINGW_MAKEFILE)
$(MAKE_at) $(MAKE) -C $(PURPLE_PLUGINS_TOP) -f $(MINGW_MAKEFILE)
install_shallow: $(PURPLE_INSTALL_DIR) $(TARGET).dll
cp $(TARGET).dll $(PURPLE_INSTALL_DIR)
cp $(NEEDED_DLLS) $(PURPLE_INSTALL_DIR)
ifeq ($(CYRUS_SASL), 1)
mkdir -p $(PURPLE_INSTALL_DIR)/sasl2
cp $(CYRUS_SASL_PLUGINS) $(PURPLE_INSTALL_DIR)/sasl2
endif
install: install_shallow all
$(MAKE_at) $(MAKE) -C $(PURPLE_PROTOS_TOP) -f $(MINGW_MAKEFILE) install
$(MAKE_at) $(MAKE) -C $(PURPLE_PLUGINS_TOP) -f $(MINGW_MAKEFILE) install
./win32/libpurplerc.rc: ./win32/libpurplerc.rc.in $(PIDGIN_TREE_TOP)/VERSION
@echo -e " GEN\t$@"
@sed -e 's/@PURPLE_VERSION@/$(PURPLE_VERSION)/g' \
-e 's/@PURPLE_MAJOR_VERSION@/$(PURPLE_MAJOR_VERSION)/g' \
-e 's/@PURPLE_MINOR_VERSION@/$(PURPLE_MINOR_VERSION)/g' \
-e 's/@PURPLE_MICRO_VERSION@/$(PURPLE_MICRO_VERSION)/g' \
-e 's/@PURPLE_API_VERSION@/$(PURPLE_API_VERSION)/g' \
$@.in > $@
$(OBJECTS): $(PURPLE_CONFIG_H) $(PURPLE_VERSION_H) $(PURPLE_PURPLE_H)
marshallers.h: marshallers.list
@echo -e " GEN\t$@"
@$(GLIB_GENMARSHAL) --prefix=purple_smarshal $< --header > marshallers.h
marshallers.c: marshallers.list marshallers.h
@echo -e " GEN\t$@"
@echo "#include \"marshallers.h\"" > marshallers.c
@$(GLIB_GENMARSHAL) --prefix=purple_smarshal $< --body >> marshallers.c
enums.h: enums.h.in $(ENUM_HEADERS)
@echo -e " GEN\t$@"
@$(GLIB_MKENUMS) --template enums.h.in $(ENUM_HEADERS) > enums.h
enums.c: enums.c.in enums.h $(ENUM_HEADERS)
@echo -e " GEN\t$@"
@$(GLIB_MKENUMS) --template enums.c.in $(ENUM_HEADERS) > enums.c
$(TARGET).dll $(TARGET).dll.a: $(OBJECTS)
$(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--output-def,$(TARGET).def,--out-implib,$(TARGET).dll.a -o $(TARGET).dll
##
## CLEAN RULES
##
clean:
rm -f $(OBJECTS) $(RC_SRC) $(PURPLE_VERSION_H) $(PURPLE_PURPLE_H) marshallers.h marshallers.c enums.h enums.c
rm -f $(TARGET).dll $(TARGET).dll.a $(TARGET).def
$(MAKE_at) $(MAKE) -C $(PURPLE_PROTOS_TOP) -f $(MINGW_MAKEFILE) clean
$(MAKE_at) $(MAKE) -C $(PURPLE_PLUGINS_TOP) -f $(MINGW_MAKEFILE) clean
include $(PIDGIN_COMMON_TARGETS)