浏览代码

don't make bogus attempts at enabling compression

recycling server connections skips everything up to setting up the
prefix (Path/NAMESPACE). "everything" should obviously include enabling
compression, as that must be done at most once per connection.
Oswald Buddenhagen 10 年之前
父节点
当前提交
a3b131b6e8
共有 1 个文件被更改,包括 32 次插入32 次删除
  1. 32 32
      src/drv_imap.c

+ 32 - 32
src/drv_imap.c

@@ -1522,13 +1522,13 @@ static void imap_open_store_authenticate_p3( imap_store_t *, struct imap_cmd *,
 #endif
 static void imap_open_store_authenticate2( imap_store_t * );
 static void imap_open_store_authenticate2_p2( imap_store_t *, struct imap_cmd *, int );
-static void imap_open_store_namespace( imap_store_t * );
-static void imap_open_store_namespace_p2( imap_store_t *, struct imap_cmd *, int );
-static void imap_open_store_namespace2( imap_store_t * );
 static void imap_open_store_compress( imap_store_t * );
 #ifdef HAVE_LIBZ
 static void imap_open_store_compress_p2( imap_store_t *, struct imap_cmd *, int );
 #endif
+static void imap_open_store_namespace( imap_store_t * );
+static void imap_open_store_namespace_p2( imap_store_t *, struct imap_cmd *, int );
+static void imap_open_store_namespace2( imap_store_t * );
 static void imap_open_store_finalize( imap_store_t * );
 #ifdef HAVE_LIBSSL
 static void imap_open_store_ssl_bail( imap_store_t * );
@@ -1668,7 +1668,7 @@ imap_open_store_authenticate( imap_store_t *ctx )
 			return;
 		}
 #endif
-		imap_open_store_namespace( ctx );
+		imap_open_store_compress( ctx );
 	}
 }
 
@@ -2045,8 +2045,34 @@ imap_open_store_authenticate2_p2( imap_store_t *ctx, struct imap_cmd *cmd ATTR_U
 	if (response == RESP_NO)
 		imap_open_store_bail( ctx, FAIL_FINAL );
 	else if (response == RESP_OK)
+		imap_open_store_compress( ctx );
+}
+
+static void
+imap_open_store_compress( imap_store_t *ctx )
+{
+#ifdef HAVE_LIBZ
+	if (CAP(COMPRESS_DEFLATE)) {
+		imap_exec( ctx, 0, imap_open_store_compress_p2, "COMPRESS DEFLATE" );
+		return;
+	}
+#endif
+	imap_open_store_namespace( ctx );
+}
+
+#ifdef HAVE_LIBZ
+static void
+imap_open_store_compress_p2( imap_store_t *ctx, struct imap_cmd *cmd ATTR_UNUSED, int response )
+{
+	if (response == RESP_NO) {
+		/* We already reported an error, but it's not fatal to us. */
+		imap_open_store_namespace( ctx );
+	} else if (response == RESP_OK) {
+		socket_start_deflate( &ctx->conn );
 		imap_open_store_namespace( ctx );
+	}
 }
+#endif
 
 static void
 imap_open_store_namespace( imap_store_t *ctx )
@@ -2063,7 +2089,7 @@ imap_open_store_namespace( imap_store_t *ctx )
 			imap_open_store_namespace2( ctx );
 		return;
 	}
-	imap_open_store_compress( ctx );
+	imap_open_store_finalize( ctx );
 }
 
 static void
@@ -2093,38 +2119,12 @@ imap_open_store_namespace2( imap_store_t *ctx )
 			ctx->prefix = nsp_1st_ns->val;
 		if (!ctx->delimiter)
 			ctx->delimiter = nfstrdup( nsp_1st_dl->val );
-		imap_open_store_compress( ctx );
+		imap_open_store_finalize( ctx );
 	} else {
 		imap_open_store_bail( ctx, FAIL_FINAL );
 	}
 }
 
-static void
-imap_open_store_compress( imap_store_t *ctx )
-{
-#ifdef HAVE_LIBZ
-	if (CAP(COMPRESS_DEFLATE)) { /* XXX make that configurable */
-		imap_exec( ctx, 0, imap_open_store_compress_p2, "COMPRESS DEFLATE" );
-		return;
-	}
-#endif
-	imap_open_store_finalize( ctx );
-}
-
-#ifdef HAVE_LIBZ
-static void
-imap_open_store_compress_p2( imap_store_t *ctx, struct imap_cmd *cmd ATTR_UNUSED, int response )
-{
-	if (response == RESP_NO) {
-		/* We already reported an error, but it's not fatal to us. */
-		imap_open_store_finalize( ctx );
-	} else if (response == RESP_OK) {
-		socket_start_deflate( &ctx->conn );
-		imap_open_store_finalize( ctx );
-	}
-}
-#endif
-
 static void
 imap_open_store_finalize( imap_store_t *ctx )
 {