# HG changeset patch # User Sean Egan # Date 1158098235 0 # Node ID 8ed6ef220b2d9f3ad8d6000a11d13fef9f568e57 # Parent 33e748a2df15b7f92b6455d5e43060cf02fa0042 [gaim-migrate @ 17263] 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. committer: Tailor Script diff -r 33e748a2df15 -r 8ed6ef220b2d libgaim/protocols/bonjour/bonjour.c --- a/libgaim/protocols/bonjour/bonjour.c Tue Sep 12 20:11:56 2006 +0000 +++ b/libgaim/protocols/bonjour/bonjour.c Tue Sep 12 21:57:15 2006 +0000 @@ -414,6 +414,7 @@ NULL, /* new_xfer */ NULL, /* offline_message */ NULL, /* whiteboard_prpl_ops */ + NULL, /* send_raw */ }; static GaimPluginInfo info = diff -r 33e748a2df15 -r 8ed6ef220b2d libgaim/protocols/gg/gg.c --- a/libgaim/protocols/gg/gg.c Tue Sep 12 20:11:56 2006 +0000 +++ b/libgaim/protocols/gg/gg.c Tue Sep 12 21:57:15 2006 +0000 @@ -2112,6 +2112,7 @@ NULL, /* new_xfer */ ggp_offline_message, /* offline_message */ NULL, /* whiteboard_prpl_ops */ + NULL, /* send_raw */ }; /* }}} */ diff -r 33e748a2df15 -r 8ed6ef220b2d libgaim/protocols/irc/irc.c --- a/libgaim/protocols/irc/irc.c Tue Sep 12 20:11:56 2006 +0000 +++ b/libgaim/protocols/irc/irc.c Tue Sep 12 21:57:15 2006 +0000 @@ -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 */ }; diff -r 33e748a2df15 -r 8ed6ef220b2d libgaim/protocols/jabber/jabber.c --- a/libgaim/protocols/jabber/jabber.c Tue Sep 12 20:11:56 2006 +0000 +++ b/libgaim/protocols/jabber/jabber.c Tue Sep 12 21:57:15 2006 +0000 @@ -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) diff -r 33e748a2df15 -r 8ed6ef220b2d libgaim/protocols/msn/msn.c --- a/libgaim/protocols/msn/msn.c Tue Sep 12 20:11:56 2006 +0000 +++ b/libgaim/protocols/msn/msn.c Tue Sep 12 21:57:15 2006 +0000 @@ -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 = diff -r 33e748a2df15 -r 8ed6ef220b2d libgaim/protocols/novell/novell.c --- a/libgaim/protocols/novell/novell.c Tue Sep 12 20:11:56 2006 +0000 +++ b/libgaim/protocols/novell/novell.c Tue Sep 12 21:57:15 2006 +0000 @@ -3529,6 +3529,7 @@ NULL, /* new_xfer */ NULL, /* offline_message */ NULL, /* whiteboard_prpl_ops */ + NULL, /* send_raw */ }; static GaimPluginInfo info = { diff -r 33e748a2df15 -r 8ed6ef220b2d libgaim/protocols/oscar/oscar.c --- a/libgaim/protocols/oscar/oscar.c Tue Sep 12 20:11:56 2006 +0000 +++ b/libgaim/protocols/oscar/oscar.c Tue Sep 12 21:57:15 2006 +0000 @@ -6485,6 +6485,7 @@ oscar_new_xfer, /* new_xfer */ oscar_offline_message, /* offline_message */ NULL, /* whiteboard_prpl_ops */ + NULL, /* send_raw */ }; static GaimPluginInfo info = diff -r 33e748a2df15 -r 8ed6ef220b2d libgaim/protocols/qq/qq.c --- a/libgaim/protocols/qq/qq.c Tue Sep 12 20:11:56 2006 +0000 +++ b/libgaim/protocols/qq/qq.c Tue Sep 12 21:57:15 2006 +0000 @@ -993,6 +993,7 @@ NULL, /* new xfer */ NULL, /* offline_message */ NULL, /* GaimWhiteboardPrplOps */ + NULL, /* send_raw */ }; static GaimPluginInfo info = { diff -r 33e748a2df15 -r 8ed6ef220b2d libgaim/protocols/sametime/sametime.c --- a/libgaim/protocols/sametime/sametime.c Tue Sep 12 20:11:56 2006 +0000 +++ b/libgaim/protocols/sametime/sametime.c Tue Sep 12 21:57:15 2006 +0000 @@ -5063,6 +5063,7 @@ .new_xfer = mw_prpl_new_xfer, .offline_message = NULL, .whiteboard_prpl_ops = NULL, + .send_raw = NULL }; diff -r 33e748a2df15 -r 8ed6ef220b2d libgaim/protocols/silc/silc.c --- a/libgaim/protocols/silc/silc.c Tue Sep 12 20:11:56 2006 +0000 +++ b/libgaim/protocols/silc/silc.c Tue Sep 12 21:57:15 2006 +0000 @@ -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 = diff -r 33e748a2df15 -r 8ed6ef220b2d libgaim/protocols/simple/simple.c --- a/libgaim/protocols/simple/simple.c Tue Sep 12 20:11:56 2006 +0000 +++ b/libgaim/protocols/simple/simple.c Tue Sep 12 21:57:15 2006 +0000 @@ -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 */ }; diff -r 33e748a2df15 -r 8ed6ef220b2d libgaim/protocols/toc/toc.c --- a/libgaim/protocols/toc/toc.c Tue Sep 12 20:11:56 2006 +0000 +++ b/libgaim/protocols/toc/toc.c Tue Sep 12 21:57:15 2006 +0000 @@ -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 = diff -r 33e748a2df15 -r 8ed6ef220b2d libgaim/protocols/yahoo/yahoo.c --- a/libgaim/protocols/yahoo/yahoo.c Tue Sep 12 20:11:56 2006 +0000 +++ b/libgaim/protocols/yahoo/yahoo.c Tue Sep 12 21:57:15 2006 +0000 @@ -3863,6 +3863,7 @@ yahoo_new_xfer, yahoo_offline_message, /* offline_message */ &yahoo_whiteboard_prpl_ops, + NULL /* send_raw */ }; static GaimPluginInfo info = diff -r 33e748a2df15 -r 8ed6ef220b2d libgaim/protocols/zephyr/zephyr.c --- a/libgaim/protocols/zephyr/zephyr.c Tue Sep 12 20:11:56 2006 +0000 +++ b/libgaim/protocols/zephyr/zephyr.c Tue Sep 12 21:57:15 2006 +0000 @@ -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) diff -r 33e748a2df15 -r 8ed6ef220b2d libgaim/prpl.h --- a/libgaim/prpl.h Tue Sep 12 20:11:56 2006 +0000 +++ b/libgaim/prpl.h Tue Sep 12 21:57:15 2006 +0000 @@ -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) \