aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitlbee.c3
-rw-r--r--doc/user-guide/commands.xml18
-rw-r--r--doc/user-guide/misc.xml36
-rw-r--r--help.c5
-rw-r--r--irc_im.c8
-rw-r--r--irc_send.c21
-rw-r--r--motd.txt1
-rw-r--r--protocols/jabber/conference.c18
-rw-r--r--protocols/jabber/jabber.h2
-rw-r--r--protocols/jabber/message.c13
-rw-r--r--protocols/oscar/oscar.c8
-rw-r--r--protocols/oscar/ssi.c2
-rw-r--r--protocols/twitter/twitter.c2
-rw-r--r--unix.c2
14 files changed, 107 insertions, 32 deletions
diff --git a/bitlbee.c b/bitlbee.c
index ac22932f..d53bfe71 100644
--- a/bitlbee.c
+++ b/bitlbee.c
@@ -135,7 +135,8 @@ int bitlbee_daemon_init()
exit( 0 );
setsid();
- chdir( "/" );
+ i = chdir( "/" );
+ /* Don't use i, just make gcc happy. :-/ */
if( getenv( "_BITLBEE_RESTART_STATE" ) == NULL )
for( i = 0; i < 3; i ++ )
diff --git a/doc/user-guide/commands.xml b/doc/user-guide/commands.xml
index a1554645..6adc4001 100644
--- a/doc/user-guide/commands.xml
+++ b/doc/user-guide/commands.xml
@@ -72,7 +72,7 @@
</para>
<para>
- By default all your Twitter contacts will come from a contact called twitter_(yourusername). You can change this behaviour using the <emphasis>mode</emphasis> setting (see <emphasis>help set mode</emphasis>).
+ By default all your Twitter contacts will appear in a new channel called #twitter_yourusername. You can change this behaviour using the <emphasis>mode</emphasis> setting (see <emphasis>help set mode</emphasis>).
</para>
<para>
@@ -810,19 +810,23 @@
<bitlbee-setting name="mode" type="string" scope="account">
<possible-values>one, many, chat</possible-values>
- <default>one</default>
+ <default>chat</default>
<description>
<para>
- By default, everything from the Twitter module will come from one nick, twitter_(yourusername). If you prefer to have individual nicks for everyone, you can set this setting to "many" instead.
+ By default, BitlBee will create a separate channel (called #twitter_yourusername) for all your Twitter contacts/messages.
+ </para>
+
+ <para>
+ If you don't want an extra channel, you can set this setting to "one" (everything will come from one nick, twitter_yourusername), or to "many" (individual nicks for everyone).
</para>
<para>
- If you prefer to have all your Twitter things in a separate channel, you can set this setting to "chat".
+ With modes "chat" and "many", you can send direct messages by /msg'ing your contacts directly. Note, however, that incoming DMs are not fetched yet.
</para>
<para>
- In the last two modes, you can send direct messages by /msg'ing your contacts directly. Note, however, that incoming DMs are not fetched yet.
+ With modes "many" and "one", you can post tweets by /msg'ing the twitter_yourusername contact. In mode "chat", messages posted in the Twitter channel will also be posted as tweets.
</para>
</description>
@@ -1460,6 +1464,10 @@
<para>
Only the <emphasis>group list</emphasis> command is supported at the moment, which shows a list of all groups defined so far.
</para>
+
+ <para>
+ If you want to move contacts between groups, you can use the IRC <emphasis>/invite</emphasis> command. Also, if you use the <emphasis>add</emphasis> command in a control channel configured to show just one group, the new contact will automatically be added to that group.
+ </para>
</description>
</bitlbee-command>
diff --git a/doc/user-guide/misc.xml b/doc/user-guide/misc.xml
index dc0ce5ed..979ad026 100644
--- a/doc/user-guide/misc.xml
+++ b/doc/user-guide/misc.xml
@@ -174,7 +174,41 @@ To start a simple group chat, you simply join a channel which a name starting wi
</para>
<para>
-If you want to configure your own channels, you can use the <emphasis>channel set</emphasis>.
+If you want to configure your own channels, you can use the <emphasis>channel set</emphasis> command. See <emphasis>help channels3</emphasis> for more information.
+</para>
+
+</sect1>
+
+<sect1 id="channels3">
+<title>Configuring a control channel</title>
+
+<para>
+The most important setting for a control channel is <emphasis>fill_by</emphasis>. It
+tells BitlBee what information should be used to decide if someone should be shown
+in the channel or not. After setting this setting to, for example, <emphasis>account</emphasis>, you
+also have to set the <emphasis>account</emphasis> setting. Example:
+</para>
+
+<ircexample>
+ <ircline nick="wilmer">chan set &amp;wlm fill_by account</ircline>
+ <ircline nick="root">fill_by = `account'</ircline>
+ <ircline nick="wilmer">chan set &amp;wlm account msn</ircline>
+ <ircline nick="root">account = `msn'</ircline>
+</ircexample>
+
+<para>
+Also, each channel has a <emphasis>show_users</emphasis> setting which lets you
+choose, for example, if you want to see only online contacts in a channel, or
+also/just offline contacts. Example:
+</para>
+
+<ircexample>
+ <ircline nick="wilmer">chan set &amp;offline show_users offline</ircline>
+ <ircline nick="root">show_users = `offline'</ircline>
+</ircexample>
+
+<para>
+See the help information for all these settings for more information.
</para>
</sect1>
diff --git a/help.c b/help.c
index c43d0459..14156eaf 100644
--- a/help.c
+++ b/help.c
@@ -156,8 +156,9 @@ char *help_get( help_t **help, char *title )
return NULL;
}
- lseek( h->fd, h->offset.file_offset, SEEK_SET );
- read( h->fd, s, h->length );
+ if( lseek( h->fd, h->offset.file_offset, SEEK_SET ) == -1 ||
+ read( h->fd, s, h->length ) != h->length )
+ return NULL;
}
else
{
diff --git a/irc_im.c b/irc_im.c
index 6ddcb432..7fa70350 100644
--- a/irc_im.c
+++ b/irc_im.c
@@ -251,7 +251,6 @@ static gboolean bee_irc_user_nick_update( irc_user_t *iu );
static gboolean bee_irc_user_fullname( bee_t *bee, bee_user_t *bu )
{
irc_user_t *iu = (irc_user_t *) bu->ui_data;
- irc_t *irc = (irc_t *) bee->ui_data;
char *s;
if( iu->fullname != iu->nick )
@@ -265,8 +264,11 @@ static gboolean bee_irc_user_fullname( bee_t *bee, bee_user_t *bu )
if( ( bu->ic->flags & OPT_LOGGED_IN ) && set_getbool( &bee->set, "display_namechanges" ) )
{
+ /* People don't like this /NOTICE. Meh, let's go back to the old one.
char *msg = g_strdup_printf( "<< \002BitlBee\002 - Changed name to `%s' >>", iu->fullname );
irc_send_msg( iu, "NOTICE", irc->user->nick, msg, NULL );
+ */
+ imcb_log( bu->ic, "User `%s' changed name to `%s'", iu->nick, iu->fullname );
}
bee_irc_user_nick_update( iu );
@@ -690,7 +692,7 @@ static gboolean bee_irc_channel_chat_privmsg( irc_channel_t *ic, const char *msg
if( ( s = strchr( nick, ':' ) ) || ( s = strchr( nick, ',' ) ) )
{
*s = '\0';
- if( ( iu = irc_user_by_name( ic->irc, nick ) ) &&
+ if( ( iu = irc_user_by_name( ic->irc, nick ) ) && iu->bu &&
iu->bu->nick && irc_channel_has_user( ic, iu ) )
{
trans = g_strconcat( iu->bu->nick, msg + ( s - nick ), NULL );
@@ -795,9 +797,9 @@ static gboolean bee_irc_channel_chat_topic( irc_channel_t *ic, const char *new )
char *topic = g_strdup( new );
c->ic->acc->prpl->chat_topic( c, topic );
g_free( topic );
- return TRUE;
}
+ /* Whatever happened, the IM module should ack the topic change. */
return FALSE;
}
diff --git a/irc_send.c b/irc_send.c
index fa4e6815..791ecc75 100644
--- a/irc_send.c
+++ b/irc_send.c
@@ -52,24 +52,27 @@ void irc_send_login( irc_t *irc )
void irc_send_motd( irc_t *irc )
{
+ char motd[2048];
+ size_t len;
int fd;
fd = open( global.conf->motdfile, O_RDONLY );
- if( fd == -1 )
+ if( fd == -1 || ( len = read( fd, motd, sizeof( motd ) - 1 ) ) <= 0 )
{
irc_send_num( irc, 422, ":We don't need MOTDs." );
}
else
{
- char linebuf[80]; /* Max. line length for MOTD's is 79 chars. It's what most IRC networks seem to do. */
- char *add, max;
- int len;
+ char linebuf[80];
+ char *add = "", max, *in;
+ in = motd;
+ motd[len] = '\0';
linebuf[79] = len = 0;
max = sizeof( linebuf ) - 1;
irc_send_num( irc, 375, ":- %s Message Of The Day - ", irc->root->host );
- while( read( fd, linebuf + len, 1 ) == 1 )
+ while( ( linebuf[len] = *(in++) ) )
{
if( linebuf[len] == '\n' || len == max )
{
@@ -79,13 +82,15 @@ void irc_send_motd( irc_t *irc )
}
else if( linebuf[len] == '%' )
{
- read( fd, linebuf + len, 1 );
+ linebuf[len] = *(in++);
if( linebuf[len] == 'h' )
add = irc->root->host;
else if( linebuf[len] == 'v' )
add = BITLBEE_VERSION;
else if( linebuf[len] == 'n' )
add = irc->user->nick;
+ else if( linebuf[len] == '\0' )
+ in --;
else
add = "%";
@@ -98,8 +103,10 @@ void irc_send_motd( irc_t *irc )
}
}
irc_send_num( irc, 376, ":End of MOTD" );
- close( fd );
}
+
+ if( fd != -1 )
+ close( fd );
}
void irc_usermsg( irc_t *irc, char *format, ... )
diff --git a/motd.txt b/motd.txt
index 9e854d54..a15067ab 100644
--- a/motd.txt
+++ b/motd.txt
@@ -16,3 +16,4 @@ The developers of the Bee hope you have a buzzing time.
* BitlBee development team: wilmer, jelmer, Maurits
... Buzzing, haha, get it?
+% \ No newline at end of file
diff --git a/protocols/jabber/conference.c b/protocols/jabber/conference.c
index e04b9792..0c2db0b3 100644
--- a/protocols/jabber/conference.c
+++ b/protocols/jabber/conference.c
@@ -311,6 +311,15 @@ void jabber_chat_pkt_message( struct im_connection *ic, struct jabber_buddy *bud
struct jabber_chat *jc = chat ? chat->data : NULL;
char *s;
+ if( subject && chat )
+ {
+ s = bud ? strchr( bud->ext_jid, '/' ) : NULL;
+ if( s ) *s = 0;
+ imcb_chat_topic( chat, bud ? bud->ext_jid : NULL, subject->text_len > 0 ?
+ subject->text : NULL, jabber_get_timestamp( node ) );
+ if( s ) *s = '/';
+ }
+
if( bud == NULL || ( jc && ~jc->flags & JCFLAG_MESSAGE_SENT && bud == jc->me ) )
{
char *nick;
@@ -365,15 +374,6 @@ void jabber_chat_pkt_message( struct im_connection *ic, struct jabber_buddy *bud
now or just wait for the OS to do it. :-) */
return;
}
-
- if( subject )
- {
- s = strchr( bud->ext_jid, '/' );
- if( s ) *s = 0;
- imcb_chat_topic( chat, bud->ext_jid, subject->text_len > 0 ?
- subject->text : NULL, jabber_get_timestamp( node ) );
- if( s ) *s = '/';
- }
if( body && body->text_len > 0 )
{
s = strchr( bud->ext_jid, '/' );
diff --git a/protocols/jabber/jabber.h b/protocols/jabber/jabber.h
index 45a1c5c1..1523e096 100644
--- a/protocols/jabber/jabber.h
+++ b/protocols/jabber/jabber.h
@@ -58,6 +58,8 @@ typedef enum
groupchat state info too. */
JBFLAG_IS_ANONYMOUS = 8, /* For anonymous chatrooms, when we don't have
have a real JID. */
+ JBFLAG_HIDE_SUBJECT = 16, /* Hide the subject field since we probably
+ showed it already. */
} jabber_buddy_flags_t;
/* Stores a streamhost's (a.k.a. proxy) data */
diff --git a/protocols/jabber/message.c b/protocols/jabber/message.c
index 6e40e521..85c71c9d 100644
--- a/protocols/jabber/message.c
+++ b/protocols/jabber/message.c
@@ -92,9 +92,20 @@ xt_status jabber_pkt_message( struct xt_node *node, gpointer data )
g_string_append_printf( fullmsg, "URL: %s\n", url->text );
}
}
- else if( ( c = xt_find_node( node->children, "subject" ) ) && c->text_len > 0 )
+ else if( ( c = xt_find_node( node->children, "subject" ) ) && c->text_len > 0 &&
+ ( !bud || !( bud->flags & JBFLAG_HIDE_SUBJECT ) ) )
{
g_string_append_printf( fullmsg, "<< \002BitlBee\002 - Message with subject: %s >>\n", c->text );
+ if( bud )
+ bud->flags |= JBFLAG_HIDE_SUBJECT;
+ }
+ else if( bud && !c )
+ {
+ /* Yeah, possibly we're hiding changes to this field now. But nobody uses
+ this for anything useful anyway, except GMail when people reply to an
+ e-mail via chat, repeating the same subject all the time. I don't want
+ to have to remember full subject strings for everyone. */
+ bud->flags &= ~JBFLAG_HIDE_SUBJECT;
}
if( body && body->text_len > 0 ) /* Could be just a typing notification. */
diff --git a/protocols/oscar/oscar.c b/protocols/oscar/oscar.c
index db6a28f4..9283628a 100644
--- a/protocols/oscar/oscar.c
+++ b/protocols/oscar/oscar.c
@@ -516,6 +516,14 @@ static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) {
case 0x05:
/* Incorrect nick/password */
imcb_error(ic, _("Incorrect nickname or password."));
+ {
+ int max = od->icq ? 8 : 16;
+ if (strlen(ic->acc->pass) > max)
+ imcb_log(ic, "Note that the maximum password "
+ "length supported by this protocol is "
+ "%d characters, try logging in using "
+ "a shorter password.", max);
+ }
// plugin_event(event_error, (void *)980, 0, 0, 0);
break;
case 0x11:
diff --git a/protocols/oscar/ssi.c b/protocols/oscar/ssi.c
index 76b5b427..f37d98e5 100644
--- a/protocols/oscar/ssi.c
+++ b/protocols/oscar/ssi.c
@@ -414,7 +414,7 @@ int aim_ssi_cleanlist(aim_session_t *sess, aim_conn_t *conn)
for (parentgroup=sess->ssi.items; ((parentgroup) && (parentgroup->type!=AIM_SSI_TYPE_GROUP) && (parentgroup->gid==0x0000)); parentgroup=parentgroup->next);
if (!parentgroup) {
char *newgroup;
- newgroup = (char*)g_malloc(strlen("Unknown")*sizeof(char));
+ newgroup = (char*)g_malloc(strlen("Unknown")+1);
strcpy(newgroup, "Unknown");
aim_ssi_addgroups(sess, conn, &newgroup, 1);
}
diff --git a/protocols/twitter/twitter.c b/protocols/twitter/twitter.c
index d5b71bc3..d5127415 100644
--- a/protocols/twitter/twitter.c
+++ b/protocols/twitter/twitter.c
@@ -194,7 +194,7 @@ static void twitter_init( account_t *acc )
s = set_add( &acc->set, "message_length", "140", set_eval_int, acc );
- s = set_add( &acc->set, "mode", "one", set_eval_mode, acc );
+ s = set_add( &acc->set, "mode", "chat", set_eval_mode, acc );
s->flags |= ACC_SET_OFFLINE_ONLY;
s = set_add( &acc->set, "oauth", def_oauth, set_eval_bool, acc );
diff --git a/unix.c b/unix.c
index c3ecbc99..0d373234 100644
--- a/unix.c
+++ b/unix.c
@@ -166,7 +166,7 @@ int main( int argc, char *argv[] )
/* Looks like env should *not* be freed here as putenv
doesn't make a copy. Odd. */
- chdir( old_cwd );
+ i = chdir( old_cwd );
close( global.listen_socket );
if( execv( argv[0], argv ) == -1 )