Пример #1
0
int msn_sb_write( struct msn_switchboard *sb, const char *fmt, ... )
{
    va_list params;
    char *out;
    size_t len;
    int st;

    va_start( params, fmt );
    out = g_strdup_vprintf( fmt, params );
    va_end( params );

    if( getenv( "BITLBEE_DEBUG" ) )
        fprintf( stderr, "->SB%d:%s\n", sb->fd, out );

    len = strlen( out );
    st = write( sb->fd, out, len );
    g_free( out );
    if( st != len )
    {
        msn_sb_destroy( sb );
        return 0;
    }

    return 1;
}
Пример #2
0
static void msn_add_deny( struct im_connection *ic, char *who )
{
	struct msn_switchboard *sb;
	
	msn_buddy_list_add( ic, MSN_BUDDY_BL, who, who, NULL );
	
	/* If there's still a conversation with this person, close it. */
	if( ( sb = msn_sb_by_handle( ic, who ) ) )
	{
		msn_sb_destroy( sb );
	}
}
Пример #3
0
static void msn_logout( struct im_connection *ic )
{
	struct msn_data *md = ic->proto_data;
	GSList *l;
	int i;
	
	if( md )
	{
		/** Disabling MSN ft support for now.
		while( md->filetransfers ) {
			imcb_file_canceled( md->filetransfers->data, "Closing connection" );
		}
		*/
		
		msn_ns_close( md->ns );
		
		while( md->switchboards )
			msn_sb_destroy( md->switchboards->data );
		
		msn_msgq_purge( ic, &md->msgq );
		msn_soapq_flush( ic, FALSE );
		
		for( i = 0; i < sizeof( md->tokens ) / sizeof( md->tokens[0] ); i ++ )
			g_free( md->tokens[i] );
		g_free( md->lock_key );
		g_free( md->pp_policy );
		g_free( md->uuid );
		
		while( md->groups )
		{
			struct msn_group *mg = md->groups->data;
			g_free( mg->id );
			g_free( mg->name );
			g_free( mg );
			md->groups = g_slist_remove( md->groups, mg );
		}
		
		g_free( md->profile_rid );
		
		if( md->domaintree )
			g_tree_destroy( md->domaintree );
		md->domaintree = NULL;
		
		while( md->grpq )
		{
			struct msn_groupadd *ga = md->grpq->data;
			g_free( ga->group );
			g_free( ga->who );
			g_free( ga );
			md->grpq = g_slist_remove( md->grpq, ga );
		}
		
		g_free( md );
	}
	
	for( l = ic->permit; l; l = l->next )
		g_free( l->data );
	g_slist_free( ic->permit );
	
	for( l = ic->deny; l; l = l->next )
		g_free( l->data );
	g_slist_free( ic->deny );
	
	msn_connections = g_slist_remove( msn_connections, ic );
}