tag verbose output when channel links two verbose stores
otherwise it's pure guesswork to assign the output to particular stores.
This commit is contained in:
		
							parent
							
								
									27fa63a577
								
							
						
					
					
						commit
						92b892d247
					
				
					 4 changed files with 25 additions and 12 deletions
				
			
		|  | @ -83,6 +83,7 @@ struct imap_cmd; | ||||||
| 
 | 
 | ||||||
| typedef struct imap_store { | typedef struct imap_store { | ||||||
| 	store_t gen; | 	store_t gen; | ||||||
|  | 	const char *label; /* foreign */ | ||||||
| 	const char *prefix; | 	const char *prefix; | ||||||
| 	int ref_count; | 	int ref_count; | ||||||
| 	/* trash folder's existence is not confirmed yet */ | 	/* trash folder's existence is not confirmed yet */ | ||||||
|  | @ -254,9 +255,9 @@ send_imap_cmd( imap_store_t *ctx, struct imap_cmd *cmd ) | ||||||
| 		if (ctx->num_in_progress) | 		if (ctx->num_in_progress) | ||||||
| 			printf( "(%d in progress) ", ctx->num_in_progress ); | 			printf( "(%d in progress) ", ctx->num_in_progress ); | ||||||
| 		if (memcmp( cmd->cmd, "LOGIN", 5 )) | 		if (memcmp( cmd->cmd, "LOGIN", 5 )) | ||||||
| 			printf( ">>> %s", buf ); | 			printf( "%s>>> %s", ctx->label, buf ); | ||||||
| 		else | 		else | ||||||
| 			printf( ">>> %d LOGIN <user> <pass>\n", cmd->tag ); | 			printf( "%s>>> %d LOGIN <user> <pass>\n", ctx->label, cmd->tag ); | ||||||
| 		fflush( stdout ); | 		fflush( stdout ); | ||||||
| 	} | 	} | ||||||
| 	if (socket_write( &ctx->conn, buf, bufl, KeepOwn ) < 0) | 	if (socket_write( &ctx->conn, buf, bufl, KeepOwn ) < 0) | ||||||
|  | @ -692,9 +693,9 @@ parse_imap_list( imap_store_t *ctx, char **sp, parse_list_state_t *sts ) | ||||||
| 				goto postpone; | 				goto postpone; | ||||||
| 
 | 
 | ||||||
| 			if (DFlags & XVERBOSE) { | 			if (DFlags & XVERBOSE) { | ||||||
| 				puts( "=========" ); | 				printf( "%s=========\n", ctx->label ); | ||||||
| 				fwrite( cur->val, cur->len, 1, stdout ); | 				fwrite( cur->val, cur->len, 1, stdout ); | ||||||
| 				puts( "=========" ); | 				printf( "%s=========\n", ctx->label ); | ||||||
| 				fflush( stdout ); | 				fflush( stdout ); | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
|  | @ -702,7 +703,7 @@ parse_imap_list( imap_store_t *ctx, char **sp, parse_list_state_t *sts ) | ||||||
| 			if (!(s = socket_read_line( &ctx->conn ))) | 			if (!(s = socket_read_line( &ctx->conn ))) | ||||||
| 				goto postpone; | 				goto postpone; | ||||||
| 			if (DFlags & VERBOSE) { | 			if (DFlags & VERBOSE) { | ||||||
| 				puts( s ); | 				printf( "%s%s\n", ctx->label, s ); | ||||||
| 				fflush( stdout ); | 				fflush( stdout ); | ||||||
| 			} | 			} | ||||||
| 		} else if (*s == '"') { | 		} else if (*s == '"') { | ||||||
|  | @ -1167,7 +1168,7 @@ imap_socket_read( void *aux ) | ||||||
| 		if (!(cmd = socket_read_line( &ctx->conn ))) | 		if (!(cmd = socket_read_line( &ctx->conn ))) | ||||||
| 			return; | 			return; | ||||||
| 		if (DFlags & VERBOSE) { | 		if (DFlags & VERBOSE) { | ||||||
| 			puts( cmd ); | 			printf( "%s%s\n", ctx->label, cmd ); | ||||||
| 			fflush( stdout ); | 			fflush( stdout ); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -1425,7 +1426,7 @@ do_cram_auth( imap_store_t *ctx, struct imap_cmd *cmdp, const char *prompt ) | ||||||
| 	cram( prompt, srvc->user, srvc->pass, &resp, &l ); | 	cram( prompt, srvc->user, srvc->pass, &resp, &l ); | ||||||
| 
 | 
 | ||||||
| 	if (DFlags & VERBOSE) { | 	if (DFlags & VERBOSE) { | ||||||
| 		printf( ">+> %s\n", resp ); | 		printf( "%s>+> %s\n", ctx->label, resp ); | ||||||
| 		fflush( stdout ); | 		fflush( stdout ); | ||||||
| 	} | 	} | ||||||
| 	if (socket_write( &ctx->conn, resp, l, GiveOwn ) < 0) | 	if (socket_write( &ctx->conn, resp, l, GiveOwn ) < 0) | ||||||
|  | @ -1457,7 +1458,7 @@ static void imap_open_store_ssl_bail( imap_store_t * ); | ||||||
| static void imap_open_store_bail( imap_store_t * ); | static void imap_open_store_bail( imap_store_t * ); | ||||||
| 
 | 
 | ||||||
| static void | static void | ||||||
| imap_open_store( store_conf_t *conf, | imap_open_store( store_conf_t *conf, const char *label, | ||||||
|                  void (*cb)( store_t *srv, void *aux ), void *aux ) |                  void (*cb)( store_t *srv, void *aux ), void *aux ) | ||||||
| { | { | ||||||
| 	imap_store_conf_t *cfg = (imap_store_conf_t *)conf; | 	imap_store_conf_t *cfg = (imap_store_conf_t *)conf; | ||||||
|  | @ -1468,12 +1469,14 @@ imap_open_store( store_conf_t *conf, | ||||||
| 	for (ctxp = &unowned; (ctx = (imap_store_t *)*ctxp); ctxp = &ctx->gen.next) | 	for (ctxp = &unowned; (ctx = (imap_store_t *)*ctxp); ctxp = &ctx->gen.next) | ||||||
| 		if (ctx->gen.conf == conf) { | 		if (ctx->gen.conf == conf) { | ||||||
| 			*ctxp = ctx->gen.next; | 			*ctxp = ctx->gen.next; | ||||||
|  | 			ctx->label = label; | ||||||
| 			cb( &ctx->gen, aux ); | 			cb( &ctx->gen, aux ); | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| 	for (ctxp = &unowned; (ctx = (imap_store_t *)*ctxp); ctxp = &ctx->gen.next) | 	for (ctxp = &unowned; (ctx = (imap_store_t *)*ctxp); ctxp = &ctx->gen.next) | ||||||
| 		if (((imap_store_conf_t *)ctx->gen.conf)->server == srvc) { | 		if (((imap_store_conf_t *)ctx->gen.conf)->server == srvc) { | ||||||
| 			*ctxp = ctx->gen.next; | 			*ctxp = ctx->gen.next; | ||||||
|  | 			ctx->label = label; | ||||||
| 			/* One could ping the server here, but given that the idle timeout
 | 			/* One could ping the server here, but given that the idle timeout
 | ||||||
| 			 * is at least 30 minutes, this sounds pretty pointless. */ | 			 * is at least 30 minutes, this sounds pretty pointless. */ | ||||||
| 			free_string_list( ctx->gen.boxes ); | 			free_string_list( ctx->gen.boxes ); | ||||||
|  | @ -1491,6 +1494,7 @@ imap_open_store( store_conf_t *conf, | ||||||
| 
 | 
 | ||||||
| 	ctx = nfcalloc( sizeof(*ctx) ); | 	ctx = nfcalloc( sizeof(*ctx) ); | ||||||
| 	ctx->gen.conf = conf; | 	ctx->gen.conf = conf; | ||||||
|  | 	ctx->label = label; | ||||||
| 	ctx->ref_count = 1; | 	ctx->ref_count = 1; | ||||||
| 	ctx->callbacks.imap_open = cb; | 	ctx->callbacks.imap_open = cb; | ||||||
| 	ctx->callback_aux = aux; | 	ctx->callback_aux = aux; | ||||||
|  | @ -2355,7 +2359,7 @@ imap_parse_store( conffile_t *cfg, store_conf_t **storep ) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| struct driver imap_driver = { | struct driver imap_driver = { | ||||||
| 	DRV_CRLF, | 	DRV_CRLF | DRV_VERBOSE, | ||||||
| 	imap_parse_store, | 	imap_parse_store, | ||||||
| 	imap_cleanup, | 	imap_cleanup, | ||||||
| 	imap_open_store, | 	imap_open_store, | ||||||
|  |  | ||||||
|  | @ -122,7 +122,7 @@ maildir_join_path( const char *prefix, const char *box ) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | static void | ||||||
| maildir_open_store( store_conf_t *conf, | maildir_open_store( store_conf_t *conf, const char *label ATTR_UNUSED, | ||||||
|                     void (*cb)( store_t *ctx, void *aux ), void *aux ) |                     void (*cb)( store_t *ctx, void *aux ), void *aux ) | ||||||
| { | { | ||||||
| 	maildir_store_t *ctx; | 	maildir_store_t *ctx; | ||||||
|  |  | ||||||
|  | @ -268,6 +268,10 @@ typedef struct { | ||||||
|    and as CRLF is the canonical format, we convert. |    and as CRLF is the canonical format, we convert. | ||||||
| */ | */ | ||||||
| #define DRV_CRLF        1 | #define DRV_CRLF        1 | ||||||
|  | /*
 | ||||||
|  |    This flag says that the driver will act upon (DFlags & VERBOSE). | ||||||
|  | */ | ||||||
|  | #define DRV_VERBOSE     2 | ||||||
| 
 | 
 | ||||||
| #define LIST_PATH       1 | #define LIST_PATH       1 | ||||||
| #define LIST_INBOX      2 | #define LIST_INBOX      2 | ||||||
|  | @ -283,7 +287,7 @@ struct driver { | ||||||
| 
 | 
 | ||||||
| 	/* Open a store with the given configuration. This may recycle existing
 | 	/* Open a store with the given configuration. This may recycle existing
 | ||||||
| 	 * server connections. Upon failure, a null store is passed to the callback. */ | 	 * server connections. Upon failure, a null store is passed to the callback. */ | ||||||
| 	void (*open_store)( store_conf_t *conf, | 	void (*open_store)( store_conf_t *conf, const char *label, | ||||||
| 	                    void (*cb)( store_t *ctx, void *aux ), void *aux ); | 	                    void (*cb)( store_t *ctx, void *aux ), void *aux ); | ||||||
| 
 | 
 | ||||||
| 	/* Mark the store as available for recycling. Server connection may be kept alive. */ | 	/* Mark the store as available for recycling. Server connection may be kept alive. */ | ||||||
|  |  | ||||||
|  | @ -519,6 +519,7 @@ sync_chans( main_vars_t *mvars, int ent ) | ||||||
| 	channel_conf_t *chan; | 	channel_conf_t *chan; | ||||||
| 	string_list_t *mbox, *sbox, **mboxp, **sboxp; | 	string_list_t *mbox, *sbox, **mboxp, **sboxp; | ||||||
| 	char *channame, *boxp, *nboxp; | 	char *channame, *boxp, *nboxp; | ||||||
|  | 	const char *labels[2]; | ||||||
| 	int t; | 	int t; | ||||||
| 
 | 
 | ||||||
| 	if (!mvars->cben) | 	if (!mvars->cben) | ||||||
|  | @ -585,10 +586,14 @@ sync_chans( main_vars_t *mvars, int ent ) | ||||||
| 		mvars->state[M] = mvars->state[S] = ST_FRESH; | 		mvars->state[M] = mvars->state[S] = ST_FRESH; | ||||||
| 		info( "Channel %s\n", mvars->chan->name ); | 		info( "Channel %s\n", mvars->chan->name ); | ||||||
| 		mvars->skip = mvars->cben = 0; | 		mvars->skip = mvars->cben = 0; | ||||||
|  | 		if (mvars->chan->stores[M]->driver->flags & mvars->chan->stores[S]->driver->flags & DRV_VERBOSE) | ||||||
|  | 			labels[M] = "M: ", labels[S] = "S: "; | ||||||
|  | 		else | ||||||
|  | 			labels[M] = labels[S] = ""; | ||||||
| 		for (t = 0; t < 2; t++) { | 		for (t = 0; t < 2; t++) { | ||||||
| 			info( "Opening %s %s...\n", str_ms[t], mvars->chan->stores[t]->name ); | 			info( "Opening %s %s...\n", str_ms[t], mvars->chan->stores[t]->name ); | ||||||
| 			mvars->drv[t] = mvars->chan->stores[t]->driver; | 			mvars->drv[t] = mvars->chan->stores[t]->driver; | ||||||
| 			mvars->drv[t]->open_store( mvars->chan->stores[t], store_opened, AUX ); | 			mvars->drv[t]->open_store( mvars->chan->stores[t], labels[t], store_opened, AUX ); | ||||||
| 			if (mvars->skip) | 			if (mvars->skip) | ||||||
| 				break; | 				break; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue