diff options
Diffstat (limited to 'protocols')
-rw-r--r-- | protocols/jabber/jabber.c | 1 | ||||
-rw-r--r-- | protocols/msn/msn.c | 1 | ||||
-rw-r--r-- | protocols/msn/ns.c | 20 | ||||
-rw-r--r-- | protocols/nogaim.c | 134 | ||||
-rw-r--r-- | protocols/nogaim.h | 6 | ||||
-rw-r--r-- | protocols/oscar/oscar.c | 1 | ||||
-rw-r--r-- | protocols/twitter/twitter.c | 1 | ||||
-rw-r--r-- | protocols/yahoo/libyahoo2.c | 2 | ||||
-rw-r--r-- | protocols/yahoo/yahoo.c | 1 | ||||
-rw-r--r-- | protocols/yahoo/yahoo_httplib.c | 2 |
10 files changed, 56 insertions, 113 deletions
diff --git a/protocols/jabber/jabber.c b/protocols/jabber/jabber.c index 75351d0d..5cc00c9f 100644 --- a/protocols/jabber/jabber.c +++ b/protocols/jabber/jabber.c @@ -530,6 +530,7 @@ void jabber_initmodule() struct prpl *ret = g_new0( struct prpl, 1 ); ret->name = "jabber"; + ret->mms = 0; /* no limit */ ret->login = jabber_login; ret->init = jabber_init; ret->logout = jabber_logout; diff --git a/protocols/msn/msn.c b/protocols/msn/msn.c index 7dbdb9d6..8bf61aa1 100644 --- a/protocols/msn/msn.c +++ b/protocols/msn/msn.c @@ -306,6 +306,7 @@ void msn_initmodule() struct prpl *ret = g_new0(struct prpl, 1); ret->name = "msn"; + ret->mms = 1409; /* this guess taken from libotr UPGRADING file */ ret->login = msn_login; ret->init = msn_init; ret->logout = msn_logout; diff --git a/protocols/msn/ns.c b/protocols/msn/ns.c index 2f656ea5..ca3c38e2 100644 --- a/protocols/msn/ns.c +++ b/protocols/msn/ns.c @@ -270,25 +270,11 @@ static int msn_ns_command( gpointer data, char **cmd, int num_parts ) { if( num_parts == 5 ) { - int i, groupcount; - - groupcount = atoi( cmd[4] ); - if( groupcount > 0 ) - { - /* valgrind says this is leaking memory, I'm guessing - that this happens during server redirects. */ - if( md->grouplist ) - { - for( i = 0; i < md->groupcount; i ++ ) - g_free( md->grouplist[i] ); - g_free( md->grouplist ); - } - - md->groupcount = groupcount; + md->buddycount = atoi( cmd[3] ); + md->groupcount = atoi( cmd[4] ); + if( md->groupcount > 0 ) md->grouplist = g_new0( char *, md->groupcount ); - } - md->buddycount = atoi( cmd[3] ); if( !*cmd[3] || md->buddycount == 0 ) msn_logged_in( ic ); } diff --git a/protocols/nogaim.c b/protocols/nogaim.c index 2248d11e..5535e093 100644 --- a/protocols/nogaim.c +++ b/protocols/nogaim.c @@ -724,8 +724,10 @@ void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags, u->status_msg = g_strdup( message ); } - /* early if-clause for show_offline even if there is some redundant code here because this isn't LISP but C ;) */ - if( set_getbool( &ic->irc->set, "show_offline" ) && set_getbool( &ic->irc->set, "away_devoice" ) ) + /* LISPy... */ + if( ( u->online ) && /* Don't touch offline people */ + ( ( u->online != oo ) || /* Do joining people */ + ( ( u->online == oo ) && ( oa == !u->away ) ) ) ) /* Do people changing state */ { char *from; @@ -739,42 +741,30 @@ void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags, ic->irc->myhost ); } - /* if we use show_offline, we op online users, voice away users, and devoice/deop offline users */ - if( flags & OPT_LOGGED_IN ) - { - /* user is "online" (either really online or away) */ - irc_write( ic->irc, ":%s MODE %s %cv%co %s %s", from, ic->irc->channel, - u->away?'+':'-', u->away?'-':'+', u->nick, u->nick ); + if(!strcmp(set_getstr(&ic->irc->set, "voice_buddies"), "online")) { + irc_write( ic->irc, ":%s MODE %s +v %s", from, ic->irc->channel, u->nick ); } - else - { - /* user is offline */ - irc_write( ic->irc, ":%s MODE %s -vo %s %s", from, ic->irc->channel, u->nick, u->nick ); + if(!strcmp(set_getstr(&ic->irc->set, "halfop_buddies"), "online")) { + irc_write( ic->irc, ":%s MODE %s +h %s", from, ic->irc->channel, u->nick ); + } + if(!strcmp(set_getstr(&ic->irc->set, "op_buddies"), "online")) { + irc_write( ic->irc, ":%s MODE %s +o %s", from, ic->irc->channel, u->nick ); } - } - else - { - /* LISPy... */ - if( ( set_getbool( &ic->irc->set, "away_devoice" ) ) && /* Don't do a thing when user doesn't want it */ - ( u->online ) && /* Don't touch offline people */ - ( ( ( u->online != oo ) && !u->away ) || /* Voice joining people */ - ( ( u->online == oo ) && ( oa == !u->away ) ) ) ) /* (De)voice people changing state */ - { - char *from; - if( set_getbool( &ic->irc->set, "simulate_netsplit" ) ) - { - from = g_strdup( ic->irc->myhost ); - } - else - { - from = g_strdup_printf( "%s!%s@%s", ic->irc->mynick, ic->irc->mynick, - ic->irc->myhost ); - } + if(!strcmp(set_getstr(&ic->irc->set, "voice_buddies"), "notaway")) { irc_write( ic->irc, ":%s MODE %s %cv %s", from, ic->irc->channel, - u->away?'-':'+', u->nick ); - g_free( from ); + u->away?'-':'+', u->nick ); + } + if(!strcmp(set_getstr(&ic->irc->set, "halfop_buddies"), "notaway")) { + irc_write( ic->irc, ":%s MODE %s %ch %s", from, ic->irc->channel, + u->away?'-':'+', u->nick ); } + if(!strcmp(set_getstr(&ic->irc->set, "op_buddies"), "notaway")) { + irc_write( ic->irc, ":%s MODE %s %co %s", from, ic->irc->channel, + u->away?'-':'+', u->nick ); + } + + g_free( from ); } } @@ -783,9 +773,15 @@ void imcb_buddy_msg( struct im_connection *ic, const char *handle, char *msg, ui irc_t *irc = ic->irc; char *wrapped, *ts = NULL; user_t *u; - + + /* pass the message through OTR */ + msg = otr_handle_message(ic, handle, msg); + if(!msg) { + /* this was an internal OTR protocol message */ + return; + } + u = user_findhandle( ic, handle ); - if( !u ) { char *h = set_getstr( &irc->set, "handle_unknown" ); @@ -795,6 +791,7 @@ void imcb_buddy_msg( struct im_connection *ic, const char *handle, char *msg, ui if( set_getbool( &irc->set, "debug" ) ) imcb_log( ic, "Ignoring message from unknown handle %s", handle ); + g_free(msg); return; } else if( g_strncasecmp( h, "add", 3 ) == 0 ) @@ -828,13 +825,14 @@ void imcb_buddy_msg( struct im_connection *ic, const char *handle, char *msg, ui ( ts = format_timestamp( irc, sent_at ) ) ) { char *new = g_strconcat( ts, msg, NULL ); - g_free( ts ); - ts = msg = new; + g_free( msg ); + msg = new; } wrapped = word_wrap( msg, 425 ); irc_msgfrom( irc, u->nick, wrapped ); g_free( wrapped ); + g_free( msg ); g_free( ts ); } @@ -1111,61 +1109,6 @@ static int remove_chat_buddy_silent( struct groupchat *b, const char *handle ) /* Misc. BitlBee stuff which shouldn't really be here */ -char *set_eval_away_devoice( set_t *set, char *value ) -{ - irc_t *irc = set->data; - int st; - - if( !is_bool( value ) ) - return SET_INVALID; - - st = bool2int( value ); - - /* Horror.... */ - - if( st != set_getbool( &irc->set, "away_devoice" ) ) - { - char list[80] = ""; - user_t *u = irc->users; - int i = 0, count = 0; - char pm; - char v[80]; - - if( st ) - pm = '+'; - else - pm = '-'; - - while( u ) - { - if( u->ic && u->online && !u->away ) - { - if( ( strlen( list ) + strlen( u->nick ) ) >= 79 ) - { - for( i = 0; i < count; v[i++] = 'v' ); v[i] = 0; - irc_write( irc, ":%s MODE %s %c%s%s", - irc->myhost, - irc->channel, pm, v, list ); - - *list = 0; - count = 0; - } - - sprintf( list + strlen( list ), " %s", u->nick ); - count ++; - } - u = u->next; - } - - /* $v = 'v' x $i */ - for( i = 0; i < count; v[i++] = 'v' ); v[i] = 0; - irc_write( irc, ":%s MODE %s %c%s%s", irc->myhost, - irc->channel, pm, v, list ); - } - - return value; -} - char *set_eval_timezone( set_t *set, char *value ) { char *s; @@ -1268,10 +1211,11 @@ int imc_buddy_msg( struct im_connection *ic, char *handle, char *msg, int flags buf = escape_html( msg ); msg = buf; } + + /* if compiled without otr support, this just calls the prpl buddy_msg */ + st = otr_send_message(ic, handle, msg, flags); - st = ic->acc->prpl->buddy_msg( ic, handle, msg, flags ); - g_free( buf ); - + g_free(buf); return st; } diff --git a/protocols/nogaim.h b/protocols/nogaim.h index 48a80413..62d800c6 100644 --- a/protocols/nogaim.h +++ b/protocols/nogaim.h @@ -58,6 +58,7 @@ #define OPT_LOCALBUDDY 0x00000020 /* For nicks local to one groupchat */ #define OPT_TYPING 0x00000100 /* Some pieces of code make assumptions */ #define OPT_THINKING 0x00000200 /* about these values... Stupid me! */ +#define OPT_NOOTR 0x00001000 /* protocol not suitable for OTR */ /* ok. now the fun begins. first we create a connection structure */ struct im_connection @@ -131,6 +132,10 @@ struct prpl { /* You should set this to the name of your protocol. * - The user sees this name ie. when imcb_log() is used. */ const char *name; + /* Maximum Message Size of this protocol. + * - Introduced for OTR, in order to fragment large protocol messages. + * - 0 means "unlimited". */ + unsigned int mms; /* Added this one to be able to add per-account settings, don't think * it should be used for anything else. You are supposed to use the @@ -325,7 +330,6 @@ void imc_rem_block( struct im_connection *ic, char *handle ); /* Misc. stuff */ char *set_eval_timezone( set_t *set, char *value ); -char *set_eval_away_devoice( set_t *set, char *value ); gboolean auto_reconnect( gpointer data, gint fd, b_input_condition cond ); void cancel_auto_reconnect( struct account *a ); diff --git a/protocols/oscar/oscar.c b/protocols/oscar/oscar.c index 9602a496..65768cba 100644 --- a/protocols/oscar/oscar.c +++ b/protocols/oscar/oscar.c @@ -2553,6 +2553,7 @@ void oscar_initmodule() { struct prpl *ret = g_new0(struct prpl, 1); ret->name = "oscar"; + ret->mms = 2343; /* this guess taken from libotr UPGRADING file */ ret->away_states = oscar_away_states; ret->init = oscar_init; ret->login = oscar_login; diff --git a/protocols/twitter/twitter.c b/protocols/twitter/twitter.c index 2e3ab634..fca619c3 100644 --- a/protocols/twitter/twitter.c +++ b/protocols/twitter/twitter.c @@ -375,6 +375,7 @@ void twitter_initmodule() { struct prpl *ret = g_new0(struct prpl, 1); + ret->options = OPT_NOOTR; ret->name = "twitter"; ret->login = twitter_login; ret->init = twitter_init; diff --git a/protocols/yahoo/libyahoo2.c b/protocols/yahoo/libyahoo2.c index 1bfc2e59..44bc1b86 100644 --- a/protocols/yahoo/libyahoo2.c +++ b/protocols/yahoo/libyahoo2.c @@ -68,6 +68,8 @@ char *strchr (), *strrchr (); #ifdef __MINGW32__ # include <winsock2.h> +# define write(a,b,c) send(a,b,c,0) +# define read(a,b,c) recv(a,b,c,0) #endif #include <stdlib.h> diff --git a/protocols/yahoo/yahoo.c b/protocols/yahoo/yahoo.c index e4d541d5..4826adb4 100644 --- a/protocols/yahoo/yahoo.c +++ b/protocols/yahoo/yahoo.c @@ -354,6 +354,7 @@ void byahoo_initmodule( ) { struct prpl *ret = g_new0(struct prpl, 1); ret->name = "yahoo"; + ret->mms = 832; /* this guess taken from libotr UPGRADING file */ ret->init = byahoo_init; ret->login = byahoo_login; diff --git a/protocols/yahoo/yahoo_httplib.c b/protocols/yahoo/yahoo_httplib.c index 1b084992..dbbe2a84 100644 --- a/protocols/yahoo/yahoo_httplib.c +++ b/protocols/yahoo/yahoo_httplib.c @@ -50,6 +50,8 @@ char *strchr (), *strrchr (); #include "yahoo_debug.h" #ifdef __MINGW32__ # include <winsock2.h> +# define write(a,b,c) send(a,b,c,0) +# define read(a,b,c) recv(a,b,c,0) # define snprintf _snprintf #endif |