aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2007-04-25 21:41:34 -0700
committerWilmer van der Gaast <wilmer@gaast.net>2007-04-25 21:41:34 -0700
commit6286f80d6dc1dc4cb8106b4e209a8578d7cebe56 (patch)
tree0db5a8b93910ffdf18d4d3588a3022ad727f7e40
parent2d317bbe8def887fb796b2daaa958c59d8f4c070 (diff)
Prepared the Jabber module for anonymous rooms, but the BitlBee core
doesn't deal with it very well, and I don't really know yet how I'll solve this... :-(
-rw-r--r--protocols/jabber/conference.c31
-rw-r--r--protocols/jabber/jabber.h6
-rw-r--r--protocols/jabber/jabber_util.c3
-rw-r--r--protocols/nogaim.h1
4 files changed, 25 insertions, 16 deletions
diff --git a/protocols/jabber/conference.c b/protocols/jabber/conference.c
index f0d8f050..dde2b8b5 100644
--- a/protocols/jabber/conference.c
+++ b/protocols/jabber/conference.c
@@ -136,28 +136,31 @@ void jabber_chat_pkt_presence( struct im_connection *ic, struct jabber_buddy *bu
if( ( s = xt_find_attr( c, "jid" ) ) )
{
/* Yay, found what we need. :-) */
- bud->orig_jid = g_strdup( s );
+ bud->ext_jid = g_strdup( s );
break;
}
}
- /* Won't handle this for now. */
- if( bud->orig_jid == NULL )
- return;
+ /* Make up some other handle, if necessary. */
+ if( bud->ext_jid == NULL )
+ {
+ /* Don't want the nick to be at the end, so let's
+ think of some slightly different notation to use
+ for anonymous groupchat participants in BitlBee. */
+ bud->ext_jid = g_strdup_printf( "%s=%s", bud->resource, bud->bare_jid );
+ bud->flags |= JBFLAG_IS_ANONYMOUS;
+ }
- s = strchr( bud->orig_jid, '/' );
+ s = strchr( bud->ext_jid, '/' );
if( s ) *s = 0; /* Should NEVER be NULL, but who knows... */
- imcb_chat_add_buddy( chat, bud->orig_jid );
+ imcb_chat_add_buddy( chat, bud->ext_jid );
if( s ) *s = '/';
}
else if( type ) /* This only gets called if type is NULL or "unavailable" */
{
- /* Won't handle this for now. */
- if( bud->orig_jid == NULL )
- return;
- s = strchr( bud->orig_jid, '/' );
- if( s ) *s = 0; /* Should NEVER be NULL, but who knows... */
- imcb_chat_remove_buddy( chat, bud->orig_jid, NULL );
+ s = strchr( bud->ext_jid, '/' );
+ if( s ) *s = 0;
+ imcb_chat_remove_buddy( chat, bud->ext_jid, NULL );
if( s ) *s = '/';
if( bud == jc->me )
@@ -198,9 +201,9 @@ void jabber_chat_pkt_message( struct im_connection *ic, struct jabber_buddy *bud
if( body && body->text_len > 0 )
{
- s = strchr( bud->orig_jid, '/' );
+ s = strchr( bud->ext_jid, '/' );
if( s ) *s = 0;
- imcb_chat_msg( chat, bud->orig_jid, body->text, 0, jabber_get_timestamp( node ) );
+ imcb_chat_msg( chat, bud->ext_jid, body->text, 0, jabber_get_timestamp( node ) );
if( s ) *s = '/';
}
}
diff --git a/protocols/jabber/jabber.h b/protocols/jabber/jabber.h
index 57e24b5f..ba61920c 100644
--- a/protocols/jabber/jabber.h
+++ b/protocols/jabber/jabber.h
@@ -51,6 +51,8 @@ typedef enum
XEP85 (typing notification shite). */
JBFLAG_IS_CHATROOM = 4, /* It's convenient to use this JID thingy for
groupchat state info too. */
+ JBFLAG_IS_ANONYMOUS = 8, /* For anonymous chatrooms, when we don't have
+ have a real JID. */
} jabber_buddy_flags_t;
#define JABBER_PORT_DEFAULT "5222"
@@ -102,8 +104,8 @@ struct jabber_buddy
char *full_jid;
char *resource;
- /* Groupchat-only */
- char *orig_jid;
+ char *ext_jid; /* The JID to use in BitlBee. The real JID if possible, */
+ /* otherwise something similar to the conference JID. */
int priority;
struct jabber_away_state *away_state;
diff --git a/protocols/jabber/jabber_util.c b/protocols/jabber/jabber_util.c
index 091e6c7d..4dae3287 100644
--- a/protocols/jabber/jabber_util.c
+++ b/protocols/jabber/jabber_util.c
@@ -450,6 +450,7 @@ int jabber_buddy_remove( struct im_connection *ic, char *full_jid_ )
{
g_hash_table_remove( jd->buddies, bud->bare_jid );
g_free( bud->bare_jid );
+ g_free( bud->ext_jid );
g_free( bud->full_jid );
g_free( bud->away_message );
g_free( bud );
@@ -482,6 +483,7 @@ int jabber_buddy_remove( struct im_connection *ic, char *full_jid_ )
item, because we're removing the first. */
g_hash_table_replace( jd->buddies, bi->bare_jid, bi->next );
+ g_free( bi->ext_jid );
g_free( bi->full_jid );
g_free( bi->away_message );
g_free( bi );
@@ -525,6 +527,7 @@ int jabber_buddy_remove_bare( struct im_connection *ic, char *bare_jid_ )
while( bud )
{
next = bud->next;
+ g_free( bud->ext_jid );
g_free( bud->full_jid );
g_free( bud->away_message );
g_free( bud );
diff --git a/protocols/nogaim.h b/protocols/nogaim.h
index 4eb5cea1..6bbee6f7 100644
--- a/protocols/nogaim.h
+++ b/protocols/nogaim.h
@@ -60,6 +60,7 @@
#define OPT_LOGGING_OUT 0x00000002
#define OPT_AWAY 0x00000004
#define OPT_DOES_HTML 0x00000010
+#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! */