From: <ev...@us...> - 2006-08-19 01:53:52
|
Revision: 16864 Author: evands Date: 2006-08-18 18:53:46 -0700 (Fri, 18 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16864&view=rev Log Message: ----------- It'd sure be nice if you could set a repository-global svn:ignore serverside... Property Changed: ---------------- trunk/libgaim/ trunk/libgaim/plugins/ Property changes on: trunk/libgaim ___________________________________________________________________ Name: svn:ignore + Makefile.in .deps Makefile dbus-types.h Property changes on: trunk/libgaim/plugins ___________________________________________________________________ Name: svn:ignore + Makefile.in Makefile .libs .deps This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-08-20 18:49:26
|
Revision: 16914 Author: datallah Date: 2006-08-20 11:49:08 -0700 (Sun, 20 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16914&view=rev Log Message: ----------- Protocols now compile on win32. Next, everything needs to be put all together. Modified Paths: -------------- trunk/libgaim/Makefile.mingw trunk/libgaim/protocols/gg/Makefile.mingw trunk/libgaim/protocols/irc/Makefile.mingw trunk/libgaim/protocols/jabber/Makefile.mingw trunk/libgaim/protocols/msn/Makefile.mingw trunk/libgaim/protocols/novell/Makefile.mingw trunk/libgaim/protocols/oscar/Makefile.mingw trunk/libgaim/protocols/sametime/Makefile.mingw trunk/libgaim/protocols/silc/Makefile.mingw trunk/libgaim/protocols/simple/Makefile.mingw trunk/libgaim/protocols/yahoo/Makefile.mingw Added Paths: ----------- trunk/libgaim/protocols/Makefile.mingw Modified: trunk/libgaim/Makefile.mingw =================================================================== --- trunk/libgaim/Makefile.mingw 2006-08-20 18:07:53 UTC (rev 16913) +++ trunk/libgaim/Makefile.mingw 2006-08-20 18:49:08 UTC (rev 16914) @@ -134,8 +134,10 @@ .PHONY: all clean include_path all: $(TARGET).dll + $(MAKE) -C protocols -f Makefile.mingw install: all + $(MAKE) -C protocols -f Makefile.mingw install cp $(GAIM_SRC)/$(TARGET).dll $(GAIM_INSTALL_DIR) # @@ -153,3 +155,4 @@ rm -rf *.o ./win32/*.o rm -rf $(TARGET).dll rm -rf $(TARGET).dll.a + $(MAKE) -C protocols -f Makefile.mingw clean Added: trunk/libgaim/protocols/Makefile.mingw =================================================================== --- trunk/libgaim/protocols/Makefile.mingw (rev 0) +++ trunk/libgaim/protocols/Makefile.mingw 2006-08-20 18:49:08 UTC (rev 16914) @@ -0,0 +1,80 @@ +# Makefile.mingw +# +# Author: her...@ya... +# Date 9/11/02 +# Description: Top Makefile for win32 (mingw) port of Gaim +# + +GAIM_TOP = ../.. +LIBGAIM_TOP = ../ +GAIM_PROTOS = . +GAIM_INSTALL_DIR = $(GAIM_TOP)/win32-install-dir + +OSCAR = $(GAIM_PROTOS)/oscar +YAHOO = $(GAIM_PROTOS)/yahoo +MSN = $(GAIM_PROTOS)/msn +TOC = $(GAIM_PROTOS)/toc +IRC = $(GAIM_PROTOS)/irc +JABBER = $(GAIM_PROTOS)/jabber +GG = $(GAIM_PROTOS)/gg +NOVELL = $(GAIM_PROTOS)/novell +SILC = $(GAIM_PROTOS)/silc +SIMPLE = $(GAIM_PROTOS)/simple +SAMETIME = $(GAIM_PROTOS)/sametime + +VERSION := $(shell cat GAIM_TOP/VERSION) + +## +## Don't forget to change STATIC_PROTO_INIT, in config.h.mingw if you +## change the status of a protocol (static/plugin) +## + +OSCAR_TYPE = PLUGIN +YAHOO_TYPE = PLUGIN +MSN_TYPE = PLUGIN +TOC_TYPE = PLUGIN +IRC_TYPE = PLUGIN +JABBER_TYPE = PLUGIN +GG_TYPE = PLUGIN +NOVELL_TYPE = PLUGIN +SILC_TYPE = PLUGIN +SIMPLE_TYPE = PLUGIN +SAMETIME_TYPE = PLUGIN + +all: + $(MAKE) TYPE='$(OSCAR_TYPE)' -C $(OSCAR) -f Makefile.mingw + $(MAKE) TYPE='$(YAHOO_TYPE)' -C $(YAHOO) -f Makefile.mingw + $(MAKE) TYPE='$(MSN_TYPE)' -C $(MSN) -f Makefile.mingw + $(MAKE) TYPE='$(IRC_TYPE)' -C $(IRC) -f Makefile.mingw + $(MAKE) TYPE='$(JABBER_TYPE)' -C $(JABBER) -f Makefile.mingw + $(MAKE) TYPE='$(GG_TYPE)' -C $(GG) -f Makefile.mingw + $(MAKE) TYPE='$(NOVELL_TYPE)' -C $(NOVELL) -f Makefile.mingw + $(MAKE) TYPE='$(SILC_TYPE)' -C $(SILC) -f Makefile.mingw + $(MAKE) TYPE='$(SIMPLE_TYPE)' -C $(SIMPLE) -f Makefile.mingw + $(MAKE) TYPE='$(SAMETIME_TYPE)' -C $(SAMETIME) -f Makefile.mingw + + +install: all + mkdir -p $(GAIM_INSTALL_DIR)/plugins + $(MAKE) TYPE='$(OSCAR_TYPE)' -C $(OSCAR) -f Makefile.mingw install + $(MAKE) TYPE='$(YAHOO_TYPE)' -C $(YAHOO) -f Makefile.mingw install + $(MAKE) TYPE='$(MSN_TYPE)' -C $(MSN) -f Makefile.mingw install + $(MAKE) TYPE='$(IRC_TYPE)' -C $(IRC) -f Makefile.mingw install + $(MAKE) TYPE='$(JABBER_TYPE)' -C $(JABBER) -f Makefile.mingw install + $(MAKE) TYPE='$(GG_TYPE)' -C $(GG) -f Makefile.mingw install + $(MAKE) TYPE='$(NOVELL_TYPE)' -C $(NOVELL) -f Makefile.mingw install + $(MAKE) TYPE='$(SILC_TYPE)' -C $(SILC) -f Makefile.mingw install + $(MAKE) TYPE='$(SIMPLE_TYPE)' -C $(SIMPLE) -f Makefile.mingw install + $(MAKE) TYPE='$(SAMETIME_TYPE)' -C $(SAMETIME) -f Makefile.mingw install + +clean: + $(MAKE) -C $(OSCAR) -f Makefile.mingw clean + $(MAKE) -C $(YAHOO) -f Makefile.mingw clean + $(MAKE) -C $(MSN) -f Makefile.mingw clean + $(MAKE) -C $(IRC) -f Makefile.mingw clean + $(MAKE) -C $(JABBER) -f Makefile.mingw clean + $(MAKE) -C $(GG) -f Makefile.mingw clean + $(MAKE) -C $(NOVELL) -f Makefile.mingw clean + $(MAKE) -C $(SILC) -f Makefile.mingw clean + $(MAKE) -C $(SIMPLE) -f Makefile.mingw clean + $(MAKE) -C $(SAMETIME) -f Makefile.mingw clean Property changes on: trunk/libgaim/protocols/Makefile.mingw ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/libgaim/protocols/gg/Makefile.mingw =================================================================== --- trunk/libgaim/protocols/gg/Makefile.mingw 2006-08-20 18:07:53 UTC (rev 16913) +++ trunk/libgaim/protocols/gg/Makefile.mingw 2006-08-20 18:49:08 UTC (rev 16914) @@ -8,9 +8,9 @@ # PATHS # -INCLUDE_DIR := . GTK_TOP := ../../../../win32-dev/gtk_2_0 GAIM_TOP := ../../.. +LIBGAIM_TOP := ../.. GG_ROOT := . GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir @@ -41,7 +41,7 @@ ## INCLUDE MAKEFILES ## -include $(GAIM_TOP)/src/win32/global.mak +include $(LIBGAIM_TOP)/win32/global.mak ## ## INCLUDE PATHS @@ -50,19 +50,15 @@ INCLUDE_PATHS += -I$(GG_ROOT) \ -I$(GG_ROOT)/lib \ -I$(GTK_TOP)/include \ - -I$(GTK_TOP)/include/gtk-2.0 \ -I$(GTK_TOP)/include/glib-2.0 \ - -I$(GTK_TOP)/include/pango-1.0 \ - -I$(GTK_TOP)/include/atk-1.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ - -I$(GTK_TOP)/lib/gtk-2.0/include \ - -I$(GAIM_TOP)/src \ - -I$(GAIM_TOP)/src/win32 \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ - -L$(GAIM_TOP)/src \ + -L$(LIBGAIM_TOP) \ ## @@ -124,15 +120,15 @@ ## BUILD Dependencies ## -$(GAIM_TOP)/src/gaim.lib: - $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib +$(LIBGAIM_TOP)/libgaim.dll.a: + $(MAKE) -C $(LIBGAIM_TOP) -f Makefile.mingw libgaim.dll.a ## ## BUILD DLL ## -$(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--out-implib,$(TARGET).lib -o $(TARGET).dll +$(TARGET).dll: $(OBJECTS) $(LIBGAIM_TOP)/libgaim.dll.a + $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll ## ## CLEAN RULES @@ -142,4 +138,3 @@ rm -rf *.o rm -rf $(GG_ROOT)/lib/*.o rm -rf $(TARGET).dll - rm -rf $(TARGET).lib Modified: trunk/libgaim/protocols/irc/Makefile.mingw =================================================================== --- trunk/libgaim/protocols/irc/Makefile.mingw 2006-08-20 18:07:53 UTC (rev 16913) +++ trunk/libgaim/protocols/irc/Makefile.mingw 2006-08-20 18:49:08 UTC (rev 16914) @@ -8,9 +8,9 @@ # PATHS # -INCLUDE_DIR := . GTK_TOP := ../../../../win32-dev/gtk_2_0 GAIM_TOP := ../../.. +LIBGAIM_TOP := ../.. IRC_ROOT := . GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir @@ -26,7 +26,7 @@ DEFINES = -# Static or Plugin... +# Static or Plugin... ifeq ($(TYPE),STATIC) DEFINES += -DSTATIC DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR) @@ -41,7 +41,7 @@ ## INCLUDE MAKEFILES ## -include $(GAIM_TOP)/src/win32/global.mak +include $(LIBGAIM_TOP)/win32/global.mak ## ## INCLUDE PATHS @@ -49,19 +49,15 @@ INCLUDE_PATHS += -I$(IRC_ROOT) \ -I$(GTK_TOP)/include \ - -I$(GTK_TOP)/include/gtk-2.0 \ -I$(GTK_TOP)/include/glib-2.0 \ - -I$(GTK_TOP)/include/pango-1.0 \ - -I$(GTK_TOP)/include/atk-1.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ - -I$(GTK_TOP)/lib/gtk-2.0/include \ - -I$(GAIM_TOP)/src \ - -I$(GAIM_TOP)/src/win32 \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ - -L$(GAIM_TOP)/src + -L$(LIBGAIM_TOP) ## @@ -82,10 +78,8 @@ ## LIBRARIES ## -LIBS = -lgtk-win32-2.0 \ +LIBS = \ -lglib-2.0 \ - -lgdk-win32-2.0 \ - -lgmodule-2.0 \ -lgobject-2.0 \ -lws2_32 \ -lintl \ @@ -117,15 +111,15 @@ ## BUILD Dependencies ## -$(GAIM_TOP)/src/gaim.lib: - $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib +$(LIBGAIM_TOP)/libgaim.dll.a: + $(MAKE) -C $(LIBGAIM_TOP) -f Makefile.mingw libgaim.dll.a ## ## BUILD DLL ## -$(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--out-implib,$(TARGET).lib -o $(TARGET).dll +$(TARGET).dll: $(OBJECTS) $(LIBGAIM_TOP)/libgaim.dll.a + $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll ## ## CLEAN RULES @@ -134,4 +128,3 @@ clean: rm -rf *.o rm -rf $(TARGET).dll - rm -rf $(TARGET).lib Modified: trunk/libgaim/protocols/jabber/Makefile.mingw =================================================================== --- trunk/libgaim/protocols/jabber/Makefile.mingw 2006-08-20 18:07:53 UTC (rev 16913) +++ trunk/libgaim/protocols/jabber/Makefile.mingw 2006-08-20 18:49:08 UTC (rev 16914) @@ -8,10 +8,10 @@ # PATHS # -INCLUDE_DIR := . GTK_TOP := ../../../../win32-dev/gtk_2_0 LIBXML2_DIR:= ../../../../win32-dev/libxml2 GAIM_TOP := ../../.. +LIBGAIM_TOP := ../.. JABBER_ROOT := . GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir @@ -27,7 +27,7 @@ DEFINES = -# Static or Plugin... +# Static or Plugin... ifeq ($(TYPE),STATIC) DEFINES += -DSTATIC DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR) @@ -42,7 +42,7 @@ ## INCLUDE MAKEFILES ## -include $(GAIM_TOP)/src/win32/global.mak +include $(LIBGAIM_TOP)/win32/global.mak ## ## INCLUDE PATHS @@ -54,14 +54,14 @@ -I$(GTK_TOP)/include/glib-2.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ -I$(LIBXML2_DIR)/include \ - -I$(GAIM_TOP)/src \ - -I$(GAIM_TOP)/src/win32 \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ -L$(LIBXML2_DIR)/lib \ - -L$(GAIM_TOP)/src + -L$(LIBGAIM_TOP) ## @@ -124,15 +124,15 @@ ## BUILD Dependencies ## -$(GAIM_TOP)/src/gaim.lib: - $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib +$(LIBGAIM_TOP)/libgaim.dll.a: + $(MAKE) -C $(LIBGAIM_TOP) -f Makefile.mingw libgaim.dll.a ## ## BUILD DLL ## -$(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--out-implib,$(TARGET).lib -o $(TARGET).dll +$(TARGET).dll: $(OBJECTS) $(LIBGAIM_TOP)/libgaim.dll.a + $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll ## ## CLEAN RULES @@ -142,4 +142,3 @@ rm -rf *.o rm -rf ./win32/*.o rm -rf $(TARGET).dll - rm -rf $(TARGET).lib Modified: trunk/libgaim/protocols/msn/Makefile.mingw =================================================================== --- trunk/libgaim/protocols/msn/Makefile.mingw 2006-08-20 18:07:53 UTC (rev 16913) +++ trunk/libgaim/protocols/msn/Makefile.mingw 2006-08-20 18:49:08 UTC (rev 16914) @@ -8,9 +8,9 @@ # PATHS # -INCLUDE_DIR := . GTK_TOP := ../../../../win32-dev/gtk_2_0 GAIM_TOP := ../../.. +LIBGAIM_TOP := ../.. MSN_ROOT := . GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir @@ -41,7 +41,7 @@ ## INCLUDE MAKEFILES ## -include $(GAIM_TOP)/src/win32/global.mak +include $(LIBGAIM_TOP)/win32/global.mak ## ## INCLUDE PATHS @@ -49,19 +49,15 @@ INCLUDE_PATHS += -I$(MSN_ROOT) \ -I$(GTK_TOP)/include \ - -I$(GTK_TOP)/include/gtk-2.0 \ -I$(GTK_TOP)/include/glib-2.0 \ - -I$(GTK_TOP)/include/pango-1.0 \ - -I$(GTK_TOP)/include/atk-1.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ - -I$(GTK_TOP)/lib/gtk-2.0/include \ - -I$(GAIM_TOP)/src \ - -I$(GAIM_TOP)/src/win32 \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ - -L$(GAIM_TOP)/src + -L$(LIBGAIM_TOP) ## @@ -106,15 +102,13 @@ ## LIBRARIES ## -LIBS = -lgtk-win32-2.0 \ +LIBS = \ -lglib-2.0 \ - -lgdk-win32-2.0 \ - -lgmodule-2.0 \ - -lgobject-2.0 \ - -lws2_32 \ -lintl \ + -lws2_32 \ -lgaim + ## ## RULES ## @@ -140,15 +134,15 @@ ## BUILD Dependencies ## -$(GAIM_TOP)/src/gaim.lib: - $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib +$(LIBGAIM_TOP)/libgaim.dll.a: + $(MAKE) -C $(LIBGAIM_TOP) -f Makefile.mingw libgaim.dll.a ## ## BUILD DLL ## -$(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--out-implib,$(TARGET).lib -o $(TARGET).dll +$(TARGET).dll: $(OBJECTS) $(LIBGAIM_TOP)/libgaim.dll.a + $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll ## @@ -158,4 +152,3 @@ clean: rm -rf *.o rm -rf $(TARGET).dll - rm -rf $(TARGET).lib Modified: trunk/libgaim/protocols/novell/Makefile.mingw =================================================================== --- trunk/libgaim/protocols/novell/Makefile.mingw 2006-08-20 18:07:53 UTC (rev 16913) +++ trunk/libgaim/protocols/novell/Makefile.mingw 2006-08-20 18:49:08 UTC (rev 16914) @@ -8,9 +8,9 @@ # PATHS # -INCLUDE_DIR := . GTK_TOP := ../../../../win32-dev/gtk_2_0 GAIM_TOP := ../../.. +LIBGAIM_TOP := ../../. NOVELL_ROOT := . GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir @@ -26,7 +26,7 @@ DEFINES = -# Static or Plugin... +# Static or Plugin... ifeq ($(TYPE),STATIC) DEFINES += -DSTATIC DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR) @@ -41,7 +41,7 @@ ## INCLUDE MAKEFILES ## -include $(GAIM_TOP)/src/win32/global.mak +include $(LIBGAIM_TOP)/win32/global.mak ## ## INCLUDE PATHS @@ -49,26 +49,23 @@ INCLUDE_PATHS += -I$(NOVELL_ROOT) \ -I$(GTK_TOP)/include \ - -I$(GTK_TOP)/include/gtk-2.0 \ -I$(GTK_TOP)/include/glib-2.0 \ - -I$(GTK_TOP)/include/pango-1.0 \ - -I$(GTK_TOP)/include/atk-1.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ - -I$(GTK_TOP)/lib/gtk-2.0/include \ - -I$(GAIM_TOP)/src \ - -I$(GAIM_TOP)/src/win32 \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ - -L$(GAIM_TOP)/src + -L$(LIBGAIM_TOP) ## ## SOURCES, OBJECTS ## -C_SRC = nmfield.c \ +C_SRC = \ + nmfield.c \ nmconn.c \ nmconference.c \ nmcontact.c \ @@ -87,11 +84,8 @@ ## LIBRARIES ## -LIBS = -lgtk-win32-2.0 \ +LIBS = \ -lglib-2.0 \ - -lgdk-win32-2.0 \ - -lgmodule-2.0 \ - -lgobject-2.0 \ -lws2_32 \ -lintl \ -lgaim @@ -122,15 +116,15 @@ ## BUILD Dependencies ## -$(GAIM_TOP)/src/gaim.lib: - $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib +$(LIBGAIM_TOP)/libgaim.dll.a: + $(MAKE) -C $(LIBGAIM_TOP) -f Makefile.mingw libgaim.dll.a ## ## BUILD DLL ## -$(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--out-implib,$(TARGET).lib -o $(TARGET).dll +$(TARGET).dll: $(OBJECTS) $(LIBGAIM_TOP)/libgaim.dll.a + $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll ## @@ -140,4 +134,3 @@ clean: rm -rf *.o rm -rf $(TARGET).dll - rm -rf $(TARGET).lib Modified: trunk/libgaim/protocols/oscar/Makefile.mingw =================================================================== --- trunk/libgaim/protocols/oscar/Makefile.mingw 2006-08-20 18:07:53 UTC (rev 16913) +++ trunk/libgaim/protocols/oscar/Makefile.mingw 2006-08-20 18:49:08 UTC (rev 16914) @@ -11,6 +11,7 @@ OSCAR_ROOT := . GTK_TOP := ../../../../win32-dev/gtk_2_0 GAIM_TOP := ../../.. +LIBGAIM_TOP := ../.. GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir ## @@ -40,7 +41,7 @@ ## INCLUDE MAKEFILES ## -include $(GAIM_TOP)/src/win32/global.mak +include $(LIBGAIM_TOP)/win32/global.mak ## ## INCLUDE PATHS @@ -54,13 +55,13 @@ -I$(GTK_TOP)/include/atk-1.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ -I$(GTK_TOP)/lib/gtk-2.0/include \ - -I$(GAIM_TOP)/src \ - -I$(GAIM_TOP)/src/win32 \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ - -L$(GAIM_TOP)/src + -L$(LIBGAIM_TOP) ## @@ -68,7 +69,7 @@ ## C_SRC = \ - bstream.c \ + bstream.c \ family_admin.c \ family_advert.c \ family_alert.c \ @@ -90,17 +91,17 @@ family_translate.c \ family_userlookup.c \ flap_connection.c \ - misc.c \ - msgcookie.c \ - odc.c \ - oft.c \ - oscar.c \ + misc.c \ + msgcookie.c \ + odc.c \ + oft.c \ + oscar.c \ oscar_data.c \ - peer.c \ + peer.c \ peer_proxy.c \ rxhandlers.c \ - snac.c \ - tlv.c \ + snac.c \ + tlv.c \ util.c @@ -111,11 +112,8 @@ ## LIBRARIES ## -LIBS = -lgtk-win32-2.0 \ +LIBS = \ -lglib-2.0 \ - -lgdk-win32-2.0 \ - -lgmodule-2.0 \ - -lgobject-2.0 \ -lintl \ -lws2_32 \ -lgaim @@ -146,15 +144,15 @@ ## BUILD Dependencies ## -$(GAIM_TOP)/src/gaim.lib: - $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib +$(LIBGAIM_TOP)/libgaim.dll.a: + $(MAKE) -C $(LIBGAIM_TOP) -f Makefile.mingw libgaim.dll.a ## ## BUILD DLL ## -$(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--out-implib,$(TARGET).lib -o $(TARGET).dll +$(TARGET).dll: $(OBJECTS) $(LIBGAIM_TOP)/libgaim.dll.a + $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll ## ## CLEAN RULES @@ -163,4 +161,3 @@ clean: rm -rf *.o rm -rf $(TARGET).dll - rm -rf $(TARGET).lib Modified: trunk/libgaim/protocols/sametime/Makefile.mingw =================================================================== --- trunk/libgaim/protocols/sametime/Makefile.mingw 2006-08-20 18:07:53 UTC (rev 16913) +++ trunk/libgaim/protocols/sametime/Makefile.mingw 2006-08-20 18:49:08 UTC (rev 16914) @@ -12,6 +12,7 @@ GTK_TOP := ../../../../win32-dev/gtk_2_0 MEANWHILE_TOP:= ../../../../win32-dev/meanwhile-1.0.2 GAIM_TOP := ../../.. +LIBGAIM_TOP := ../.. GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir ## @@ -43,7 +44,7 @@ ## INCLUDE MAKEFILES ## -include $(GAIM_TOP)/src/win32/global.mak +include $(LIBGAIM_TOP)/win32/global.mak ## ## INCLUDE PATHS @@ -54,13 +55,13 @@ -I$(GTK_TOP)/include \ -I$(GTK_TOP)/include/glib-2.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ - -I$(GAIM_TOP)/src \ - -I$(GAIM_TOP)/src/win32 \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ -L$(MEANWHILE_TOP)/lib \ - -L$(GAIM_TOP)/src + -L$(LIBGAIM_TOP) ## @@ -109,15 +110,15 @@ ## BUILD Dependencies ## -$(GAIM_TOP)/src/gaim.lib: - $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib +$(LIBGAIM_TOP)/libgaim.dll.a: + $(MAKE) -C $(LIBGAIM_TOP) -f Makefile.mingw libgaim.dll.a ## ## BUILD DLL ## -$(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--out-implib,$(TARGET).lib -o $(TARGET).dll +$(TARGET).dll: $(OBJECTS) $(LIBGAIM_TOP)/libgaim.dll.a + $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll ## ## CLEAN RULES @@ -126,4 +127,3 @@ clean: rm -rf *.o rm -rf $(TARGET).dll - rm -rf $(TARGET).lib Modified: trunk/libgaim/protocols/silc/Makefile.mingw =================================================================== --- trunk/libgaim/protocols/silc/Makefile.mingw 2006-08-20 18:07:53 UTC (rev 16913) +++ trunk/libgaim/protocols/silc/Makefile.mingw 2006-08-20 18:49:08 UTC (rev 16914) @@ -8,9 +8,9 @@ # PATHS # -INCLUDE_DIR := . GTK_TOP := ../../../../win32-dev/gtk_2_0 GAIM_TOP := ../../.. +LIBGAIM_TOP := ../.. SILC_TOP := . GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir SILC_TOOLKIT := ../../../../win32-dev/silc-toolkit-1.0.2 @@ -30,7 +30,7 @@ DEFINES = -# Static or Plugin... +# Static or Plugin... ifeq ($(TYPE),STATIC) DEFINES += -DSTATIC DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR) @@ -45,7 +45,7 @@ ## INCLUDE MAKEFILES ## -include $(GAIM_TOP)/src/win32/global.mak +include $(LIBGAIM_TOP)/win32/global.mak ## ## INCLUDE PATHS @@ -55,14 +55,14 @@ -I$(GTK_TOP)/include \ -I$(GTK_TOP)/include/glib-2.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ - -I$(GAIM_TOP)/src \ - -I$(GAIM_TOP)/src/win32 \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ -I$(GAIM_TOP) \ -I$(SILC_TOOLKIT)/include LIB_PATHS = -L$(GTK_TOP)/lib \ - -L$(GAIM_TOP)/src \ + -L$(LIBGAIM_TOP) \ -L$(SILC_TOOLKIT)/lib @@ -122,14 +122,14 @@ ## BUILD Dependencies ## -$(GAIM_TOP)/src/gaim.lib: - $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib +$(LIBGAIM_TOP)/libgaim.dll.a: + $(MAKE) -C $(LIBGAIM_TOP) -f Makefile.mingw libgaim.dll.a ## ## BUILD DLL ## -$(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib +$(TARGET).dll: $(OBJECTS) $(LIBGAIM_TOP)/libgaim.dll.a $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--image-base,0x64000000 -o $(TARGET).dll ## @@ -139,4 +139,3 @@ clean: rm -rf *.o rm -rf $(TARGET).dll - rm -rf $(TARGET).lib Modified: trunk/libgaim/protocols/simple/Makefile.mingw =================================================================== --- trunk/libgaim/protocols/simple/Makefile.mingw 2006-08-20 18:07:53 UTC (rev 16913) +++ trunk/libgaim/protocols/simple/Makefile.mingw 2006-08-20 18:49:08 UTC (rev 16914) @@ -8,9 +8,9 @@ # PATHS # -INCLUDE_DIR := . GTK_TOP := ../../../../win32-dev/gtk_2_0 GAIM_TOP := ../../.. +LIBGAIM_TOP := ../.. SIMPLE_ROOT := . GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir @@ -26,7 +26,7 @@ DEFINES = -# Static or Plugin... +# Static or Plugin... ifeq ($(TYPE),STATIC) DEFINES += -DSTATIC DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR) @@ -41,7 +41,7 @@ ## INCLUDE MAKEFILES ## -include $(GAIM_TOP)/src/win32/global.mak +include $(LIBGAIM_TOP)/win32/global.mak ## ## INCLUDE PATHS @@ -49,19 +49,15 @@ INCLUDE_PATHS += -I$(SIMPLE_ROOT) \ -I$(GTK_TOP)/include \ - -I$(GTK_TOP)/include/gtk-2.0 \ -I$(GTK_TOP)/include/glib-2.0 \ - -I$(GTK_TOP)/include/pango-1.0 \ - -I$(GTK_TOP)/include/atk-1.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ - -I$(GTK_TOP)/lib/gtk-2.0/include \ - -I$(GAIM_TOP)/src \ - -I$(GAIM_TOP)/src/win32 \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ - -L$(GAIM_TOP)/src + -L$(LIBGAIM_TOP) ## @@ -112,15 +108,15 @@ ## BUILD Dependencies ## -$(GAIM_TOP)/src/gaim.lib: - $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib +$(LIBGAIM_TOP)/libgaim.dll.a: + $(MAKE) -C $(LIBGAIM_TOP) -f Makefile.mingw libgaim.dll.a ## ## BUILD DLL ## -$(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--out-implib,$(TARGET).lib -o $(TARGET).dll +$(TARGET).dll: $(OBJECTS) $(LIBGAIM_TOP)/libgaim.dll.a + $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll ## @@ -130,4 +126,3 @@ clean: rm -rf *.o rm -rf $(TARGET).dll - rm -rf $(TARGET).lib Modified: trunk/libgaim/protocols/yahoo/Makefile.mingw =================================================================== --- trunk/libgaim/protocols/yahoo/Makefile.mingw 2006-08-20 18:07:53 UTC (rev 16913) +++ trunk/libgaim/protocols/yahoo/Makefile.mingw 2006-08-20 18:49:08 UTC (rev 16914) @@ -8,9 +8,9 @@ # PATHS # -INCLUDE_DIR := . GTK_TOP := ../../../../win32-dev/gtk_2_0 GAIM_TOP := ../../.. +LIBGAIM_TOP := ../.. YAHOO_ROOT := . GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir @@ -26,7 +26,7 @@ DEFINES = -# Static or Plugin... +# Static or Plugin... ifeq ($(TYPE),STATIC) DEFINES += -DSTATIC DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR) @@ -41,7 +41,7 @@ ## INCLUDE MAKEFILES ## -include $(GAIM_TOP)/src/win32/global.mak +include $(LIBGAIM_TOP)/win32/global.mak ## ## INCLUDE PATHS @@ -51,13 +51,13 @@ -I$(GTK_TOP)/include \ -I$(GTK_TOP)/include/glib-2.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ - -I$(GAIM_TOP)/src \ - -I$(GAIM_TOP)/src/win32 \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ - -L$(GAIM_TOP)/src + -L$(LIBGAIM_TOP) ## @@ -118,15 +118,15 @@ ## BUILD Dependencies ## -$(GAIM_TOP)/src/gaim.lib: - $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib +$(LIBGAIM_TOP)/libgaim.dll.a: + $(MAKE) -C $(LIBGAIM_TOP) -f Makefile.mingw libgaim.dll.a ## ## BUILD DLL ## -$(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--out-implib,$(TARGET).lib -o $(TARGET).dll +$(TARGET).dll: $(OBJECTS) $(LIBGAIM_TOP)/libgaim.dll.a + $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll ## @@ -136,4 +136,3 @@ clean: rm -rf *.o rm -rf $(TARGET).dll - rm -rf $(TARGET).lib This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-08-20 22:24:21
|
Revision: 16920 Author: thekingant Date: 2006-08-20 15:24:13 -0700 (Sun, 20 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16920&view=rev Log Message: ----------- Cancelable DNS queries. This eliminates crashes when you cancel a connection attempt while we're waiting for a response from a DNS server. I tested with all three methods, so they SHOULD be ok. Let me know if you have problems. I should be around today, starting in maybe an hour. I feel like it's kinda dumb for us to have three implementations for the same thing. I want to get rid of the child-process method (currently used in Unix and OS-X) and use the thread-based method (currently used in Windows) everywhere. Then we can get rid of the third method, too (currently used when !Unix and !OS-X and !Windows) Any objections? Modified Paths: -------------- trunk/libgaim/core.c trunk/libgaim/dnsquery.c trunk/libgaim/dnsquery.h trunk/libgaim/protocols/simple/simple.c trunk/libgaim/protocols/simple/simple.h trunk/libgaim/proxy.c Modified: trunk/libgaim/core.c =================================================================== --- trunk/libgaim/core.c 2006-08-20 22:16:13 UTC (rev 16919) +++ trunk/libgaim/core.c 2006-08-20 22:24:13 UTC (rev 16920) @@ -28,6 +28,7 @@ #include "conversation.h" #include "core.h" #include "debug.h" +#include "dnsquery.h" #include "ft.h" #include "idle.h" #include "network.h" @@ -39,10 +40,10 @@ #include "proxy.h" #include "savedstatuses.h" #include "signals.h" +#include "sound.h" #include "sslconn.h" #include "status.h" #include "stun.h" -#include "sound.h" #ifdef HAVE_DBUS # include "dbus-server.h" @@ -128,6 +129,7 @@ gaim_privacy_init(); gaim_pounces_init(); gaim_proxy_init(); + gaim_dnsquery_init(); gaim_sound_init(); gaim_ssl_init(); gaim_stun_init(); @@ -172,6 +174,8 @@ gaim_status_uninit(); gaim_prefs_uninit(); gaim_xfers_uninit(); + gaim_proxy_uninit(); + gaim_dnsquery_uninit(); gaim_debug_info("main", "Unloading all plugins\n"); gaim_plugins_destroy_all(); Modified: trunk/libgaim/dnsquery.c =================================================================== --- trunk/libgaim/dnsquery.c 2006-08-20 22:16:13 UTC (rev 16919) +++ trunk/libgaim/dnsquery.c 2006-08-20 22:24:13 UTC (rev 16920) @@ -26,16 +26,31 @@ #include "internal.h" #include "debug.h" +#include "dnsquery.h" #include "notify.h" #include "prefs.h" -#include "dnsquery.h" #include "util.h" /************************************************************************** * DNS query API **************************************************************************/ +typedef struct _GaimDnsQueryResolverProcess GaimDnsQueryResolverProcess; + struct _GaimDnsQueryData { + char *hostname; + int port; + GaimDnsQueryConnectFunction callback; + gpointer data; + guint timeout; + +#if defined(__unix__) || defined(__APPLE__) + GaimDnsQueryResolverProcess *resolver; +#elif defined _WIN32 /* end __unix__ || __APPLE__ */ + GThread *resolver; + GSList *hosts; + gchar *error_message; +#endif }; #if defined(__unix__) || defined(__APPLE__) @@ -43,36 +58,53 @@ #define MAX_DNS_CHILDREN 4 /* - * This structure represents both a pending DNS request and - * a free child process. + * This structure keeps a reference to a child resolver process. */ -typedef struct { - char *host; - int port; - GaimDnsQueryConnectFunction callback; - gpointer data; +struct _GaimDnsQueryResolverProcess { guint inpa; int fd_in, fd_out; pid_t dns_pid; -} pending_dns_request_t; +}; static GSList *free_dns_children = NULL; static GQueue *queued_requests = NULL; static int number_of_dns_children = 0; +/* + * This is a convenience struct used to pass data to + * the child resolver process. + */ typedef struct { char hostname[512]; int port; } dns_params_t; +#endif -typedef struct { - dns_params_t params; - GaimDnsQueryConnectFunction callback; - gpointer data; -} queued_dns_request_t; +static void +gaim_dnsquery_resolved(GaimDnsQueryData *query_data, GSList *hosts) +{ + if (query_data->callback != NULL) + query_data->callback(hosts, query_data->data, NULL); + gaim_dnsquery_destroy(query_data); +} +static void +gaim_dnsquery_failed(GaimDnsQueryData *query_data, const gchar *error_message) +{ + gaim_debug_info("dnsquery", "%s\n", error_message); + if (query_data->callback != NULL) + query_data->callback(NULL, query_data->data, error_message); + gaim_dnsquery_destroy(query_data); +} + +#if defined(__unix__) || defined(__APPLE__) + /* + * Unix! + */ + +/* * Begin the DNS resolver child process functions. */ #ifdef HAVE_SIGNAL_H @@ -95,36 +127,8 @@ #endif static void -cope_with_gdb_brokenness() +gaim_dnsquery_resolver_run(int child_out, int child_in, gboolean show_debug) { -#ifdef __linux__ - static gboolean already_done = FALSE; - char s[256], e[512]; - int n; - pid_t ppid; - - if(already_done) - return; - already_done = TRUE; - ppid = getppid(); - snprintf(s, sizeof(s), "/proc/%d/exe", ppid); - n = readlink(s, e, sizeof(e)); - if(n < 0) - return; - - e[MIN(n,sizeof(e)-1)] = '\0'; - - if(strstr(e,"gdb")) { - gaim_debug_info("dns", - "Debugger detected, performing useless query...\n"); - gethostbyname("x.x.x.x.x"); - } -#endif -} - -static void -gaim_dns_resolverthread(int child_out, int child_in, gboolean show_debug) -{ dns_params_t dns_params; const size_t zero = 0; int rc; @@ -244,11 +248,69 @@ _exit(0); } +/* + * End the DNS resolver child process functions. + */ -static pending_dns_request_t * -gaim_dns_new_resolverthread(gboolean show_debug) +/* + * Begin the functions for dealing with the DNS child processes. + */ +static void +cope_with_gdb_brokenness() { - pending_dns_request_t *req; +#ifdef __linux__ + static gboolean already_done = FALSE; + char s[256], e[512]; + int n; + pid_t ppid; + + if(already_done) + return; + already_done = TRUE; + ppid = getppid(); + snprintf(s, sizeof(s), "/proc/%d/exe", ppid); + n = readlink(s, e, sizeof(e)); + if(n < 0) + return; + + e[MIN(n,sizeof(e)-1)] = '\0'; + + if(strstr(e,"gdb")) { + gaim_debug_info("dns", + "Debugger detected, performing useless query...\n"); + gethostbyname("x.x.x.x.x"); + } +#endif +} + +static void +gaim_dnsquery_resolver_destroy(GaimDnsQueryResolverProcess *resolver) +{ + g_return_if_fail(resolver != NULL); + + /* + * We might as well attempt to kill our child process. It really + * doesn't matter if this fails, because children will expire on + * their own after a few seconds. + */ + if (resolver->dns_pid > 0) + kill(resolver->dns_pid, SIGKILL); + + if (resolver->inpa != 0) + gaim_input_remove(resolver->inpa); + + close(resolver->fd_in); + close(resolver->fd_out); + + g_free(resolver); + + number_of_dns_children--; +} + +static GaimDnsQueryResolverProcess * +gaim_dnsquery_resolver_new(gboolean show_debug) +{ + GaimDnsQueryResolverProcess *resolver; int child_out[2], child_in[2]; /* Create pipes for communicating with the child process */ @@ -258,318 +320,302 @@ return NULL; } - req = g_new(pending_dns_request_t, 1); + resolver = g_new(GaimDnsQueryResolverProcess, 1); + resolver->inpa = 0; cope_with_gdb_brokenness(); - /* Fork! */ - req->dns_pid = fork(); + /* "Go fork and multiply." --Tommy Caldwell (Emily's dad, not the climber) */ + resolver->dns_pid = fork(); /* If we are the child process... */ - if (req->dns_pid == 0) { + if (resolver->dns_pid == 0) { /* We should not access the parent's side of the pipes, so close them */ close(child_out[0]); close(child_in[1]); - gaim_dns_resolverthread(child_out[1], child_in[0], show_debug); + gaim_dnsquery_resolver_run(child_out[1], child_in[0], show_debug); /* The thread calls _exit() rather than returning, so we never get here */ } /* We should not access the child's side of the pipes, so close them */ close(child_out[1]); close(child_in[0]); - if (req->dns_pid == -1) { + if (resolver->dns_pid == -1) { gaim_debug_error("dns", "Could not create child process for DNS: %s\n", strerror(errno)); - g_free(req); + gaim_dnsquery_resolver_destroy(resolver); return NULL; } - req->fd_out = child_out[0]; - req->fd_in = child_in[1]; + resolver->fd_out = child_out[0]; + resolver->fd_in = child_in[1]; number_of_dns_children++; gaim_debug_info("dns", "Created new DNS child %d, there are now %d children.\n", - req->dns_pid, number_of_dns_children); + resolver->dns_pid, number_of_dns_children); - return req; + return resolver; } -/* - * End the DNS resolver child process functions. - */ -/* - * Begin the functions for dealing with the DNS child processes. +/** + * @return TRUE if the request was sent succesfully. FALSE + * if the request could not be sent. This isn't + * necessarily an error. If the child has expired, + * for example, we won't be able to send the message. */ -static void -req_free(pending_dns_request_t *req) +static gboolean +send_dns_request_to_child(GaimDnsQueryData *query_data, + GaimDnsQueryResolverProcess *resolver) { - g_return_if_fail(req != NULL); - - close(req->fd_in); - close(req->fd_out); - - g_free(req->host); - g_free(req); - - number_of_dns_children--; -} - -static int -send_dns_request_to_child(pending_dns_request_t *req, dns_params_t *dns_params) -{ + pid_t pid; + dns_params_t dns_params; + int rc; char ch; - int rc; - pid_t pid; /* This waitpid might return the child's PID if it has recently * exited, or it might return an error if it exited "long * enough" ago that it has already been reaped; in either * instance, we can't use it. */ - if ((pid = waitpid (req->dns_pid, NULL, WNOHANG)) > 0) { - gaim_debug_warning("dns", - "DNS child %d no longer exists\n", req->dns_pid); - return -1; + pid = waitpid(resolver->dns_pid, NULL, WNOHANG); + if (pid > 0) { + gaim_debug_warning("dns", "DNS child %d no longer exists\n", + resolver->dns_pid); + gaim_dnsquery_resolver_destroy(resolver); + return FALSE; } else if (pid < 0) { - gaim_debug_warning("dns", - "Wait for DNS child %d failed: %s\n", - req->dns_pid, strerror(errno)); - return -1; + gaim_debug_warning("dns", "Wait for DNS child %d failed: %s\n", + resolver->dns_pid, strerror(errno)); + gaim_dnsquery_resolver_destroy(resolver); + return FALSE; } - /* Let's contact this lost child! */ - rc = write(req->fd_in, dns_params, sizeof(*dns_params)); + /* Copy the hostname and port into a single data structure */ + strncpy(dns_params.hostname, query_data->hostname, sizeof(dns_params.hostname) - 1); + dns_params.hostname[sizeof(dns_params.hostname) - 1] = '\0'; + dns_params.port = query_data->port; + + /* Send the data structure to the child */ + rc = write(resolver->fd_in, &dns_params, sizeof(dns_params)); if (rc < 0) { - gaim_debug_error("dns", - "Unable to write to DNS child %d: %d\n", - req->dns_pid, strerror(errno)); - close(req->fd_in); - return -1; + gaim_debug_error("dns", "Unable to write to DNS child %d: %d\n", + resolver->dns_pid, strerror(errno)); + gaim_dnsquery_resolver_destroy(resolver); + return FALSE; } - g_return_val_if_fail(rc == sizeof(*dns_params), -1); + g_return_val_if_fail(rc == sizeof(dns_params), -1); /* Did you hear me? (This avoids some race conditions) */ - rc = read(req->fd_out, &ch, sizeof(ch)); + rc = read(resolver->fd_out, &ch, sizeof(ch)); if (rc != 1 || ch != 'Y') { gaim_debug_warning("dns", - "DNS child %d not responding. Killing it!\n", - req->dns_pid); - kill(req->dns_pid, SIGKILL); - return -1; + "DNS child %d not responding. Killing it!\n", + resolver->dns_pid); + gaim_dnsquery_resolver_destroy(resolver); + return FALSE; } gaim_debug_info("dns", - "Successfully sent DNS request to child %d\n", req->dns_pid); + "Successfully sent DNS request to child %d\n", + resolver->dns_pid); - return 0; + query_data->resolver = resolver; + + return TRUE; } -static void -host_resolved(gpointer data, gint source, GaimInputCondition cond); +static void host_resolved(gpointer data, gint source, GaimInputCondition cond); static void -release_dns_child(pending_dns_request_t *req) +handle_next_queued_request() { - g_free(req->host); - req->host = NULL; + GaimDnsQueryData *query_data; + GaimDnsQueryResolverProcess *resolver; - if (queued_requests && !g_queue_is_empty(queued_requests)) { - queued_dns_request_t *r = g_queue_pop_head(queued_requests); - req->host = g_strdup(r->params.hostname); - req->port = r->params.port; - req->callback = r->callback; - req->data = r->data; + if ((queued_requests == NULL) || (g_queue_is_empty(queued_requests))) + /* No more DNS queries, yay! */ + return; - gaim_debug_info("dns", - "Processing queued DNS query for '%s' with child %d\n", - req->host, req->dns_pid); + query_data = g_queue_pop_head(queued_requests); - if (send_dns_request_to_child(req, &(r->params)) != 0) { - req_free(req); - req = NULL; + /* + * If we have any children, attempt to have them perform the DNS + * query. If we're able to send the query then resolver will be + * set to the GaimDnsQueryResolverProcess. Otherwise, resolver + * will be NULL and we'll need to create a new DNS request child. + */ + while (free_dns_children != NULL) + { + resolver = free_dns_children->data; + free_dns_children = g_slist_remove(free_dns_children, resolver); - gaim_debug_warning("dns", - "Intent of process queued query of '%s' failed, " - "requeueing...\n", r->params.hostname); - g_queue_push_head(queued_requests, r); - } else { - req->inpa = gaim_input_add(req->fd_out, GAIM_INPUT_READ, host_resolved, req); - g_free(r); + if (send_dns_request_to_child(query_data, resolver)) + /* We found an acceptable child, yay */ + break; + } + + /* We need to create a new DNS request child */ + if (query_data->resolver == NULL) + { + if (number_of_dns_children >= MAX_DNS_CHILDREN) + { + /* Apparently all our children are busy */ + g_queue_push_head(queued_requests, query_data); + return; } - } else { - req->host = NULL; - req->callback = NULL; - req->data = NULL; - free_dns_children = g_slist_append(free_dns_children, req); + resolver = gaim_dnsquery_resolver_new(gaim_debug_is_enabled()); + if (resolver == NULL) + { + gaim_dnsquery_failed(query_data, _("Unable to create new resolver process\n")); + return; + } + if (!send_dns_request_to_child(query_data, resolver)) + { + gaim_dnsquery_failed(query_data, _("Unable to send request to resolver process\n")); + return; + } } + + query_data->resolver->inpa = gaim_input_add(query_data->resolver->fd_out, + GAIM_INPUT_READ, host_resolved, query_data); } +/* + * End the functions for dealing with the DNS child processes. + */ + static void host_resolved(gpointer data, gint source, GaimInputCondition cond) { - pending_dns_request_t *req = (pending_dns_request_t*)data; + GaimDnsQueryData *query_data; int rc, err; GSList *hosts = NULL; struct sockaddr *addr = NULL; size_t addrlen; + char message[1024]; - gaim_debug_info("dns", "Got response for '%s'\n", req->host); - gaim_input_remove(req->inpa); + query_data = data; - rc = read(req->fd_out, &err, sizeof(err)); + gaim_debug_info("dns", "Got response for '%s'\n", query_data->hostname); + gaim_input_remove(query_data->resolver->inpa); + query_data->resolver->inpa = 0; + + rc = read(query_data->resolver->fd_out, &err, sizeof(err)); if ((rc == 4) && (err != 0)) { - char message[1024]; #ifdef HAVE_GETADDRINFO - g_snprintf(message, sizeof(message), "DNS error: %s (pid=%d)", - gai_strerror(err), req->dns_pid); + g_snprintf(message, sizeof(message), _("Error resolving %s: %s"), + query_data->hostname, gai_strerror(err)); #else - g_snprintf(message, sizeof(message), "DNS error: %d (pid=%d)", - err, req->dns_pid); + g_snprintf(message, sizeof(message), _("Error resolving %s: %d"), + query_data->hostname, err); #endif - gaim_debug_error("dns", "%s\n", message); - req->callback(NULL, req->data, message); - release_dns_child(req); - return; - } - if (rc > 0) - { + gaim_dnsquery_failed(query_data, message); + + } else if (rc > 0) { + /* Success! */ while (rc > 0) { - rc = read(req->fd_out, &addrlen, sizeof(addrlen)); + rc = read(query_data->resolver->fd_out, &addrlen, sizeof(addrlen)); if (rc > 0 && addrlen > 0) { addr = g_malloc(addrlen); - rc = read(req->fd_out, addr, addrlen); + rc = read(query_data->resolver->fd_out, addr, addrlen); hosts = g_slist_append(hosts, GINT_TO_POINTER(addrlen)); hosts = g_slist_append(hosts, addr); } else { break; } } + /* wait4(resolver->dns_pid, NULL, WNOHANG, NULL); */ + gaim_dnsquery_resolved(query_data, hosts); + } else if (rc == -1) { - char message[1024]; - g_snprintf(message, sizeof(message), "Error reading from DNS child: %s",strerror(errno)); - gaim_debug_error("dns", "%s\n", message); - req->callback(NULL, req->data, message); - req_free(req); - return; + g_snprintf(message, sizeof(message), _("Error reading from resolver process: %s"), strerror(errno)); + gaim_dnsquery_failed(query_data, message); + } else if (rc == 0) { - char message[1024]; - g_snprintf(message, sizeof(message), "EOF reading from DNS child"); - close(req->fd_out); - gaim_debug_error("dns", "%s\n", message); - req->callback(NULL, req->data, message); - req_free(req); - return; + g_snprintf(message, sizeof(message), _("EOF while reading from resolver process")); + gaim_dnsquery_failed(query_data, message); } -/* wait4(req->dns_pid, NULL, WNOHANG, NULL); */ - - req->callback(hosts, req->data, NULL); - - release_dns_child(req); + handle_next_queued_request(); } -/* - * End the functions for dealing with the DNS child processes. - */ -GaimDnsQueryData * -gaim_dnsquery_a(const char *hostname, int port, GaimDnsQueryConnectFunction callback, gpointer data) +static gboolean +resolve_host(gpointer data) { - pending_dns_request_t *req = NULL; - dns_params_t dns_params; - gchar *host_temp; - gboolean show_debug; + GaimDnsQueryData *query_data; - show_debug = gaim_debug_is_enabled(); + query_data = data; + query_data->timeout = 0; - host_temp = g_strstrip(g_strdup(hostname)); - strncpy(dns_params.hostname, host_temp, sizeof(dns_params.hostname) - 1); - g_free(host_temp); - dns_params.hostname[sizeof(dns_params.hostname) - 1] = '\0'; - dns_params.port = port; + handle_next_queued_request(); - /* - * If we have any children, attempt to have them perform the DNS - * query. If we're able to send the query to a child, then req - * will be set to the pending_dns_request_t. Otherwise, req will - * be NULL and we'll need to create a new DNS request child. - */ - while (free_dns_children != NULL) { - req = free_dns_children->data; - free_dns_children = g_slist_remove(free_dns_children, req); + return FALSE; +} - if (send_dns_request_to_child(req, &dns_params) == 0) - /* We found an acceptable child, yay */ - break; +GaimDnsQueryData * +gaim_dnsquery_a(const char *hostname, int port, + GaimDnsQueryConnectFunction callback, gpointer data) +{ + GaimDnsQueryData *query_data; - req_free(req); - req = NULL; - } + g_return_val_if_fail(hostname != NULL, NULL); + g_return_val_if_fail(port != 0, NULL); - /* We need to create a new DNS request child */ - if (req == NULL) { - if (number_of_dns_children >= MAX_DNS_CHILDREN) { - queued_dns_request_t *r = g_new(queued_dns_request_t, 1); - memcpy(&(r->params), &dns_params, sizeof(dns_params)); - r->callback = callback; - r->data = data; - if (!queued_requests) - queued_requests = g_queue_new(); - g_queue_push_tail(queued_requests, r); + query_data = g_new(GaimDnsQueryData, 1); + query_data->hostname = g_strdup(hostname); + g_strstrip(query_data->hostname); + query_data->port = port; + query_data->callback = callback; + query_data->data = data; + query_data->resolver = NULL; - gaim_debug_info("dns", - "DNS query for '%s' queued\n", dns_params.hostname); + if (!queued_requests) + queued_requests = g_queue_new(); + g_queue_push_tail(queued_requests, query_data); - return (GaimDnsQueryData *)1; - } + gaim_debug_info("dns", "DNS query for '%s' queued\n", query_data->hostname); - req = gaim_dns_new_resolverthread(show_debug); - if (req == NULL) - { - gaim_debug_error("proxy", "oh dear, this is going to explode, I give up\n"); - return NULL; - } - send_dns_request_to_child(req, &dns_params); - } + query_data->timeout = gaim_timeout_add(0, resolve_host, query_data); - req->host = g_strdup(hostname); - req->port = port; - req->callback = callback; - req->data = data; - req->inpa = gaim_input_add(req->fd_out, GAIM_INPUT_READ, host_resolved, req); - - return (GaimDnsQueryData *)1; + return query_data; } #elif defined _WIN32 /* end __unix__ || __APPLE__ */ -typedef struct _dns_tdata { - char *hostname; - int port; - GaimDnsQueryConnectFunction callback; - gpointer data; - GSList *hosts; - char *errmsg; -} dns_tdata; +/* + * Windows! + */ -static gboolean dns_main_thread_cb(gpointer data) { - dns_tdata *td = (dns_tdata*)data; - if (td->errmsg != NULL) { - gaim_debug_info("dns", "%s\n", td->errmsg); +static gboolean +dns_main_thread_cb(gpointer data) +{ + GaimDnsQueryData *query_data; + + query_data = data; + + if (query_data->error_message != NULL) + gaim_dnsquery_failed(query_data, query_data->error_message); + else + { + GSList *hosts; + /* We don't want gaim_dns_query_resolved() to free(hosts) */ + hosts = query_data->hosts; + query_data->hosts = NULL; + gaim_dnsquery_resolved(query_data, hosts); } - td->callback(td->hosts, td->data, td->errmsg); - g_free(td->hostname); - g_free(td->errmsg); - g_free(td); + return FALSE; } -static gpointer dns_thread(gpointer data) { - +static gpointer +dns_thread(gpointer data) +{ + GaimDnsQueryData *query_data; #ifdef HAVE_GETADDRINFO int rc; struct addrinfo hints, *res, *tmp; @@ -578,136 +624,240 @@ struct sockaddr_in sin; struct hostent *hp; #endif - dns_tdata *td = (dns_tdata*)data; + query_data = data; + #ifdef HAVE_GETADDRINFO - g_snprintf(servname, sizeof(servname), "%d", td->port); + g_snprintf(servname, sizeof(servname), "%d", query_data->port); memset(&hints,0,sizeof(hints)); - /* This is only used to convert a service + /* + * This is only used to convert a service * name to a port number. As we know we are * passing a number already, we know this * value will not be really used by the C * library. */ hints.ai_socktype = SOCK_STREAM; - if ((rc = getaddrinfo(td->hostname, servname, &hints, &res)) == 0) { + if ((rc = getaddrinfo(query_data->hostname, servname, &hints, &res)) == 0) { tmp = res; while(res) { - td->hosts = g_slist_append(td->hosts, + query_data->hosts = g_slist_append(query_data->hosts, GSIZE_TO_POINTER(res->ai_addrlen)); - td->hosts = g_slist_append(td->hosts, + query_data->hosts = g_slist_append(query_data->hosts, g_memdup(res->ai_addr, res->ai_addrlen)); res = res->ai_next; } freeaddrinfo(tmp); } else { - td->errmsg = g_strdup_printf("DNS getaddrinfo(\"%s\", \"%s\") error: %d", td->hostname, servname, rc); + query_data->error_message = g_strdup_printf(_("Error resolving %s: %s"), query_data->hostname, gai_strerror(rc)); } #else - if ((hp = gethostbyname(td->hostname))) { + if ((hp = gethostbyname(query_data->hostname))) { memset(&sin, 0, sizeof(struct sockaddr_in)); memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length); sin.sin_family = hp->h_addrtype; - sin.sin_port = htons(td->port); + sin.sin_port = htons(query_data->port); - td->hosts = g_slist_append(td->hosts, + query_data->hosts = g_slist_append(query_data->hosts, GSIZE_TO_POINTER(sizeof(sin))); - td->hosts = g_slist_append(td->hosts, + query_data->hosts = g_slist_append(query_data->hosts, g_memdup(&sin, sizeof(sin))); } else { - td->errmsg = g_strdup_printf("DNS gethostbyname(\"%s\") error: %d", td->hostname, h_errno); + query_data->error_message = g_strdup_printf(_("Error resolving %s: %d"), query_data->hostname, h_errno); } #endif + /* back to main thread */ - g_idle_add(dns_main_thread_cb, td); + g_idle_add(dns_main_thread_cb, query_data); + return 0; } -GaimDnsQueryData * -gaim_dnsquery_a(const char *hostname, int port, - GaimDnsQueryConnectFunction callback, gpointer data) +static gboolean +resolve_host(gpointer data) { - dns_tdata *td; + GaimDnsQueryData *query_data; struct sockaddr_in sin; - GError* err = NULL; + GError *err = NULL; - if(inet_aton(hostname, &sin.sin_addr)) { + query_data = data; + query_data->timeout = 0; + + if (inet_aton(query_data->hostname, &sin.sin_addr)) + { GSList *hosts = NULL; sin.sin_family = AF_INET; - sin.sin_port = htons(port); + sin.sin_port = htons(query_data->port); hosts = g_slist_append(hosts, GINT_TO_POINTER(sizeof(sin))); hosts = g_slist_append(hosts, g_memdup(&sin, sizeof(sin))); - callback(hosts, data, NULL); - return (GaimDnsQueryData *)1; + gaim_dnsquery_resolved(query_data, hosts); } + else + { + query_data->resolver = g_thread_create(dns_thread, + query_data, FALSE, &err); + if (query_data->resolver == NULL) + { + char message[1024]; + g_snprintf(message, sizeof(message), _("Thread creation failure: %s"), + err ? err->message : _("Unknown reason")); + g_error_free(err); + gaim_dnsquery_failed(query_data, message); + } + } - gaim_debug_info("dns", "DNS Lookup for: %s\n", hostname); - td = g_new0(dns_tdata, 1); - td->hostname = g_strdup(hostname); - td->port = port; - td->callback = callback; - td->data = data; + return FALSE; +} - if(!g_thread_create(dns_thread, td, FALSE, &err)) { - gaim_debug_error("dns", "DNS thread create failure: %s\n", err?err->message:""); - g_error_free(err); - g_free(td->hostname); - g_free(td); - return NULL; - } - return (GaimDnsQueryData *)1; +GaimDnsQueryData * +gaim_dnsquery_a(const char *hostname, int port, + GaimDnsQueryConnectFunction callback, gpointer data) +{ + GaimDnsQueryData *query_data; + + g_return_val_if_fail(hostname != NULL, NULL); + g_return_val_if_fail(port != 0, NULL); + + query_data = g_new(GaimDnsQueryData, 1); + query_data->hostname = g_strdup(hostname); + g_strstrip(query_data->hostname); + query_data->port = port; + query_data->callback = callback; + query_data->data = data; + query_data->error_message = NULL; + query_data->hosts = NULL; + + /* Don't call the callback before returning */ + query_data->timeout = gaim_timeout_add(0, resolve_host, query_data); + + return query_data; } #else /* not __unix__ or __APPLE__ or _WIN32 */ -typedef struct { - gpointer data; - size_t addrlen; - struct sockaddr *addr; - GaimDnsQueryConnectFunction callback; -} pending_dns_request_t; +/* + * We weren't able to do anything fancier above, so use the + * fail-safe name resolution code, which is blocking. + */ -static gboolean host_resolved(gpointer data) +static gboolean +resolve_host(gpointer data) { - pending_dns_request_t *req = (pending_dns_request_t*)data; + GaimDnsQueryData *query_data; + struct sockaddr_in sin; GSList *hosts = NULL; - hosts = g_slist_append(hosts, GINT_TO_POINTER(req->addrlen)); - hosts = g_slist_append(hosts, req->addr); - req->callback(hosts, req->data, NULL); - g_free(req); - return FALSE; -} -GaimDnsQueryData * -gaim_dnsquery_a(const char *hostname, int port, - GaimDnsQueryConnectFunction callback, gpointer data) -{ - struct sockaddr_in sin; - pending_dns_request_t *req; + query_data = data; + query_data->timeout = 0; - if (!inet_aton(hostname, &sin.sin_addr)) { + if (!inet_aton(query_data->hostname, &sin.sin_addr)) { struct hostent *hp; - if(!(hp = gethostbyname(hostname))) { - gaim_debug_error("dns", - "gaim_gethostbyname(\"%s\", %d) failed: %d\n", - hostname, port, h_errno); - return NULL; + if(!(hp = gethostbyname(query_data->hostname))) { + char message[1024]; + g_snprintf(message, sizeof(message), _("Error resolving %s: %d"), + query_data->hostname, h_errno); + gaim_dnsquery_failed(query_data, message); + return FALSE; } memset(&sin, 0, sizeof(struct sockaddr_in)); memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length); sin.sin_family = hp->h_addrtype; } else sin.sin_family = AF_INET; - sin.sin_port = htons(port); + sin.sin_port = htons(query_data->port); - req = g_new(pending_dns_request_t, 1); - req->addr = (struct sockaddr*) g_memdup(&sin, sizeof(sin)); - req->addrlen = sizeof(sin); - req->data = data; - req->callback = callback; - gaim_timeout_add(10, host_resolved, req); - return (GaimDnsQueryData *)1; + hosts = g_slist_append(hosts, GINT_TO_POINTER(sizeof(sin))); + hosts = g_slist_append(hosts, g_memdup(&sin, sizeof(sin))); + + gaim_dnsquery_resolved(query_data, hosts); + + return FALSE; } +GaimDnsQueryData * +gaim_dnsquery_a(const char *hostname, int port, + GaimDnsQueryConnectFunction callback, gpointer data) +{ + GaimDnsQueryData *query_data; + + g_return_val_if_fail(hostname != NULL, NULL); + g_return_val_if_fail(port != 0, NULL); + + query_data = g_new(GaimDnsQueryData, 1); + query_data->hostname = g_strdup(hostname); + g_strstrip(query_data->hostname); + query_data->port = port; + query_data->callback = callback; + query_data->data = data; + + /* Don't call the callback before returning */ + query_data->timeout = gaim_timeout_add(0, resolve_host, query_data); + + return query_data; +} + #endif /* not __unix__ or __APPLE__ or _WIN32 */ + +void +gaim_dnsquery_destroy(GaimDnsQueryData *query_data) +{ +#if defined(__unix__) || defined(__APPLE__) + if (query_data->resolver != NULL) + /* + * Ideally we would tell our resolver child to stop resolving + * shit and then we would add it back to the free_dns_children + * linked list. However, it's hard to tell children stuff, + * they just don't listen. + */ + gaim_dnsquery_resolver_destroy(query_data->resolver); +#elif defined _WIN32 /* end __unix__ || __APPLE__ */ + if (query_data->resolver != NULL) + { + /* + * It's not really possible to kill a thread. So instead we + * just set the callback to NULL and let the DNS lookup + * finish. + */ + query_data->callback = NULL; + return; + } + + while (query_data->hosts != NULL) + { + /* Discard the length... */ + query_data->hosts = g_slist_remove(query_data->hosts, query_data->hosts->data); + /* Free the address... */ + g_free(query_data->hosts->data); + query_data->hosts = g_slist_remove(query_data->hosts, query_data->hosts->data); + } + g_free(query_data->error_message); +#endif + + if (query_data->timeout > 0) + gaim_timeout_remove(query_data->timeout); + + g_free(query_data->hostname); + g_free(query_data); +} + +void +gaim_dnsquery_init(void) +{ +#ifdef _WIN32 + if (!g_thread_supported()) + g_thread_init(NULL); +#endif +} + +void +gaim_dnsquery_uninit(void) +{ +#if defined(__unix__) || defined(__APPLE__) + while (free_dns_children != NULL) + { + gaim_dnsquery_resolver_destroy(free_dns_children->data); + free_dns_children = g_slist_remove(free_dns_children, free_dns_children->data); + } +#endif +} Modified: trunk/libgaim/dnsquery.h =================================================================== --- trunk/libgaim/dnsquery.h 2006-08-20 22:16:13 UTC (rev 16919) +++ trunk/libgaim/dnsquery.h 2006-08-20 22:24:13 UTC (rev 16920) @@ -32,7 +32,8 @@ /** * The "hosts" parameter is a linked list containing pairs of - * one size_t addrlen and one struct sockaddr *addr. + * one size_t addrlen and one struct sockaddr *addr. It should + * be free'd by the callback function. */ typedef void (*GaimDnsQueryConnectFunction)(GSList *hosts, gpointer data, const char *error_message); @@ -49,12 +50,12 @@ /*@{*/ /** - * Do an async dns query + * Perform an asynchronous DNS query. * - * @param hostname The hostname to resolve - * @param port A portnumber which is stored in the struct sockaddr - * @param callback Callback to call after resolving - * @param data Extra data for the callback function + * @param hostname The hostname to resolve. + * @param port A port number which is stored in the struct sockaddr. + * @param callback The callback function to call after resolving. + * @param data Extra data to pass to the callback function. * * @return NULL if there was an error, otherwise return a reference to * a data structure that can be used to cancel the pending @@ -62,6 +63,24 @@ */ GaimDnsQueryData *gaim_dnsquery_a(const char *hostname, int port, GaimDnsQueryConnectFunction callback, gpointer data); +/** + * Cancel a DNS query and destroy the associated data structure. + * + * @param query_data The DNS query to cancel. This data structure + * is freed by this function. + */ +void gaim_dnsquery_destroy(GaimDnsQueryData *query_data); + +/** + * Initializes the DNS query subsystem. + */ +void gaim_dnsquery_init(void); + +/** + * Uninitializes the DNS query subsystem. + */ +void gaim_dnsquery_uninit(void); + /*@}*/ #ifdef __cplusplus Modified: trunk/libgaim/protocols/simple/simple.c =================================================================== --- trunk/libgaim/protocols/simple/simple.c 2006-08-20 22:16:13 UTC (rev 16919) +++ trunk/libgaim/protocols/simple/simple.c 2006-08-20 22:24:13 UTC (rev 16920) @@ -1527,6 +1527,8 @@ struct simple_account_data *sip = (struct simple_account_data*) data; int addr_size; + sip->query_data = NULL; + if (!hosts || !hosts->data) { gaim_connection_error(sip->gc, _("Couldn't resolve host")); return; @@ -1622,7 +1624,10 @@ } else { /* UDP */ gaim_debug_info("simple", "using udp with server %s and port %d\n", hostname, port); - gaim_dnsquery_a(hostname, port, simple_udp_host_resolved, sip); + sip->query_data = gaim_dnsquery_a(hostname, port, simple_udp_host_resolved, sip); + if (sip->query_data == NULL) { + gaim_connection_error(sip->gc, _("Could not resolve hostname")); + } } } @@ -1689,6 +1694,9 @@ do_register_exp(sip, 0); connection_free_all(sip); + if (sip->query_data != NULL) + gaim_dnsquery_destroy(sip->query_data); + g_free(sip->servername); g_free(sip->username); g_free(sip->password); Modified: trunk/libgaim/protocols/simple/simple.h =================================================================== --- trunk/libgaim/protocols/simple/simple.h 2006-08-20 22:16:13 UTC (rev 16919) +++ trunk/libgaim/protocols/simple/simple.h 2006-08-20 22:24:13 UTC (rev 16920) @@ -28,6 +28,7 @@ #include "cipher.h" #include "circbuffer.h" +#include "dnsquery.h" #include "prpl.h" #include "sipmsg.h" @@ -69,6 +70,7 @@ gchar *servername; gchar *username; gchar *password; + GaimDnsQueryData *query_data; int fd; int cseq; time_t reregister; Modified: trunk/libgaim/proxy.c =================================================================== --- trunk/libgaim/proxy.c 2006-08-20 22:16:13 UTC (rev 16919) +++ trunk/libgaim/proxy.c 2006-08-20 22:24:13 UTC (rev 16920) @@ -309,6 +309,9 @@ connect_infos = g_slist_remove(connect_infos, connect_info); + if (connect_info->query_data != NULL) + gaim_dnsquery_destroy(connect_info->query_data); + while (connect_info->hosts != NULL) { /* Discard the length... */ @@ -1571,13 +1574,18 @@ { GaimProxyConnectInfo *connect_info; + connect_info = data; + connect_info->query_data = NULL; + if (error_message != NULL) { - gaim_debug_info("proxy", "Error while resolving hostname: %s\n", error_message); - /* TODO: Destroy connect_info and return? */ + gchar *tmp; + tmp = g_strdup_printf("Error while resolving hostname: %s\n", error_message); + gaim_proxy_connect_info_error(connect_info, tmp); + g_free(tmp); + return; } - connect_info = data; connect_info->hosts = hosts; try_connect(connect_info); @@ -1821,10 +1829,6 @@ proxy_pref_cb, NULL); gaim_prefs_connect_callback(handle, "/core/proxy/password", proxy_pref_cb, NULL); -#ifdef _WIN32 - if(!g_thread_supported()) - g_thread_init(NULL); -#endif } void This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-08-21 02:42:20
|
Revision: 16932 Author: thekingant Date: 2006-08-20 19:42:14 -0700 (Sun, 20 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16932&view=rev Log Message: ----------- More sslconn improvements Modified Paths: -------------- trunk/libgaim/protocols/jabber/jabber.c trunk/libgaim/protocols/novell/novell.c trunk/libgaim/sslconn.h Modified: trunk/libgaim/protocols/jabber/jabber.c =================================================================== --- trunk/libgaim/protocols/jabber/jabber.c 2006-08-21 02:21:51 UTC (rev 16931) +++ trunk/libgaim/protocols/jabber/jabber.c 2006-08-21 02:42:14 UTC (rev 16932) @@ -407,13 +407,6 @@ GaimConnection *gc = data; JabberStream *js = gc->proto_data; - if(!g_list_find(gaim_connections_get_all(), gc)) { - gaim_ssl_close(gsc); - return; - } - - js->gsc = gsc; - if(js->state == JABBER_STREAM_CONNECTING) jabber_send_raw(js, "<?xml version='1.0' ?>", -1); jabber_stream_set_state(js, JABBER_STREAM_INITIALIZING); @@ -450,6 +443,8 @@ GaimConnection *gc = data; JabberStream *js = gc->proto_data; + js->gsc = NULL; + switch(error) { case GAIM_SSL_CONNECT_FAILED: gaim_connection_error(gc, _("Connection Failed")); @@ -458,8 +453,6 @@ gaim_connection_error(gc, _("SSL Handshake Failed")); break; } - - js->gsc = NULL; } static void tls_init(JabberStream *js) Modified: trunk/libgaim/protocols/novell/novell.c =================================================================== --- trunk/libgaim/protocols/novell/novell.c 2006-08-21 02:21:51 UTC (rev 16931) +++ trunk/libgaim/protocols/novell/novell.c 2006-08-21 02:42:14 UTC (rev 16932) @@ -1663,8 +1663,14 @@ novell_ssl_connect_error(GaimSslConnection * gsc, GaimSslErrorType error, gpointer data) { - gaim_connection_error((GaimConnection *)data, - _("Unable to make SSL connection to server.")); + GaimConnection *gc; + NMUser *user; + + gc = data; + user = gc->proto_data; + user->conn->ssl_conn->data = NULL; + + gaim_connection_error(gc, _("Unable to make SSL connection to server.")); } static void @@ -1717,7 +1723,6 @@ return; conn->ssl_conn = g_new0(NMSSLConn, 1); - conn->ssl_conn->data = gsc; conn->ssl_conn->read = (nm_ssl_read_cb) gaim_ssl_read; conn->ssl_conn->write = (nm_ssl_write_cb) gaim_ssl_write; @@ -2182,9 +2187,10 @@ 1, NOVELL_CONNECT_STEPS); user->conn->use_ssl = TRUE; - if (gaim_ssl_connect(user->client_data, user->conn->addr, - user->conn->port, novell_ssl_connected_cb, - novell_ssl_connect_error, gc) == NULL) { + user->conn->ssl_conn->data = gaim_ssl_connect(user->client_data, + user->conn->addr, user->conn->port, + novell_ssl_connected_cb, novell_ssl_connect_error, gc); + if (user->conn->ssl_conn->data == NULL) { gaim_connection_error(gc, _("Error." " SSL support is not installed.")); } Modified: trunk/libgaim/sslconn.h =================================================================== --- trunk/libgaim/sslconn.h 2006-08-21 02:21:51 UTC (rev 16931) +++ trunk/libgaim/sslconn.h 2006-08-21 02:42:14 UTC (rev 16932) @@ -92,13 +92,18 @@ gboolean gaim_ssl_is_supported(void); /** - * Makes a SSL connection to the specified host and port. + * Makes a SSL connection to the specified host and port. The caller + * should keep track of the returned value and use it to cancel the + * connection, if needed. * * @param account The account making the connection. * @param host The destination host. * @param port The destination port. * @param func The SSL input handler function. - * @param error_func The SSL error handler function. + * @param error_func The SSL error handler function. This function + * should NOT call gaim_ssl_close(). In the event + * of an error the GaimSslConnection will be + * destroyed for you. * @param data User-defined data. * * @return The SSL connection handle. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-08-21 05:25:58
|
Revision: 16944 Author: thekingant Date: 2006-08-20 22:25:44 -0700 (Sun, 20 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16944&view=rev Log Message: ----------- Rename GaimProxyConnectInfo to GaimProxyConnectData, and change the variables from connect_info to connect_data. Sorry, but I wanted to get this right before it becomes permanent. Modified Paths: -------------- trunk/libgaim/protocols/irc/irc.c trunk/libgaim/protocols/irc/irc.h trunk/libgaim/protocols/jabber/jabber.c trunk/libgaim/protocols/jabber/jabber.h trunk/libgaim/protocols/jabber/si.c trunk/libgaim/protocols/msn/directconn.c trunk/libgaim/protocols/msn/directconn.h trunk/libgaim/protocols/msn/httpconn.c trunk/libgaim/protocols/msn/httpconn.h trunk/libgaim/protocols/msn/servconn.c trunk/libgaim/protocols/msn/servconn.h trunk/libgaim/protocols/oscar/flap_connection.c trunk/libgaim/protocols/oscar/oscar.c trunk/libgaim/protocols/oscar/oscar.h trunk/libgaim/protocols/oscar/peer.c trunk/libgaim/protocols/oscar/peer.h trunk/libgaim/protocols/oscar/peer_proxy.c trunk/libgaim/protocols/sametime/sametime.c trunk/libgaim/protocols/silc/silc.c trunk/libgaim/protocols/silc/silcgaim.h trunk/libgaim/protocols/simple/simple.c trunk/libgaim/proxy.c trunk/libgaim/proxy.h trunk/libgaim/sslconn.c trunk/libgaim/sslconn.h Modified: trunk/libgaim/protocols/irc/irc.c =================================================================== --- trunk/libgaim/protocols/irc/irc.c 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/irc/irc.c 2006-08-21 05:25:44 UTC (rev 16944) @@ -324,11 +324,11 @@ if (!irc->gsc) { - irc->connect_info = gaim_proxy_connect(account, irc->server, + irc->connect_data = gaim_proxy_connect(account, irc->server, gaim_account_get_int(account, "port", IRC_DEFAULT_PORT), irc_login_cb, gc); - if (!irc->connect_info || !gaim_account_get_connection(account)) { + if (!irc->connect_data || !gaim_account_get_connection(account)) { gaim_connection_error(gc, _("Couldn't create socket")); return; } @@ -390,7 +390,7 @@ GaimConnection *gc = data; struct irc_conn *irc = gc->proto_data; - irc->connect_info = NULL; + irc->connect_data = NULL; if (source < 0) { gaim_connection_error(gc, _("Couldn't connect to host")); @@ -433,8 +433,8 @@ if (irc->gsc || (irc->fd >= 0)) irc_cmd_quit(irc, "quit", NULL, NULL); - if (irc->connect_info) - gaim_proxy_connect_cancel(irc->connect_info); + if (irc->connect_data) + gaim_proxy_connect_cancel(irc->connect_data); if (gc->inpa) gaim_input_remove(gc->inpa); Modified: trunk/libgaim/protocols/irc/irc.h =================================================================== --- trunk/libgaim/protocols/irc/irc.h 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/irc/irc.h 2006-08-21 05:25:44 UTC (rev 16944) @@ -54,7 +54,7 @@ guint timer; GHashTable *buddies; - GaimProxyConnectInfo *connect_info; + GaimProxyConnectData *connect_data; char *inbuf; int inbuflen; Modified: trunk/libgaim/protocols/jabber/jabber.c =================================================================== --- trunk/libgaim/protocols/jabber/jabber.c 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/jabber/jabber.c 2006-08-21 05:25:44 UTC (rev 16944) @@ -420,7 +420,7 @@ GaimConnection *gc = data; JabberStream *js = gc->proto_data; - js->connect_info = NULL; + js->connect_data = NULL; if (source < 0) { gaim_connection_error(gc, _("Couldn't connect to host")); @@ -465,10 +465,10 @@ static void jabber_login_connect(JabberStream *js, const char *server, int port) { - js->connect_info = gaim_proxy_connect(js->gc->account, server, + js->connect_data = gaim_proxy_connect(js->gc->account, server, port, jabber_login_callback, js->gc); - if (js->connect_info == NULL) + if (js->connect_data == NULL) gaim_connection_error(js->gc, _("Unable to create socket")); } @@ -900,11 +900,11 @@ } if(!js->gsc) { - js->connect_info = gaim_proxy_connect(account, server, + js->connect_data = gaim_proxy_connect(account, server, gaim_account_get_int(account, "port", 5222), jabber_login_callback, gc); - if (js->connect_info == NULL) + if (js->connect_data == NULL) gaim_connection_error(gc, _("Unable to create socket")); } } @@ -920,8 +920,8 @@ if (!gc->disconnect_timeout) jabber_send_raw(js, "</stream:stream>", -1); - if (js->connect_info) - gaim_proxy_connect_cancel(js->connect_info); + if (js->connect_data) + gaim_proxy_connect_cancel(js->connect_data); if(js->gsc) { #ifdef HAVE_OPENSSL Modified: trunk/libgaim/protocols/jabber/jabber.h =================================================================== --- trunk/libgaim/protocols/jabber/jabber.h 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/jabber/jabber.h 2006-08-21 05:25:44 UTC (rev 16944) @@ -67,7 +67,7 @@ { int fd; - GaimProxyConnectInfo *connect_info; + GaimProxyConnectData *connect_data; #ifdef HAVE_LIBXML xmlParserCtxt *context; Modified: trunk/libgaim/protocols/jabber/si.c =================================================================== --- trunk/libgaim/protocols/jabber/si.c 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/jabber/si.c 2006-08-21 05:25:44 UTC (rev 16944) @@ -46,7 +46,7 @@ typedef struct _JabberSIXfer { JabberStream *js; - GaimProxyConnectInfo *connect_info; + GaimProxyConnectData *connect_data; gboolean accepted; @@ -100,7 +100,7 @@ struct bytestreams_streamhost *streamhost = jsx->streamhosts->data; gaim_proxy_info_destroy(jsx->gpi); - jsx->connect_info = NULL; + jsx->connect_data = NULL; if(source < 0) { jsx->streamhosts = g_list_remove(jsx->streamhosts, streamhost); @@ -171,11 +171,11 @@ for(i=0; i<20; i++, p+=2) snprintf(p, 3, "%02x", hashval[i]); - jsx->connect_info = gaim_proxy_connect_socks5(jsx->gpi, dstaddr, 0, + jsx->connect_data = gaim_proxy_connect_socks5(jsx->gpi, dstaddr, 0, jabber_si_bytestreams_connect_cb, xfer); g_free(dstaddr); - if (jsx->connect_info == NULL) + if (jsx->connect_data == NULL) { jsx->streamhosts = g_list_remove(jsx->streamhosts, streamhost); g_free(streamhost->jid); @@ -696,8 +696,8 @@ js->file_transfers = g_list_remove(js->file_transfers, xfer); - if (jsx->connect_info != NULL) - gaim_proxy_connect_cancel(jsx->connect_info); + if (jsx->connect_data != NULL) + gaim_proxy_connect_cancel(jsx->connect_data); g_free(jsx->stream_id); g_free(jsx->iq_id); Modified: trunk/libgaim/protocols/msn/directconn.c =================================================================== --- trunk/libgaim/protocols/msn/directconn.c 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/msn/directconn.c 2006-08-21 05:25:44 UTC (rev 16944) @@ -361,7 +361,7 @@ gaim_debug_misc("msn", "directconn: connect_cb: %d\n", source); directconn = data; - directconn->connect_info = NULL; + directconn->connect_data = NULL; if (TRUE) { @@ -423,10 +423,10 @@ } #endif - directconn->connect_info = gaim_proxy_connect(session->account, host, port, + directconn->connect_data = gaim_proxy_connect(session->account, host, port, connect_cb, directconn); - if (directconn->connect_info != NULL) + if (directconn->connect_data != NULL) { return TRUE; } @@ -476,8 +476,8 @@ void msn_directconn_destroy(MsnDirectConn *directconn) { - if (directconn->connect_info != NULL) - gaim_proxy_connect_cancel(directconn->connect_info); + if (directconn->connect_data != NULL) + gaim_proxy_connect_cancel(directconn->connect_data); if (directconn->inpa != 0) gaim_input_remove(directconn->inpa); Modified: trunk/libgaim/protocols/msn/directconn.h =================================================================== --- trunk/libgaim/protocols/msn/directconn.h 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/msn/directconn.h 2006-08-21 05:25:44 UTC (rev 16944) @@ -35,7 +35,7 @@ MsnSlpLink *slplink; MsnSlpCall *initial_call; - GaimProxyConnectInfo *connect_info; + GaimProxyConnectData *connect_data; gboolean acked; Modified: trunk/libgaim/protocols/msn/httpconn.c =================================================================== --- trunk/libgaim/protocols/msn/httpconn.c 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/msn/httpconn.c 2006-08-21 05:25:44 UTC (rev 16944) @@ -698,7 +698,7 @@ MsnHttpConn *httpconn; httpconn = data; - httpconn->connect_info = NULL; + httpconn->connect_data = NULL; httpconn->fd = source; if (source >= 0) @@ -727,10 +727,10 @@ if (httpconn->connected) msn_httpconn_disconnect(httpconn); - httpconn->connect_info = gaim_proxy_connect(httpconn->session->account, + httpconn->connect_data = gaim_proxy_connect(httpconn->session->account, "gateway.messenger.hotmail.com", 80, connect_cb, httpconn); - if (httpconn->connect_info != NULL) + if (httpconn->connect_data != NULL) { httpconn->waiting_response = TRUE; httpconn->connected = TRUE; @@ -747,10 +747,10 @@ if (!httpconn->connected) return; - if (httpconn->connect_info != NULL) + if (httpconn->connect_data != NULL) { - gaim_proxy_connect_cancel(httpconn->connect_info); - httpconn->connect_info = NULL; + gaim_proxy_connect_cancel(httpconn->connect_data); + httpconn->connect_data = NULL; } if (httpconn->timer) Modified: trunk/libgaim/protocols/msn/httpconn.h =================================================================== --- trunk/libgaim/protocols/msn/httpconn.h 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/msn/httpconn.h 2006-08-21 05:25:44 UTC (rev 16944) @@ -37,7 +37,7 @@ MsnSession *session; /**< The MSN Session. */ MsnServConn *servconn; /**< The connection object. */ - GaimProxyConnectInfo *connect_info; + GaimProxyConnectData *connect_data; char *full_session_id; /**< The full session id. */ char *session_id; /**< The trimmed session id. */ Modified: trunk/libgaim/protocols/msn/servconn.c =================================================================== --- trunk/libgaim/protocols/msn/servconn.c 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/msn/servconn.c 2006-08-21 05:25:44 UTC (rev 16944) @@ -171,7 +171,7 @@ MsnServConn *servconn; servconn = data; - servconn->connect_info = NULL; + servconn->connect_data = NULL; servconn->processing = FALSE; if (servconn->wasted) @@ -233,10 +233,10 @@ return TRUE; } - servconn->connect_info = gaim_proxy_connect(session->account, host, port, + servconn->connect_data = gaim_proxy_connect(session->account, host, port, connect_cb, servconn); - if (servconn->connect_info != NULL) + if (servconn->connect_data != NULL) { servconn->processing = TRUE; return TRUE; @@ -268,10 +268,10 @@ return; } - if (servconn->connect_info != NULL) + if (servconn->connect_data != NULL) { - gaim_proxy_connect_cancel(servconn->connect_info); - servconn->connect_info = NULL; + gaim_proxy_connect_cancel(servconn->connect_data); + servconn->connect_data = NULL; } if (servconn->inpa > 0) Modified: trunk/libgaim/protocols/msn/servconn.h =================================================================== --- trunk/libgaim/protocols/msn/servconn.h 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/msn/servconn.h 2006-08-21 05:25:44 UTC (rev 16944) @@ -63,7 +63,7 @@ MsnSession *session; /**< The MSN session of this connection. */ MsnCmdProc *cmdproc; /**< The command processor of this connection. */ - GaimProxyConnectInfo *connect_info; + GaimProxyConnectData *connect_data; gboolean connected; /**< A flag that states if it's connected. */ gboolean processing; /**< A flag that states if something is working Modified: trunk/libgaim/protocols/oscar/flap_connection.c =================================================================== --- trunk/libgaim/protocols/oscar/flap_connection.c 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/oscar/flap_connection.c 2006-08-21 05:25:44 UTC (rev 16944) @@ -140,17 +140,17 @@ void flap_connection_close(OscarData *od, FlapConnection *conn) { - if (conn->connect_info != NULL) + if (conn->connect_data != NULL) { - gaim_proxy_connect_cancel(conn->connect_info); - conn->connect_info = NULL; + gaim_proxy_connect_cancel(conn->connect_data); + conn->connect_data = NULL; } if (conn->connect_data != NULL) { if (conn->type == SNAC_FAMILY_CHAT) { - oscar_chat_destroy(conn->connect_data); + oscar_chat_destroy(conn->new_conn_data); conn->connect_data = NULL; } } Modified: trunk/libgaim/protocols/oscar/oscar.c =================================================================== --- trunk/libgaim/protocols/oscar/oscar.c 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/oscar/oscar.c 2006-08-21 05:25:44 UTC (rev 16944) @@ -919,7 +919,7 @@ gc = od->gc; account = gaim_connection_get_account(gc); - conn->connect_info = NULL; + conn->connect_data = NULL; conn->fd = source; if (source < 0) @@ -972,8 +972,8 @@ } else if (conn->type == SNAC_FAMILY_CHAT) { - od->oscar_chats = g_slist_append(od->oscar_chats, conn->connect_data); - conn->connect_data = NULL; + od->oscar_chats = g_slist_append(od->oscar_chats, conn->new_conn_data); + conn->new_conn_data = NULL; } } @@ -1197,11 +1197,11 @@ gaim_prefs_connect_callback(gc, "/plugins/prpl/oscar/recent_buddies", recent_buddies_cb, gc); newconn = flap_connection_new(od, SNAC_FAMILY_AUTH); - newconn->connect_info = gaim_proxy_connect(account, + newconn->connect_data = gaim_proxy_connect(account, gaim_account_get_string(account, "server", OSCAR_DEFAULT_LOGIN_SERVER), gaim_account_get_int(account, "port", OSCAR_DEFAULT_LOGIN_PORT), connection_established_cb, newconn); - if (newconn->connect_info == NULL) + if (newconn->connect_data == NULL) { gaim_connection_error(gc, _("Couldn't connect to host")); return; @@ -1314,10 +1314,10 @@ newconn = flap_connection_new(od, SNAC_FAMILY_LOCATE); newconn->cookielen = info->cookielen; newconn->cookie = g_memdup(info->cookie, info->cookielen); - newconn->connect_info = gaim_proxy_connect(account, host, port, + newconn->connect_data = gaim_proxy_connect(account, host, port, connection_established_cb, newconn); g_free(host); - if (newconn->connect_info == NULL) + if (newconn->connect_data == NULL) { gaim_connection_error(gc, _("Could Not Connect")); od->killme = TRUE; @@ -1609,13 +1609,13 @@ cc->exchange = redir->chat.exchange; cc->instance = redir->chat.instance; cc->show = extract_name(redir->chat.room); - newconn->connect_data = cc; + newconn->new_conn_data = cc; gaim_debug_info("oscar", "Connecting to chat room %s exchange %hu\n", cc->name, cc->exchange); } - newconn->connect_info = gaim_proxy_connect(account, host, port, + newconn->connect_data = gaim_proxy_connect(account, host, port, connection_established_cb, newconn); - if (newconn->connect_info == NULL) + if (newconn->connect_data == NULL) { flap_connection_schedule_destroy(newconn, OSCAR_DISCONNECT_COULD_NOT_CONNECT); gaim_debug_error("oscar", "Unable to connect to FLAP server " Modified: trunk/libgaim/protocols/oscar/oscar.h =================================================================== --- trunk/libgaim/protocols/oscar/oscar.h 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/oscar/oscar.h 2006-08-21 05:25:44 UTC (rev 16944) @@ -368,10 +368,10 @@ OscarDisconnectReason disconnect_reason; /* A few variables that are only used when connecting */ - GaimProxyConnectInfo *connect_info; + GaimProxyConnectData *connect_data; guint16 cookielen; guint8 *cookie; - gpointer connect_data; + gpointer new_conn_data; int fd; FlapFrame buffer_incoming; Modified: trunk/libgaim/protocols/oscar/peer.c =================================================================== --- trunk/libgaim/protocols/oscar/peer.c 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/oscar/peer.c 2006-08-21 05:25:44 UTC (rev 16944) @@ -139,10 +139,10 @@ else if (conn->type == OSCAR_CAPABILITY_SENDFILE) peer_oft_close(conn); - if (conn->connect_info != NULL) + if (conn->connect_data != NULL) { - gaim_proxy_connect_cancel(conn->connect_info); - conn->connect_info = NULL; + gaim_proxy_connect_cancel(conn->connect_data); + conn->connect_data = NULL; } if (conn->connect_timeout_timer != 0) @@ -488,7 +488,7 @@ conn = data; - conn->connect_info = NULL; + conn->connect_data = NULL; gaim_timeout_remove(conn->connect_timeout_timer); conn->connect_timeout_timer = 0; @@ -702,10 +702,10 @@ g_free(tmp); } - conn->connect_info = gaim_proxy_connect(account, + conn->connect_data = gaim_proxy_connect(account, conn->verifiedip, conn->port, peer_connection_established_cb, conn); - if (conn->connect_info != NULL) + if (conn->connect_data != NULL) { /* Connecting... */ conn->connect_timeout_timer = gaim_timeout_add(15000, @@ -737,10 +737,10 @@ g_free(tmp); } - conn->connect_info = gaim_proxy_connect(account, + conn->connect_data = gaim_proxy_connect(account, conn->clientip, conn->port, peer_connection_established_cb, conn); - if (conn->connect_info != NULL) + if (conn->connect_data != NULL) { /* Connecting... */ conn->connect_timeout_timer = gaim_timeout_add(15000, @@ -808,11 +808,11 @@ g_free(tmp); } - conn->connect_info = gaim_proxy_connect(account, + conn->connect_data = gaim_proxy_connect(account, (conn->proxyip != NULL) ? conn->proxyip : PEER_PROXY_SERVER, PEER_PROXY_PORT, peer_proxy_connection_established_cb, conn); - if (conn->connect_info != NULL) + if (conn->connect_data != NULL) { /* Connecting... */ return; Modified: trunk/libgaim/protocols/oscar/peer.h =================================================================== --- trunk/libgaim/protocols/oscar/peer.h 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/oscar/peer.h 2006-08-21 05:25:44 UTC (rev 16944) @@ -161,7 +161,7 @@ /** * This is only used when the peer connection is being established. */ - GaimProxyConnectInfo *connect_info; + GaimProxyConnectData *connect_data; /** * This is only used when the peer connection is being established. Modified: trunk/libgaim/protocols/oscar/peer_proxy.c =================================================================== --- trunk/libgaim/protocols/oscar/peer_proxy.c 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/oscar/peer_proxy.c 2006-08-21 05:25:44 UTC (rev 16944) @@ -332,7 +332,7 @@ conn = data; - conn->connect_info = NULL; + conn->connect_data = NULL; if (source < 0) { Modified: trunk/libgaim/protocols/sametime/sametime.c =================================================================== --- trunk/libgaim/protocols/sametime/sametime.c 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/sametime/sametime.c 2006-08-21 05:25:44 UTC (rev 16944) @@ -226,7 +226,7 @@ /** socket fd */ int socket; gint outpa; /* like inpa, but the other way */ - GaimProxyConnectInfo *connect_info; + GaimProxyConnectData *connect_data; /** circular buffer for outgoing data */ GaimCircBuffer *sock_buf; @@ -1675,7 +1675,7 @@ struct mwGaimPluginData *pd = data; GaimConnection *gc = pd->gc; - pd->connect_info = NULL; + pd->connect_data = NULL; if(source < 0) { /* connection failed */ @@ -3681,8 +3681,8 @@ gaim_connection_update_progress(gc, _("Connecting"), 1, MW_CONNECT_STEPS); - pd->connect_info = gaim_proxy_connect(account, host, port, connect_cb, pd); - if(pd->connect_info == NULL) { + pd->connect_data = gaim_proxy_connect(account, host, port, connect_cb, pd); + if(pd->connect_data == NULL) { gaim_connection_error(gc, _("Unable to connect to host")); } } @@ -3715,9 +3715,9 @@ gc->inpa = 0; } - if(pd->connect_info != NULL) { - gaim_proxy_connect_cancel(pd->connect_info); - pd->connect_info = NULL; + if(pd->connect_data != NULL) { + gaim_proxy_connect_cancel(pd->connect_data); + pd->connect_data = NULL; } /* clean up the rest */ Modified: trunk/libgaim/protocols/silc/silc.c =================================================================== --- trunk/libgaim/protocols/silc/silc.c 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/silc/silc.c 2006-08-21 05:25:44 UTC (rev 16944) @@ -154,7 +154,7 @@ g_return_if_fail(gc != NULL); sg = gc->proto_data; - sg->connect_info = NULL; + sg->connect_data = NULL; if (source < 0) { gaim_connection_error(gc, _("Connection failed")); @@ -357,12 +357,12 @@ gc->proto_data = sg; /* Connect to the SILC server */ - sg->connect_info = gaim_proxy_connect(account, + sg->connect_data = gaim_proxy_connect(account, gaim_account_get_string(account, "server", "silc.silcnet.org"), gaim_account_get_int(account, "port", 706), silcgaim_login_connected, gc); - if (sg->connect_info == NULL) + if (sg->connect_data == NULL) { gaim_connection_error(gc, _("Unable to create connection")); return; @@ -382,8 +382,8 @@ SilcGaim sg = (SilcGaim)context; silc_client_stop(sg->client); silc_client_free(sg->client); - if (sg->connect_info != NULL) - gaim_proxy_connect_cancel(sg->connect_info); + if (sg->connect_data != NULL) + gaim_proxy_connect_cancel(sg->connect_data); #ifdef HAVE_SILCMIME_H if (sg->mimeass) silc_mime_assembler_free(sg->mimeass); Modified: trunk/libgaim/protocols/silc/silcgaim.h =================================================================== --- trunk/libgaim/protocols/silc/silcgaim.h 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/silc/silcgaim.h 2006-08-21 05:25:44 UTC (rev 16944) @@ -67,7 +67,7 @@ SilcClient client; SilcClientConnection conn; - GaimProxyConnectInfo *connect_info; + GaimProxyConnectData *connect_data; guint scheduler; GaimConnection *gc; GaimAccount *account; Modified: trunk/libgaim/protocols/simple/simple.c =================================================================== --- trunk/libgaim/protocols/simple/simple.c 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/protocols/simple/simple.c 2006-08-21 05:25:44 UTC (rev 16944) @@ -457,12 +457,12 @@ static void sendlater(GaimConnection *gc, const char *buf) { struct simple_account_data *sip = gc->proto_data; - GaimProxyConnectInfo *connect_info; + GaimProxyConnectData *connect_data; if(!sip->connecting) { gaim_debug_info("simple", "connecting to %s port %d\n", sip->realhostname ? sip->realhostname : "{NULL}", sip->realport); - connect_info = gaim_proxy_connect(sip->account, sip->realhostname, sip->realport, send_later_cb, gc); - if(connect_info == NULL) { + connect_data = gaim_proxy_connect(sip->account, sip->realhostname, sip->realport, send_later_cb, gc); + if(connect_data == NULL) { gaim_connection_error(gc, _("Couldn't create socket")); } sip->connecting = TRUE; @@ -1556,7 +1556,7 @@ static void simple_tcp_connect_listen_cb(int listenfd, gpointer data) { struct simple_account_data *sip = (struct simple_account_data*) data; - GaimProxyConnectInfo *connect_info; + GaimProxyConnectData *connect_data; sip->listenfd = listenfd; if(sip->listenfd == -1) { @@ -1571,9 +1571,9 @@ gaim_debug_info("simple", "connecting to %s port %d\n", sip->realhostname, sip->realport); /* open tcp connection to the server */ - connect_info = gaim_proxy_connect(sip->account, sip->realhostname, + connect_data = gaim_proxy_connect(sip->account, sip->realhostname, sip->realport, login_cb, sip->gc); - if(connect_info == NULL) { + if(connect_data == NULL) { gaim_connection_error(sip->gc, _("Couldn't create socket")); } } Modified: trunk/libgaim/proxy.c =================================================================== --- trunk/libgaim/proxy.c 2006-08-21 05:07:42 UTC (rev 16943) +++ trunk/libgaim/proxy.c 2006-08-21 05:25:44 UTC (rev 16944) @@ -39,7 +39,7 @@ #include "proxy.h" #include "util.h" -struct _GaimProxyConnectInfo { +struct _GaimProxyConnectData { GaimProxyConnectFunction connect_cb; gpointer data; char *host; @@ -87,9 +87,9 @@ * of the return value from that function this linked list * will no longer be needed. */ -static GSList *connect_infos = NULL; +static GSList *connect_datas = NULL; -static void try_connect(GaimProxyConnectInfo *connect_info); +static void try_connect(GaimProxyConnectData *connect_data); /************************************************************************** * Proxy structure API @@ -281,63 +281,63 @@ * be called immediately after this. */ static void -gaim_proxy_connect_info_disconnect(GaimProxyConnectInfo *connect_info) +gaim_proxy_connect_data_disconnect(GaimProxyConnectData *connect_data) { - if (connect_info->inpa > 0) + if (connect_data->inpa > 0) { - gaim_input_remove(connect_info->inpa); - connect_info->inpa = 0; + gaim_input_remove(connect_data->inpa); + connect_data->inpa = 0; } - if (connect_info->fd >= 0) + if (connect_data->fd >= 0) { - close(connect_info->fd); - connect_info->fd = -1; + close(connect_data->fd); + connect_data->fd = -1; } - g_free(connect_info->write_buffer); - connect_info->write_buffer = NULL; + g_free(connect_data->write_buffer); + connect_data->write_buffer = NULL; - g_free(connect_info->read_buffer); - connect_info->read_buffer = NULL; + g_free(connect_data->read_buffer); + connect_data->read_buffer = NULL; } static void -gaim_proxy_connect_info_destroy(GaimProxyConnectInfo *connect_info) +gaim_proxy_connect_data_destroy(GaimProxyConnectData *connect_data) { - gaim_proxy_connect_info_disconnect(connect_info); + gaim_proxy_connect_data_disconnect(connect_data); - connect_infos = g_slist_remove(connect_infos, connect_info); + connect_datas = g_slist_remove(connect_datas, connect_data); - if (connect_info->query_data != NULL) - gaim_dnsquery_destroy(connect_info->query_data); + if (connect_data->query_data != NULL) + gaim_dnsquery_destroy(connect_data->query_data); - while (connect_info->hosts != NULL) + while (connect_data->hosts != NULL) { /* Discard the length... */ - connect_info->hosts = g_slist_remove(connect_info->hosts, connect_info->hosts->data); + connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); /* Free the address... */ - g_free(connect_info->hosts->data); - connect_info->hosts = g_slist_remove(connect_info->hosts, connect_info->hosts->data); + g_free(connect_data->hosts->data); + connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); } - g_free(connect_info->host); - g_free(connect_info); + g_free(connect_data->host); + g_free(connect_data); } static void -gaim_proxy_connect_info_connected(GaimProxyConnectInfo *connect_info) +gaim_proxy_connect_data_connected(GaimProxyConnectData *connect_data) { - connect_info->connect_cb(connect_info->data, connect_info->fd, NULL); + connect_data->connect_cb(connect_data->data, connect_data->fd, NULL); /* * We've passed the file descriptor to the protocol, so it's no longer * our responsibility, and we should be careful not to free it when - * we destroy the connect_info. + * we destroy the connect_data. */ - connect_info->fd = -1; + connect_data->fd = -1; - gaim_proxy_connect_info_destroy(connect_info); + gaim_proxy_connect_data_destroy(connect_data); } /** @@ -350,16 +350,16 @@ * good error_message. */ static void -gaim_proxy_connect_info_error(GaimProxyConnectInfo *connect_info, const gchar *error_message) +gaim_proxy_connect_data_error(GaimProxyConnectData *connect_data, const gchar *error_message) { - connect_info->connect_cb(connect_info->data, -1, error_message); - gaim_proxy_connect_info_destroy(connect_info); + connect_data->connect_cb(connect_data->data, -1, error_message); + gaim_proxy_connect_data_destroy(connect_data); } static void no_one_calls(gpointer data, gint source, GaimInputCondition cond) { - GaimProxyConnectInfo *connect_info = data; + GaimProxyConnectData *connect_data = data; socklen_t len; int error=0, ret; @@ -378,7 +378,7 @@ * be overly optimistic sometimes. select is just a hint that you might be * able to do something.) */ - ret = getsockopt(connect_info->fd, SOL_SOCKET, SO_ERROR, &error, &len); + ret = getsockopt(connect_data->fd, SOL_SOCKET, SO_ERROR, &error, &len); if (ret == 0 && error == EINPROGRESS) return; /* we'll be called again later */ if (ret < 0 || error != 0) { @@ -388,57 +388,57 @@ gaim_debug_error("proxy", "getsockopt SO_ERROR check: %s\n", strerror(error)); - gaim_proxy_connect_info_disconnect(connect_info); - try_connect(connect_info); + gaim_proxy_connect_data_disconnect(connect_data); + try_connect(connect_data); return; } - gaim_input_remove(connect_info->inpa); - connect_info->inpa = 0; + gaim_input_remove(connect_data->inpa); + connect_data->inpa = 0; - gaim_proxy_connect_info_connected(connect_info); + gaim_proxy_connect_data_connected(connect_data); } static gboolean clean_connect(gpointer data) { - GaimProxyConnectInfo *connect_info; + GaimProxyConnectData *connect_data; - connect_info = data; - gaim_proxy_connect_info_connected(connect_info); + connect_data = data; + gaim_proxy_connect_data_connected(connect_data); return FALSE; } static int -proxy_connect_none(GaimProxyConnectInfo *connect_info, struct sockaddr *addr, socklen_t addrlen) +proxy_connect_none(GaimProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) { gaim_debug_info("proxy", "Connecting to %s:%d with no proxy\n", - connect_info->host, connect_info->port); + connect_data->host, connect_data->port); - connect_info->fd = socket(addr->sa_family, SOCK_STREAM, 0); - if (connect_info->fd < 0) + connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); + if (connect_data->fd < 0) { gaim_debug_error("proxy", "Unable to create socket: %s\n", strerror(errno)); return -1; } - fcntl(connect_info->fd, F_SETFL, O_NONBLOCK); + fcntl(connect_data->fd, F_SETFL, O_NONBLOCK); #ifndef _WIN32 - fcntl(connect_info->fd, F_SETFD, FD_CLOEXEC); + fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); #endif - if (connect(connect_info->fd, (struct sockaddr *)addr, addrlen) != 0) + if (connect(connect_data->fd, (struct sockaddr *)addr, addrlen) != 0) { if ((errno == EINPROGRESS) || (errno == EINTR)) { gaim_debug_info("proxy", "Connection in progress\n"); - connect_info->inpa = gaim_input_add(connect_info->fd, GAIM_INPUT_WRITE, no_one_calls, connect_info); + connect_data->inpa = gaim_input_add(connect_data->fd, GAIM_INPUT_WRITE, no_one_calls, connect_data); } else { gaim_debug_error("proxy", "Connect failed: %s\n", strerror(errno)); - close(connect_info->fd); - connect_info->fd = -1; + close(connect_data->fd); + connect_data->fd = -1; return -1; } } @@ -451,11 +451,11 @@ int error = ETIMEDOUT; gaim_debug_info("proxy", "Connected immediately.\n"); len = sizeof(error); - if (getsockopt(connect_info->fd, SOL_SOCKET, SO_ERROR, &error, &len) != 0) + if (getsockopt(connect_data->fd, SOL_SOCKET, SO_ERROR, &error, &len) != 0) { gaim_debug_error("proxy", "getsockopt failed.\n"); - close(connect_info->fd); - connect_info->fd = -1; + close(connect_data->fd); + connect_data->fd = -1; return -1; } @@ -463,38 +463,38 @@ * We want to call the "connected" callback eventually, but we * don't want to call it before we return, just in case. */ - gaim_timeout_add(10, clean_connect, connect_info); + gaim_timeout_add(10, clean_connect, connect_data); } - return connect_info->fd; + return connect_data->fd; } static void proxy_do_write(gpointer data, gint source, GaimInputCondition cond) { - GaimProxyConnectInfo *connect_info = data; - const guchar *request = connect_info->write_buffer + connect_info->written_len; - gsize request_len = connect_info->write_buf_len - connect_info->written_len; + GaimProxyConnectData *connect_data = data; + const guchar *request = connect_data->write_buffer + connect_data->written_len; + gsize request_len = connect_data->write_buf_len - connect_data->written_len; - int ret = write(connect_info->fd, request, request_len); + int ret = write(connect_data->fd, request, request_len); if(ret < 0 && errno == EAGAIN) return; else if(ret < 0) { - gaim_proxy_connect_info_disconnect(connect_info); - try_connect(connect_info); + gaim_proxy_connect_data_disconnect(connect_data); + try_connect(connect_data); return; } else if (ret < request_len) { - connect_info->written_len += ret; + connect_data->written_len += ret; return; } - gaim_input_remove(connect_info->inpa); - g_free(connect_info->write_buffer); - connect_info->write_buffer = NULL; + gaim_input_remove(connect_data->inpa); + g_free(connect_data->write_buffer); + connect_data->write_buffer = NULL; /* register the response handler for the response */ - connect_info->inpa = gaim_input_add(connect_info->fd, GAIM_INPUT_READ, connect_info->read_cb, connect_info); + connect_data->inpa = gaim_input_add(connect_data->fd, GAIM_INPUT_READ, connect_data->read_cb, connect_data); } #define HTTP_GOODSTRING "HTTP/1.0 200" @@ -506,44 +506,44 @@ { int len, headers_len, status = 0; gboolean error; - GaimProxyConnectInfo *connect_info = data; + GaimProxyConnectData *connect_data = data; guchar *p; gsize max_read; gchar *msg; - if(connect_info->read_buffer == NULL) { - connect_info->read_buf_len = 8192; - connect_info->read_buffer = g_malloc(connect_info->read_buf_len); - connect_info->read_len = 0; + if(connect_data->read_buffer == NULL) { + connect_data->read_buf_len = 8192; + connect_data->read_buffer = g_malloc(connect_data->read_buf_len); + connect_data->read_len = 0; } - p = connect_info->read_buffer + connect_info->read_len; - max_read = connect_info->read_buf_len - connect_info->read_len - 1; + p = connect_data->read_buffer + connect_data->read_len; + max_read = connect_data->read_buf_len - connect_data->read_len - 1; - len = read(connect_info->fd, p, max_read); + len = read(connect_data->fd, p, max_read); if(len < 0 && errno == EAGAIN) return; else if(len <= 0) { - gaim_proxy_connect_info_error(connect_info, _("Lost connection with server for an unknown reason.")); + gaim_proxy_connect_data_error(connect_data, _("Lost connection with server for an unknown reason.")); return; } else { - connect_info->read_len += len; + connect_data->read_len += len; } p[len] = '\0'; - if((p = (guchar *)g_strstr_len((const gchar *)connect_info->read_buffer, connect_info->read_len, "\r\n\r\n"))) { + if((p = (guchar *)g_strstr_len((const gchar *)connect_data->read_buffer, connect_data->read_len, "\r\n\r\n"))) { *p = '\0'; - headers_len = (p - connect_info->read_buffer) + 4; + headers_len = (p - connect_data->read_buffer) + 4; } else if(len == max_read) headers_len = len; else return; - error = strncmp((const char *)connect_info->read_buffer, "HTTP/", 5) != 0; + error = strncmp((const char *)connect_data->read_buffer, "HTTP/", 5) != 0; if (!error) { int major; - p = connect_info->read_buffer + 5; + p = connect_data->read_buffer + 5; major = strtol((const char *)p, (char **)&p, 10); error = (major == 0) || (*p != '.'); if(!error) { @@ -560,7 +560,7 @@ } /* Read the contents */ - p = (guchar *)g_strrstr((const gchar *)connect_info->read_buffer, "Content-Length: "); + p = (guchar *)g_strrstr((const gchar *)connect_data->read_buffer, "Content-Length: "); if (p != NULL) { gchar *tmp; @@ -575,12 +575,12 @@ *tmp = '\r'; /* Compensate for what has already been read */ - len -= connect_info->read_len - headers_len; + len -= connect_data->read_len - headers_len; /* I'm assuming that we're doing this to prevent the server from complaining / breaking since we don't read the whole page */ while(len--) { /* TODO: deal with EAGAIN (and other errors) better */ - if (read(connect_info->fd, &tmpc, 1) < 0 && errno != EAGAIN) + if (read(connect_data->fd, &tmpc, 1) < 0 && errno != EAGAIN) break; } } @@ -588,8 +588,8 @@ if (error) { msg = g_strdup_printf("Unable to parse response from HTTP proxy: %s\n", - connect_info->read_buffer); - gaim_proxy_connect_info_error(connect_info, msg); + connect_data->read_buffer); + gaim_proxy_connect_data_error(connect_data, msg); g_free(msg); return; } @@ -597,15 +597,15 @@ { gaim_debug_error("proxy", "Proxy server replied with:\n%s\n", - connect_info->read_buffer); + connect_data->read_buffer); if(status == 407 /* Proxy Auth */) { gchar *ntlm; - if((ntlm = g_strrstr((const gchar *)connect_info->read_buffer, "Proxy-Authenticate: NTLM "))) { /* Check for Type-2 */ + if((ntlm = g_strrstr((const gchar *)connect_data->read_buffer, "Proxy-Authenticate: NTLM "))) { /* Check for Type-2 */ gchar *tmp = ntlm; guint8 *nonce; - gchar *domain = (gchar*)gaim_proxy_info_get_username(connect_info->gpi); + gchar *domain = (gchar*)gaim_proxy_info_get_username(connect_data->gpi); gchar *username; gchar *request; gchar *response; @@ -613,7 +613,7 @@ if (username == NULL) { msg = g_strdup_printf(_("HTTP proxy connection error %d"), status); - gaim_proxy_connect_info_error(connect_info, msg); + gaim_proxy_connect_data_error(connect_data, msg); g_free(msg); return; } @@ -624,8 +624,8 @@ *tmp = '\0'; nonce = gaim_ntlm_parse_type2(ntlm, NULL); response = gaim_ntlm_gen_type3(username, - (gchar*) gaim_proxy_info_get_password(connect_info->gpi), - (gchar*) gaim_proxy_info_get_host(connect_info->gpi), + (gchar*) gaim_proxy_info_get_password(connect_data->gpi), + (gchar*) gaim_proxy_info_get_host(connect_data->gpi), domain, nonce, NULL); username--; *username = '\\'; @@ -634,35 +634,35 @@ "Host: %s:%d\r\n" "Proxy-Authorization: NTLM %s\r\n" "Proxy-Connection: Keep-Alive\r\n\r\n", - connect_info->host, connect_info->port, connect_info->host, - connect_info->port, response); + connect_data->host, connect_data->port, connect_data->host, + connect_data->port, response); g_free(response); - gaim_input_remove(connect_info->inpa); - g_free(connect_info->read_buffer); - connect_info->read_buffer = NULL; + gaim_input_remove(connect_data->inpa); + g_free(connect_data->read_buffer); + connect_data->read_buffer = NULL; - connect_info->write_buffer = (guchar *)request; - connect_info->write_buf_len = strlen(request); - connect_info->written_len = 0; + connect_data->write_buffer = (guchar *)request; + connect_data->write_buf_len = strlen(request); + connect_data->written_len = 0; - connect_info->read_cb = http_canread; + connect_data->read_cb = http_canread; - connect_info->inpa = gaim_input_add(connect_info->fd, - GAIM_INPUT_WRITE, proxy_do_write, connect_info); + connect_data->inpa = gaim_input_add(connect_data->fd, + GAIM_INPUT_WRITE, proxy_do_write, connect_data); - proxy_do_write(connect_info, connect_info->fd, cond); + proxy_do_write(connect_data, connect_data->fd, cond); return; - } else if((ntlm = g_strrstr((const char *)connect_info->read_buffer, "Proxy-Authenticate: NTLM"))) { /* Empty message */ + } else if((ntlm = g_strrstr((const char *)connect_data->read_buffer, "Proxy-Authenticate: NTLM"))) { /* Empty message */ gchar request[2048]; - gchar *domain = (gchar*) gaim_proxy_info_get_username(connect_info->gpi); + gchar *domain = (gchar*) gaim_proxy_info_get_username(connect_data->gpi); gchar *username; int request_len; username = strchr(domain, '\\'); if (username == NULL) { msg = g_strdup_printf(_("HTTP proxy connection error %d"), status); - gaim_proxy_connect_info_error(connect_info, msg); + gaim_proxy_connect_data_error(connect_data, msg); g_free(msg); return; } @@ -671,8 +671,8 @@ request_len = g_snprintf(request, sizeof(request), "CONNECT %s:%d HTTP/1.1\r\n" "Host: %s:%d\r\n", - connect_info->host, connect_info->port, - connect_info->host, connect_info->port); + connect_data->host, connect_data->port, + connect_data->host, connect_data->port); g_return_if_fail(request_len < sizeof(request)); request_len += g_snprintf(request + request_len, @@ -680,48 +680,48 @@ "Proxy-Authorization: NTLM %s\r\n" "Proxy-Connection: Keep-Alive\r\n\r\n", gaim_ntlm_gen_type1( - (gchar*) gaim_proxy_info_get_host(connect_info->gpi), + (gchar*) gaim_proxy_info_get_host(connect_data->gpi), domain)); *username = '\\'; - gaim_input_remove(connect_info->inpa); - g_free(connect_info->read_buffer); - connect_info->read_buffer = NULL; + gaim_input_remove(connect_data->inpa); + g_free(connect_data->read_buffer); + connect_data->read_buffer = NULL; - connect_info->write_buffer = g_memdup(request, request_len); - connect_info->write_buf_len = request_len; - connect_info->written_len = 0; + connect_data->write_buffer = g_memdup(request, request_len); + connect_data->write_buf_len = request_len; + connect_data->written_len = 0; - connect_info->read_cb = http_canread; + connect_data->read_cb = http_canread; - connect_info->inpa = gaim_input_add(connect_info->fd, - GAIM_INPUT_WRITE, proxy_do_write, connect_info); + connect_data->inpa = gaim_input_add(connect_data->fd, + GAIM_INPUT_WRITE, proxy_do_write, connect_data); - proxy_do_write(connect_info, connect_info->fd, cond); + proxy_do_write(connect_data, connect_data->fd, cond); return; } else { msg = g_strdup_printf(_("HTTP proxy connection error %d"), status); - gaim_proxy_connect_info_error(connect_info, msg); + gaim_proxy_connect_data_error(connect_data, msg); g_free(msg); return; } } if(status == 403 /* Forbidden */ ) { - msg = g_strdup_printf(_("Access denied: HTTP proxy server forbids port %d tunnelling."), connect_info->port); - gaim_proxy_connect_info_error(connect_info, msg); + msg = g_strdup_printf(_("Access denied: HTTP proxy server forbids port %d tunnelling."), connect_data->port); + gaim_proxy_connect_data_error(connect_data, msg); g_free(msg); } else { msg = g_strdup_printf(_("HTTP proxy connection error %d"), status); - gaim_proxy_connect_info_error(connect_info, msg); + gaim_proxy_connect_data_error(connect_data, msg); g_free(msg); } } else { - gaim_input_remove(connect_info->inpa); - connect_info->inpa = 0; - g_free(connect_info->read_buffer); - connect_info->read_buffer = NULL; + gaim_input_remove(connect_data->inpa); + connect_data->inpa = 0; + g_free(connect_data->read_buffer); + connect_data->read_buffer = NULL; gaim_debug_info("proxy", "HTTP proxy connection established\n"); - gaim_proxy_connect_info_connected(connect_info); + gaim_proxy_connect_data_connected(connect_data); return; } } @@ -733,38 +733,38 @@ { char request[8192]; int request_len = 0; - GaimProxyConnectInfo *connect_info = data; + GaimProxyConnectData *connect_data = data; socklen_t len; int error = ETIMEDOUT; gaim_debug_info("http proxy", "Connected.\n"); - if (connect_info->inpa > 0) + if (connect_data->inpa > 0) { - gaim_input_remove(connect_info->inpa); - connect_info->inpa = 0; + gaim_input_remove(connect_data->inpa); + connect_data->inpa = 0; } len = sizeof(error); - if (getsockopt(connect_info->fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { - gaim_proxy_connect_info_disconnect(connect_info); - try_connect(connect_info); + if (getsockopt(connect_data->fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { + gaim_proxy_connect_data_disconnect(connect_data); + try_connect(connect_data); return; } gaim_debug_info("proxy", "using CONNECT tunnelling for %s:%d\n", - connect_info->host, connect_info->port); + connect_data->host, connect_data->port); request_len = g_snprintf(request, sizeof(request), "CONNECT %s:%d HTTP/1.1\r\nHost: %s:%d\r\n", - connect_info->host, connect_info->port, connect_info->host, connect_info->port); + connect_data->host, connect_data->port, connect_data->host, connect_data->port); - if (gaim_proxy_info_get_username(connect_info->gpi) != NULL) { + if (gaim_proxy_info_get_username(connect_data->gpi) != NULL) { char *t1, *t2; t1 = g_strdup_printf("%s:%s", - gaim_proxy_info_get_username(connect_info->gpi), - gaim_proxy_info_get_password(connect_info->gpi) ? - gaim_proxy_info_get_password(connect_info->gpi) : ""); + gaim_proxy_info_get_username(connect_data->gpi), + gaim_proxy_info_get_password(connect_data->gpi) ? + gaim_proxy_info_get_password(connect_data->gpi) : ""); t2 = gaim_base64_encode((const guchar *)t1, strlen(t1)); g_free(t1); g_return_if_fail(request_len < sizeof(request)); @@ -775,59 +775,59 @@ "Proxy-Authorization: NTLM %s\r\n" "Proxy-Connection: Keep-Alive\r\n", t2, gaim_ntlm_gen_type1( - (gchar*)gaim_proxy_info_get_host(connect_info->gpi),"")); + (gchar*)gaim_proxy_info_get_host(connect_data->gpi),"")); g_free(t2); } g_return_if_fail(request_len < sizeof(request)); strcpy(request + request_len, "\r\n"); request_len += 2; - connect_info->write_buffer = g_memdup(request, request_len); - connect_info->write_buf_len = request_len; - connect_info->written_len = 0; + connect_data->write_buffer = g_memdup(request, request_len); + connect_data->write_buf_len = request_len; + connect_data->written_len = 0; - connect_info->read_cb = http_canread; + connect_data->read_cb = http_canread; - connect_info->inpa = gaim_input_add(connect_info->fd, GAIM_INPUT_WRITE, proxy_do_write, - connect_info); + connect_data->inpa = gaim_input_add(connect_data->fd, GAIM_INPUT_WRITE, proxy_do_write, + connect_data); - proxy_do_write(connect_info, connect_info->fd, cond); + proxy_do_write(connect_data, connect_data->fd, cond); } static int -proxy_connect_http(GaimProxyConnectInfo *connect_info, struct sockaddr *addr, socklen_t addrlen) +proxy_connect_http(GaimProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) { gaim_debug_info("http proxy", "Connecting to %s:%d via %s:%d using HTTP\n", - (connect_info->host ? connect_info->host : "(null)"), connect_info->port, - (gaim_proxy_info_get_host(connect_info->gpi) ? gaim_proxy_info_get_host(connect_info->gpi) : "(null)"), - gaim_proxy_info_get_port(connect_info->gpi)); + (connect_data->host ? connect_data->host : "(null)"), connect_data->port, + (gaim_proxy_info_get_host(connect_data->gpi) ? gaim_proxy_info_get_host(connect_data->gpi) : "(null)"), + gaim_proxy_info_get_port(connect_data->gpi)); - connect_info->fd = socket(addr->sa_family, SOCK_STREAM, 0); - if (connect_info->fd < 0) + connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); + if (connect_data->fd < 0) return -1; - fcntl(connect_info->fd, F_SETFL, O_NONBLOCK); + fcntl(connect_data->fd, F_SETFL, O_NONBLOCK); #ifndef _WIN32 - fcntl(connect_info->fd, F_SETFD, FD_CLOEXEC); + fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); #endif - if (connect(connect_info->fd, addr, addrlen) != 0) + if (connect(connect_data->fd, addr, addrlen) != 0) { if ((errno == EINPROGRESS) || (errno == EINTR)) { gaim_debug_info("http proxy", "Connection in progress\n"); - if (connect_info->port != 80) { + if (connect_data->port != 80) { /* we need to do CONNECT first */ - connect_info->inpa = gaim_input_add(connect_info->fd, GAIM_INPUT_WRITE, - http_canwrite, connect_info); + connect_data->inpa = gaim_input_add(connect_data->fd, GAIM_INPUT_WRITE, + http_canwrite, connect_data); } else { gaim_debug_info("proxy", "HTTP proxy connection established\n"); - gaim_proxy_connect_info_connected(connect_info); + gaim_proxy_connect_data_connected(connect_data); } } else { - close(connect_info->fd); - connect_info->fd = -1; + close(connect_data->fd); + connect_data->fd = -1; return -1; } } @@ -838,51 +838,51 @@ gaim_debug_info("http proxy", "Connected immediately.\n"); len = sizeof(error); - if (getsockopt(connect_info->fd, SOL_SOCKET, SO_ERROR, &error, &len) != 0) + if (getsockopt(connect_data->fd, SOL_SOCKET, SO_ERROR, &error, &len) != 0) { - close(connect_info->fd); - connect_info->fd = -1; + close(connect_data->fd); + connect_data->fd = -1; return -1; } - http_canwrite(connect_info, connect_info->fd, GAIM_INPUT_WRITE); + http_canwrite(connect_data, connect_data->fd, GAIM_INPUT_WRITE); } - return connect_info->fd; + return connect_data->fd; } static void s4_canread(gpointer data, gint source, GaimInputCondition cond) { - GaimProxyConnectInfo *connect_info = data; + GaimProxyConnectData *connect_data = data; guchar *buf; int len, max_read; /* This is really not going to block under normal circumstances, but to * be correct, we deal with the unlikely scenario */ - if (connect_info->read_buffer == NULL) { - connect_info->read_buf_len = 12; - connect_info->read_buffer = g_malloc(connect_info->read_buf_len); - connect_info->read_len = 0; + if (connect_data->read_buffer == NULL) { + connect_data->read_buf_len = 12; + connect_data->read_buffer = g_malloc(connect_data->read_buf_len); + connect_data->read_len = 0; } - buf = connect_info->read_buffer + connect_info->read_len; - max_read = connect_info->read_buf_len - connect_info->read_len; + buf = connect_data->read_buffer + connect_data->read_len; + max_read = connect_data->read_buf_len - connect_data->read_len; - len = read(connect_info->fd, buf, max_read); + len = read(connect_data->fd, buf, max_read); - if ((len < 0 && errno == EAGAIN) || (len > 0 && len + connect_info->read_len < 4)) + if ((len < 0 && errno == EAGAIN) || (len > 0 && len + connect_data->read_len < 4)) return; - else if (len + connect_info->read_len >= 4) { - if (connect_info->read_buffer[1] == 90) { - gaim_proxy_connect_info_connected(connect_info); + else if (len + connect_data->read_len >= 4) { + if (connect_data->read_buffer[1] == 90) { + gaim_proxy_connect_data_connected(connect_data); return; } } - gaim_proxy_connect_info_disconnect(connect_info); - try_connect(connect_info); + gaim_proxy_connect_data_disconnect(connect_data); + try_connect(connect_data); } static void @@ -890,23 +890,23 @@ { unsigned char packet[9]; struct hostent *hp; - GaimProxyConnectInfo *connect_info = data; + GaimProxyConnectData *connect_data = data; socklen_t len; int error = ETIMEDOUT; gaim_debug_info("socks4 proxy", "Connected.\n"); - if (connect_info->inpa > 0) + if (connect_data->inpa > 0) { - gaim_input_remove(connect_info->inpa); - connect_info->inpa = 0; + gaim_input_remove(connect_data->inpa); + connect_data->inpa = 0; } len = sizeof(error); - if (getsockopt(connect_info->fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { - gaim_proxy_connect_info_disconnect(connect_info); - try_connect(connect_info); + if (getsockopt(connect_data->fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { + gaim_proxy_connect_data_disconnect(connect_data); + try_connect(connect_data); return; } @@ -919,60 +919,60 @@ * meantime, stick with plain old SOCKS4. */ /* TODO: This needs to be non-blocking! */ - hp = gethostbyname(connect_info->host); + hp = gethostbyname(connect_data->host); if (hp == NULL) { - gaim_proxy_connect_info_disconnect(connect_info); - try_connect(connect_info); + gaim_proxy_connect_data_disconnect(connect_data); + try_connect(connect_data); return; } packet[0] = 4; packet[1] = 1; - packet[2] = connect_info->port >> 8; - packet[3] = connect_info->port & 0xff; + packet[2] = connect_data->port >> 8; + packet[3] = connect_data->port & 0xff; packet[4] = (unsigned char)(hp->h_addr_list[0])[0]; packet[5] = (unsigned char)(hp->h_addr_list[0])[1]; packet[6] = (unsigned char)(hp->h_addr_list[0])[2]; packet[7] = (unsigned char)(hp->h_addr_list[0])[3]; packet[8] = 0; - connect_info->write_buffer = g_memdup(packet, sizeof(packet)); - connect_info->write_buf_len = sizeof(packet); - connect_info->written_len = 0; - connect_info->read_cb = s4_canread; + connect_data->write_buffer = g_memdup(packet, sizeof(packet)); + connect_data->write_buf_len = sizeof(packet); + connect_data->written_len = 0; + connect_data->read_cb = s4_canread; - connect_info->inpa = gaim_input_add(connect_info->fd, GAIM_INPUT_WRITE, proxy_do_write, connect_info); + connect_data->inpa = gaim_input_add(connect_data->fd, GAIM_INPUT_WRITE, proxy_do_write, connect_data); - proxy_do_write(connect_info, connect_info->fd, cond); + proxy_do_write(connect_data, connect_data->fd, cond); } static int -proxy_connect_socks4(GaimProxyConnectInfo *connect_info, struct sockaddr *addr, socklen_t addrlen) +proxy_connect_socks4(GaimProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) { gaim_debug_info("socks4 proxy", "Connecting to %s:%d via %s:%d using SOCKS4\n", - connect_info->host, connect_info->port, - gaim_proxy_info_get_host(connect_info->gpi), - gaim_proxy_info_get_port(connect_info->gpi)); + connect_data->host, connect_data->port, + gaim_proxy_info_get_host(connect_data->gpi), + gaim_proxy_info_get_port(connect_data->gpi)); - connect_info->fd = socket(addr->sa_family, SOCK_STREAM, 0); - if (connect_info->fd < 0) + connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); + if (connect_data->fd < 0) return -1; - fcntl(connect_info->fd, F_SETFL, O_NONBLOCK); + fcntl(connect_data->fd, F_SETFL, O_NONBLOCK); #ifndef _WIN32 - fcntl(connect_info->fd, F_SETFD, FD_CLOEXEC); + fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); #endif - if (connect(connect_info->fd, addr, addrlen) != 0) + if (connect(connect_data->fd, addr, addrlen) != 0) { if ((errno == EINPROGRESS) || (errno == EINTR)) { gaim_debug_info("socks4 proxy", "Connection in progress.\n"); - connect_info->inpa = gaim_input_add(connect_info->fd, GAIM_INPUT_WRITE, s4_canwrite, connect_info); + connect_data->inpa = gaim_input_add(connect_data->fd, GAIM_INPUT_WRITE, s4_canwrite, connect_data); } else { - close(connect_info->fd); - connect_info->fd = -1; + close(connect_data->fd); + connect_data->fd = -1; return -1; } } else { @@ -983,49 +983,49 @@ len = sizeof(error); - if (getsockopt(connect_info->fd, SOL_SOCKET, SO_ERROR, &error, &len) != 0) + if (getsockopt(connect_data->fd, SOL_SOCKET, SO_ERROR, &error, &len) != 0) { - close(connect_info->fd); - connect_info->fd = -1; + close(connect_data->fd); + connect_data->fd = -1; return -1; } - s4_canwrite(connect_info, connect_info->fd, GAIM_INPUT_WRITE); + s4_canwrite(connect_data, connect_data->fd, GAIM_INPUT_WRITE); } - return connect_info->fd; + return connect_data->fd; } static void s5_canread_again(gpointer data, gint source, GaimInputCondition cond) { guchar *dest, *buf; - GaimProxyConnectInfo *connect_info = data; + GaimProxyConnectData *connect_data = data; int len; - if (connect_info->read_buffer == NULL) { - connect_info->read_buf_len = 512; - connect_info->read_buffer = g_malloc(connect_info->read_buf_len); - connect_info->read_len = 0; + if (connect_data->read_buffer == NULL) { + connect_data->read_buf_len = 512; + connect_data->read_buffer = g_malloc(connect_data->read_buf_len); + connect_data->read_len = 0; } - dest = connect_info->read_buffer + connect_info->read_len; - buf = connect_info->read_buffer; + dest = connect_data->read_buffer + connect_data->read_len; + buf = connect_data->read_buffer; gaim_debug_info("socks5 proxy", "Able to read again.\n"); - len = read(connect_info->fd, dest, (connect_info->read_buf_len - connect_info->read_len)); + len = read(connect_data->fd, dest, (connect_data->read_buf_len - connect_data->read_len)); if(len < 0 && errno == EAGAIN) return; else if(len <= 0) { gaim_debug_warning("socks5 proxy", "or not...\n"); - gaim_proxy_connect_info_disconnect(connect_info); - try_connect(connect_info); + gaim_proxy_connect_data_disconnect(connect_data); + try_connect(connect_data); return; } - connect_info->read_len += len; + connect_data->read_len += len; - if(connect_info->read_len < 4) + if(connect_data->read_len < 4) return; if ((buf[0] != 0x05) || (buf[1] != 0x00)) { @@ -1033,109 +1033,109 @@ gaim_debug_error("socks5 proxy", socks5errors[buf[1]]); else gaim_debug_error("socks5 proxy", "Bad data.\n"); - gaim_proxy_connect_info_disconnect(connect_info); - try_connect(connect_info); + gaim_proxy_connect_data_disconnect(connect_data); + try_connect(connect_data); return; } /* Skip past BND.ADDR */ switch(buf[3]) { case 0x01: /* the address is a version-4 IP address, with a length of 4 octets */ - if(connect_info->read_len < 4 + 4) + if(connect_data->read_len < 4 + 4) return; buf += 4 + 4; break; case 0x03: /* the address field contains a fully-qualified domain name. The first octet of the address field contains the number of octets of name that follow, there is no terminating NUL octet. */ - if(connect_info->read_len < 4 + 1) + if(connect_data->read_len < 4 + 1) return; buf += 4 + 1; - if(connect_info->read_len < 4 + 1 + buf[0]) + if(connect_data->read_len < 4 + 1 + buf[0]) return; buf += buf[0]; break; case 0x04: /* the address is a version-6 IP address, with a length of 16 octets */ - if(connect_info->read_len < 4 + 16) + if(connect_data->read_len < 4 + 16) return; buf += 4 + 16; break; } - if(connect_info->read_len < (buf - connect_info->read_buffer) + 2) + if(connect_data->read_len < (buf - connect_data->read_buffer) + 2) return; /* Skip past BND.PORT */ buf += 2; - gaim_proxy_connect_info_connected(connect_info); + gaim_proxy_connect_data_connected(connect_data); } static void s5_sendconnect(gpointer data, int source) { - GaimProxyConnectInfo *connect_info = data; - int hlen = strlen(connect_info->host); - connect_info->write_buf_len = 5 + hlen + 2; - connect_info->write_buffer = g_malloc(connect_info->write_buf_len); - connect_info->written_len = 0; + GaimProxyConnectData *connect_data = data; + int hlen = strlen(connect_data->host); + connect_data->write_buf_len = 5 + hlen + 2; + connect_data->write_buffer = g_malloc(connect_data->write_buf_len); + connect_data->written_len = 0; - connect_info->write_buffer[0] = 0x05; - connect_info->write_buffer[1] = 0x01; /* CONNECT */ - connect_info->write_buffer[2] = 0x00; /* reserved */ - connect_info->write_buffer[3] = 0x03; /* address type -- host name */ - connect_info->write_buffer[4] = hlen; - memcpy(connect_info->write_buffer + 5, connect_info->host, hlen); - connect_info->write_buffer[5 + hlen] = connect_info->port >> 8; - connect_info->write_buffer[5 + hlen + 1] = connect_info->port & 0xff; + connect_data->write_buffer[0] = 0x05; + connect_data->write_buffer[1] = 0x01; /* CONNECT */ + connect_data->write_buffer[2] = 0x00; /* reserved */ + connect_data->write_buffer[3] = 0x03; /* address type -- host name */ + connect_data->write_buffer[4] = hlen; + memcpy(connect_data->write_buffer + 5, connect_data->host, hlen); + connect_data->write_buffer[5 + hlen] = connect_data->port >> 8; + connect_data->write_buffer[5 + hlen + 1] = connect_data->port & 0xff; - connect_info->read_cb = s5_canread_again; + connect_data->read_cb = s5_canread_again; - connect_info->inpa = gaim_input_add(connect_info->fd, GAIM_INPUT_WRITE, proxy_do_write, connect_info); - proxy_do_write(connect_info, connect_info->fd, GAIM_INPUT_WRITE); + connect_data->inpa = gaim_input_add(connect_data->fd, GAIM_INPUT_WRITE, proxy_do_write, connect_data); + proxy_do_write(connect_data, connect_data->fd, GAIM_INPUT_WRITE); } static void s5_readauth(gpointer data, gint source, GaimInputCondition cond) { - GaimProxyConnectInfo *connect_info = data; + GaimProxyConnectData *connect_data = data; int len; - if (connect_info->read_buffer == NULL) { - connect_info->read_buf_len = 2; - connect_info->read_buffer = g_malloc(connect_info->read_buf_len); - connect_i... [truncated message content] |
From: <the...@us...> - 2006-08-23 08:02:42
|
Revision: 16998 Author: thekingant Date: 2006-08-23 01:02:05 -0700 (Wed, 23 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16998&view=rev Log Message: ----------- Make gaim_srv_resolve cancelable. Please test and let me know of any problems. I was unable to test the WIN32 method for this, since it actually uses Windows stuff. Modified Paths: -------------- trunk/libgaim/dnssrv.c trunk/libgaim/dnssrv.h trunk/libgaim/protocols/jabber/jabber.c trunk/libgaim/protocols/jabber/jabber.h trunk/libgaim/protocols/simple/simple.c trunk/libgaim/protocols/simple/simple.h Modified: trunk/libgaim/dnssrv.c =================================================================== --- trunk/libgaim/dnssrv.c 2006-08-23 07:14:19 UTC (rev 16997) +++ trunk/libgaim/dnssrv.c 2006-08-23 08:02:05 UTC (rev 16998) @@ -57,19 +57,22 @@ DNS_FREE_TYPE FreeType) = NULL; #endif -struct resdata { - GaimSRVCallback cb; +struct _GaimSrvQueryData { + GaimSrvCallback cb; gpointer extradata; #ifndef _WIN32 guint handle; #else + GThread *resolver; char *query; - char *errmsg; + char *error_message; GSList *results; #endif }; -static gint responsecompare(gconstpointer ar, gconstpointer br) { +static gint +responsecompare(gconstpointer ar, gconstpointer br) +{ GaimSrvResponse *a = (GaimSrvResponse*)ar; GaimSrvResponse *b = (GaimSrvResponse*)br; @@ -84,8 +87,12 @@ return -1; return 1; } + #ifndef _WIN32 -static void resolve(int in, int out) { + +static void +resolve(int in, int out) +{ GList *ret = NULL; GaimSrvResponse *srvres; queryans answer; @@ -98,15 +105,14 @@ guint16 type, dlen, pref, weight, port; gchar query[256]; - if(read(in, query, 256) <= 0) { + if (read(in, query, 256) <= 0) _exit(0); - } + size = res_query( query, C_IN, T_SRV, (u_char*)&answer, sizeof( answer)); qdcount = ntohs(answer.hdr.qdcount); ancount = ntohs(answer.hdr.ancount); - cp = (guchar*)&answer + sizeof(HEADER); end = (guchar*)&answer + size; @@ -155,58 +161,60 @@ cp += dlen; } } -end: size = g_list_length(ret); + +end: + size = g_list_length(ret); write(out, &size, sizeof(int)); - while(g_list_first(ret)) { - write(out, g_list_first(ret)->data, sizeof(GaimSrvResponse)); - g_free(g_list_first(ret)->data); - ret = g_list_remove(ret, g_list_first(ret)->data); + while (ret != NULL) + { + write(out, ret->data, sizeof(GaimSrvResponse)); + g_free(ret->data); + ret = g_list_remove(ret, ret->data); } - /* Should the resolver be reused? - * There is most likely only 1 SRV queries per prpl... - */ _exit(0); } -static void resolved(gpointer data, gint source, GaimInputCondition cond) { +static void +resolved(gpointer data, gint source, GaimInputCondition cond) +{ int size; - struct resdata *rdata = (struct resdata*)data; + GaimSrvQueryData *query_data = (GaimSrvQueryData*)data; GaimSrvResponse *res; GaimSrvResponse *tmp; int i; - GaimSRVCallback cb = rdata->cb; + GaimSrvCallback cb = query_data->cb; read(source, &size, sizeof(int)); - gaim_debug_info("srv","found %d SRV entries\n", size); + gaim_debug_info("dnssrv","found %d SRV entries\n", size); tmp = res = g_new0(GaimSrvResponse, size); - i = size; - while(i) { + for (i = 0; i < size; i++) { read(source, tmp++, sizeof(GaimSrvResponse)); - i--; } - cb(res, size, rdata->extradata); - gaim_input_remove(rdata->handle); - g_free(rdata); + + cb(res, size, query_data->extradata); + + gaim_srv_cancel(query_data); } #else /* _WIN32 */ /** The Jabber Server code was inspiration for parts of this. */ -static gboolean res_main_thread_cb(gpointer data) { +static gboolean +res_main_thread_cb(gpointer data) +{ GaimSrvResponse *srvres = NULL; int size = 0; - struct resdata *rdata = data; + GaimSrvQueryData *query_data = data; - if (rdata->errmsg != NULL) { - gaim_debug_error("srv", rdata->errmsg); - g_free(rdata->errmsg); + if (query_data->error_message != NULL) { + gaim_debug_error("dnssrv", query_data->error_message); } else { GaimSrvResponse *srvres_tmp; - GSList *lst = rdata->results; + GSList *lst = query_data->results; - size = g_slist_length(rdata->results); + size = g_slist_length(query_data->results); srvres_tmp = srvres = g_new0(GaimSrvResponse, size); while (lst) { @@ -215,29 +223,30 @@ lst = g_slist_remove(lst, lst->data); } - rdata->results = lst; + query_data->results = lst; } - gaim_debug_info("srv", "found %d SRV entries\n", size); + gaim_debug_info("dnssrv", "found %d SRV entries\n", size); - rdata->cb(srvres, size, rdata->extradata); + query_data->cb(srvres, size, query_data->extradata); - g_free(rdata->query); - g_free(rdata); + gaim_srv_cancel(query_data); return FALSE; } -static gpointer res_thread(gpointer data) { +static gpointer +res_thread(gpointer data) +{ PDNS_RECORD dr = NULL; int type = DNS_TYPE_SRV; DNS_STATUS ds; - struct resdata *rdata = data; + GaimSrvQueryData *query_data = data; - ds = MyDnsQuery_UTF8(rdata->query, type, DNS_QUERY_STANDARD, NULL, &dr, NULL); + ds = MyDnsQuery_UTF8(query_data->query, type, DNS_QUERY_STANDARD, NULL, &dr, NULL); if (ds != ERROR_SUCCESS) { gchar *msg = g_win32_error_message(ds); - rdata->errmsg = g_strdup_printf("Couldn't look up SRV record. %s (%lu).\n", msg, ds); + query_data->error_message = g_strdup_printf("Couldn't look up SRV record. %s (%lu).\n", msg, ds); g_free(msg); } else { PDNS_RECORD dr_tmp; @@ -247,7 +256,7 @@ for (dr_tmp = dr; dr_tmp != NULL; dr_tmp = dr_tmp->pNext) { /* Discard any incorrect entries. I'm not sure if this is necessary */ - if (dr_tmp->wType != type || strcmp(dr_tmp->pName, rdata->query) != 0) { + if (dr_tmp->wType != type || strcmp(dr_tmp->pName, query_data->query) != 0) { continue; } @@ -263,11 +272,11 @@ } MyDnsRecordListFree(dr, DnsFreeRecordList); - rdata->results = lst; + query_data->results = lst; } /* back to main thread */ - g_idle_add(res_main_thread_cb, rdata); + g_idle_add(res_main_thread_cb, query_data); g_thread_exit(NULL); return NULL; @@ -275,36 +284,41 @@ #endif -/* - * TODO: It would be really good if this returned some sort of handle - * that we could use to cancel the DNS query. As it is now, - * each callback has to check to make sure gc is still valid. - * And that is ugly. - */ -void gaim_srv_resolve(const char *protocol, const char *transport, const char *domain, GaimSRVCallback cb, gpointer extradata) { - char *query = g_strdup_printf("_%s._%s.%s",protocol, transport, domain); - struct resdata *rdata; +GaimSrvQueryData * +gaim_srv_resolve(const char *protocol, const char *transport, const char *domain, GaimSrvCallback cb, gpointer extradata) +{ + char *query; + GaimSrvQueryData *query_data; #ifndef _WIN32 int in[2], out[2]; int pid; - gaim_debug_info("srv","querying SRV record for %s\n", query); +#else + GError* err = NULL; + static gboolean initialized = FALSE; +#endif + +#ifndef _WIN32 + query = g_strdup_printf("_%s._%s.%s", protocol, transport, domain); + gaim_debug_info("dnssrv","querying SRV record for %s\n", query); + if(pipe(in) || pipe(out)) { - gaim_debug_error("srv", "Could not create pipe\n"); + gaim_debug_error("dnssrv", "Could not create pipe\n"); g_free(query); cb(NULL, 0, extradata); - return; + return NULL; } pid = fork(); - - if(pid == -1) { - gaim_debug_error("srv","Could not create process!\n"); + if (pid == -1) { + gaim_debug_error("dnssrv", "Could not create process!\n"); cb(NULL, 0, extradata); g_free(query); - return; + return NULL; } + /* Child */ - if( pid == 0 ) { + if (pid == 0) + { close(out[0]); close(in[1]); resolve(in[0], out[1]); @@ -313,22 +327,18 @@ close(out[1]); close(in[0]); - if(write(in[1], query, strlen(query)+1)<0) { - gaim_debug_error("srv", "Could not write to SRV resolver\n"); - } - rdata = g_new0(struct resdata,1); - rdata->cb = cb; - rdata->extradata = extradata; - rdata->handle = gaim_input_add(out[0], GAIM_INPUT_READ, resolved, rdata); + if (write(in[1], query, strlen(query)+1) < 0) + gaim_debug_error("dnssrv", "Could not write to SRV resolver\n"); + query_data = g_new0(GaimSrvQueryData, 1); + query_data->cb = cb; + query_data->extradata = extradata; + query_data->handle = gaim_input_add(out[0], GAIM_INPUT_READ, resolved, query_data); + g_free(query); + + return query_data; #else - GError* err = NULL; - - static gboolean initialized = FALSE; - - gaim_debug_info("srv","querying SRV record for %s\n", query); - if (!initialized) { MyDnsQuery_UTF8 = (void*) wgaim_find_and_loadproc("dnsapi.dll", "DnsQuery_UTF8"); MyDnsRecordListFree = (void*) wgaim_find_and_loadproc( @@ -337,22 +347,49 @@ } if (!MyDnsQuery_UTF8 || !MyDnsRecordListFree) { - gaim_debug_error("srv", "System missing DNS API (Requires W2K+)\n"); + gaim_debug_error("dnssrv", "System missing DNS API (Requires W2K+)\n"); g_free(query); cb(NULL, 0, extradata); - return; + return NULL; } - rdata = g_new0(struct resdata, 1); - rdata->cb = cb; - rdata->query = query; - rdata->extradata = extradata; + query_data = g_new0(GaimSrvQueryData, 1); + query_data->cb = cb; + query_data->query = query; + query_data->extradata = extradata; - if (!g_thread_create(res_thread, rdata, FALSE, &err)) { - rdata->errmsg = g_strdup_printf("SRV thread create failure: %s\n", err ? err->message : ""); + query_data->resolver = g_thread_create(res_thread, query_data, FALSE, &err); + if (query_data->resolver == NULL) + { + query_data->error_message = g_strdup_printf("SRV thread create failure: %s\n", err ? err->message : ""); g_error_free(err); - res_main_thread_cb(rdata); + res_main_thread_cb(query_data); + return NULL; } + + return query_data; #endif } +void +gaim_srv_cancel(GaimSrvQueryData *query_data) +{ +#ifndef _WIN32 + if (query_data->handle > 0) + gaim_input_remove(query_data->handle); +#else + if (query_data->resolver != NULL) + { + /* + * It's not really possible to kill a thread. So instead we + * just set the callback to NULL and let the DNS lookup + * finish. + */ + query_data->callback = NULL; + return; + } + g_free(query_data->query); + g_free(query_data->error_message); +#endif + g_free(query_data); +} Modified: trunk/libgaim/dnssrv.h =================================================================== --- trunk/libgaim/dnssrv.h 2006-08-23 07:14:19 UTC (rev 16997) +++ trunk/libgaim/dnssrv.h 2006-08-23 08:02:05 UTC (rev 16998) @@ -1,10 +1,10 @@ /** * @file dnssrv.h - * + * * gaim * * Copyright (C) 2005, Thomas Butter <bu...@un...> - * + *i * 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 @@ -24,6 +24,7 @@ #define _GAIM_DNSSRV_H typedef struct _GaimSrvResponse GaimSrvResponse; +typedef struct _GaimSrvQueryData GaimSrvQueryData; struct _GaimSrvResponse { char hostname[256]; @@ -32,17 +33,24 @@ int pref; }; -typedef void (*GaimSRVCallback)(GaimSrvResponse *resp, int results, gpointer data); +typedef void (*GaimSrvCallback)(GaimSrvResponse *resp, int results, gpointer data); /** * Queries an SRV record. * * @param protocol Name of the protocol (e.g. "sip") * @param transport Name of the transport ("tcp" or "udp") - * @param domain Domainname to query (e.g. "blubb.com") + * @param domain Domain name to query (e.g. "blubb.com") * @param cb A callback which will be called with the results * @param extradata Extra data to be passed to the callback */ -void gaim_srv_resolve(const char *protocol, const char *transport, const char *domain, GaimSRVCallback cb, gpointer extradata); +GaimSrvQueryData *gaim_srv_resolve(const char *protocol, const char *transport, const char *domain, GaimSrvCallback cb, gpointer extradata); +/** + * Cancel an SRV DNS query. + * + * @param query_data The request to cancel. + */ +void gaim_srv_cancel(GaimSrvQueryData *query_data); + #endif /* _GAIM_DNSSRV_H */ Modified: trunk/libgaim/protocols/jabber/jabber.c =================================================================== --- trunk/libgaim/protocols/jabber/jabber.c 2006-08-23 07:14:19 UTC (rev 16997) +++ trunk/libgaim/protocols/jabber/jabber.c 2006-08-23 08:02:05 UTC (rev 16998) @@ -486,19 +486,11 @@ static void srv_resolved_cb(GaimSrvResponse *resp, int results, gpointer data) { - GaimConnection *gc; JabberStream *js; - gc = data; - if (!GAIM_CONNECTION_IS_VALID(gc)) - { - /* This connection has been closed */ - g_free(resp); - return; - } + js = data; + js->srv_query_data = NULL; - js = (JabberStream*)gc->proto_data; - if(results) { jabber_login_connect(js, resp->hostname, resp->port); g_free(resp); @@ -577,7 +569,8 @@ if(connect_server[0]) { jabber_login_connect(js, connect_server, gaim_account_get_int(account, "port", 5222)); } else { - gaim_srv_resolve("xmpp-client", "tcp", js->user->domain, srv_resolved_cb, gc); + js->srv_query_data = gaim_srv_resolve("xmpp-client", + "tcp", js->user->domain, srv_resolved_cb, js); } } } @@ -936,6 +929,9 @@ if (!gc->disconnect_timeout) jabber_send_raw(js, "</stream:stream>", -1); + if (js->srv_query_data) + gaim_srv_cancel(js->srv_query_data); + if (js->connect_data) gaim_proxy_connect_cancel(js->connect_data); Modified: trunk/libgaim/protocols/jabber/jabber.h =================================================================== --- trunk/libgaim/protocols/jabber/jabber.h 2006-08-23 07:14:19 UTC (rev 16997) +++ trunk/libgaim/protocols/jabber/jabber.h 2006-08-23 08:02:05 UTC (rev 16998) @@ -28,6 +28,7 @@ #include <glib.h> #include "circbuffer.h" #include "connection.h" +#include "dnssrv.h" #include "roomlist.h" #include "sslconn.h" @@ -67,6 +68,7 @@ { int fd; + GaimSrvQueryData *srv_query_data; GaimProxyConnectData *connect_data; #ifdef HAVE_LIBXML Modified: trunk/libgaim/protocols/simple/simple.c =================================================================== --- trunk/libgaim/protocols/simple/simple.c 2006-08-23 07:14:19 UTC (rev 16997) +++ trunk/libgaim/protocols/simple/simple.c 2006-08-23 08:02:05 UTC (rev 16998) @@ -1584,20 +1584,13 @@ } static void srvresolved(GaimSrvResponse *resp, int results, gpointer data) { - GaimConnection *gc; struct simple_account_data *sip; gchar *hostname; int port; - gc = data; - if (!GAIM_CONNECTION_IS_VALID(gc)) - { - /* This connection has been closed */ - g_free(resp); - return; - } + sip = data; + sip->srv_query_data = NULL; - sip = gc->proto_data; port = gaim_account_get_int(sip->account, "port", 0); /* find the host to connect to */ @@ -1682,12 +1675,8 @@ hosttoconnect = g_strdup(gaim_account_get_string(account, "proxy", sip->servername)); } - /* TCP case */ - if(!sip->udp) { - gaim_srv_resolve("sip", "tcp", hosttoconnect, srvresolved, gc); - } else { /* UDP */ - gaim_srv_resolve("sip", "udp", hosttoconnect, srvresolved, gc); - } + sip->srv_query_data = gaim_srv_resolve("sip", + sip->udp ? "udp" : "tcp", hosttoconnect, srvresolved, sip); g_free(hosttoconnect); } @@ -1703,6 +1692,9 @@ if (sip->query_data != NULL) gaim_dnsquery_destroy(sip->query_data); + if (sip->srv_query_data != NULL) + gaim_srv_cancel(sip->srv_query_data); + if (sip->listen_data != NULL) gaim_network_listen_cancel(sip->listen_data); Modified: trunk/libgaim/protocols/simple/simple.h =================================================================== --- trunk/libgaim/protocols/simple/simple.h 2006-08-23 07:14:19 UTC (rev 16997) +++ trunk/libgaim/protocols/simple/simple.h 2006-08-23 08:02:05 UTC (rev 16998) @@ -29,6 +29,7 @@ #include "cipher.h" #include "circbuffer.h" #include "dnsquery.h" +#include "dnssrv.h" #include "network.h" #include "proxy.h" #include "prpl.h" @@ -73,6 +74,7 @@ gchar *username; gchar *password; GaimDnsQueryData *query_data; + GaimSrvQueryData *srv_query_data; GaimNetworkListenData *listen_data; int fd; int cseq; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fac...@us...> - 2006-08-24 18:34:08
|
Revision: 17019 Author: faceprint Date: 2006-08-24 11:33:53 -0700 (Thu, 24 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17019&view=rev Log Message: ----------- dbus goodness Modified Paths: -------------- trunk/libgaim/xmlnode.c trunk/libgaim/xmlnode.h Modified: trunk/libgaim/xmlnode.c =================================================================== --- trunk/libgaim/xmlnode.c 2006-08-24 17:37:24 UTC (rev 17018) +++ trunk/libgaim/xmlnode.c 2006-08-24 18:33:53 UTC (rev 17019) @@ -35,6 +35,7 @@ #include <string.h> #include <glib.h> +#include "dbus-maybe.h" #include "util.h" #include "xmlnode.h" @@ -52,6 +53,8 @@ node->name = g_strdup(name); node->type = type; + GAIM_DBUS_REGISTER_POINTER(node, xmlnode); + return node; } @@ -218,6 +221,8 @@ #ifdef HAVE_LIBXML g_free(node->namespace); #endif + + GAIM_DBUS_UNREGISTER_POINTER(node); g_free(node); } Modified: trunk/libgaim/xmlnode.h =================================================================== --- trunk/libgaim/xmlnode.h 2006-08-24 17:37:24 UTC (rev 17018) +++ trunk/libgaim/xmlnode.h 2006-08-24 18:33:53 UTC (rev 17019) @@ -38,7 +38,8 @@ /** * An xmlnode. */ -typedef struct _xmlnode +typedef struct _xmlnode xmlnode; +struct _xmlnode { char *name; /**< The name of the node. */ #ifdef HAVE_LIBXML @@ -51,7 +52,7 @@ struct _xmlnode *child; /**< The child node or @c NULL.*/ struct _xmlnode *lastchild; /**< The last child node or @c NULL.*/ struct _xmlnode *next; /**< The next node or @c NULL. */ -} xmlnode; +}; /** * Creates a new xmlnode. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-08-27 15:24:20
|
Revision: 17058 Author: sadrul Date: 2006-08-27 08:24:13 -0700 (Sun, 27 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17058&view=rev Log Message: ----------- This should give a better accessiblity of xmlnodes over dbus. Modified Paths: -------------- trunk/libgaim/Makefile.am trunk/libgaim/dbus-analyze-functions.py trunk/libgaim/dbus-server.c Modified: trunk/libgaim/Makefile.am =================================================================== --- trunk/libgaim/Makefile.am 2006-08-27 11:45:02 UTC (rev 17057) +++ trunk/libgaim/Makefile.am 2006-08-27 15:24:13 UTC (rev 17058) @@ -175,7 +175,7 @@ dbus_sources = dbus-server.c dbus-useful.c dbus_headers = dbus-bindings.h dbus-gaim.h dbus-server.h dbus-useful.h dbus-define-api.h -dbus_exported = dbus-useful.h dbus-define-api.h account.h blist.h buddyicon.h connection.h conversation.h core.h log.h roomlist.h savedstatuses.h status.h server.h +dbus_exported = dbus-useful.h dbus-define-api.h account.h blist.h buddyicon.h connection.h conversation.h core.h log.h roomlist.h savedstatuses.h status.h server.h xmlnode.h gaim_build_coreheaders = $(addprefix $(srcdir)/, $(gaim_coreheaders)) dbus_build_exported = $(addprefix $(srcdir)/, $(dbus_exported)) Modified: trunk/libgaim/dbus-analyze-functions.py =================================================================== --- trunk/libgaim/dbus-analyze-functions.py 2006-08-27 11:45:02 UTC (rev 17057) +++ trunk/libgaim/dbus-analyze-functions.py 2006-08-27 15:24:13 UTC (rev 17058) @@ -117,7 +117,7 @@ return self.inputhash(type, name) # known object types are transformed to integer handles - elif type[0].startswith("Gaim"): + elif type[0].startswith("Gaim") or type[0] == "xmlnode": return self.inputgaimstructure(type, name) # unknown pointers are always replaced with NULL Modified: trunk/libgaim/dbus-server.c =================================================================== --- trunk/libgaim/dbus-server.c 2006-08-27 11:45:02 UTC (rev 17057) +++ trunk/libgaim/dbus-server.c 2006-08-27 15:24:13 UTC (rev 17058) @@ -39,6 +39,7 @@ #include "internal.h" #include "savedstatuses.h" #include "value.h" +#include "xmlnode.h" /**************************************************************************/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-08-27 23:05:02
|
Revision: 17067 Author: thekingant Date: 2006-08-27 16:04:55 -0700 (Sun, 27 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17067&view=rev Log Message: ----------- If the status box is "away" when we go idle-away, then do nothing Modified Paths: -------------- trunk/libgaim/savedstatuses.c trunk/libgaim/upnp.h Modified: trunk/libgaim/savedstatuses.c =================================================================== --- trunk/libgaim/savedstatuses.c 2006-08-27 22:51:40 UTC (rev 17066) +++ trunk/libgaim/savedstatuses.c 2006-08-27 23:04:55 UTC (rev 17067) @@ -812,8 +812,13 @@ old = gaim_savedstatus_get_current(); gaim_prefs_set_bool("/core/savedstatus/isidleaway", idleaway); - saved_status = gaim_savedstatus_get_current(); + saved_status = idleaway ? gaim_savedstatus_get_idleaway() + : gaim_savedstatus_get_default(); + if (idleaway && (gaim_savedstatus_get_type(old) != GAIM_STATUS_AVAILABLE)) + /* Our global status is already "away," so don't change anything */ + return; + accounts = gaim_accounts_get_all_active(); for (node = accounts; node != NULL; node = node->next) { Modified: trunk/libgaim/upnp.h =================================================================== --- trunk/libgaim/upnp.h 2006-08-27 22:51:40 UTC (rev 17066) +++ trunk/libgaim/upnp.h 2006-08-27 23:04:55 UTC (rev 17067) @@ -36,6 +36,7 @@ /**************************************************************************/ /*@{*/ +/* typedef struct _GaimUPnPRequestData GaimUPnPRequestData; */ typedef void (*GaimUPnPCallback) (gboolean success, gpointer data); @@ -56,13 +57,12 @@ * Retrieve the current UPnP control info, if there is any available. * This will only be filled in if gaim_upnp_discover() had been called, * and finished discovering. - * + * * @return The control URL for the IGD we'll use to use the IGD services */ const GaimUPnPControlInfo* gaim_upnp_get_control_info(void); #endif - /** * Gets the IP address from a UPnP enabled IGD that sits on the local * network, so when getting the network IP, instead of returning the @@ -73,7 +73,6 @@ */ const gchar* gaim_upnp_get_public_ip(void); - /** * Maps Ports in a UPnP enabled IGD that sits on the local network to * this gaim client. Essentially, this function takes care of the port @@ -90,7 +89,7 @@ /** * Deletes a port mapping in a UPnP enabled IGD that sits on the local network - * to this gaim client. Essentially, this function takes care of deleting the + * to this gaim client. Essentially, this function takes care of deleting the * port forwarding after they have completed a connection so another client on * the local network can take advantage of the port forwarding * @@ -102,6 +101,7 @@ */ void gaim_upnp_remove_port_mapping(unsigned short portmap, const gchar* protocol, GaimUPnPCallback cb, gpointer cb_data); + /*@}*/ #ifdef __cplusplus This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-08-31 09:02:29
|
Revision: 17098 http://svn.sourceforge.net/gaim/?rev=17098&view=rev Author: thekingant Date: 2006-08-31 02:02:10 -0700 (Thu, 31 Aug 2006) Log Message: ----------- I don't think PRPLs should need to make sure that proto_data is valid in the set_idle() callback. Some of my idle changes on the 23rd added that requirement. This removes the requirement to make things the way they were before. I'm also reverting SVN revision 17005 from faceprint and 17009 from marv_sf. Those revisions fixed the PRPLs so they wouldn't crash if set_idle() was called before the acocunt was fully connected. But that shouldn't be needed any more. Revision Links: -------------- http://svn.sourceforge.net/gaim/?rev=17005&view=rev Modified Paths: -------------- trunk/libgaim/protocols/jabber/iq.c trunk/libgaim/protocols/jabber/jabber.c trunk/libgaim/protocols/jabber/jabber.h trunk/libgaim/protocols/msn/state.c trunk/libgaim/protocols/yahoo/yahoo.c trunk/libgaim/status.c Modified: trunk/libgaim/protocols/jabber/iq.c =================================================================== --- trunk/libgaim/protocols/jabber/iq.c 2006-08-31 08:58:36 UTC (rev 17097) +++ trunk/libgaim/protocols/jabber/iq.c 2006-08-31 09:02:10 UTC (rev 17098) @@ -145,7 +145,7 @@ const char *from; const char *id; xmlnode *query; - GaimPresence *gpresence; + char *idle_time; type = xmlnode_get_attrib(packet, "type"); from = xmlnode_get_attrib(packet, "from"); @@ -158,19 +158,10 @@ query = xmlnode_get_child(iq->node, "query"); - gpresence = gaim_account_get_presence(js->gc->account); + idle_time = g_strdup_printf("%ld", js->idle ? time(NULL) - js->idle : 0); + xmlnode_set_attrib(query, "seconds", idle_time); + g_free(idle_time); - if(gaim_presence_is_idle(gpresence)) { - time_t idle_time = gaim_presence_get_idle_time(gpresence); - char *idle_str; - - idle_str = g_strdup_printf("%ld", time(NULL) - idle_time); - xmlnode_set_attrib(query, "seconds", idle_str); - g_free(idle_str); - } else { - xmlnode_set_attrib(query, "seconds", "0"); - } - jabber_iq_send(iq); } } Modified: trunk/libgaim/protocols/jabber/jabber.c =================================================================== --- trunk/libgaim/protocols/jabber/jabber.c 2006-08-31 08:58:36 UTC (rev 17097) +++ trunk/libgaim/protocols/jabber/jabber.c 2006-08-31 09:02:10 UTC (rev 17098) @@ -1040,14 +1040,13 @@ return g_strdup_printf("gaim%x", js->next_id++); } -/* + static void jabber_idle_set(GaimConnection *gc, int idle) { JabberStream *js = gc->proto_data; js->idle = idle ? time(NULL) - idle : idle; } -*/ static const char *jabber_list_icon(GaimAccount *a, GaimBuddy *b) { @@ -1848,7 +1847,7 @@ jabber_send_typing, /* send_typing */ jabber_buddy_get_info, /* get_info */ jabber_presence_send, /* set_away */ - NULL, /* set_idle */ + jabber_idle_set, /* set_idle */ NULL, /* change_passwd */ jabber_roster_add_buddy, /* add_buddy */ NULL, /* add_buddies */ Modified: trunk/libgaim/protocols/jabber/jabber.h =================================================================== --- trunk/libgaim/protocols/jabber/jabber.h 2006-08-31 08:58:36 UTC (rev 17097) +++ trunk/libgaim/protocols/jabber/jabber.h 2006-08-31 09:02:10 UTC (rev 17098) @@ -111,6 +111,8 @@ GList *oob_file_transfers; GList *file_transfers; + time_t idle; + JabberID *user; GaimConnection *gc; GaimSslConnection *gsc; Modified: trunk/libgaim/protocols/msn/state.c =================================================================== --- trunk/libgaim/protocols/msn/state.c 2006-08-31 08:58:36 UTC (rev 17097) +++ trunk/libgaim/protocols/msn/state.c 2006-08-31 09:02:10 UTC (rev 17098) @@ -41,7 +41,7 @@ void msn_change_status(MsnSession *session) { - GaimAccount *account = session->account; + GaimAccount *account; MsnCmdProc *cmdproc; MsnUser *user; MsnObject *msnobj; @@ -50,6 +50,7 @@ g_return_if_fail(session != NULL); g_return_if_fail(session->notification != NULL); + account = session->account; cmdproc = session->notification->cmdproc; user = session->user; state_text = msn_state_get_text(msn_state_from_account(account)); Modified: trunk/libgaim/protocols/yahoo/yahoo.c =================================================================== --- trunk/libgaim/protocols/yahoo/yahoo.c 2006-08-31 08:58:36 UTC (rev 17097) +++ trunk/libgaim/protocols/yahoo/yahoo.c 2006-08-31 09:02:10 UTC (rev 17098) @@ -3363,9 +3363,6 @@ char *msg = NULL, *msg2 = NULL; GaimStatus *status = NULL; - if (!yd) - return; - if (idle && yd->current_status != YAHOO_STATUS_CUSTOM) yd->current_status = YAHOO_STATUS_IDLE; else if (!idle && yd->current_status == YAHOO_STATUS_IDLE) { Modified: trunk/libgaim/status.c =================================================================== --- trunk/libgaim/status.c 2006-08-31 08:58:36 UTC (rev 17097) +++ trunk/libgaim/status.c 2006-08-31 09:02:10 UTC (rev 17098) @@ -1388,11 +1388,11 @@ gc = gaim_account_get_connection(account); - if (gc != NULL && gc->prpl != NULL) + if (gc != NULL && GAIM_CONNECTION_IS_CONNECTED(gc) && + gc->prpl != NULL) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); - if (prpl_info && g_list_find(gaim_connections_get_all(), gc) && - prpl_info->set_idle) + if (prpl_info && prpl_info->set_idle) prpl_info->set_idle(gc, (idle ? (time(NULL) - idle_time) : 0)); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-08-31 09:45:09
|
Revision: 17099 http://svn.sourceforge.net/gaim/?rev=17099&view=rev Author: thekingant Date: 2006-08-31 02:44:51 -0700 (Thu, 31 Aug 2006) Log Message: ----------- Better connection error messages for dnsquery failures in general and for oscar Modified Paths: -------------- trunk/libgaim/dnsquery.c trunk/libgaim/protocols/oscar/flap_connection.c trunk/libgaim/protocols/oscar/oscar.c trunk/libgaim/protocols/oscar/oscar.h trunk/libgaim/protocols/oscar/oscar_data.c trunk/libgaim/proxy.c Modified: trunk/libgaim/dnsquery.c =================================================================== --- trunk/libgaim/dnsquery.c 2006-08-31 09:02:10 UTC (rev 17098) +++ trunk/libgaim/dnsquery.c 2006-08-31 09:44:51 UTC (rev 17099) @@ -524,7 +524,7 @@ if ((rc == 4) && (err != 0)) { #ifdef HAVE_GETADDRINFO - g_snprintf(message, sizeof(message), _("Error resolving %s: %s"), + g_snprintf(message, sizeof(message), _("Error resolving %s:\n%s"), query_data->hostname, gai_strerror(err)); #else g_snprintf(message, sizeof(message), _("Error resolving %s: %d"), @@ -549,7 +549,7 @@ gaim_dnsquery_resolved(query_data, hosts); } else if (rc == -1) { - g_snprintf(message, sizeof(message), _("Error reading from resolver process: %s"), strerror(errno)); + g_snprintf(message, sizeof(message), _("Error reading from resolver process:\n%s"), strerror(errno)); gaim_dnsquery_failed(query_data, message); } else if (rc == 0) { @@ -668,7 +668,7 @@ } freeaddrinfo(tmp); } else { - query_data->error_message = g_strdup_printf(_("Error resolving %s: %s"), query_data->hostname, gai_strerror(rc)); + query_data->error_message = g_strdup_printf(_("Error resolving %s:\n%s"), query_data->hostname, gai_strerror(rc)); } #else if ((hp = gethostbyname(query_data->hostname))) { Modified: trunk/libgaim/protocols/oscar/flap_connection.c =================================================================== --- trunk/libgaim/protocols/oscar/flap_connection.c 2006-08-31 09:02:10 UTC (rev 17098) +++ trunk/libgaim/protocols/oscar/flap_connection.c 2006-08-31 09:44:51 UTC (rev 17099) @@ -163,6 +163,24 @@ close(conn->fd); conn->fd = -1; } + + if (conn->watcher_incoming != 0) + { + gaim_input_remove(conn->watcher_incoming); + conn->watcher_incoming = 0; + } + + if (conn->watcher_outgoing != 0) + { + gaim_input_remove(conn->watcher_outgoing); + conn->watcher_outgoing = 0; + } + + g_free(conn->buffer_incoming.data.data); + conn->buffer_incoming.data.data = NULL; + + gaim_circ_buffer_destroy(conn->buffer_outgoing); + conn->buffer_outgoing = NULL; } static void @@ -199,34 +217,13 @@ conn = data; od = conn->od; + account = gaim_connection_get_account(od->gc); gaim_debug_info("oscar", "Destroying oscar connection of " "type 0x%04hx\n", conn->type); - flap_connection_close(od, conn); - - g_free(conn->cookie); - - if (conn->watcher_incoming != 0) - gaim_input_remove(conn->watcher_incoming); - if (conn->watcher_outgoing != 0) - gaim_input_remove(conn->watcher_outgoing); - g_free(conn->buffer_incoming.data.data); - gaim_circ_buffer_destroy(conn->buffer_outgoing); - - /* - * Free conn->internal, if necessary - */ - if (conn->type == SNAC_FAMILY_CHAT) - flap_connection_destroy_chat(od, conn); - - g_slist_free(conn->groups); - flap_connection_destroy_rates(conn->rates); - od->oscar_connections = g_slist_remove(od->oscar_connections, conn); - account = gaim_connection_get_account(od->gc); - /* * TODO: If we don't have a SNAC_FAMILY_LOCATE connection then * we should try to request one instead of disconnecting. @@ -235,15 +232,17 @@ || (!flap_connection_getbytype(od, SNAC_FAMILY_LOCATE)))) { /* No more FLAP connections! Sign off this GaimConnection! */ - const gchar *tmp; + gchar *tmp; if (conn->disconnect_reason == OSCAR_DISCONNECT_REMOTE_CLOSED) - tmp = _("Server closed the connection."); + tmp = g_strdup(_("Server closed the connection.")); else if (conn->disconnect_reason == OSCAR_DISCONNECT_LOST_CONNECTION) - tmp = _("Lost connection with server for an unknown reason."); + tmp = g_strdup_printf(_("Lost connection with server:\n%s"), + conn->error_message); else if (conn->disconnect_reason == OSCAR_DISCONNECT_INVALID_DATA) - tmp = _("Received invalid data on connection with server."); + tmp = g_strdup(_("Received invalid data on connection with server.")); else if (conn->disconnect_reason == OSCAR_DISCONNECT_COULD_NOT_CONNECT) - tmp = _("Could not establish a connection with the server."); + tmp = g_strdup_printf(_("Could not establish a connection with the server:\n%s"), + conn->error_message); else /* * We shouldn't print a message for some disconnect_reasons. @@ -252,20 +251,43 @@ tmp = NULL; if (tmp != NULL) + { gaim_connection_error(od->gc, tmp); + g_free(tmp); + } } + flap_connection_close(od, conn); + + g_free(conn->error_message); + g_free(conn->cookie); + + /* + * Free conn->internal, if necessary + */ + if (conn->type == SNAC_FAMILY_CHAT) + flap_connection_destroy_chat(od, conn); + + g_slist_free(conn->groups); + flap_connection_destroy_rates(conn->rates); + g_free(conn); return FALSE; } +/** + * See the comments for the parameters of + * flap_connection_schedule_destroy(). + */ void -flap_connection_destroy(FlapConnection *conn, OscarDisconnectReason reason) +flap_connection_destroy(FlapConnection *conn, OscarDisconnectReason reason, const gchar *error_message) { if (conn->destroy_timeout != 0) gaim_timeout_remove(conn->destroy_timeout); conn->disconnect_reason = reason; + g_free(conn->error_message); + conn->error_message = g_strdup(error_message); flap_connection_destroy_cb(conn); } @@ -274,9 +296,18 @@ * return control back to the program's main loop. We must do this * if we want to destroy the connection but we are still using it * for some reason. + * + * @param reason The reason for the disconnection. + * @param error_message A brief error message that gives more detail + * regarding the reason for the disconnecting. This should + * be NULL for everything except OSCAR_DISCONNECT_LOST_CONNECTION, + * in which case it should contain the value of strerror(errno), + * and OSCAR_DISCONNECT_COULD_NOT_CONNECT, in which case it + * should contain the error_message passed back from the call + * to gaim_proxy_connect(). */ void -flap_connection_schedule_destroy(FlapConnection *conn, OscarDisconnectReason reason) +flap_connection_schedule_destroy(FlapConnection *conn, OscarDisconnectReason reason, const gchar *error_message) { if (conn->destroy_timeout != 0) /* Already taken care of */ @@ -285,6 +316,7 @@ gaim_debug_info("oscar", "Scheduling destruction of FLAP " "connection of type 0x%04hx\n", conn->type); conn->disconnect_reason = reason; + conn->error_message = g_strdup(error_message); conn->destroy_timeout = gaim_timeout_add(0, flap_connection_destroy_cb, conn); } @@ -571,7 +603,7 @@ "0x00000001 but received FLAP version %08lx. Closing connection.\n", flap_version); flap_connection_schedule_destroy(conn, - OSCAR_DISCONNECT_INVALID_DATA); + OSCAR_DISCONNECT_INVALID_DATA, NULL); } else conn->connected = TRUE; @@ -616,7 +648,7 @@ if (read == 0) { flap_connection_schedule_destroy(conn, - OSCAR_DISCONNECT_REMOTE_CLOSED); + OSCAR_DISCONNECT_REMOTE_CLOSED, NULL); break; } @@ -629,7 +661,7 @@ /* Error! */ flap_connection_schedule_destroy(conn, - OSCAR_DISCONNECT_LOST_CONNECTION); + OSCAR_DISCONNECT_LOST_CONNECTION, strerror(errno)); break; } @@ -644,7 +676,7 @@ if (aimutil_get8(&header[0]) != 0x2a) { flap_connection_schedule_destroy(conn, - OSCAR_DISCONNECT_INVALID_DATA); + OSCAR_DISCONNECT_INVALID_DATA, NULL); break; } @@ -668,7 +700,7 @@ if (read == 0) { flap_connection_schedule_destroy(conn, - OSCAR_DISCONNECT_REMOTE_CLOSED); + OSCAR_DISCONNECT_REMOTE_CLOSED, NULL); break; } @@ -680,7 +712,7 @@ /* Error! */ flap_connection_schedule_destroy(conn, - OSCAR_DISCONNECT_LOST_CONNECTION); + OSCAR_DISCONNECT_LOST_CONNECTION, strerror(errno)); break; } @@ -724,7 +756,8 @@ return; /* Error! */ - flap_connection_schedule_destroy(conn, OSCAR_DISCONNECT_LOST_CONNECTION); + flap_connection_schedule_destroy(conn, + OSCAR_DISCONNECT_LOST_CONNECTION, strerror(errno)); return; } Modified: trunk/libgaim/protocols/oscar/oscar.c =================================================================== --- trunk/libgaim/protocols/oscar/oscar.c 2006-08-31 09:02:10 UTC (rev 17098) +++ trunk/libgaim/protocols/oscar/oscar.c 2006-08-31 09:44:51 UTC (rev 17099) @@ -897,7 +897,7 @@ /* Destroy the chat_connection */ od->oscar_chats = g_slist_remove(od->oscar_chats, cc); - flap_connection_schedule_destroy(cc->conn, OSCAR_DISCONNECT_DONE); + flap_connection_schedule_destroy(cc->conn, OSCAR_DISCONNECT_DONE, NULL); oscar_chat_destroy(cc); } @@ -927,12 +927,27 @@ gaim_debug_error("oscar", "unable to connect FLAP server " "of type 0x%04hx\n", conn->type); if (conn->type == SNAC_FAMILY_AUTH) - gaim_connection_error(gc, _("Could not connect to authentication server")); - if (conn->type == SNAC_FAMILY_LOCATE) - gaim_connection_error(gc, _("Could not connect to BOS server")); - else /* Maybe we should call this for BOS connections, too? */ + { + gchar *msg; + msg = g_strdup_printf(_("Could not connect to authentication server:\n%s"), + error_message); + gaim_connection_error(gc, msg); + g_free(msg); + } + else if (conn->type == SNAC_FAMILY_LOCATE) + { + gchar *msg; + msg = g_strdup_printf(_("Could not connect to BOS server:\n%s"), + error_message); + gaim_connection_error(gc, msg); + g_free(msg); + } + else + { + /* Maybe we should call this for BOS connections, too? */ flap_connection_schedule_destroy(conn, - OSCAR_DISCONNECT_COULD_NOT_CONNECT); + OSCAR_DISCONNECT_COULD_NOT_CONNECT, error_message); + } return; } @@ -1302,7 +1317,7 @@ (info->email != NULL) ? info->email : "null"); gaim_debug_misc("oscar", "BOSIP: %s\n", info->bosip); gaim_debug_info("oscar", "Closing auth connection...\n"); - flap_connection_schedule_destroy(conn, OSCAR_DISCONNECT_DONE); + flap_connection_schedule_destroy(conn, OSCAR_DISCONNECT_DONE, NULL); for (i = 0; i < strlen(info->bosip); i++) { if (info->bosip[i] == ':') { @@ -1617,7 +1632,9 @@ connection_established_cb, newconn); if (newconn->connect_data == NULL) { - flap_connection_schedule_destroy(newconn, OSCAR_DISCONNECT_COULD_NOT_CONNECT); + flap_connection_schedule_destroy(newconn, + OSCAR_DISCONNECT_COULD_NOT_CONNECT, + _("gaim_proxy_connect() failed")); gaim_debug_error("oscar", "Unable to connect to FLAP server " "of type 0x%04hx\n", redir->group); } @@ -6515,7 +6532,7 @@ prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); option = gaim_account_option_bool_new( - _("Always use AIM/ICQ proxy server\n(slower, but does not reveal your IP address)"), "always_use_rv_proxy", + _("Always use AIM/ICQ proxy server for file transfers\n(slower, but does not reveal your IP address)"), "always_use_rv_proxy", OSCAR_DEFAULT_ALWAYS_USE_RV_PROXY); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); Modified: trunk/libgaim/protocols/oscar/oscar.h =================================================================== --- trunk/libgaim/protocols/oscar/oscar.h 2006-08-31 09:02:10 UTC (rev 17098) +++ trunk/libgaim/protocols/oscar/oscar.h 2006-08-31 09:44:51 UTC (rev 17099) @@ -366,6 +366,7 @@ time_t lastactivity; /**< Time of last transmit. */ guint destroy_timeout; OscarDisconnectReason disconnect_reason; + gchar *error_message; /* A few variables that are only used when connecting */ GaimProxyConnectData *connect_data; @@ -571,8 +572,8 @@ /* flap_connection.c */ FlapConnection *flap_connection_new(OscarData *, int type); void flap_connection_close(OscarData *od, FlapConnection *conn); -void flap_connection_destroy(FlapConnection *conn, OscarDisconnectReason reason); -void flap_connection_schedule_destroy(FlapConnection *conn, OscarDisconnectReason reason); +void flap_connection_destroy(FlapConnection *conn, OscarDisconnectReason reason, const gchar *error_message); +void flap_connection_schedule_destroy(FlapConnection *conn, OscarDisconnectReason reason, const gchar *error_message); FlapConnection *flap_connection_findbygroup(OscarData *od, guint16 group); FlapConnection *flap_connection_getbytype(OscarData *, int type); FlapConnection *flap_connection_getbytype_all(OscarData *, int type); Modified: trunk/libgaim/protocols/oscar/oscar_data.c =================================================================== --- trunk/libgaim/protocols/oscar/oscar_data.c 2006-08-31 09:02:10 UTC (rev 17098) +++ trunk/libgaim/protocols/oscar/oscar_data.c 2006-08-31 09:44:51 UTC (rev 17099) @@ -109,7 +109,7 @@ gaim_timeout_remove(od->getinfotimer); while (od->oscar_connections != NULL) flap_connection_destroy(od->oscar_connections->data, - OSCAR_DISCONNECT_DONE); + OSCAR_DISCONNECT_DONE, NULL); while (od->peer_connections != NULL) peer_connection_destroy(od->peer_connections->data, Modified: trunk/libgaim/proxy.c =================================================================== --- trunk/libgaim/proxy.c 2006-08-31 09:02:10 UTC (rev 17098) +++ trunk/libgaim/proxy.c 2006-08-31 09:44:51 UTC (rev 17099) @@ -1582,8 +1582,7 @@ if (error_message != NULL) { - gaim_proxy_connect_data_error(connect_data, - _("Error while resolving hostname: %s\n"), error_message); + gaim_proxy_connect_data_error(connect_data, error_message); return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rl...@us...> - 2006-09-09 20:27:52
|
Revision: 17203 http://svn.sourceforge.net/gaim/?rev=17203&view=rev Author: rlaager Date: 2006-09-09 13:27:48 -0700 (Sat, 09 Sep 2006) Log Message: ----------- Part of SF Patch #1554627 from Richard Nelson (wabz) "The msn protocol currently calls serv_got_alias on all buddy status changes (as they are NLN commands), resulting in lots of unnecessary blist.xml write schedules. serv_got_alias already checks if the alias has actually changed before printing to the conv. The first hunk in this patch checks it a bit earlier." The second hunk checks in the MSN prpl, which also avoids an extra call to msn_user_set_friendly_name(). Modified Paths: -------------- trunk/libgaim/protocols/msn/notification.c trunk/libgaim/server.c Modified: trunk/libgaim/protocols/msn/notification.c =================================================================== --- trunk/libgaim/protocols/msn/notification.c 2006-09-09 19:41:34 UTC (rev 17202) +++ trunk/libgaim/protocols/msn/notification.c 2006-09-09 20:27:48 UTC (rev 17203) @@ -664,7 +664,7 @@ MsnUser *user; MsnObject *msnobj; int clientid; - const char *state, *passport, *friendly; + const char *state, *passport, *friendly, *old_friendly; session = cmdproc->session; account = session->account; @@ -676,10 +676,13 @@ user = msn_userlist_find_user(session->userlist, passport); - serv_got_alias(gc, passport, friendly); + old_friendly = msn_user_get_friendly_name(user); + if (old_friendly && strcmp(old_friendly, friendly)) + { + serv_got_alias(gc, passport, friendly); + msn_user_set_friendly_name(user, friendly); + } - msn_user_set_friendly_name(user, friendly); - if (session->protocol_ver >= 9) { if (cmd->param_count == 5) Modified: trunk/libgaim/server.c =================================================================== --- trunk/libgaim/server.c 2006-09-09 19:41:34 UTC (rev 17202) +++ trunk/libgaim/server.c 2006-09-09 20:27:48 UTC (rev 17203) @@ -215,12 +215,13 @@ for (buds = buddies; buds; buds = buds->next) { b = buds->data; + if (b->server_alias && !strcmp(b->server_alias, alias)) + continue; gaim_blist_server_alias_buddy(b, alias); conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, b->name, account); - if (conv != NULL && b->server_alias != NULL && - strcmp(b->server_alias, alias)) + if (conv != NULL) { char *tmp = g_strdup_printf(_("%s is now known as %s.\n"), who, alias); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-09-12 21:57:24
|
Revision: 17263 http://svn.sourceforge.net/gaim/?rev=17263&view=rev Author: seanegan Date: 2006-09-12 14:57:15 -0700 (Tue, 12 Sep 2006) Log Message: ----------- send_raw() prpl function allows plugins with knowledge of a protocol to send its own custom packets. Not practical for all protocols, but should be super useful on Jabber when coupled with Nathan's signals. Modified Paths: -------------- trunk/libgaim/protocols/bonjour/bonjour.c trunk/libgaim/protocols/gg/gg.c trunk/libgaim/protocols/irc/irc.c trunk/libgaim/protocols/jabber/jabber.c trunk/libgaim/protocols/msn/msn.c trunk/libgaim/protocols/novell/novell.c trunk/libgaim/protocols/oscar/oscar.c trunk/libgaim/protocols/qq/qq.c trunk/libgaim/protocols/sametime/sametime.c trunk/libgaim/protocols/silc/silc.c trunk/libgaim/protocols/simple/simple.c trunk/libgaim/protocols/toc/toc.c trunk/libgaim/protocols/yahoo/yahoo.c trunk/libgaim/protocols/zephyr/zephyr.c trunk/libgaim/prpl.h Modified: trunk/libgaim/protocols/bonjour/bonjour.c =================================================================== --- trunk/libgaim/protocols/bonjour/bonjour.c 2006-09-12 20:11:56 UTC (rev 17262) +++ trunk/libgaim/protocols/bonjour/bonjour.c 2006-09-12 21:57:15 UTC (rev 17263) @@ -414,6 +414,7 @@ NULL, /* new_xfer */ NULL, /* offline_message */ NULL, /* whiteboard_prpl_ops */ + NULL, /* send_raw */ }; static GaimPluginInfo info = Modified: trunk/libgaim/protocols/gg/gg.c =================================================================== --- trunk/libgaim/protocols/gg/gg.c 2006-09-12 20:11:56 UTC (rev 17262) +++ trunk/libgaim/protocols/gg/gg.c 2006-09-12 21:57:15 UTC (rev 17263) @@ -2112,6 +2112,7 @@ NULL, /* new_xfer */ ggp_offline_message, /* offline_message */ NULL, /* whiteboard_prpl_ops */ + NULL, /* send_raw */ }; /* }}} */ Modified: trunk/libgaim/protocols/irc/irc.c =================================================================== --- trunk/libgaim/protocols/irc/irc.c 2006-09-12 20:11:56 UTC (rev 17262) +++ trunk/libgaim/protocols/irc/irc.c 2006-09-12 21:57:15 UTC (rev 17263) @@ -99,6 +99,12 @@ return ret; } +static int irc_send_raw(GaimConnection *gc, const char *buf, int len) +{ + struct irc_conn *irc = (struct irc_conn*)gc->proto_data; + return do_send(irc, buf, len); +} + static void irc_send_cb(gpointer data, gint source, GaimInputCondition cond) { @@ -860,6 +866,7 @@ irc_dccsend_new_xfer, /* new_xfer */ NULL, /* offline_message */ NULL, /* whiteboard_prpl_ops */ + irc_send_raw, /* send_raw */ }; Modified: trunk/libgaim/protocols/jabber/jabber.c =================================================================== --- trunk/libgaim/protocols/jabber/jabber.c 2006-09-12 20:11:56 UTC (rev 17262) +++ trunk/libgaim/protocols/jabber/jabber.c 2006-09-12 21:57:15 UTC (rev 17263) @@ -325,7 +325,14 @@ gaim_circ_buffer_append(js->write_buffer, data + ret, len - ret); } + return; +} +int jabber_prpl_send_raw(GaimConnection *gc, const char *buf, int len) +{ + JabberStream *js = (JabberStream*)gc->proto_data; + jabber_send_raw(js, buf, len); + return len; } void jabber_send(JabberStream *js, xmlnode *packet) @@ -1884,6 +1891,7 @@ jabber_si_new_xfer, /* new_xfer */ jabber_offline_message, /* offline_message */ NULL, /* whiteboard_prpl_ops */ + jabber_send_raw, /* send_raw */ }; static gboolean load_plugin(GaimPlugin *plugin) Modified: trunk/libgaim/protocols/msn/msn.c =================================================================== --- trunk/libgaim/protocols/msn/msn.c 2006-09-12 20:11:56 UTC (rev 17262) +++ trunk/libgaim/protocols/msn/msn.c 2006-09-12 21:57:15 UTC (rev 17263) @@ -881,6 +881,14 @@ return MSN_TYPING_SEND_TIMEOUT; } +static int +msn_send_raw(GaimConnection *gc, const char *buf, int len) +{ + MsnServConn *servconn = (MsnServConn*)gc->proto_data; + return msn_servconn_write(servconn, buf, len); +} + + static void msn_set_status(GaimAccount *account, GaimStatus *status) { @@ -2012,6 +2020,7 @@ msn_new_xfer, /* new_xfer */ NULL, /* offline_message */ NULL, /* whiteboard_prpl_ops */ + msn_send_raw, /* send_raw */ }; static GaimPluginInfo info = Modified: trunk/libgaim/protocols/novell/novell.c =================================================================== --- trunk/libgaim/protocols/novell/novell.c 2006-09-12 20:11:56 UTC (rev 17262) +++ trunk/libgaim/protocols/novell/novell.c 2006-09-12 21:57:15 UTC (rev 17263) @@ -3529,6 +3529,7 @@ NULL, /* new_xfer */ NULL, /* offline_message */ NULL, /* whiteboard_prpl_ops */ + NULL, /* send_raw */ }; static GaimPluginInfo info = { Modified: trunk/libgaim/protocols/oscar/oscar.c =================================================================== --- trunk/libgaim/protocols/oscar/oscar.c 2006-09-12 20:11:56 UTC (rev 17262) +++ trunk/libgaim/protocols/oscar/oscar.c 2006-09-12 21:57:15 UTC (rev 17263) @@ -6485,6 +6485,7 @@ oscar_new_xfer, /* new_xfer */ oscar_offline_message, /* offline_message */ NULL, /* whiteboard_prpl_ops */ + NULL, /* send_raw */ }; static GaimPluginInfo info = Modified: trunk/libgaim/protocols/qq/qq.c =================================================================== --- trunk/libgaim/protocols/qq/qq.c 2006-09-12 20:11:56 UTC (rev 17262) +++ trunk/libgaim/protocols/qq/qq.c 2006-09-12 21:57:15 UTC (rev 17263) @@ -993,6 +993,7 @@ NULL, /* new xfer */ NULL, /* offline_message */ NULL, /* GaimWhiteboardPrplOps */ + NULL, /* send_raw */ }; static GaimPluginInfo info = { Modified: trunk/libgaim/protocols/sametime/sametime.c =================================================================== --- trunk/libgaim/protocols/sametime/sametime.c 2006-09-12 20:11:56 UTC (rev 17262) +++ trunk/libgaim/protocols/sametime/sametime.c 2006-09-12 21:57:15 UTC (rev 17263) @@ -5063,6 +5063,7 @@ .new_xfer = mw_prpl_new_xfer, .offline_message = NULL, .whiteboard_prpl_ops = NULL, + .send_raw = NULL }; Modified: trunk/libgaim/protocols/silc/silc.c =================================================================== --- trunk/libgaim/protocols/silc/silc.c 2006-09-12 20:11:56 UTC (rev 17262) +++ trunk/libgaim/protocols/silc/silc.c 2006-09-12 21:57:15 UTC (rev 17263) @@ -1802,6 +1802,7 @@ silcgaim_ftp_new_xfer, /* new_xfer */ NULL, /* offline_message */ &silcgaim_wb_ops, /* whiteboard_prpl_ops */ + NULL, /* send_raw */ }; static GaimPluginInfo info = Modified: trunk/libgaim/protocols/simple/simple.c =================================================================== --- trunk/libgaim/protocols/simple/simple.c 2006-09-12 20:11:56 UTC (rev 17262) +++ trunk/libgaim/protocols/simple/simple.c 2006-09-12 21:57:15 UTC (rev 17263) @@ -521,6 +521,12 @@ } } +static void simple_send_raw(GaimConnection *gc, const char *buf, int len) +{ + sendout_pkt(gc, buf); + return len; +} + static void sendout_sipmsg(struct simple_account_data *sip, struct sipmsg *msg) { GSList *tmp = msg->headers; gchar *name; @@ -1792,6 +1798,7 @@ NULL, /* new_xfer */ NULL, /* offline_message */ NULL, /* whiteboard_prpl_ops */ + simple_send_raw, /* send_raw */ }; Modified: trunk/libgaim/protocols/toc/toc.c =================================================================== --- trunk/libgaim/protocols/toc/toc.c 2006-09-12 20:11:56 UTC (rev 17262) +++ trunk/libgaim/protocols/toc/toc.c 2006-09-12 21:57:15 UTC (rev 17263) @@ -414,6 +414,11 @@ return ret; } +static int toc_send_raw(GaimConnection *gc, const char *buf, int len) +{ + return sflap_send(gc, buf, len, 2); +} + static int wait_reply(GaimConnection *gc, char *buffer, size_t buflen) { struct toc_data *tdt = (struct toc_data *)gc->proto_data; @@ -2068,7 +2073,7 @@ hdr->magic[0] = 'O'; hdr->magic[1] = 'F'; hdr->magic[2] = 'T'; hdr->magic[3] = '2'; hdr->hdrlen = htons(256); hdr->hdrtype = htons(0x1108); - frombase64(ft->cookie, &buf, NULL); + rombase64(ft->cookie, &buf, NULL); g_snprintf(hdr->bcookie, 8, "%s", buf); g_free(buf); hdr->totfiles = htons(1); hdr->filesleft = htons(1); @@ -2300,6 +2305,7 @@ NULL, /* new_xfer */ NULL, /* offline_message */ NULL, /* whiteboard_prpl_ops */ + toc_send_raw, /* send_raw */ }; static GaimPluginInfo info = Modified: trunk/libgaim/protocols/yahoo/yahoo.c =================================================================== --- trunk/libgaim/protocols/yahoo/yahoo.c 2006-09-12 20:11:56 UTC (rev 17262) +++ trunk/libgaim/protocols/yahoo/yahoo.c 2006-09-12 21:57:15 UTC (rev 17263) @@ -3863,6 +3863,7 @@ yahoo_new_xfer, yahoo_offline_message, /* offline_message */ &yahoo_whiteboard_prpl_ops, + NULL /* send_raw */ }; static GaimPluginInfo info = Modified: trunk/libgaim/protocols/zephyr/zephyr.c =================================================================== --- trunk/libgaim/protocols/zephyr/zephyr.c 2006-09-12 20:11:56 UTC (rev 17262) +++ trunk/libgaim/protocols/zephyr/zephyr.c 2006-09-12 21:57:15 UTC (rev 17263) @@ -2915,6 +2915,7 @@ NULL, /* new_xfer */ NULL, /* offline_message */ NULL, /* whiteboard_prpl_ops */ + NULL, /* send_raw */ }; static GaimPluginInfo info = { @@ -2944,7 +2945,7 @@ NULL, /**< ui_info */ &prpl_info, /**< extra_info */ NULL, - zephyr_actions + zephyr_actions, }; static void init_plugin(GaimPlugin * plugin) Modified: trunk/libgaim/prpl.h =================================================================== --- trunk/libgaim/prpl.h 2006-09-12 20:11:56 UTC (rev 17262) +++ trunk/libgaim/prpl.h 2006-09-12 21:57:15 UTC (rev 17263) @@ -298,6 +298,9 @@ gboolean (*offline_message)(const GaimBuddy *buddy); GaimWhiteboardPrplOps *whiteboard_prpl_ops; + + /* For use in plugins that may understand the underlying protocol */ + int (*send_raw)(GaimConnection *gc, const char *buf, int len); }; #define GAIM_IS_PROTOCOL_PLUGIN(plugin) \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-09-22 05:42:05
|
Revision: 17335 http://svn.sourceforge.net/gaim/?rev=17335&view=rev Author: thekingant Date: 2006-09-21 22:42:01 -0700 (Thu, 21 Sep 2006) Log Message: ----------- Get rid of some checks to make sure gc is valid. They shouldn't be necessary (and a lot of them were poorly implemented anyway). Let me know if you notice any crashes. Modified Paths: -------------- trunk/libgaim/account.c trunk/libgaim/connection.c trunk/libgaim/privacy.c trunk/libgaim/protocols/jabber/buddy.c trunk/libgaim/server.c Modified: trunk/libgaim/account.c =================================================================== --- trunk/libgaim/account.c 2006-09-21 21:56:19 UTC (rev 17334) +++ trunk/libgaim/account.c 2006-09-22 05:42:01 UTC (rev 17335) @@ -1141,11 +1141,8 @@ GaimConnection *gc; gaim_account_set_user_info(account, user_info); - gc = gaim_account_get_connection(account); - - if (gc != NULL) - serv_set_info(gc, user_info); + serv_set_info(gc, user_info); } void @@ -1959,8 +1956,7 @@ if (gc != NULL && gc->prpl != NULL) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); - if (prpl_info != NULL && g_list_find(gaim_connections_get_all(), gc) && - prpl_info->add_buddy != NULL) + if (prpl_info != NULL && prpl_info->add_buddy != NULL) prpl_info->add_buddy(gc, buddy, gaim_buddy_get_group(buddy)); } @@ -1973,7 +1969,7 @@ if (gc != NULL && gc->prpl != NULL) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); - if (prpl_info && g_list_find(gaim_connections_get_all(), gc)) { + if (prpl_info) { GList *cur, *groups = NULL; /* Make a list of what group each buddy is in */ @@ -2008,7 +2004,7 @@ if (gc != NULL && gc->prpl != NULL) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); - if (prpl_info && g_list_find(gaim_connections_get_all(), gc) && prpl_info->remove_buddy) + if (prpl_info && prpl_info->remove_buddy) prpl_info->remove_buddy(gc, buddy, group); } @@ -2018,13 +2014,10 @@ GaimPluginProtocolInfo *prpl_info = NULL; GaimConnection *gc = gaim_account_get_connection(account); - if (!g_list_find(gaim_connections_get_all(), gc)) - return; - if (gc != NULL && gc->prpl != NULL) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); - if (prpl_info && g_list_find(gaim_connections_get_all(), gc)) { + if (prpl_info) { if (prpl_info->remove_buddies) prpl_info->remove_buddies(gc, buddies, groups); else { @@ -2048,7 +2041,7 @@ if (gc != NULL && gc->prpl != NULL) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); - if (prpl_info && g_list_find(gaim_connections_get_all(), gc) && prpl_info->remove_group) + if (prpl_info && prpl_info->remove_group) prpl_info->remove_group(gc, group); } @@ -2064,7 +2057,7 @@ if (gc != NULL && gc->prpl != NULL) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); - if (prpl_info && g_list_find(gaim_connections_get_all(), gc) && prpl_info->change_passwd) + if (prpl_info && prpl_info->change_passwd) prpl_info->change_passwd(gc, orig_pw, new_pw); } Modified: trunk/libgaim/connection.c =================================================================== --- trunk/libgaim/connection.c 2006-09-21 21:56:19 UTC (rev 17334) +++ trunk/libgaim/connection.c 2006-09-22 05:42:01 UTC (rev 17335) @@ -428,7 +428,6 @@ GaimConnectionUiOps *ops; g_return_if_fail(gc != NULL); - g_return_if_fail(GAIM_CONNECTION_IS_VALID(gc)); g_return_if_fail(text != NULL); /* If we've already got one error, we don't need any more */ Modified: trunk/libgaim/privacy.c =================================================================== --- trunk/libgaim/privacy.c 2006-09-21 21:56:19 UTC (rev 17334) +++ trunk/libgaim/privacy.c 2006-09-22 05:42:01 UTC (rev 17335) @@ -46,10 +46,10 @@ break; } - if (l != NULL) + if (l != NULL) { g_free(name); - return FALSE; + return FALSE; } account->permit = g_slist_append(account->permit, name); Modified: trunk/libgaim/protocols/jabber/buddy.c =================================================================== --- trunk/libgaim/protocols/jabber/buddy.c 2006-09-21 21:56:19 UTC (rev 17334) +++ trunk/libgaim/protocols/jabber/buddy.c 2006-09-22 05:42:01 UTC (rev 17335) @@ -506,15 +506,9 @@ p = xmlnode_to_str(vc_node, NULL); xmlnode_free(vc_node); - if (gc != NULL) { - GaimAccount *account = gaim_connection_get_account(gc); + gaim_account_set_user_info(gaim_connection_get_account(gc), p); + serv_set_info(gc, p); - if (account != NULL) { - gaim_account_set_user_info(account, p); - serv_set_info(gc, p); - } - } - g_free(p); } Modified: trunk/libgaim/server.c =================================================================== --- trunk/libgaim/server.c 2006-09-21 21:56:19 UTC (rev 17334) +++ trunk/libgaim/server.c 2006-09-22 05:42:01 UTC (rev 17335) @@ -173,8 +173,7 @@ if (gc != NULL && gc->prpl != NULL) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); - if (prpl_info && g_list_find(gaim_connections_get_all(), gc) && - prpl_info->set_info) { + if (prpl_info && prpl_info->set_info) { account = gaim_connection_get_account(gc); @@ -270,7 +269,7 @@ if (g != NULL && g->prpl != NULL) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); - if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->add_permit) + if (prpl_info && prpl_info->add_permit) prpl_info->add_permit(g, name); } @@ -281,7 +280,7 @@ if (g != NULL && g->prpl != NULL) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); - if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->add_deny) + if (prpl_info && prpl_info->add_deny) prpl_info->add_deny(g, name); } @@ -292,7 +291,7 @@ if (g != NULL && g->prpl != NULL) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); - if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->rem_permit) + if (prpl_info && prpl_info->rem_permit) prpl_info->rem_permit(g, name); } @@ -303,7 +302,7 @@ if (g != NULL && g->prpl != NULL) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); - if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->rem_deny) + if (prpl_info && prpl_info->rem_deny) prpl_info->rem_deny(g, name); } @@ -320,7 +319,7 @@ * in the prefs. In either case you should probably be resetting and * resending the permit/deny info when you get this. */ - if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->set_permit_deny) + if (prpl_info && prpl_info->set_permit_deny) prpl_info->set_permit_deny(g); } @@ -331,7 +330,7 @@ if (g != NULL && g->prpl != NULL) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); - if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->join_chat) + if (prpl_info && prpl_info->join_chat) prpl_info->join_chat(g, data); } @@ -343,7 +342,7 @@ if (g != NULL && g->prpl != NULL) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); - if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->reject_chat) + if (prpl_info && prpl_info->reject_chat) prpl_info->reject_chat(g, data); } @@ -364,7 +363,7 @@ gaim_signal_emit(gaim_conversations_get_handle(), "chat-inviting-user", conv, name, &buffy); - if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->chat_invite) + if (prpl_info && prpl_info->chat_invite) prpl_info->chat_invite(g, id, buffy, name); gaim_signal_emit(gaim_conversations_get_handle(), "chat-invited-user", @@ -383,9 +382,6 @@ { GaimPluginProtocolInfo *prpl_info = NULL; - if (!g_list_find(gaim_connections_get_all(), g)) - return; - if (g->prpl != NULL) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <de...@us...> - 2006-09-25 06:01:17
|
Revision: 17346 http://svn.sourceforge.net/gaim/?rev=17346&view=rev Author: deryni9 Date: 2006-09-24 23:01:12 -0700 (Sun, 24 Sep 2006) Log Message: ----------- Fix the argument GaimValue types in a handful of signal registrations. These being wrong didn't matter to things that knew/guessed what their arguments were (i.e. C functions) but did matter to things that needed to trust the GaimValue type information for the types (i.e plugin loaders). I'm pretty sure I got this all right, it matches the docs at least. I still think there are a couple problems (namely the *-timestamp functions returning a GAIM_TYPE_POINTER instead of a GAIM_TYPE_STRING) but these were much more obvious. Modified Paths: -------------- trunk/libgaim/ft.c trunk/libgaim/sound.c Modified: trunk/libgaim/ft.c =================================================================== --- trunk/libgaim/ft.c 2006-09-25 03:35:02 UTC (rev 17345) +++ trunk/libgaim/ft.c 2006-09-25 06:01:12 UTC (rev 17346) @@ -1183,41 +1183,41 @@ /* register signals */ gaim_signal_register(handle, "file-recv-accept", - gaim_marshal_VOID__POINTER, - NULL, 1, - gaim_value_new(GAIM_TYPE_SUBTYPE, GAIM_SUBTYPE_XFER)); + gaim_marshal_VOID__POINTER, NULL, 1, + gaim_value_new(GAIM_TYPE_SUBTYPE, + GAIM_SUBTYPE_XFER)); gaim_signal_register(handle, "file-send-accept", - gaim_marshal_VOID__POINTER, - NULL, 1, - gaim_value_new(GAIM_TYPE_POINTER, GAIM_SUBTYPE_XFER)); + gaim_marshal_VOID__POINTER, NULL, 1, + gaim_value_new(GAIM_TYPE_SUBTYPE, + GAIM_SUBTYPE_XFER)); gaim_signal_register(handle, "file-recv-start", - gaim_marshal_VOID__POINTER, - NULL, 1, - gaim_value_new(GAIM_TYPE_POINTER, GAIM_SUBTYPE_XFER)); + gaim_marshal_VOID__POINTER, NULL, 1, + gaim_value_new(GAIM_TYPE_SUBTYPE, + GAIM_SUBTYPE_XFER)); gaim_signal_register(handle, "file-send-start", - gaim_marshal_VOID__POINTER, - NULL, 1, - gaim_value_new(GAIM_TYPE_POINTER, GAIM_SUBTYPE_XFER)); + gaim_marshal_VOID__POINTER, NULL, 1, + gaim_value_new(GAIM_TYPE_SUBTYPE, + GAIM_SUBTYPE_XFER)); gaim_signal_register(handle, "file-send-cancel", - gaim_marshal_VOID__POINTER, - NULL, 1, - gaim_value_new(GAIM_TYPE_POINTER, GAIM_SUBTYPE_XFER)); + gaim_marshal_VOID__POINTER, NULL, 1, + gaim_value_new(GAIM_TYPE_SUBTYPE, + GAIM_SUBTYPE_XFER)); gaim_signal_register(handle, "file-recv-cancel", - gaim_marshal_VOID__POINTER, - NULL, 1, - gaim_value_new(GAIM_TYPE_POINTER, GAIM_SUBTYPE_XFER)); + gaim_marshal_VOID__POINTER, NULL, 1, + gaim_value_new(GAIM_TYPE_SUBTYPE, + GAIM_SUBTYPE_XFER)); gaim_signal_register(handle, "file-send-complete", - gaim_marshal_VOID__POINTER, - NULL, 1, - gaim_value_new(GAIM_TYPE_POINTER, GAIM_SUBTYPE_XFER)); + gaim_marshal_VOID__POINTER, NULL, 1, + gaim_value_new(GAIM_TYPE_SUBTYPE, + GAIM_SUBTYPE_XFER)); gaim_signal_register(handle, "file-recv-complete", - gaim_marshal_VOID__POINTER, - NULL, 1, - gaim_value_new(GAIM_TYPE_POINTER, GAIM_SUBTYPE_XFER)); + gaim_marshal_VOID__POINTER, NULL, 1, + gaim_value_new(GAIM_TYPE_SUBTYPE, + GAIM_SUBTYPE_XFER)); gaim_signal_register(handle, "file-recv-request", - gaim_marshal_VOID__POINTER, - NULL, 1, - gaim_value_new(GAIM_TYPE_POINTER, GAIM_SUBTYPE_XFER)); + gaim_marshal_VOID__POINTER, NULL, 1, + gaim_value_new(GAIM_TYPE_SUBTYPE, + GAIM_SUBTYPE_XFER)); } void Modified: trunk/libgaim/sound.c =================================================================== --- trunk/libgaim/sound.c 2006-09-25 03:35:02 UTC (rev 17345) +++ trunk/libgaim/sound.c 2006-09-25 06:01:12 UTC (rev 17346) @@ -103,7 +103,8 @@ gaim_marshal_BOOLEAN__INT_POINTER, gaim_value_new(GAIM_TYPE_BOOLEAN), 2, gaim_value_new(GAIM_TYPE_INT), - gaim_value_new(GAIM_TYPE_POINTER)); + gaim_value_new(GAIM_TYPE_SUBTYPE, + GAIM_SUBTYPE_ACCOUNT)); gaim_prefs_add_none("/core/sound"); gaim_prefs_add_bool("/core/sound/while_away", FALSE); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-09-26 21:37:42
|
Revision: 17369 http://svn.sourceforge.net/gaim/?rev=17369&view=rev Author: datallah Date: 2006-09-26 14:37:37 -0700 (Tue, 26 Sep 2006) Log Message: ----------- This is what we decided to do about the signedness warnings, right? Modified Paths: -------------- trunk/libgaim/protocols/jabber/parser.c trunk/libgaim/xmlnode.c Modified: trunk/libgaim/protocols/jabber/parser.c =================================================================== --- trunk/libgaim/protocols/jabber/parser.c 2006-09-26 21:36:30 UTC (rev 17368) +++ trunk/libgaim/protocols/jabber/parser.c 2006-09-26 21:37:37 UTC (rev 17369) @@ -40,7 +40,7 @@ if(!element_name) { return; - } else if(!strcmp(element_name, "stream")) { + } else if(!xmlStrcmp(element_name, (xmlChar*) "stream")) { js->protocol_version = JABBER_PROTO_0_9; for(i=0; i < nb_attributes * 5; i += 5) { int attrib_len = attributes[i+4] - attributes[i+3]; @@ -48,11 +48,11 @@ memcpy(attrib, attributes[i+3], attrib_len); attrib[attrib_len] = '\0'; - if(!strcmp(attributes[i], "version") + if(!xmlStrcmp(attributes[i], (xmlChar*) "version") && !strcmp(attrib, "1.0")) { js->protocol_version = JABBER_PROTO_1_0; g_free(attrib); - } else if(!strcmp(attributes[i], "id")) { + } else if(!xmlStrcmp(attributes[i], (xmlChar*) "id")) { if(js->stream_id) g_free(js->stream_id); js->stream_id = attrib; @@ -66,17 +66,17 @@ } else { if(js->current) - node = xmlnode_new_child(js->current, element_name); + node = xmlnode_new_child(js->current, (const char*) element_name); else - node = xmlnode_new(element_name); - xmlnode_set_namespace(node, namespace); + node = xmlnode_new((const char*) element_name); + xmlnode_set_namespace(node, (const char*) namespace); for(i=0; i < nb_attributes * 5; i+=5) { int attrib_len = attributes[i+4] - attributes[i+3]; char *attrib = g_malloc(attrib_len + 1); memcpy(attrib, attributes[i+3], attrib_len); attrib[attrib_len] = '\0'; - xmlnode_set_attrib(node, attributes[i], attrib); + xmlnode_set_attrib(node, (const char*) attributes[i], attrib); g_free(attrib); } @@ -94,7 +94,7 @@ return; if(js->current->parent) { - if(!strcmp(js->current->name, element_name)) + if(!xmlStrcmp((xmlChar*) js->current->name, element_name)) js->current = js->current->parent; } else { xmlnode *packet = js->current; @@ -115,7 +115,7 @@ if(!text || !text_len) return; - xmlnode_insert_data(js->current, text, text_len); + xmlnode_insert_data(js->current, (const char*) text, text_len); } static xmlSAXHandler jabber_parser_libxml = { Modified: trunk/libgaim/xmlnode.c =================================================================== --- trunk/libgaim/xmlnode.c 2006-09-26 21:36:30 UTC (rev 17368) +++ trunk/libgaim/xmlnode.c 2006-09-26 21:37:37 UTC (rev 17369) @@ -386,11 +386,11 @@ return; } else { if(xpd->current) - node = xmlnode_new_child(xpd->current, element_name); + node = xmlnode_new_child(xpd->current, (const char*) element_name); else - node = xmlnode_new(element_name); + node = xmlnode_new((const char *) element_name); - xmlnode_set_namespace(node, namespace); + xmlnode_set_namespace(node, (const char *) namespace); for(i=0; i < nb_attributes * 5; i+=5) { char *txt; @@ -401,7 +401,7 @@ txt = attrib; attrib = gaim_unescape_html(txt); g_free(txt); - xmlnode_set_attrib(node, attributes[i], attrib); + xmlnode_set_attrib(node, (const char*) attributes[i], attrib); g_free(attrib); } @@ -419,7 +419,7 @@ return; if(xpd->current->parent) { - if(!strcmp(xpd->current->name, element_name)) + if(!xmlStrcmp((xmlChar*) xpd->current->name, element_name)) xpd->current = xpd->current->parent; } } @@ -435,7 +435,7 @@ if(!text || !text_len) return; - xmlnode_insert_data(xpd->current, text, text_len); + xmlnode_insert_data(xpd->current, (const char*) text, text_len); } static xmlSAXHandler xmlnode_parser_libxml = { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-09-28 07:01:51
|
Revision: 17389 http://svn.sourceforge.net/gaim/?rev=17389&view=rev Author: thekingant Date: 2006-09-28 00:01:47 -0700 (Thu, 28 Sep 2006) Log Message: ----------- Fix sf bug #1469293 Checking if a va_list != NULL is not valid because va_list is not a pointer on some platforms. Conveniently the check wasn't necessary. Modified Paths: -------------- trunk/libgaim/account.c trunk/libgaim/account.h trunk/libgaim/status.c Modified: trunk/libgaim/account.c =================================================================== --- trunk/libgaim/account.c 2006-09-28 06:32:53 UTC (rev 17388) +++ trunk/libgaim/account.c 2006-09-28 07:01:47 UTC (rev 17389) @@ -1369,32 +1369,21 @@ gaim_account_set_status(GaimAccount *account, const char *status_id, gboolean active, ...) { - va_list args; - - va_start(args, active); - gaim_account_set_status_vargs(account, status_id, active, args); - va_end(args); -} - -void -gaim_account_set_status_vargs(GaimAccount *account, const char *status_id, - gboolean active, va_list args) -{ GList *attrs = NULL; const gchar *id; gpointer data; + va_list args; - if (args != NULL) + va_start(args, active); + while ((id = va_arg(args, const char *)) != NULL) { - while ((id = va_arg(args, const char *)) != NULL) - { - attrs = g_list_append(attrs, (char *)id); - data = va_arg(args, void *); - attrs = g_list_append(attrs, data); - } + attrs = g_list_append(attrs, (char *)id); + data = va_arg(args, void *); + attrs = g_list_append(attrs, data); } gaim_account_set_status_list(account, status_id, active, attrs); g_list_free(attrs); + va_end(args); } void Modified: trunk/libgaim/account.h =================================================================== --- trunk/libgaim/account.h 2006-09-28 06:32:53 UTC (rev 17388) +++ trunk/libgaim/account.h 2006-09-28 07:01:47 UTC (rev 17389) @@ -287,8 +287,7 @@ /** * Activates or deactivates a status. All changes to the statuses of - * an account go through this function or gaim_account_set_status_vargs - * or gaim_account_set_status_list. + * an account go through this function or gaim_account_set_status_list. * * Only independent statuses can be deactivated with this. To deactivate * an exclusive status, activate a different (and exclusive?) status. @@ -296,8 +295,8 @@ * @param account The account. * @param status_id The ID of the status. * @param active The active state. - * @param ... Optional NULL-terminated attributes passed for the - * new status, in an id, value pair. + * @param ... Pairs of attributes for the new status passed in + * as a NULL-terminated list of id/value pairs. */ void gaim_account_set_status(GaimAccount *account, const char *status_id, gboolean active, ...); @@ -305,8 +304,7 @@ /** * Activates or deactivates a status. All changes to the statuses of - * an account go through this function or gaim_account_set_status or - * gaim_account_set_status_list. + * an account go through this function or gaim_account_set_status. * * Only independent statuses can be deactivated with this. To deactivate * an exclusive status, activate a different (and exclusive?) status. @@ -314,23 +312,6 @@ * @param account The account. * @param status_id The ID of the status. * @param active The active state. - * @param args The va_list of attributes. - */ -void gaim_account_set_status_vargs(GaimAccount *account, - const char *status_id, - gboolean active, va_list args); - -/** - * Activates or deactivates a status. All changes to the statuses of - * an account go through this function or gaim_account_set_status or - * gaim_account_set_status_vargs. - * - * Only independent statuses can be deactivated with this. To deactivate - * an exclusive status, activate a different (and exclusive?) status. - * - * @param account The account. - * @param status_id The ID of the status. - * @param active The active state. * @param attrs A list of attributes in key/value pairs */ void gaim_account_set_status_list(GaimAccount *account, Modified: trunk/libgaim/status.c =================================================================== --- trunk/libgaim/status.c 2006-09-28 06:32:53 UTC (rev 17388) +++ trunk/libgaim/status.c 2006-09-28 07:01:47 UTC (rev 17389) @@ -718,14 +718,11 @@ const gchar *id; gpointer data; - if (args != NULL) + while ((id = va_arg(args, const char *)) != NULL) { - while ((id = va_arg(args, const char *)) != NULL) - { - attrs = g_list_append(attrs, (char *)id); - data = va_arg(args, void *); - attrs = g_list_append(attrs, data); - } + attrs = g_list_append(attrs, (char *)id); + data = va_arg(args, void *); + attrs = g_list_append(attrs, data); } gaim_status_set_active_with_attrs_list(status, active, attrs); g_list_free(attrs); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ev...@us...> - 2006-09-29 00:17:25
|
Revision: 17392 http://svn.sourceforge.net/gaim/?rev=17392&view=rev Author: evands Date: 2006-09-28 17:17:18 -0700 (Thu, 28 Sep 2006) Log Message: ----------- Added gaim_running_osx() and fixed a typo. Modified Paths: -------------- trunk/libgaim/protocols/oscar/family_oservice.c trunk/libgaim/util.c trunk/libgaim/util.h Modified: trunk/libgaim/protocols/oscar/family_oservice.c =================================================================== --- trunk/libgaim/protocols/oscar/family_oservice.c 2006-09-28 08:33:58 UTC (rev 17391) +++ trunk/libgaim/protocols/oscar/family_oservice.c 2006-09-29 00:17:18 UTC (rev 17392) @@ -215,7 +215,7 @@ * rate limiting properties (limit level, alert level, disconnect * level, etc), and a set of SNAC family/type pairs associated with * it. The rate classes, their limiting properties, and the definitions - * of which SNACs are belong to which class, are defined in the + * of which SNACs belong to which class are defined in the * Rate Response packet at login to each host. * * Logically, all rate offenses within one class count against further Modified: trunk/libgaim/util.c =================================================================== --- trunk/libgaim/util.c 2006-09-28 08:33:58 UTC (rev 17391) +++ trunk/libgaim/util.c 2006-09-29 00:17:18 UTC (rev 17392) @@ -2577,6 +2577,16 @@ #endif } +gboolean +gaim_running_osx(void) +{ +#if defined(__APPLE__) + return TRUE; +#else + return FALSE; +#endif +} + char * gaim_fd_get_ip(int fd) { Modified: trunk/libgaim/util.h =================================================================== --- trunk/libgaim/util.h 2006-09-28 08:33:58 UTC (rev 17391) +++ trunk/libgaim/util.h 2006-09-29 00:17:18 UTC (rev 17392) @@ -584,6 +584,13 @@ gboolean gaim_running_kde(void); /** + * Check if running OS X. + * + * @return TRUE if running OS X, FALSE otherwise. + */ +gboolean gaim_running_osx(void); + +/** * Returns the IP address from a socket file descriptor. * * @param fd The socket file descriptor. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <de...@us...> - 2006-10-13 00:28:23
|
Revision: 17474 http://svn.sourceforge.net/gaim/?rev=17474&view=rev Author: deryni9 Date: 2006-10-12 17:28:18 -0700 (Thu, 12 Oct 2006) Log Message: ----------- As far as I can tell GaimStringFormatType is only used by the pluginpref api and was added as part of a change to the pluginpref stuff, so why it was put in prefs.h I'm not sure, pluginpref.h seems like a better place to me. Modified Paths: -------------- trunk/libgaim/pluginpref.h trunk/libgaim/prefs.h Modified: trunk/libgaim/pluginpref.h =================================================================== --- trunk/libgaim/pluginpref.h 2006-10-13 00:26:54 UTC (rev 17473) +++ trunk/libgaim/pluginpref.h 2006-10-13 00:28:18 UTC (rev 17474) @@ -29,6 +29,16 @@ typedef struct _GaimPluginPrefFrame GaimPluginPrefFrame; typedef struct _GaimPluginPref GaimPluginPref; +/** + * String format for preferences. + */ +typedef enum +{ + GAIM_STRING_FORMAT_TYPE_NONE = 0, + GAIM_STRING_FORMAT_TYPE_MULTILINE = 1 << 0, + GAIM_STRING_FORMAT_TYPE_HTML = 1 << 1 +} GaimStringFormatType; + typedef enum { GAIM_PLUGIN_PREF_NONE, GAIM_PLUGIN_PREF_CHOICE, Modified: trunk/libgaim/prefs.h =================================================================== --- trunk/libgaim/prefs.h 2006-10-13 00:26:54 UTC (rev 17473) +++ trunk/libgaim/prefs.h 2006-10-13 00:28:18 UTC (rev 17474) @@ -29,16 +29,6 @@ #include <glib.h> /** - * String format for preferences. - */ -typedef enum -{ - GAIM_STRING_FORMAT_TYPE_NONE = 0, - GAIM_STRING_FORMAT_TYPE_MULTILINE = 1 << 0, - GAIM_STRING_FORMAT_TYPE_HTML = 1 << 1 -} GaimStringFormatType; - -/** * Pref data types. */ typedef enum _GaimPrefType This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-10-18 03:32:21
|
Revision: 17509 http://svn.sourceforge.net/gaim/?rev=17509&view=rev Author: datallah Date: 2006-10-17 20:32:14 -0700 (Tue, 17 Oct 2006) Log Message: ----------- Fix the situation (I think it will only happen while shutting down) where GaimBuddy->proto_data could be accessed after it is freed. Specifically, it happened when gtkblist was requesting the emblems from the msn prpl. Big thanks to henningn for noticing the funkiness in valgrind. I discovered that there is no function to retrieve all the buddies for an account (shock, horror) - so I modified gaim_find_buddies() to return all the account buddies if "name" is NULL. Modified Paths: -------------- trunk/libgaim/blist.c trunk/libgaim/blist.h trunk/libgaim/connection.c Modified: trunk/libgaim/blist.c =================================================================== --- trunk/libgaim/blist.c 2006-10-18 03:27:43 UTC (rev 17508) +++ trunk/libgaim/blist.c 2006-10-18 03:32:14 UTC (rev 17509) @@ -65,6 +65,11 @@ return gaim_blist_get_last_sibling(node->child); } +struct _list_account_buddies { + GSList *list; + GaimAccount *account; +}; + struct _gaim_hbuddy { char *name; GaimAccount *account; @@ -2119,26 +2124,46 @@ return ret; } +static void find_acct_buddies(gpointer key, gpointer value, gpointer data) +{ + struct _gaim_hbuddy *hb = key; + GaimBuddy *buddy = value; + struct _list_account_buddies *ab = data; + + if (hb->account == ab->account) { + ab->list = g_slist_prepend(ab->list, buddy); + } +} + GSList *gaim_find_buddies(GaimAccount *account, const char *name) { - struct buddy *buddy; - struct _gaim_hbuddy hb; + GaimBuddy *buddy; GaimBlistNode *node; GSList *ret = NULL; g_return_val_if_fail(gaimbuddylist != NULL, NULL); g_return_val_if_fail(account != NULL, NULL); - g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL); - hb.name = g_strdup(gaim_normalize(account, name)); - hb.account = account; - for (node = gaimbuddylist->root; node != NULL; node = node->next) { - hb.group = node; - if ((buddy = g_hash_table_lookup(gaimbuddylist->buddies, &hb)) != NULL) - ret = g_slist_append(ret, buddy); + if ((name != NULL) && (*name != '\0')) { + struct _gaim_hbuddy hb; + + hb.name = g_strdup(gaim_normalize(account, name)); + hb.account = account; + + for (node = gaimbuddylist->root; node != NULL; node = node->next) { + hb.group = node; + if ((buddy = g_hash_table_lookup(gaimbuddylist->buddies, &hb)) != NULL) + ret = g_slist_prepend(ret, buddy); + } + g_free(hb.name); + } else { + struct _list_account_buddies *ab = g_new0(struct _list_account_buddies, 1); + ab->account = account; + g_hash_table_foreach(gaimbuddylist->buddies, find_acct_buddies, ab); + ret = ab->list; + g_free(ab); } - g_free(hb.name); return ret; } Modified: trunk/libgaim/blist.h =================================================================== --- trunk/libgaim/blist.h 2006-10-18 03:27:43 UTC (rev 17508) +++ trunk/libgaim/blist.h 2006-10-18 03:32:14 UTC (rev 17509) @@ -616,7 +616,7 @@ * Finds all GaimBuddy structs given a screenname and an account * * @param account The account this buddy belongs to - * @param name The buddy's screenname + * @param name The buddy's screenname (or NULL to return all buddies in the account) * * @return A GSList of buddies (which must be freed), or NULL if the buddy doesn't exist */ Modified: trunk/libgaim/connection.c =================================================================== --- trunk/libgaim/connection.c 2006-10-18 03:27:43 UTC (rev 17508) +++ trunk/libgaim/connection.c 2006-10-18 03:32:14 UTC (rev 17509) @@ -160,6 +160,7 @@ gaim_connection_destroy(GaimConnection *gc) { GaimAccount *account; + GSList *buddies, *tmp; #if 0 GList *wins; #endif @@ -195,6 +196,14 @@ (prpl_info->close)(gc); } + /* Clear out the proto data that was freed in the prpl close method*/ + buddies = gaim_find_buddies(account, NULL); + for (tmp = buddies; tmp; tmp = tmp->next) { + GaimBuddy *buddy = tmp->data; + buddy->proto_data = NULL; + } + g_slist_free(buddies); + connections = g_list_remove(connections, gc); gaim_connection_set_state(gc, GAIM_DISCONNECTED); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-11-06 07:25:27
|
Revision: 17681 http://svn.sourceforge.net/gaim/?rev=17681&view=rev Author: thekingant Date: 2006-11-05 23:25:05 -0800 (Sun, 05 Nov 2006) Log Message: ----------- Modified sf patch #1590052, from Ari Pollak Fixes two possible crashes that can happen after deleting an account Modified Paths: -------------- trunk/libgaim/account.c trunk/libgaim/savedstatuses.c Modified: trunk/libgaim/account.c =================================================================== --- trunk/libgaim/account.c 2006-11-06 06:54:14 UTC (rev 17680) +++ trunk/libgaim/account.c 2006-11-06 07:25:05 UTC (rev 17681) @@ -2104,6 +2104,14 @@ g_return_if_fail(account != NULL); + /* + * Disable the account before blowing it out of the water. + * Conceptually it probably makes more sense to disable the + * account for all UIs rather than the just the current UI, + * but it doesn't really matter. + */ + gaim_account_set_enabled(account, gaim_core_get_ui(), FALSE); + if (gaim_account_is_connected(account)) gaim_account_disconnect(account); Modified: trunk/libgaim/savedstatuses.c =================================================================== --- trunk/libgaim/savedstatuses.c 2006-11-06 06:54:14 UTC (rev 17680) +++ trunk/libgaim/savedstatuses.c 2006-11-06 07:25:05 UTC (rev 17681) @@ -655,6 +655,27 @@ } } +/* + * This gets called when an account is deleted. We iterate through + * all of our saved statuses and delete any substatuses that may + * exist for this account. + */ +static void +gaim_savedstatus_unset_all_substatuses(const GaimAccount *account, + gpointer user_data) +{ + GList *iter; + GaimSavedStatus *status; + + g_return_if_fail(account != NULL); + + for (iter = saved_statuses; iter != NULL; iter = iter->next) + { + status = (GaimSavedStatus *)iter->data; + gaim_savedstatus_unset_substatus(status, account); + } +} + gboolean gaim_savedstatus_delete(const char *title) { @@ -1142,6 +1163,11 @@ GAIM_SUBTYPE_SAVEDSTATUS), gaim_value_new(GAIM_TYPE_SUBTYPE, GAIM_SUBTYPE_SAVEDSTATUS)); + + gaim_signal_connect(gaim_accounts_get_handle(), "account-removed", + handle, + GAIM_CALLBACK(gaim_savedstatus_unset_all_substatuses), + NULL); } void This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-11-06 20:29:51
|
Revision: 17684 http://svn.sourceforge.net/gaim/?rev=17684&view=rev Author: datallah Date: 2006-11-06 12:29:24 -0800 (Mon, 06 Nov 2006) Log Message: ----------- g_access() is GTK >= 2.8 - add a wrapper (for wingaim I included the code from glib to deal with filename encoding issues) Add inet_ntop() implementation for wingaim. Modified Paths: -------------- trunk/libgaim/internal.h trunk/libgaim/win32/libc_interface.c trunk/libgaim/win32/libc_interface.h Modified: trunk/libgaim/internal.h =================================================================== --- trunk/libgaim/internal.h 2006-11-06 07:52:17 UTC (rev 17683) +++ trunk/libgaim/internal.h 2006-11-06 20:29:24 UTC (rev 17684) @@ -129,10 +129,6 @@ # include <glib/gstdio.h> #endif -#ifdef _WIN32 -#include "win32dep.h" -#endif - #if !GLIB_CHECK_VERSION(2,6,0) # define g_freopen freopen # define g_fopen fopen @@ -146,12 +142,20 @@ # define g_open open #endif +#if !GLIB_CHECK_VERSION(2,8,0) +# define g_access access +#endif + #if !GLIB_CHECK_VERSION(2,10,0) # define g_slice_new(type) g_new(type, 1) # define g_slice_new0(type) g_new0(type, 1) # define g_slice_free(type, mem) g_free(mem) #endif +#ifdef _WIN32 +#include "win32dep.h" +#endif + /* ugly ugly ugly */ /* This is a workaround for the fact that G_GINT64_MODIFIER and G_GSIZE_FORMAT * are only defined in Glib >= 2.4 */ Modified: trunk/libgaim/win32/libc_interface.c =================================================================== --- trunk/libgaim/win32/libc_interface.c 2006-11-06 07:52:17 UTC (rev 17683) +++ trunk/libgaim/win32/libc_interface.c 2006-11-06 20:29:24 UTC (rev 17684) @@ -232,6 +232,44 @@ return 1; } +/* Thanks to GNU wget for this inet_ntop() implementation */ +const char * +wgaim_inet_ntop (int af, const void *src, char *dst, socklen_t cnt) +{ + /* struct sockaddr can't accomodate struct sockaddr_in6. */ + union { + struct sockaddr_in6 sin6; + struct sockaddr_in sin; + } sa; + DWORD dstlen = cnt; + size_t srcsize; + + ZeroMemory(&sa, sizeof(sa)); + switch (af) + { + case AF_INET: + sa.sin.sin_family = AF_INET; + sa.sin.sin_addr = *(struct in_addr *) src; + srcsize = sizeof (sa.sin); + break; + case AF_INET6: + sa.sin6.sin6_family = AF_INET6; + sa.sin6.sin6_addr = *(struct in6_addr *) src; + srcsize = sizeof (sa.sin6); + break; + default: + abort (); + } + + if (WSAAddressToString ((struct sockaddr *) &sa, srcsize, NULL, dst, &dstlen) != 0) + { + errno = WSAGetLastError(); + return NULL; + } + return (const char *) dst; +} + + /* netdb.h */ struct hostent* wgaim_gethostbyname(const char *name) { struct hostent *hp; @@ -988,3 +1026,72 @@ return ""; } +#if !GLIB_CHECK_VERSION(2,8,0) +/** + * g_access: + * @filename: a pathname in the GLib file name encoding (UTF-8 on Windows) + * @mode: as in access() + * + * A wrapper for the POSIX access() function. This function is used to + * test a pathname for one or several of read, write or execute + * permissions, or just existence. On Windows, the underlying access() + * function in the C library only checks the READONLY attribute, and + * does not look at the ACL at all. Software that needs to handle file + * permissions on Windows more exactly should use the Win32 API. + * + * See the C library manual for more details about access(). + * + * Returns: zero if the pathname refers to an existing file system + * object that has all the tested permissions, or -1 otherwise or on + * error. + * + * Since: 2.8 + */ +int +wgaim_g_access (const gchar *filename, + int mode) +{ + if (G_WIN32_HAVE_WIDECHAR_API ()) + { + wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL); + int retval; + int save_errno; + + if (wfilename == NULL) + { + errno = EINVAL; + return -1; + } + + retval = _waccess (wfilename, mode); + save_errno = errno; + + g_free (wfilename); + + errno = save_errno; + return retval; + } + else + { + gchar *cp_filename = g_locale_from_utf8 (filename, -1, NULL, NULL, NULL); + int retval; + int save_errno; + + if (cp_filename == NULL) + { + errno = EINVAL; + return -1; + } + + retval = access (cp_filename, mode); + save_errno = errno; + + g_free (cp_filename); + + errno = save_errno; + return retval; + } +} +#endif + + Modified: trunk/libgaim/win32/libc_interface.h =================================================================== --- trunk/libgaim/win32/libc_interface.h 2006-11-06 07:52:17 UTC (rev 17683) +++ trunk/libgaim/win32/libc_interface.h 2006-11-06 20:29:24 UTC (rev 17684) @@ -72,15 +72,16 @@ #define fcntl( fd, command, val ) \ wgaim_fcntl( fd, command, val ) -#if !GLIB_CHECK_VERSION(2,6,0) -# define open( args... ) _open( args ) -#endif - /* arpa/inet.h */ int wgaim_inet_aton(const char *name, struct in_addr *addr); #define inet_aton( name, addr ) \ wgaim_inet_aton( name, addr ) +const char * +wgaim_inet_ntop (int af, const void *src, char *dst, socklen_t cnt); +#define inet_ntop( af, src, dst, cnt ) \ +wgaim_inet_ntop( af, src, dst, cnt ) + /* netdb.h */ struct hostent* wgaim_gethostbyname(const char *name); #define gethostbyname( name ) \ @@ -120,6 +121,13 @@ #define close( fd ) \ wgaim_close( fd ) +#if !GLIB_CHECK_VERSION(2,8,0) +int wgaim_g_access(const gchar *filename, int mode); +#undef g_access +#define g_access( filename, mode) \ +wgaim_g_access( filename, mode ) +#endif + #ifndef sleep #define sleep(x) Sleep((x)*1000) #endif @@ -153,9 +161,6 @@ /* sys/stat.h */ -#if !GLIB_CHECK_VERSION(2,6,0) -#define mkdir(a,b) _mkdir((a)) -#endif #define fchmod(a,b) /* time.h */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rl...@us...> - 2006-11-07 20:41:07
|
Revision: 17698 http://svn.sourceforge.net/gaim/?rev=17698&view=rev Author: rlaager Date: 2006-11-07 12:40:22 -0800 (Tue, 07 Nov 2006) Log Message: ----------- Add extern "C" guards to header files which are missing it. This should fix problems similar to SF Bug #1592175. Also, while I was at it, I made the _GaimStringref definition private. It already had a warning to not use it directly, so it should really be safe to make private. Modified Paths: -------------- trunk/libgaim/dnssrv.h trunk/libgaim/mime.h trunk/libgaim/ntlm.h trunk/libgaim/status.h trunk/libgaim/stringref.c trunk/libgaim/stringref.h trunk/libgaim/stun.h trunk/libgaim/xmlnode.h Modified: trunk/libgaim/dnssrv.h =================================================================== --- trunk/libgaim/dnssrv.h 2006-11-07 19:54:02 UTC (rev 17697) +++ trunk/libgaim/dnssrv.h 2006-11-07 20:40:22 UTC (rev 17698) @@ -23,6 +23,10 @@ #ifndef _GAIM_DNSSRV_H #define _GAIM_DNSSRV_H +#ifdef __cplusplus +extern "C" { +#endif + typedef struct _GaimSrvResponse GaimSrvResponse; typedef struct _GaimSrvQueryData GaimSrvQueryData; @@ -53,4 +57,8 @@ */ void gaim_srv_cancel(GaimSrvQueryData *query_data); +#ifdef __cplusplus +} +#endif + #endif /* _GAIM_DNSSRV_H */ Modified: trunk/libgaim/mime.h =================================================================== --- trunk/libgaim/mime.h 2006-11-07 19:54:02 UTC (rev 17697) +++ trunk/libgaim/mime.h 2006-11-07 20:40:22 UTC (rev 17698) @@ -27,6 +27,10 @@ #include <glib.h> #include <glib/glist.h> +#ifdef __cplusplus +extern "C" { +#endif + /** * @file mime.h * @ingroup core @@ -208,4 +212,8 @@ void gaim_mime_part_set_data(GaimMimePart *part, const char *data); +#ifdef __cplusplus +} #endif + +#endif Modified: trunk/libgaim/ntlm.h =================================================================== --- trunk/libgaim/ntlm.h 2006-11-07 19:54:02 UTC (rev 17697) +++ trunk/libgaim/ntlm.h 2006-11-07 20:40:22 UTC (rev 17698) @@ -26,6 +26,10 @@ #ifndef _GAIM_NTLM_H #define _GAIM_NTLM_H +#ifdef __cplusplus +extern "C" { +#endif + /** * Generates the base64 encoded type 1 message needed for NTLM authentication * @@ -61,4 +65,8 @@ */ gchar *gaim_ntlm_gen_type3(const gchar *username, const gchar *passw, const gchar *hostname, const gchar *domain, const guint8 *nonce, guint32 *flags); +#ifdef __cplusplus +} +#endif + #endif /* _GAIM_NTLM_H */ Modified: trunk/libgaim/status.h =================================================================== --- trunk/libgaim/status.h 2006-11-07 19:54:02 UTC (rev 17697) +++ trunk/libgaim/status.h 2006-11-07 20:40:22 UTC (rev 17698) @@ -113,6 +113,10 @@ #include "conversation.h" #include "value.h" +#ifdef __cplusplus +extern "C" { +#endif + /**************************************************************************/ /** @name GaimStatusPrimitive API */ /**************************************************************************/ Modified: trunk/libgaim/stringref.c =================================================================== --- trunk/libgaim/stringref.c 2006-11-07 19:54:02 UTC (rev 17697) +++ trunk/libgaim/stringref.c 2006-11-07 20:40:22 UTC (rev 17698) @@ -32,6 +32,27 @@ #include "debug.h" #include "stringref.h" +/** + * The internal representation of a stringref. + * + * @note For this structure to be useful, the string contained within + * it must be immutable -- for this reason, do _not_ access it + * directly! + */ +struct _GaimStringref { + guint32 ref; /**< The reference count of this string. + * Note that reference counts are only + * 31 bits, and the high-order bit + * indicates whether this string is up + * for GC at the next idle handler... + * But you aren't going to touch this + * anyway, right? */ + char value[1]; /**< The string contained in this ref. + * Notice that it is simply "hanging + * off the end" of the ref ... this + * is to save an allocation. */ +}; + #define REFCOUNT(x) ((x) & 0x7fffffff) static GList *gclist = NULL; Modified: trunk/libgaim/stringref.h =================================================================== --- trunk/libgaim/stringref.h 2006-11-07 19:54:02 UTC (rev 17697) +++ trunk/libgaim/stringref.h 2006-11-07 20:40:22 UTC (rev 17698) @@ -26,27 +26,12 @@ #ifndef _GAIM_STRINGREF_H_ #define _GAIM_STRINGREF_H_ -/** - * The internal representation of a stringref. - * - * @note For this structure to be useful, the string contained within - * it must be immutable -- for this reason, do _not_ access it - * directly! - */ -typedef struct _GaimStringref { - guint32 ref; /**< The reference count of this string. - * Note that reference counts are only - * 31 bits, and the high-order bit - * indicates whether this string is up - * for GC at the next idle handler... - * But you aren't going to touch this - * anyway, right? */ - char value[1]; /**< The string contained in this ref. - * Notice that it is simply "hanging - * off the end" of the ref ... this - * is to save an allocation. */ -} GaimStringref; +#ifdef __cplusplus +extern "C" { +#endif +typedef struct _GaimStringref GaimStringref; + /** * Creates an immutable reference-counted string object. The newly * created object will have a reference count of 1. @@ -143,4 +128,8 @@ */ size_t gaim_stringref_len(const GaimStringref *stringref); +#ifdef __cplusplus +} +#endif + #endif /* _GAIM_STRINGREF_H_ */ Modified: trunk/libgaim/stun.h =================================================================== --- trunk/libgaim/stun.h 2006-11-07 19:54:02 UTC (rev 17697) +++ trunk/libgaim/stun.h 2006-11-07 20:40:22 UTC (rev 17698) @@ -25,6 +25,10 @@ #ifndef _GAIM_STUN_H_ #define _GAIM_STUN_H_ +#ifdef __cplusplus +extern "C" { +#endif + /**************************************************************************/ /** @name STUN API */ /**************************************************************************/ @@ -76,4 +80,8 @@ /*@}*/ +#ifdef __cplusplus +} +#endif + #endif /* _GAIM_STUN_H_ */ Modified: trunk/libgaim/xmlnode.h =================================================================== --- trunk/libgaim/xmlnode.h 2006-11-07 19:54:02 UTC (rev 17697) +++ trunk/libgaim/xmlnode.h 2006-11-07 20:40:22 UTC (rev 17698) @@ -25,6 +25,10 @@ #ifndef _GAIM_XMLNODE_H_ #define _GAIM_XMLNODE_H_ +#ifdef __cplusplus +extern "C" { +#endif + /** * The valid types for an xmlnode */ @@ -224,4 +228,8 @@ */ void xmlnode_free(xmlnode *node); +#ifdef __cplusplus +} +#endif + #endif /* _GAIM_XMLNODE_H_ */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-11-14 04:04:09
|
Revision: 17747 http://svn.sourceforge.net/gaim/?rev=17747&view=rev Author: seanegan Date: 2006-11-13 20:04:04 -0800 (Mon, 13 Nov 2006) Log Message: ----------- AIM and ICQ are now different prpls, linked against a liboscarcommon which contains the protocol implementation Modified Paths: -------------- trunk/libgaim/account.c trunk/libgaim/protocols/oscar/Makefile.am trunk/libgaim/protocols/oscar/oscar.c Added Paths: ----------- trunk/libgaim/protocols/oscar/libaim.c trunk/libgaim/protocols/oscar/libicq.c trunk/libgaim/protocols/oscar/oscarcommon.h Modified: trunk/libgaim/account.c =================================================================== --- trunk/libgaim/account.c 2006-11-13 20:10:29 UTC (rev 17746) +++ trunk/libgaim/account.c 2006-11-14 04:04:04 UTC (rev 17747) @@ -702,6 +702,19 @@ return NULL; } + + /* HACK BY SEANEGAN: special case prpl-oscar to either prpl-icq + * prpl-aim for users upgrading to 2.0.0. This can probably + * be removed after a while + */ + if (!strcmp(protocol_id, "prpl-oscar")) { + g_free(protocol_id); + if (isdigit(name[0])) + protocol_id = g_strdup("prpl-icq"); + else + protocol_id = g_strdup("prpl-aim"); + } + ret = gaim_account_new(name, protocol_id); g_free(name); g_free(protocol_id); Modified: trunk/libgaim/protocols/oscar/Makefile.am =================================================================== --- trunk/libgaim/protocols/oscar/Makefile.am 2006-11-13 20:10:29 UTC (rev 17746) +++ trunk/libgaim/protocols/oscar/Makefile.am 2006-11-14 04:04:04 UTC (rev 17747) @@ -46,22 +46,34 @@ AM_CFLAGS = $(st) -liboscar_la_LDFLAGS = -module -avoid-version - +libaim_la_LDFLAGS = -module -avoid-version +libicq_la_LDFLAGS = -module -avoid-version if STATIC_OSCAR st = -DGAIM_STATIC_PRPL -noinst_LIBRARIES = liboscar.a +noinst_LIBRARIES = liboscar.a libaim.a libicq.a liboscar_a_SOURCES = $(OSCARSOURCES) liboscar_a_CFLAGS = $(AM_CFLAGS) +libaim_a_CFLAGS = $(AM_CFLAGS) +libaim_a_SOURCES = libaim.c + +libicq_a_CFLAGS = $(AM_CFLAGS) +libicq_a_SOURCES = libicq.c + else st = -pkg_LTLIBRARIES = liboscar.la +pkg_LTLIBRARIES = liboscar.la libaim.la libicq.la liboscar_la_SOURCES = $(OSCARSOURCES) liboscar_la_LIBADD = $(GLIB_LIBS) +libaim_la_SOURCES = libaim.c +libaim_la_LIBADD = liboscar.la + +libicq_la_SOURCES = libicq.c +libicq_la_LIBADD = liboscar.la + endif AM_CPPFLAGS = \ Added: trunk/libgaim/protocols/oscar/libaim.c =================================================================== --- trunk/libgaim/protocols/oscar/libaim.c (rev 0) +++ trunk/libgaim/protocols/oscar/libaim.c 2006-11-14 04:04:04 UTC (rev 17747) @@ -0,0 +1,149 @@ +/* gaim + * + * Gaim is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * 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 + * + */ + +/* libaim is the AIM protocol plugin. It is linked against liboscarcommon, + * which contains all the shared implementation code with libicq + */ + +#include "oscarcommon.h" + +static GaimPluginProtocolInfo prpl_info = +{ + OPT_PROTO_MAIL_CHECK | OPT_PROTO_IM_IMAGE, + NULL, /* user_splits */ + NULL, /* protocol_options */ + {"gif,jpeg,bmp,ico", 48, 48, 50, 50, + GAIM_ICON_SCALE_SEND | GAIM_ICON_SCALE_DISPLAY}, /* icon_spec */ + oscar_list_icon_aim, /* list_icon */ + oscar_list_emblems, /* list_emblems */ + oscar_status_text, /* status_text */ + oscar_tooltip_text, /* tooltip_text */ + oscar_status_types, /* status_types */ + oscar_blist_node_menu, /* blist_node_menu */ + oscar_chat_info, /* chat_info */ + oscar_chat_info_defaults, /* chat_info_defaults */ + oscar_login, /* login */ + oscar_close, /* close */ + oscar_send_im, /* send_im */ + oscar_set_info, /* set_info */ + oscar_send_typing, /* send_typing */ + oscar_get_info, /* get_info */ + oscar_set_status, /* set_status */ + oscar_set_idle, /* set_idle */ + oscar_change_passwd, /* change_passwd */ + oscar_add_buddy, /* add_buddy */ + NULL, /* add_buddies */ + oscar_remove_buddy, /* remove_buddy */ + NULL, /* remove_buddies */ + oscar_add_permit, /* add_permit */ + oscar_add_deny, /* add_deny */ + oscar_rem_permit, /* rem_permit */ + oscar_rem_deny, /* rem_deny */ + oscar_set_permit_deny, /* set_permit_deny */ + oscar_join_chat, /* join_chat */ + NULL, /* reject_chat */ + oscar_get_chat_name, /* get_chat_name */ + oscar_chat_invite, /* chat_invite */ + oscar_chat_leave, /* chat_leave */ + NULL, /* chat_whisper */ + oscar_send_chat, /* chat_send */ + oscar_keepalive, /* keepalive */ + NULL, /* register_user */ + NULL, /* get_cb_info */ + NULL, /* get_cb_away */ + oscar_alias_buddy, /* alias_buddy */ + oscar_move_buddy, /* group_buddy */ + oscar_rename_group, /* rename_group */ + NULL, /* buddy_free */ + oscar_convo_closed, /* convo_closed */ + oscar_normalize, /* normalize */ + oscar_set_icon, /* set_buddy_icon */ + NULL, /* remove_group */ + NULL, /* get_cb_real_name */ + NULL, /* set_chat_topic */ + NULL, /* find_blist_chat */ + NULL, /* roomlist_get_list */ + NULL, /* roomlist_cancel */ + NULL, /* roomlist_expand_category */ + oscar_can_receive_file, /* can_receive_file */ + oscar_send_file, /* send_file */ + oscar_new_xfer, /* new_xfer */ + oscar_offline_message, /* offline_message */ + NULL, /* whiteboard_prpl_ops */ + NULL, /* send_raw */ +}; + +static GaimPluginInfo info = +{ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, + GAIM_PLUGIN_PROTOCOL, /**< type */ + NULL, /**< ui_requirement */ + 0, /**< flags */ + NULL, /**< dependencies */ + GAIM_PRIORITY_DEFAULT, /**< priority */ + + "prpl-aim", /**< id */ + "AIM", /**< name */ + VERSION, /**< version */ + /** summary */ + N_("AIM Protocol Plugin"), + /** description */ + N_("AIM Protocol Plugin"), + NULL, /**< author */ + GAIM_WEBSITE, /**< homepage */ + + NULL, /**< load */ + NULL, /**< unload */ + NULL, /**< destroy */ + + NULL, /**< ui_info */ + &prpl_info, /**< extra_info */ + NULL, + oscar_actions +}; + +static void +init_plugin(GaimPlugin *plugin) +{ + GaimAccountOption *option; + + option = gaim_account_option_string_new(_("Server"), "server", OSCAR_DEFAULT_LOGIN_SERVER); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + + option = gaim_account_option_int_new(_("Port"), "port", OSCAR_DEFAULT_LOGIN_PORT); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + + option = gaim_account_option_bool_new( + _("Always use AIM/ICQ proxy server for file transfers\n(slower, but does not reveal your IP address)"), "always_use_rv_proxy", + OSCAR_DEFAULT_ALWAYS_USE_RV_PROXY); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + + /* Preferences */ + gaim_prefs_add_none("/plugins/prpl/oscar"); + gaim_prefs_add_bool("/plugins/prpl/oscar/recent_buddies", FALSE); + gaim_prefs_add_bool("/plugins/prpl/oscar/show_idle", FALSE); + gaim_prefs_remove("/plugins/prpl/oscar/always_use_rv_proxy"); +} + +GAIM_INIT_PLUGIN(oscar, init_plugin, info); Property changes on: trunk/libgaim/protocols/oscar/libaim.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/libgaim/protocols/oscar/libicq.c =================================================================== --- trunk/libgaim/protocols/oscar/libicq.c (rev 0) +++ trunk/libgaim/protocols/oscar/libicq.c 2006-11-14 04:04:04 UTC (rev 17747) @@ -0,0 +1,153 @@ +/* gaim + * + * Gaim is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * 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 + * + */ + +/* libicq is the ICQ protocol plugin. It is linked against liboscarcommon, + * which contains all the shared implementation code with libaim + */ + + +#include "oscarcommon.h" + +static GaimPluginProtocolInfo prpl_info = +{ + OPT_PROTO_MAIL_CHECK | OPT_PROTO_IM_IMAGE, + NULL, /* user_splits */ + NULL, /* protocol_options */ + {"gif,jpeg,bmp,ico", 48, 48, 50, 50, + GAIM_ICON_SCALE_SEND | GAIM_ICON_SCALE_DISPLAY}, /* icon_spec */ + oscar_list_icon_icq, /* list_icon */ + oscar_list_emblems, /* list_emblems */ + oscar_status_text, /* status_text */ + oscar_tooltip_text, /* tooltip_text */ + oscar_status_types, /* status_types */ + oscar_blist_node_menu, /* blist_node_menu */ + oscar_chat_info, /* chat_info */ + oscar_chat_info_defaults, /* chat_info_defaults */ + oscar_login, /* login */ + oscar_close, /* close */ + oscar_send_im, /* send_im */ + oscar_set_info, /* set_info */ + oscar_send_typing, /* send_typing */ + oscar_get_info, /* get_info */ + oscar_set_status, /* set_status */ + oscar_set_idle, /* set_idle */ + oscar_change_passwd, /* change_passwd */ + oscar_add_buddy, /* add_buddy */ + NULL, /* add_buddies */ + oscar_remove_buddy, /* remove_buddy */ + NULL, /* remove_buddies */ + oscar_add_permit, /* add_permit */ + oscar_add_deny, /* add_deny */ + oscar_rem_permit, /* rem_permit */ + oscar_rem_deny, /* rem_deny */ + oscar_set_permit_deny, /* set_permit_deny */ + oscar_join_chat, /* join_chat */ + NULL, /* reject_chat */ + oscar_get_chat_name, /* get_chat_name */ + oscar_chat_invite, /* chat_invite */ + oscar_chat_leave, /* chat_leave */ + NULL, /* chat_whisper */ + oscar_send_chat, /* chat_send */ + oscar_keepalive, /* keepalive */ + NULL, /* register_user */ + NULL, /* get_cb_info */ + NULL, /* get_cb_away */ + oscar_alias_buddy, /* alias_buddy */ + oscar_move_buddy, /* group_buddy */ + oscar_rename_group, /* rename_group */ + NULL, /* buddy_free */ + oscar_convo_closed, /* convo_closed */ + oscar_normalize, /* normalize */ + oscar_set_icon, /* set_buddy_icon */ + NULL, /* remove_group */ + NULL, /* get_cb_real_name */ + NULL, /* set_chat_topic */ + NULL, /* find_blist_chat */ + NULL, /* roomlist_get_list */ + NULL, /* roomlist_cancel */ + NULL, /* roomlist_expand_category */ + oscar_can_receive_file, /* can_receive_file */ + oscar_send_file, /* send_file */ + oscar_new_xfer, /* new_xfer */ + oscar_offline_message, /* offline_message */ + NULL, /* whiteboard_prpl_ops */ + NULL, /* send_raw */ +}; + +static GaimPluginInfo info = +{ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, + GAIM_PLUGIN_PROTOCOL, /**< type */ + NULL, /**< ui_requirement */ + 0, /**< flags */ + NULL, /**< dependencies */ + GAIM_PRIORITY_DEFAULT, /**< priority */ + + "prpl-icq", /**< id */ + "ICQ", /**< name */ + VERSION, /**< version */ + /** summary */ + N_("ICQ Protocol Plugin"), + /** description */ + N_("ICQ Protocol Plugin"), + NULL, /**< author */ + GAIM_WEBSITE, /**< homepage */ + + NULL, /**< load */ + NULL, /**< unload */ + NULL, /**< destroy */ + + NULL, /**< ui_info */ + &prpl_info, /**< extra_info */ + NULL, + oscar_actions +}; + +static void +init_plugin(GaimPlugin *plugin) +{ + GaimAccountOption *option; + + option = gaim_account_option_string_new(_("Server"), "server", OSCAR_DEFAULT_LOGIN_SERVER); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + + option = gaim_account_option_int_new(_("Port"), "port", OSCAR_DEFAULT_LOGIN_PORT); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + + option = gaim_account_option_string_new(_("Encoding"), "encoding", OSCAR_DEFAULT_CUSTOM_ENCODING); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + + option = gaim_account_option_bool_new( + _("Always use ICQ proxy server for file transfers\n(slower, but does not reveal your IP address)"), "always_use_rv_proxy", + OSCAR_DEFAULT_ALWAYS_USE_RV_PROXY); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + + /* Preferences */ + gaim_prefs_add_none("/plugins/prpl/oscar"); + gaim_prefs_add_bool("/plugins/prpl/oscar/recent_buddies", FALSE); + gaim_prefs_add_bool("/plugins/prpl/oscar/show_idle", FALSE); + gaim_prefs_remove("/plugins/prpl/oscar/always_use_rv_proxy"); +} + +GAIM_INIT_PLUGIN(oscar, init_plugin, info); Property changes on: trunk/libgaim/protocols/oscar/libicq.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/libgaim/protocols/oscar/oscar.c =================================================================== --- trunk/libgaim/protocols/oscar/oscar.c 2006-11-13 20:10:29 UTC (rev 17746) +++ trunk/libgaim/protocols/oscar/oscar.c 2006-11-14 04:04:04 UTC (rev 17747) @@ -25,6 +25,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ + #include "internal.h" #include "account.h" @@ -44,6 +45,7 @@ #include "util.h" #include "version.h" +#include "oscarcommon.h" #include "oscar.h" #include "peer.h" @@ -202,7 +204,7 @@ static gboolean gaim_icon_timerfunc(gpointer data); static void recent_buddies_cb(const char *name, GaimPrefType type, gconstpointer value, gpointer data); -static void oscar_set_info(GaimConnection *gc, const char *info); +void oscar_set_info(GaimConnection *gc, const char *info); static void oscar_set_info_and_status(GaimAccount *account, gboolean setinfo, const char *rawinfo, gboolean setstatus, GaimStatus *status); static void oscar_set_extendedstatus(GaimConnection *gc); static gboolean gaim_ssi_rerequestdata(gpointer data); @@ -1117,7 +1119,7 @@ return 1; } -static void +void oscar_login(GaimAccount *account) { GaimConnection *gc; @@ -1225,7 +1227,7 @@ ck[0] = 0x5a; } -static void +void oscar_close(GaimConnection *gc) { OscarData *od; @@ -3930,7 +3932,7 @@ return 1; } -static void +void oscar_keepalive(GaimConnection *gc) { OscarData *od; @@ -3942,7 +3944,7 @@ flap_connection_send_keepalive(od, conn); } -static unsigned int +unsigned int oscar_send_typing(GaimConnection *gc, const char *name, GaimTypingState state) { OscarData *od; @@ -4060,7 +4062,7 @@ g_string_free(msg, TRUE); } -static int +int oscar_send_im(GaimConnection *gc, const char *name, const char *message, GaimMessageFlags imflags) { OscarData *od; @@ -4221,7 +4223,7 @@ * everyone, and can request ICQ info from ICQ users, and * AIM users can only request AIM info. */ -static void oscar_get_info(GaimConnection *gc, const char *name) { +void oscar_get_info(GaimConnection *gc, const char *name) { OscarData *od = (OscarData *)gc->proto_data; if (od->icq && aim_sn_is_icq(name)) @@ -4240,7 +4242,7 @@ } #endif -static void oscar_set_idle(GaimConnection *gc, int time) { +void oscar_set_idle(GaimConnection *gc, int time) { OscarData *od = (OscarData *)gc->proto_data; aim_srv_setidle(od, time); } @@ -4267,7 +4269,7 @@ return encoded; } -static void +void oscar_set_info(GaimConnection *gc, const char *rawinfo) { GaimAccount *account; @@ -4453,7 +4455,7 @@ oscar_set_extendedstatus(gc); } -static void +void oscar_set_status(GaimAccount *account, GaimStatus *status) { gaim_debug_info("oscar", "Set status to %s\n", gaim_status_get_name(status)); @@ -4473,14 +4475,14 @@ } #ifdef CRAZY_WARN -static void +void oscar_warn(GaimConnection *gc, const char *name, gboolean anonymous) { OscarData *od = (OscarData *)gc->proto_data; aim_im_warn(od, od->conn, name, anonymous ? AIM_WARN_ANON : 0); } #endif -static void +void oscar_add_buddy(GaimConnection *gc, GaimBuddy *buddy, GaimGroup *group) { OscarData *od = (OscarData *)gc->proto_data; @@ -4508,7 +4510,7 @@ aim_icq_getalias(od, buddy->name); } -static void oscar_remove_buddy(GaimConnection *gc, GaimBuddy *buddy, GaimGroup *group) { +void oscar_remove_buddy(GaimConnection *gc, GaimBuddy *buddy, GaimGroup *group) { OscarData *od = (OscarData *)gc->proto_data; if (od->ssi.received_data) { @@ -4518,7 +4520,7 @@ } } -static void oscar_move_buddy(GaimConnection *gc, const char *name, const char *old_group, const char *new_group) { +void oscar_move_buddy(GaimConnection *gc, const char *name, const char *old_group, const char *new_group) { OscarData *od = (OscarData *)gc->proto_data; if (od->ssi.received_data && strcmp(old_group, new_group)) { gaim_debug_info("oscar", @@ -4527,7 +4529,7 @@ } } -static void oscar_alias_buddy(GaimConnection *gc, const char *name, const char *alias) { +void oscar_alias_buddy(GaimConnection *gc, const char *name, const char *alias) { OscarData *od = (OscarData *)gc->proto_data; if (od->ssi.received_data) { char *gname = aim_ssi_itemlist_findparentname(od->ssi.local, name); @@ -4542,7 +4544,7 @@ /* * FYI, the OSCAR SSI code removes empty groups automatically. */ -static void oscar_rename_group(GaimConnection *gc, const char *old_name, GaimGroup *group, GList *moved_buddies) { +void oscar_rename_group(GaimConnection *gc, const char *old_name, GaimGroup *group, GList *moved_buddies) { OscarData *od = (OscarData *)gc->proto_data; if (od->ssi.received_data) { @@ -5131,7 +5133,7 @@ return 1; } -static GList *oscar_chat_info(GaimConnection *gc) { +GList *oscar_chat_info(GaimConnection *gc) { GList *m = NULL; struct proto_chat_entry *pce; @@ -5153,7 +5155,7 @@ return m; } -static GHashTable *oscar_chat_info_defaults(GaimConnection *gc, const char *chat_name) +GHashTable *oscar_chat_info_defaults(GaimConnection *gc, const char *chat_name) { GHashTable *defaults; @@ -5165,13 +5167,13 @@ return defaults; } -static char * +char * oscar_get_chat_name(GHashTable *data) { return g_strdup(g_hash_table_lookup(data, "room")); } -static void +void oscar_join_chat(GaimConnection *gc, GHashTable *data) { OscarData *od = (OscarData *)gc->proto_data; @@ -5203,7 +5205,7 @@ } } -static void +void oscar_chat_invite(GaimConnection *gc, int id, const char *message, const char *name) { OscarData *od = (OscarData *)gc->proto_data; @@ -5216,7 +5218,7 @@ ccon->exchange, ccon->name, 0x0); } -static void +void oscar_chat_leave(GaimConnection *gc, int id) { GaimConversation *conv; @@ -5232,7 +5234,7 @@ oscar_chat_kill(gc, cc); } -static int oscar_send_chat(GaimConnection *gc, int id, const char *message, GaimMessageFlags flags) { +int oscar_send_chat(GaimConnection *gc, int id, const char *message, GaimMessageFlags flags) { OscarData *od = (OscarData *)gc->proto_data; GaimConversation *conv = NULL; struct chat_connection *c = NULL; @@ -5278,10 +5280,25 @@ return 0; } -static const char *oscar_list_icon(GaimAccount *a, GaimBuddy *b) +const char *oscar_list_icon_icq(GaimAccount *a, GaimBuddy *b) { if ((b == NULL) || (b->name == NULL) || aim_sn_is_sms(b->name)) { + if (a == NULL || aim_sn_is_icq(gaim_account_get_username(a))) + return "icq"; + else + return "aim"; + } + + if (aim_sn_is_icq(b->name)) + return "icq"; + return "aim"; +} + +const char *oscar_list_icon_aim(GaimAccount *a, GaimBuddy *b) +{ + if ((b == NULL) || (b->name == NULL) || aim_sn_is_sms(b->name)) + { if (a != NULL && aim_sn_is_icq(gaim_account_get_username(a))) return "icq"; else @@ -5293,7 +5310,7 @@ return "aim"; } -static void oscar_list_emblems(GaimBuddy *b, const char **se, const char **sw, const char **nw, const char **ne) +void oscar_list_emblems(GaimBuddy *b, const char **se, const char **sw, const char **nw, const char **ne) { GaimConnection *gc = NULL; OscarData *od = NULL; @@ -5370,7 +5387,7 @@ *ne = emblems[3]; } -static void oscar_tooltip_text(GaimBuddy *b, GString *str, gboolean full) { +void oscar_tooltip_text(GaimBuddy *b, GString *str, gboolean full) { GaimConnection *gc = b->account->gc; OscarData *od = gc->proto_data; aim_userinfo_t *userinfo = aim_locate_finduserinfo(od, b->name); @@ -5420,7 +5437,7 @@ } } -static char *oscar_status_text(GaimBuddy *b) +char *oscar_status_text(GaimBuddy *b) { GaimConnection *gc; GaimAccount *account; @@ -5549,7 +5566,7 @@ return 0; } -static void oscar_set_permit_deny(GaimConnection *gc) { +void oscar_set_permit_deny(GaimConnection *gc) { GaimAccount *account = gaim_connection_get_account(gc); OscarData *od = (OscarData *)gc->proto_data; @@ -5577,35 +5594,35 @@ } } -static void oscar_add_permit(GaimConnection *gc, const char *who) { +void oscar_add_permit(GaimConnection *gc, const char *who) { OscarData *od = (OscarData *)gc->proto_data; gaim_debug_info("oscar", "ssi: About to add a permit\n"); if (od->ssi.received_data) aim_ssi_addpermit(od, who); } -static void oscar_add_deny(GaimConnection *gc, const char *who) { +void oscar_add_deny(GaimConnection *gc, const char *who) { OscarData *od = (OscarData *)gc->proto_data; gaim_debug_info("oscar", "ssi: About to add a deny\n"); if (od->ssi.received_data) aim_ssi_adddeny(od, who); } -static void oscar_rem_permit(GaimConnection *gc, const char *who) { +void oscar_rem_permit(GaimConnection *gc, const char *who) { OscarData *od = (OscarData *)gc->proto_data; gaim_debug_info("oscar", "ssi: About to delete a permit\n"); if (od->ssi.received_data) aim_ssi_delpermit(od, who); } -static void oscar_rem_deny(GaimConnection *gc, const char *who) { +void oscar_rem_deny(GaimConnection *gc, const char *who) { OscarData *od = (OscarData *)gc->proto_data; gaim_debug_info("oscar", "ssi: About to delete a deny\n"); if (od->ssi.received_data) aim_ssi_deldeny(od, who); } -static GList * +GList * oscar_status_types(GaimAccount *account) { gboolean is_icq; @@ -5801,7 +5818,7 @@ aim_locate_getinfoshort(gc->proto_data, gaim_buddy_get_name(buddy), 0x00000003); } -static GList *oscar_buddy_menu(GaimBuddy *buddy) { +GList *oscar_buddy_menu(GaimBuddy *buddy) { GaimConnection *gc; OscarData *od; @@ -5878,7 +5895,7 @@ } -static GList *oscar_blist_node_menu(GaimBlistNode *node) { +GList *oscar_blist_node_menu(GaimBlistNode *node) { if(GAIM_BLIST_NODE_IS_BUDDY(node)) { return oscar_buddy_menu((GaimBuddy *) node); } else { @@ -6121,7 +6138,7 @@ gaim_notify_uri(gc, "http://mymobile.aol.com/dbreg/register?action=imf&clientID=1"); } -static void oscar_set_icon(GaimConnection *gc, const char *iconfile) +void oscar_set_icon(GaimConnection *gc, const char *iconfile) { OscarData *od = gc->proto_data; FILE *file; @@ -6162,7 +6179,7 @@ * Called by the Gaim core to determine whether or not we're * allowed to send a file to this user. */ -static gboolean +gboolean oscar_can_receive_file(GaimConnection *gc, const char *who) { OscarData *od; @@ -6191,7 +6208,7 @@ return FALSE; } -static GaimXfer * +GaimXfer * oscar_new_xfer(GaimConnection *gc, const char *who) { GaimXfer *xfer; @@ -6223,7 +6240,7 @@ * Called by the Gaim core when the user indicates that a * file is to be sent to a special someone. */ -static void +void oscar_send_file(GaimConnection *gc, const char *who, const char *file) { GaimXfer *xfer; @@ -6236,7 +6253,7 @@ gaim_xfer_request(xfer); } -static GList * +GList * oscar_actions(GaimPlugin *plugin, gpointer context) { GaimConnection *gc = (GaimConnection *) context; @@ -6322,7 +6339,7 @@ return menu; } -static void oscar_change_passwd(GaimConnection *gc, const char *old, const char *new) +void oscar_change_passwd(GaimConnection *gc, const char *old, const char *new) { OscarData *od = gc->proto_data; @@ -6342,7 +6359,7 @@ } } -static void +void oscar_convo_closed(GaimConnection *gc, const char *who) { OscarData *od; @@ -6387,7 +6404,7 @@ gaim_plugin_pref_frame_add(frame, ppref); #endif -static const char * +const char * oscar_normalize(const GaimAccount *account, const char *str) { static char buf[BUF_LEN]; @@ -6414,7 +6431,7 @@ return buf; } -static gboolean +gboolean oscar_offline_message(const GaimBuddy *buddy) { OscarData *od; @@ -6428,127 +6445,3 @@ return (od->icq && aim_sn_is_icq(gaim_account_get_username(account))); } -static GaimPluginProtocolInfo prpl_info = -{ - OPT_PROTO_MAIL_CHECK | OPT_PROTO_IM_IMAGE, - NULL, /* user_splits */ - NULL, /* protocol_options */ - {"gif,jpeg,bmp,ico", 48, 48, 50, 50, - GAIM_ICON_SCALE_SEND | GAIM_ICON_SCALE_DISPLAY}, /* icon_spec */ - oscar_list_icon, /* list_icon */ - oscar_list_emblems, /* list_emblems */ - oscar_status_text, /* status_text */ - oscar_tooltip_text, /* tooltip_text */ - oscar_status_types, /* status_types */ - oscar_blist_node_menu, /* blist_node_menu */ - oscar_chat_info, /* chat_info */ - oscar_chat_info_defaults, /* chat_info_defaults */ - oscar_login, /* login */ - oscar_close, /* close */ - oscar_send_im, /* send_im */ - oscar_set_info, /* set_info */ - oscar_send_typing, /* send_typing */ - oscar_get_info, /* get_info */ - oscar_set_status, /* set_status */ - oscar_set_idle, /* set_idle */ - oscar_change_passwd, /* change_passwd */ - oscar_add_buddy, /* add_buddy */ - NULL, /* add_buddies */ - oscar_remove_buddy, /* remove_buddy */ - NULL, /* remove_buddies */ - oscar_add_permit, /* add_permit */ - oscar_add_deny, /* add_deny */ - oscar_rem_permit, /* rem_permit */ - oscar_rem_deny, /* rem_deny */ - oscar_set_permit_deny, /* set_permit_deny */ - oscar_join_chat, /* join_chat */ - NULL, /* reject_chat */ - oscar_get_chat_name, /* get_chat_name */ - oscar_chat_invite, /* chat_invite */ - oscar_chat_leave, /* chat_leave */ - NULL, /* chat_whisper */ - oscar_send_chat, /* chat_send */ - oscar_keepalive, /* keepalive */ - NULL, /* register_user */ - NULL, /* get_cb_info */ - NULL, /* get_cb_away */ - oscar_alias_buddy, /* alias_buddy */ - oscar_move_buddy, /* group_buddy */ - oscar_rename_group, /* rename_group */ - NULL, /* buddy_free */ - oscar_convo_closed, /* convo_closed */ - oscar_normalize, /* normalize */ - oscar_set_icon, /* set_buddy_icon */ - NULL, /* remove_group */ - NULL, /* get_cb_real_name */ - NULL, /* set_chat_topic */ - NULL, /* find_blist_chat */ - NULL, /* roomlist_get_list */ - NULL, /* roomlist_cancel */ - NULL, /* roomlist_expand_category */ - oscar_can_receive_file, /* can_receive_file */ - oscar_send_file, /* send_file */ - oscar_new_xfer, /* new_xfer */ - oscar_offline_message, /* offline_message */ - NULL, /* whiteboard_prpl_ops */ - NULL, /* send_raw */ -}; - -static GaimPluginInfo info = -{ - GAIM_PLUGIN_MAGIC, - GAIM_MAJOR_VERSION, - GAIM_MINOR_VERSION, - GAIM_PLUGIN_PROTOCOL, /**< type */ - NULL, /**< ui_requirement */ - 0, /**< flags */ - NULL, /**< dependencies */ - GAIM_PRIORITY_DEFAULT, /**< priority */ - - "prpl-oscar", /**< id */ - "AIM/ICQ", /**< name */ - VERSION, /**< version */ - /** summary */ - N_("AIM/ICQ Protocol Plugin"), - /** description */ - N_("AIM/ICQ Protocol Plugin"), - NULL, /**< author */ - GAIM_WEBSITE, /**< homepage */ - - NULL, /**< load */ - NULL, /**< unload */ - NULL, /**< destroy */ - - NULL, /**< ui_info */ - &prpl_info, /**< extra_info */ - NULL, - oscar_actions -}; - -static void -init_plugin(GaimPlugin *plugin) -{ - GaimAccountOption *option; - - option = gaim_account_option_string_new(_("Server"), "server", OSCAR_DEFAULT_LOGIN_SERVER); - prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); - - option = gaim_account_option_int_new(_("Port"), "port", OSCAR_DEFAULT_LOGIN_PORT); - prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); - - option = gaim_account_option_string_new(_("Encoding"), "encoding", OSCAR_DEFAULT_CUSTOM_ENCODING); - prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); - - option = gaim_account_option_bool_new( - _("Always use AIM/ICQ proxy server for file transfers\n(slower, but does not reveal your IP address)"), "always_use_rv_proxy", - OSCAR_DEFAULT_ALWAYS_USE_RV_PROXY); - prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); - - /* Preferences */ - gaim_prefs_add_none("/plugins/prpl/oscar"); - gaim_prefs_add_bool("/plugins/prpl/oscar/recent_buddies", FALSE); - gaim_prefs_add_bool("/plugins/prpl/oscar/show_idle", FALSE); - gaim_prefs_remove("/plugins/prpl/oscar/always_use_rv_proxy"); -} - -GAIM_INIT_PLUGIN(oscar, init_plugin, info); Added: trunk/libgaim/protocols/oscar/oscarcommon.h =================================================================== --- trunk/libgaim/protocols/oscar/oscarcommon.h (rev 0) +++ trunk/libgaim/protocols/oscar/oscarcommon.h 2006-11-14 04:04:04 UTC (rev 17747) @@ -0,0 +1,81 @@ +/* gaim + * + * Gaim is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * 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 + * + */ + +/* oscarcommon.h contains prototypes for the prpl functions used by libaim.c + * and libicq.c + */ + +#include "accountopt.h" +#include "internal.h" +#include "prpl.h" +#include "version.h" + +#define OSCAR_DEFAULT_LOGIN_SERVER "login.oscar.aol.com" +#define OSCAR_DEFAULT_LOGIN_PORT 5190 +#define OSCAR_DEFAULT_CUSTOM_ENCODING "ISO-8859-1" +#define OSCAR_DEFAULT_AUTHORIZATION TRUE +#define OSCAR_DEFAULT_HIDE_IP TRUE +#define OSCAR_DEFAULT_WEB_AWARE FALSE +#define OSCAR_DEFAULT_ALWAYS_USE_RV_PROXY FALSE + +const char *oscar_list_icon_icq(GaimAccount *a, GaimBuddy *b); +const char *oscar_list_icon_aim(GaimAccount *a, GaimBuddy *b); +void oscar_list_emblems(GaimBuddy *b, const char **se, const char **sw, const char **nw, const char **ne); +char *oscar_status_text(GaimBuddy *b); +void oscar_tooltip_text(GaimBuddy *b, GString *str, gboolean full); +GList *oscar_status_types(GaimAccount *account); +GList *oscar_blist_node_menu(GaimBlistNode *node); +GList *oscar_chat_info(GaimConnection *gc); +GHashTable *oscar_chat_info_defaults(GaimConnection *gc, const char *chat_name); +void oscar_login(GaimAccount *account); +void oscar_close(GaimConnection *gc); +int oscar_send_im(GaimConnection *gc, const char *name, const char *message, GaimMessageFlags imflags); +void oscar_set_info(GaimConnection *gc, const char *rawinfo); +unsigned int oscar_send_typing(GaimConnection *gc, const char *name, GaimTypingState state); +void oscar_get_info(GaimConnection *gc, const char *name); +void oscar_set_status(GaimAccount *account, GaimStatus *status); +void oscar_set_idle(GaimConnection *gc, int time); +void oscar_change_passwd(GaimConnection *gc, const char *old, const char *new); +void oscar_add_buddy(GaimConnection *gc, GaimBuddy *buddy, GaimGroup *group); +void oscar_remove_buddy(GaimConnection *gc, GaimBuddy *buddy, GaimGroup *group); +void oscar_add_permit(GaimConnection *gc, const char *who); +void oscar_add_deny(GaimConnection *gc, const char *who); +void oscar_rem_permit(GaimConnection *gc, const char *who); +void oscar_rem_deny(GaimConnection *gc, const char *who); +void oscar_set_permit_deny(GaimConnection *gc); +void oscar_join_chat(GaimConnection *gc, GHashTable *data); +char *oscar_get_chat_name(GHashTable *data); +void oscar_chat_invite(GaimConnection *gc, int id, const char *message, const char *name); +void oscar_chat_leave(GaimConnection *gc, int id); +int oscar_send_chat(GaimConnection *gc, int id, const char *message, GaimMessageFlags flags); +void oscar_keepalive(GaimConnection *gc); +void oscar_alias_buddy(GaimConnection *gc, const char *name, const char *alias); +void oscar_move_buddy(GaimConnection *gc, const char *name, const char *old_group, const char *new_group); +void oscar_rename_group(GaimConnection *gc, const char *old_name, GaimGroup *group, GList *moved_buddies); +void oscar_convo_closed(GaimConnection *gc, const char *who); +const char *oscar_normalize(const GaimAccount *account, const char *str); +void oscar_set_icon(GaimConnection *gc, const char *iconfile); +gboolean oscar_can_receive_file(GaimConnection *gc, const char *who); +void oscar_send_file(GaimConnection *gc, const char *who, const char *file); +GaimXfer *oscar_new_xfer(GaimConnection *gc, const char *who); +gboolean oscar_offline_message(const GaimBuddy *buddy); +GList *oscar_actions(GaimPlugin *plugin, gpointer context); Property changes on: trunk/libgaim/protocols/oscar/oscarcommon.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-11-16 22:47:59
|
Revision: 17760 http://svn.sourceforge.net/gaim/?rev=17760&view=rev Author: thekingant Date: 2006-11-16 14:47:45 -0800 (Thu, 16 Nov 2006) Log Message: ----------- Get rid of serv_set_buddyicon(). Moved the code directly into gaim_account_set_buddy_icon(). Modified Paths: -------------- trunk/libgaim/account.c trunk/libgaim/plugins/perl/common/Server.xs trunk/libgaim/server.c trunk/libgaim/server.h Modified: trunk/libgaim/account.c =================================================================== --- trunk/libgaim/account.c 2006-11-16 20:07:19 UTC (rev 17759) +++ trunk/libgaim/account.c 2006-11-16 22:47:45 UTC (rev 17760) @@ -1270,9 +1270,18 @@ account->buddy_icon = g_strdup(icon); if (gaim_account_is_connected(account)) { - char *filename = gaim_buddy_icons_get_full_path(icon); - serv_set_buddyicon(gaim_account_get_connection(account), filename); - g_free(filename); + GaimConnection *gc; + GaimPluginProtocolInfo *prpl_info; + + gc = gaim_account_get_connection(account); + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); + + if (prpl_info && prpl_info->set_buddy_icon) + { + char *filename = gaim_buddy_icons_get_full_path(icon); + prpl_info->set_buddy_icon(gc, filename); + g_free(filename); + } } schedule_accounts_save(); Modified: trunk/libgaim/plugins/perl/common/Server.xs =================================================================== --- trunk/libgaim/plugins/perl/common/Server.xs 2006-11-16 20:07:19 UTC (rev 17759) +++ trunk/libgaim/plugins/perl/common/Server.xs 2006-11-16 22:47:45 UTC (rev 17760) @@ -206,11 +206,6 @@ Gaim::TypingState state void -serv_set_buddyicon(gc, filename) - Gaim::Connection gc - const char *filename - -void serv_set_info(con, a) Gaim::Connection con const char * a Modified: trunk/libgaim/server.c =================================================================== --- trunk/libgaim/server.c 2006-11-16 20:07:19 UTC (rev 17759) +++ trunk/libgaim/server.c 2006-11-16 22:47:45 UTC (rev 17760) @@ -414,18 +414,6 @@ return val; } -void serv_set_buddyicon(GaimConnection *gc, const char *filename) -{ - GaimPluginProtocolInfo *prpl_info = NULL; - - if (gc->prpl != NULL) - prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); - - if (prpl_info && prpl_info->set_buddy_icon) - prpl_info->set_buddy_icon(gc, filename); - -} - /* * woo. i'm actually going to comment this function. isn't that fun. make * sure to follow along, kids Modified: trunk/libgaim/server.h =================================================================== --- trunk/libgaim/server.h 2006-11-16 20:07:19 UTC (rev 17759) +++ trunk/libgaim/server.h 2006-11-16 22:47:45 UTC (rev 17760) @@ -91,7 +91,6 @@ void serv_got_im(GaimConnection *gc, const char *who, const char *msg, GaimMessageFlags flags, time_t mtime); -void serv_set_buddyicon(GaimConnection *gc, const char *filename); void serv_got_chat_invite(GaimConnection *gc, const char *name, const char *who, const char *message, GHashTable *data); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |