static const char *log_bytes_out(request_rec *r, char *a) { logio_config_t *cf = ap_get_module_config(r->connection->conn_config, &logio_module); return apr_off_t_toa(r->pool, cf->bytes_out); }
static const char *log_bytes_sent(request_rec *r, char *a) { if (!r->sent_bodyct || !r->bytes_sent) { return "0"; } else { return apr_off_t_toa(r->pool, r->bytes_sent); } }
/** * Initialisation of filter to handle a kept body on subrequests. * * If a body is to be reinserted into a subrequest, any chunking will have * been removed from the body during storage. We need to change the request * from Transfer-Encoding: chunked to an explicit Content-Length. */ static int kept_body_filter_init(ap_filter_t *f) { apr_off_t length = 0; request_rec *r = f->r; apr_bucket_brigade *kept_body = r->kept_body; if (kept_body) { apr_table_unset(r->headers_in, "Transfer-Encoding"); apr_brigade_length(kept_body, 1, &length); apr_table_setn(r->headers_in, "Content-Length", apr_off_t_toa(r->pool, length)); } return OK; }
/* Install the pristine text described by BATON into the pristine store of * SDB. If it is already stored then just delete the new file * BATON->tempfile_abspath. * * This function expects to be executed inside a SQLite txn that has already * acquired a 'RESERVED' lock. * * Implements 'notes/wc-ng/pristine-store' section A-3(a). */ static svn_error_t * pristine_install_txn(svn_sqlite__db_t *sdb, /* The path to the source file that is to be moved into place. */ svn_stream_t *install_stream, /* The target path for the file (within the pristine store). */ const char *pristine_abspath, /* The pristine text's SHA-1 checksum. */ const svn_checksum_t *sha1_checksum, /* The pristine text's MD-5 checksum. */ const svn_checksum_t *md5_checksum, apr_pool_t *scratch_pool) { svn_sqlite__stmt_t *stmt; svn_boolean_t have_row; /* If this pristine text is already present in the store, just keep it: * delete the new one and return. */ SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, STMT_SELECT_PRISTINE)); SVN_ERR(svn_sqlite__bind_checksum(stmt, 1, sha1_checksum, scratch_pool)); SVN_ERR(svn_sqlite__step(&have_row, stmt)); SVN_ERR(svn_sqlite__reset(stmt)); if (have_row) { #ifdef SVN_DEBUG /* Consistency checks. Verify both files exist and match. * ### We could check much more. */ { apr_finfo_t finfo1, finfo2; SVN_ERR(svn_stream__install_get_info(&finfo1, install_stream, APR_FINFO_SIZE, scratch_pool)); SVN_ERR(svn_io_stat(&finfo2, pristine_abspath, APR_FINFO_SIZE, scratch_pool)); if (finfo1.size != finfo2.size) { return svn_error_createf( SVN_ERR_WC_CORRUPT_TEXT_BASE, NULL, _("New pristine text '%s' has different size: %s versus %s"), svn_checksum_to_cstring_display(sha1_checksum, scratch_pool), apr_off_t_toa(scratch_pool, finfo1.size), apr_off_t_toa(scratch_pool, finfo2.size)); } } #endif /* Remove the temp file: it's already there */ SVN_ERR(svn_stream__install_delete(install_stream, scratch_pool)); return SVN_NO_ERROR; } /* Move the file to its target location. (If it is already there, it is * an orphan file and it doesn't matter if we overwrite it.) */ { apr_finfo_t finfo; SVN_ERR(svn_stream__install_get_info(&finfo, install_stream, APR_FINFO_SIZE, scratch_pool)); SVN_ERR(svn_stream__install_stream(install_stream, pristine_abspath, TRUE, scratch_pool)); SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, STMT_INSERT_PRISTINE)); SVN_ERR(svn_sqlite__bind_checksum(stmt, 1, sha1_checksum, scratch_pool)); SVN_ERR(svn_sqlite__bind_checksum(stmt, 2, md5_checksum, scratch_pool)); SVN_ERR(svn_sqlite__bind_int64(stmt, 3, finfo.size)); SVN_ERR(svn_sqlite__insert(NULL, stmt)); SVN_ERR(svn_io_set_file_read_only(pristine_abspath, FALSE, scratch_pool)); } return SVN_NO_ERROR; }