예제 #1
0
파일: iq.c 프로젝트: shiplu/bitlbee
static xt_status jabber_iq_version_response( struct im_connection *ic,
	struct xt_node *node, struct xt_node *orig )
{
	struct xt_node *query;
	GString *rets;
	char *s;
	char *ret[2] = {};
	bee_user_t *bu;
	struct jabber_buddy *bud = NULL;
	
	if( ( s = xt_find_attr( node, "from" ) ) &&
	    ( bud = jabber_buddy_by_jid( ic, s, 0 ) ) &&
	    ( query = xt_find_node( node->children, "query" ) ) &&
	    ( bu = bee_user_by_handle( ic->bee, ic, bud->bare_jid ) ) )
	{
		rets = g_string_new( "Resource " );
		g_string_append( rets, bud->resource );
	}
	else
		return XT_HANDLED;
	
	for( query = query->children; query; query = query->next )
		if( query->text_len > 0 )
			g_string_append_printf( rets, " %s: %s,", query->name, query->text );
	
	g_string_truncate( rets, rets->len - 1 );
	ret[0] = rets->str;
	imcb_buddy_action_response( bu, "VERSION", ret, NULL );
	g_string_free( rets, TRUE );
	
	return XT_HANDLED;
}
예제 #2
0
static void torchat_parse_latency(struct im_connection *ic, char *address, char* line)
{
	bee_user_t *bu = bee_user_by_handle(ic->bee, ic, address);
	int size = 1;
	char** argv = g_realloc_n(NULL, size, sizeof(char*));

	char **pieces, **pieceptr, *piece;

	pieceptr = pieces = g_strsplit(line, " ", 0);

	while ((piece = *pieceptr++) && strlen(piece)) {
		argv = g_realloc_n(argv, ++size, sizeof(char*));
		argv[size - 2] = piece;
	}

	argv[size - 1] = 0;

	imcb_buddy_action_response(bu, "PING", argv, NULL);

	g_free(argv);
	g_strfreev(pieces);
}