diff options
| author | ulim <a.sporto+bee@gmail.com> | 2008-02-15 18:38:57 +0100 | 
|---|---|---|
| committer | ulim <a.sporto+bee@gmail.com> | 2008-02-15 18:38:57 +0100 | 
| commit | 1ba7e8f1d28c4876ea0b787f1e4ebb5607f48895 (patch) | |
| tree | 5ba8bed0e1ba83c56a855059e88e3d2a205fe88c /protocols/jabber/conference.c | |
| parent | 0fbd3a6d26d8fe747bd5e061748e75f397801064 (diff) | |
| parent | eeb85a8a880fefe655eb31b6322136b61ee969e2 (diff) | |
Merged with upstream r328
  Wilmer van der Gaast 2008-02-11 Got rid of some noise at startup: complaining when the default configuration
    Wilmer van der Gaast 2008-02-10 Added support for password-protected Jabber chatrooms.
    Wilmer van der Gaast 2008-02-10 Making AI_ADDRCONFIG optional, it doesn't exist on at least NetBSD and
    Wilmer van der Gaast 2008-02-09 Restored "add -tmp". A bit hackish, but it will do for now.
    Wilmer van der Gaast 2008-02-07 Fixed getnameinfo() calls, this fixes Solaris stability issues. Thanks to
    Wilmer van der Gaast 2008-02-04 Added bogus G_GNUC_MALLOC to restore GLib 2.4 compatibility (hopefully).
    Wilmer van der Gaast 2008-02-03 Messages from the user are also included in backlogs when joining a Jabber
    Wilmer van der Gaast 2008-02-03 Disabling "Unknown command" warnings since they're very noisy and pretty
    Wilmer van der Gaast 2008-02-03 Implemented XEP-0115. This adds some info to the <presence/> tags so
    Wilmer van der Gaast 2008-02-03 Saner garbage collection of cached packets in the Jabber module. Now
    Wilmer van der Gaast 2008-02-02 Added help_free() and cleaned up some very stale help-related stuff I
    Wilmer van der Gaast 2008-01-30 Fixed handling of OSCAR multi-part messages... They're not arrays, they're
    Wilmer van der Gaast 2008-01-24 Keeping track of valid Jabber connections so _connected() events will be
    Wilmer van der Gaast 2008-01-24 Fixed two valgrind warnings (partially uninitialized "struct tm" vars.)
    Wilmer van der Gaast 2008-01-20 The Jabber module now uses imcb_chat_log() instead of imcb_log() where
    Wilmer van der Gaast 2008-01-20 Added imcb_chat_log() for chatroom system messages, so they can be
    Wilmer van der Gaast 2008-01-20 GET_BUDDY_FIRST wasn't actually implemented, even though it was in use
    Wilmer van der Gaast 2008-01-19 Using test -f instead of test -e. This breaks if the include files are
    Wilmer van der Gaast 2008-01-19 Added byte swapping code to the new MD5 checksumming code to make it work
    Wilmer van der Gaast 2008-01-18 Moving imcb_chat_new() to a saner location (no code changes) and fixing
    Wilmer van der Gaast 2008-01-17 Apparently ext_yahoo_got_im can be called with msg=NULL, so it should be
    Wilmer van der Gaast 2008-01-17 Fixing some Solaris compiler warnings (u_int->uint, adding some typecasts
    Wilmer van der Gaast 2008-01-13 Fixed handing of failed groupchat joins.
    Wilmer van der Gaast 2008-01-13 Fixed "Conditional jump or move depends on uninitialised value(s)" at
    Wilmer van der Gaast 2008-01-13 Fixed quickstart2. (Bug #349.)
    Wilmer van der Gaast 2008-01-13 Different handling of charset mismatches before login time. Ignoring a
    Wilmer van der Gaast 2008-01-12 When a switchboard connection dies (at the TCP level) and there are still
    Wilmer van der Gaast 2008-01-12 Killed info_string_append() and now showing the IP address of ICQ users
    Wilmer van der Gaast 2008-01-11 Fixing bug #344, now away states should always be correct, even when people
    Wilmer van der Gaast 2008-01-11 Adding own handle to protocol name in blist output for people with multiple
    Wilmer van der Gaast 2008-01-10 Now setting odata->icq properly again, this got lost some time ago, which
    Wilmer van der Gaast 2008-01-06 More consistency in error/warning errors. Until now "WARNING:" was usually
    Wilmer van der Gaast 2008-01-06 Changed warning message about unsent MSN messages. It should show the actual
    Wilmer van der Gaast 2008-01-05 Added "mail_notifications" setting. Who needs those notifications anyway?
    Wilmer van der Gaast 2008-01-05 Build fix from vmiklos.
    Wilmer van der Gaast 2008-01-05 Added handling of MSN switchboard NAK messages. Untested, but hey, it
    Wilmer van der Gaast 2008-01-05 Removed closure->result. I was planning to add some more stuff, but will
    Miklos Vajna 2007-12-31 encode: md5.c is no longer in protocols/, it's in lib/
    Wilmer van der Gaast 2007-12-28 Fixed return value check in proxy_connect(), since on some systems
    Wilmer van der Gaast 2007-12-28 Added missing return in jabber_login().
    Wilmer van der Gaast 2007-12-16 Implemented XEP-0199 (patch from misc@mandriva.org).
    Wilmer van der Gaast 2007-12-12 Checking conn->xcred before trying to clean it up since GnuTLS doesn't
    Wilmer van der Gaast 2007-12-12 Killed the <server> parameter to "account add" and changed the default
    Wilmer van der Gaast 2007-12-12 Fixed sockerr_again() usage in Jabber module to (hopefully) fix a 100% CPU
    Wilmer van der Gaast 2007-12-10 Don't allow nicks that start with a number.
    Wilmer van der Gaast 2007-12-10 Fixed "set xxx" syntax (it showed all settings instead of just xxx).
    Wilmer van der Gaast 2007-12-09 If I keep forgetting to credit people in commit msgs I should probably add
    Wilmer van der Gaast 2007-12-09 Added /invite support for Jabber chatrooms (and fixed the argument order
Diffstat (limited to 'protocols/jabber/conference.c')
| -rw-r--r-- | protocols/jabber/conference.c | 66 | 
1 files changed, 53 insertions, 13 deletions
| diff --git a/protocols/jabber/conference.c b/protocols/jabber/conference.c index 074412ec..79fdd053 100644 --- a/protocols/jabber/conference.c +++ b/protocols/jabber/conference.c @@ -36,6 +36,8 @@ struct groupchat *jabber_chat_join( struct im_connection *ic, char *room, char *  	node = xt_new_node( "x", NULL, NULL );  	xt_add_attr( node, "xmlns", XMLNS_MUC );  	node = jabber_make_packet( "presence", NULL, roomjid, node ); +	if( password ) +		xt_add_child( node, xt_new_node( "password", password, NULL ) );  	jabber_cache_add( ic, node, jabber_chat_join_failed );  	if( !jabber_write_packet( ic, node ) ) @@ -72,17 +74,16 @@ static xt_status jabber_chat_join_failed( struct im_connection *ic, struct xt_no  	char *room;  	room = xt_find_attr( orig, "to" ); -	if( ( bud = jabber_buddy_by_jid( ic, room, 0 ) ) ) -		jabber_chat_free( jabber_chat_by_jid( ic, bud->bare_jid ) ); -	 +	bud = jabber_buddy_by_jid( ic, room, 0 );  	err = jabber_error_parse( xt_find_node( node->children, "error" ), XMLNS_STANZA_ERROR );  	if( err )  	{ -		imcb_error( ic, "Error joining groupchat %s: %s%s%s", -		            bud->bare_jid, err->code, err->text ? ": " : "", -		            err->text ? err->text : "" ); +		imcb_error( ic, "Error joining groupchat %s: %s%s%s", room, err->code, +		            err->text ? ": " : "", err->text ? err->text : "" );  		jabber_error_free( err );  	} +	if( bud ) +		jabber_chat_free( jabber_chat_by_jid( ic, bud->bare_jid ) );  	return XT_HANDLED;  } @@ -123,6 +124,8 @@ int jabber_chat_msg( struct groupchat *c, char *message, int flags )  	struct jabber_chat *jc = c->data;  	struct xt_node *node; +	jc->flags |= JCFLAG_MESSAGE_SENT; +	  	node = xt_new_node( "body", message, NULL );  	node = jabber_make_packet( "message", "groupchat", jc->name, node ); @@ -295,22 +298,59 @@ void jabber_chat_pkt_message( struct im_connection *ic, struct jabber_buddy *bud  {  	struct xt_node *subject = xt_find_node( node->children, "subject" );  	struct xt_node *body = xt_find_node( node->children, "body" ); -	struct groupchat *chat; +	struct groupchat *chat = bud ? jabber_chat_by_jid( ic, bud->bare_jid ) : NULL; +	struct jabber_chat *jc = chat ? chat->data : NULL;  	char *s; -	if( bud == NULL ) +	if( bud == NULL || ( jc && ~jc->flags & JCFLAG_MESSAGE_SENT && bud == jc->me ) )  	{ +		char *nick; +		 +		if( body == NULL || body->text_len == 0 ) +			/* Meh. Empty messages aren't very interesting, no matter +			   how much some servers love to send them. */ +			return; +		  		s = xt_find_attr( node, "from" ); /* pkt_message() already NULL-checked this one. */ -		if( strchr( s, '/' ) == NULL ) +		nick = strchr( s, '/' ); +		if( nick ) +		{ +			/* If this message included a resource/nick we don't know, +			   we might still know the groupchat itself. */ +			*nick = 0; +			chat = jabber_chat_by_jid( ic, s ); +			*nick = '/'; +			 +			nick ++; +		} +		else +		{ +			/* message.c uses the EXACT_JID option, so bud should +			   always be NULL here for bare JIDs. */ +			chat = jabber_chat_by_jid( ic, s ); +		} +		 +		if( nick == NULL ) +		{  			/* This is fine, the groupchat itself isn't in jd->buddies. */ -			imcb_log( ic, "System message from groupchat %s: %s", s, body? body->text : "NULL" ); +			if( chat ) +				imcb_chat_log( chat, "From conference server: %s", body->text ); +			else +				imcb_log( ic, "System message from unknown groupchat %s: %s", s, body->text ); +		}  		else -			/* This, however, isn't fine! */ -			imcb_log( ic, "Groupchat message from unknown participant %s: %s", s, body ? body->text : "NULL" ); +		{ +			/* This can happen too, at least when receiving a backlog when +			   just joining a channel. */ +			if( chat ) +				imcb_chat_log( chat, "Message from unknown participant %s: %s", nick, body->text ); +			else +				imcb_log( ic, "Groupchat message from unknown JID %s: %s", s, body->text ); +		}  		return;  	} -	else if( ( chat = jabber_chat_by_jid( ic, bud->bare_jid ) ) == NULL ) +	else if( chat == NULL )  	{  		/* How could this happen?? We could do kill( self, 11 )  		   now or just wait for the OS to do it. :-) */ | 
