view src/control.c @ 244:4e69e9b722ae noffle

[svn] * src/database.c,src/protocol.c,src/util.c,src/util.h: The latest IETF article format draft draft-ietf-usefor-article-06.txt recommends that Xref: references contain the FQDN of the server. We were using the host name without the domain. So split the routine used for obtaining the FQDN from protocol.c into util.c, and use it when adding Xrefs.
author bears
date Fri, 15 Mar 2002 10:50:33 +0000
parents ffb1848a39db
children 01755687c565
line wrap: on
line source

/*
  control.c

  $Id: control.c 342 2001-12-09 12:31:57Z bears $
*/

#if HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include "common.h"
#include "content.h"
#include "control.h"
#include "database.h"
#include "group.h"
#include "itemlist.h"
#include "log.h"
#include "outgoing.h"
#include "portable.h"

int
Ctrl_cancel( const char *msgId )
{
    ItemList *refs;
    const char *ref;
    Str server;
    Bool seen = FALSE;
    int res = CANCEL_OK;
    Bool removeFromDb = TRUE;

    /* See if in outgoing and zap if so. */
    if ( Out_find( msgId, server ) )
    {
	Out_remove( server, msgId );
	Log_inf( "'%s' cancelled from outgoing queue for '%s'.\n",
		 msgId, server );
	seen = TRUE;
    }

    if ( ! Db_contains( msgId ) )
    {
	Log_inf( "Cancel: '%s' not in database.", msgId );
	return seen ? CANCEL_OK : CANCEL_NO_SUCH_MSG;
    }

    /*
      Retrieve the Xrefs, remove from each group and then
      remove from the database.
     */
    refs = new_Itl( Db_xref( msgId ), " " );
    for( ref = Itl_first( refs ); ref != NULL; ref = Itl_next( refs ) )
    {
	Str grp;
	int no;

	if ( sscanf( ref, "%s:%d", grp, &no ) != 2 )
	    break;
	
	if ( Grp_exists( grp ) )
	{
	    Cont_read( grp );
	    Cont_delete( no );
            /*
             * If we don't manage to remove the overview, leave the message
             * in the main database to avoid confusion. Yes, the message
             * will not be cancelled properly for this group but we don't
             * signal this to the calling routine.
             */
	    if ( Cont_write() )
                Log_dbg( LOG_DBG_CONTROL,
                         "Removed '%s' from group '%s'.",
                         msgId, grp );
            else
                removeFromDb = FALSE;

	    if ( ! Grp_local( grp ) && ! seen )
		res = CANCEL_NEEDS_MSG;
	}
	else
	{
	    Log_inf( "Group '%s' in Xref for '%s' not found.", grp, msgId );
	}
    }
    del_Itl( refs );
    if ( removeFromDb )
        Db_delete( msgId );
    Log_inf( "Message '%s' cancelled.", msgId );
    return res;
}