aboutsummaryrefslogtreecommitdiffstats
path: root/protocols
diff options
context:
space:
mode:
Diffstat (limited to 'protocols')
-rw-r--r--protocols/jabber/jabber.c1
-rw-r--r--protocols/msn/msn.c1
-rw-r--r--protocols/msn/ns.c20
-rw-r--r--protocols/nogaim.c134
-rw-r--r--protocols/nogaim.h6
-rw-r--r--protocols/oscar/oscar.c1
-rw-r--r--protocols/twitter/twitter.c1
-rw-r--r--protocols/yahoo/libyahoo2.c2
-rw-r--r--protocols/yahoo/yahoo.c1
-rw-r--r--protocols/yahoo/yahoo_httplib.c2
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