127 lines
5.2 KiB
C
127 lines
5.2 KiB
C
#ifndef _CREATE_H_
|
|
#define _CREATE_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
// PAR 2.0 のパケット・ヘッダーを作成する
|
|
void set_packet_header(
|
|
unsigned char *buf, // ヘッダーを格納する 64バイトのバッファー
|
|
unsigned char *set_id, // Recovery Set ID、16バイト
|
|
int type_num, // そのパケットの型番号
|
|
unsigned int body_size); // パケットのデータ・サイズ
|
|
|
|
// ソース・ファイルの情報を集める
|
|
int get_source_files(file_ctx_c *files);
|
|
|
|
// 共通パケットを作成する
|
|
int set_common_packet(
|
|
unsigned char *buf,
|
|
int *packet_num, // 共通パケットの数
|
|
int switch_u, // ユニコードのファイル名も記録する
|
|
file_ctx_c *files);
|
|
|
|
// 複数ファイルのハッシュ値を同時に求めるバージョン
|
|
int set_common_packet_multi(
|
|
unsigned char *buf,
|
|
int *packet_num, // 共通パケットの数
|
|
int switch_u, // ユニコードのファイル名も記録する
|
|
file_ctx_c *files);
|
|
|
|
// ハッシュ値を後で計算する
|
|
int set_common_packet_1pass(
|
|
unsigned char *buf,
|
|
int *packet_num, // 共通パケットの数
|
|
int switch_u, // ユニコードのファイル名も記録する
|
|
file_ctx_c *files);
|
|
|
|
// パケットは作成済みなので、ハッシュ値だけ計算して追加する
|
|
int set_common_packet_hash(
|
|
unsigned char *buf,
|
|
file_ctx_c *files);
|
|
|
|
// ソース・ファイルの情報から共通パケットのサイズを計算する
|
|
int measure_common_packet(
|
|
int *packet_num, // 共通パケットの数
|
|
int switch_u); // ユニコードのファイル名も記録する
|
|
|
|
// 末尾パケットを作成する
|
|
int set_footer_packet(
|
|
unsigned char *buf,
|
|
wchar_t *par_comment, // コメント
|
|
unsigned char *set_id); // Recovery Set ID
|
|
|
|
// 末尾パケットのサイズを計算する
|
|
int measure_footer_packet(
|
|
wchar_t *par_comment); // コメント
|
|
|
|
// リカバリ・ファイルを作成して共通パケットをコピーする
|
|
int create_recovery_file(
|
|
wchar_t *recovery_path, // 作業用
|
|
int packet_limit, // リカバリ・ファイルのパケット繰り返しの制限
|
|
int block_distri, // パリティ・ブロックの分配方法
|
|
int packet_num, // 共通パケットの数
|
|
unsigned char *common_buf, // 共通パケットのバッファー
|
|
int common_size, // 共通パケットのバッファー・サイズ
|
|
unsigned char *footer_buf, // 末尾パケットのバッファー
|
|
int footer_size, // 末尾パケットのバッファー・サイズ
|
|
HANDLE *rcv_hFile, // 各リカバリ・ファイルのハンドル
|
|
parity_ctx_c *p_blk); // 各パリティ・ブロックの情報
|
|
|
|
int create_recovery_file_1pass(
|
|
wchar_t *recovery_base,
|
|
wchar_t *recovery_path, // 作業用
|
|
int packet_limit, // リカバリ・ファイルのパケット繰り返しの制限
|
|
int block_distri, // パリティ・ブロックの分配方法 (3-bit目は番号の付け方)
|
|
int packet_num, // 共通パケットの数
|
|
unsigned char *common_buf, // 共通パケットのバッファー
|
|
int common_size, // 共通パケットのバッファー・サイズ
|
|
unsigned char *footer_buf, // 末尾パケットのバッファー
|
|
int footer_size, // 末尾パケットのバッファー・サイズ
|
|
HANDLE *rcv_hFile, // 各リカバリ・ファイルのハンドル
|
|
unsigned char *p_buf, // 計算済みのパリティ・ブロック
|
|
unsigned char *g_buf, // GPU用 (GPUを使わない場合は NULLにすること)
|
|
unsigned int unit_size);
|
|
|
|
// 作成中のリカバリ・ファイルを削除する
|
|
void delete_recovery_file(
|
|
wchar_t *recovery_path, // 作業用
|
|
int block_distri, // パリティ・ブロックの分配方法
|
|
int switch_p, // インデックス・ファイルを作らない
|
|
HANDLE *rcv_hFile); // 各リカバリ・ファイルのハンドル
|
|
|
|
// リカバリ・ファイルのサイズを計算する
|
|
void measure_recovery_file(
|
|
wchar_t *recovery_path, // 作業用 (最初はコメントが入ってる)
|
|
int packet_limit, // リカバリ・ファイルのパケット繰り返しの制限
|
|
int block_distri, // パリティ・ブロックの分配方法
|
|
int packet_num, // 共通パケットの数
|
|
int common_size, // 共通パケットのバッファー・サイズ
|
|
int footer_size, // 末尾パケットのバッファー・サイズ
|
|
int switch_p); // インデックス・ファイルを作らない
|
|
|
|
// ソース・ファイルを分割する
|
|
int split_files(
|
|
file_ctx_c *files,
|
|
int *cur_num, int *cur_id); // エラー発生時は、その時点でのファイル番号と分割番号が戻る
|
|
|
|
// 分割されたソース・ファイルを削除する
|
|
void delete_split_files(
|
|
file_ctx_c *files,
|
|
int max_num, int max_id); // エラー発生時のファイル番号と分割番号
|
|
|
|
// リカバリ・ファイルをソース・ファイルの末尾にくっつける
|
|
int append_recovery_file(
|
|
wchar_t *file_name, // ソース・ファイルの名前
|
|
HANDLE *rcv_hFile, // 各リカバリ・ファイルのハンドル
|
|
int no_index); // インデックス・ファイルが存在しない
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|