diff options
| author | Wilmer van der Gaast <wilmer@gaast.net> | 2008-01-20 11:15:40 +0000 | 
|---|---|---|
| committer | Wilmer van der Gaast <wilmer@gaast.net> | 2008-01-20 11:15:40 +0000 | 
| commit | a882d6c1eec55fb9a00ce61acd6d776884d0c84a (patch) | |
| tree | b12ae5a1ffe85c155d17c4ca4bcee4e965d4cb8a /protocols/jabber | |
| parent | 31e584652a5543b87e0953525a742fb067c28e6f (diff) | |
The Jabber module now uses imcb_chat_log() instead of imcb_log() where
possible.
Diffstat (limited to 'protocols/jabber')
| -rw-r--r-- | protocols/jabber/conference.c | 46 | 
1 files changed, 41 insertions, 5 deletions
| diff --git a/protocols/jabber/conference.c b/protocols/jabber/conference.c index 466cb323..515194fc 100644 --- a/protocols/jabber/conference.c +++ b/protocols/jabber/conference.c @@ -294,18 +294,54 @@ 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 = NULL;  	char *s;  	if( bud == NULL )  	{ +		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;  	} | 
