Merge branch 'isync_1_2_branch'
This commit is contained in:
commit
a041766140
|
@ -41,7 +41,6 @@ typedef struct store_conf {
|
||||||
const char *trash;
|
const char *trash;
|
||||||
uint max_size; /* off_t is overkill */
|
uint max_size; /* off_t is overkill */
|
||||||
char trash_remote_new, trash_only_new;
|
char trash_remote_new, trash_only_new;
|
||||||
char failed;
|
|
||||||
} store_conf_t;
|
} store_conf_t;
|
||||||
|
|
||||||
/* For message->flags */
|
/* For message->flags */
|
||||||
|
@ -249,6 +248,9 @@ struct driver {
|
||||||
|
|
||||||
/* Get approximate amount of memory occupied by the driver. */
|
/* Get approximate amount of memory occupied by the driver. */
|
||||||
int (*memory_usage)( store_t *ctx );
|
int (*memory_usage)( store_t *ctx );
|
||||||
|
|
||||||
|
/* Get the FAIL_* state of the driver. */
|
||||||
|
int (*fail_state)( store_conf_t *conf );
|
||||||
};
|
};
|
||||||
|
|
||||||
void free_generic_messages( message_t * );
|
void free_generic_messages( message_t * );
|
||||||
|
|
|
@ -57,6 +57,7 @@ typedef struct imap_server_conf {
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef HAVE_LIBSSL
|
||||||
char ssl_type;
|
char ssl_type;
|
||||||
#endif
|
#endif
|
||||||
|
char failed;
|
||||||
} imap_server_conf_t;
|
} imap_server_conf_t;
|
||||||
|
|
||||||
typedef struct imap_store_conf {
|
typedef struct imap_store_conf {
|
||||||
|
@ -2166,7 +2167,7 @@ imap_open_store_bail( imap_store_t *ctx, int failed )
|
||||||
{
|
{
|
||||||
void (*cb)( store_t *srv, void *aux ) = ctx->callbacks.imap_open;
|
void (*cb)( store_t *srv, void *aux ) = ctx->callbacks.imap_open;
|
||||||
void *aux = ctx->callback_aux;
|
void *aux = ctx->callback_aux;
|
||||||
ctx->gen.conf->failed = failed;
|
((imap_store_conf_t *)ctx->gen.conf)->server->failed = failed;
|
||||||
imap_cancel_store( &ctx->gen );
|
imap_cancel_store( &ctx->gen );
|
||||||
cb( 0, aux );
|
cb( 0, aux );
|
||||||
}
|
}
|
||||||
|
@ -2668,6 +2669,14 @@ imap_memory_usage( store_t *gctx )
|
||||||
return ctx->buffer_mem + ctx->conn.buffer_mem;
|
return ctx->buffer_mem + ctx->conn.buffer_mem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************* imap_fail_state *******************/
|
||||||
|
|
||||||
|
static int
|
||||||
|
imap_fail_state( store_conf_t *gconf )
|
||||||
|
{
|
||||||
|
return ((imap_store_conf_t *)gconf)->server->failed;
|
||||||
|
}
|
||||||
|
|
||||||
/******************* imap_parse_store *******************/
|
/******************* imap_parse_store *******************/
|
||||||
|
|
||||||
imap_server_conf_t *servers, **serverapp = &servers;
|
imap_server_conf_t *servers, **serverapp = &servers;
|
||||||
|
@ -2950,4 +2959,5 @@ struct driver imap_driver = {
|
||||||
imap_cancel_cmds,
|
imap_cancel_cmds,
|
||||||
imap_commit_cmds,
|
imap_commit_cmds,
|
||||||
imap_memory_usage,
|
imap_memory_usage,
|
||||||
|
imap_fail_state,
|
||||||
};
|
};
|
||||||
|
|
|
@ -57,6 +57,7 @@ typedef struct maildir_store_conf {
|
||||||
int alt_map;
|
int alt_map;
|
||||||
#endif /* USE_DB */
|
#endif /* USE_DB */
|
||||||
char info_delimiter;
|
char info_delimiter;
|
||||||
|
char failed;
|
||||||
char *info_prefix, *info_stop; /* precalculated from info_delimiter */
|
char *info_prefix, *info_stop; /* precalculated from info_delimiter */
|
||||||
} maildir_store_conf_t;
|
} maildir_store_conf_t;
|
||||||
|
|
||||||
|
@ -141,12 +142,12 @@ maildir_validate_path( store_conf_t *conf )
|
||||||
|
|
||||||
if (!conf->path) {
|
if (!conf->path) {
|
||||||
error( "Maildir error: store '%s' has no Path\n", conf->name );
|
error( "Maildir error: store '%s' has no Path\n", conf->name );
|
||||||
conf->failed = FAIL_FINAL;
|
((maildir_store_conf_t *)conf)->failed = FAIL_FINAL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (stat( conf->path, &st ) || !S_ISDIR(st.st_mode)) {
|
if (stat( conf->path, &st ) || !S_ISDIR(st.st_mode)) {
|
||||||
error( "Maildir error: cannot open store '%s'\n", conf->path );
|
error( "Maildir error: cannot open store '%s'\n", conf->path );
|
||||||
conf->failed = FAIL_FINAL;
|
((maildir_store_conf_t *)conf)->failed = FAIL_FINAL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -432,7 +433,7 @@ maildir_validate( const char *box, int create, maildir_store_t *ctx )
|
||||||
return DRV_BOX_BAD;
|
return DRV_BOX_BAD;
|
||||||
if (make_box_dir( buf, bl )) {
|
if (make_box_dir( buf, bl )) {
|
||||||
sys_error( "Maildir error: cannot create mailbox '%s'", box );
|
sys_error( "Maildir error: cannot create mailbox '%s'", box );
|
||||||
ctx->gen.conf->failed = FAIL_FINAL;
|
((maildir_store_conf_t *)ctx->gen.conf)->failed = FAIL_FINAL;
|
||||||
maildir_invoke_bad_callback( &ctx->gen );
|
maildir_invoke_bad_callback( &ctx->gen );
|
||||||
return DRV_CANCELED;
|
return DRV_CANCELED;
|
||||||
}
|
}
|
||||||
|
@ -1630,6 +1631,12 @@ maildir_memory_usage( store_t *gctx ATTR_UNUSED )
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
maildir_fail_state( store_conf_t *gconf )
|
||||||
|
{
|
||||||
|
return ((maildir_store_conf_t *)gconf)->failed;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
maildir_parse_store( conffile_t *cfg, store_conf_t **storep )
|
maildir_parse_store( conffile_t *cfg, store_conf_t **storep )
|
||||||
{
|
{
|
||||||
|
@ -1698,4 +1705,5 @@ struct driver maildir_driver = {
|
||||||
maildir_cancel_cmds,
|
maildir_cancel_cmds,
|
||||||
maildir_commit_cmds,
|
maildir_commit_cmds,
|
||||||
maildir_memory_usage,
|
maildir_memory_usage,
|
||||||
|
maildir_fail_state,
|
||||||
};
|
};
|
||||||
|
|
10
src/main.c
10
src/main.c
|
@ -448,7 +448,7 @@ main( int argc, char **argv )
|
||||||
else if (!strcmp( opt, "-net" ))
|
else if (!strcmp( opt, "-net" ))
|
||||||
op = VERBOSE | DEBUG_NET;
|
op = VERBOSE | DEBUG_NET;
|
||||||
else if (!strcmp( opt, "-net-all" ))
|
else if (!strcmp( opt, "-net-all" ))
|
||||||
op = VERBOSE | DEBUG_NET_ALL;
|
op = VERBOSE | DEBUG_NET | DEBUG_NET_ALL;
|
||||||
else if (!strcmp( opt, "-sync" ))
|
else if (!strcmp( opt, "-sync" ))
|
||||||
op = VERBOSE | DEBUG_SYNC;
|
op = VERBOSE | DEBUG_SYNC;
|
||||||
else
|
else
|
||||||
|
@ -637,7 +637,7 @@ main( int argc, char **argv )
|
||||||
op |= DEBUG_NET | VERBOSE;
|
op |= DEBUG_NET | VERBOSE;
|
||||||
break;
|
break;
|
||||||
case 'N':
|
case 'N':
|
||||||
op |= DEBUG_NET_ALL | VERBOSE;
|
op |= DEBUG_NET | DEBUG_NET_ALL | VERBOSE;
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
op |= DEBUG_SYNC | VERBOSE;
|
op |= DEBUG_SYNC | VERBOSE;
|
||||||
|
@ -757,8 +757,10 @@ sync_chans( main_vars_t *mvars, int ent )
|
||||||
info( "Channel %s\n", mvars->chan->name );
|
info( "Channel %s\n", mvars->chan->name );
|
||||||
mvars->skip = mvars->cben = 0;
|
mvars->skip = mvars->cben = 0;
|
||||||
for (t = 0; t < 2; t++) {
|
for (t = 0; t < 2; t++) {
|
||||||
if (mvars->chan->stores[t]->failed != FAIL_TEMP) {
|
int st = mvars->chan->stores[t]->driver->fail_state( mvars->chan->stores[t] );
|
||||||
info( "Skipping due to failed %s store %s.\n", str_ms[t], mvars->chan->stores[t]->name );
|
if (st != FAIL_TEMP) {
|
||||||
|
info( "Skipping due to %sfailed %s store %s.\n",
|
||||||
|
(st == FAIL_WAIT) ? "temporarily " : "", str_ms[t], mvars->chan->stores[t]->name );
|
||||||
mvars->skip = 1;
|
mvars->skip = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user