int WriteDataMessage::serialize(common::Stream& output) const { if (has_lease()) { ds_.push_back(ULONG_LONG_MAX); ds_.push_back(static_cast<uint64_t>(version_)); ds_.push_back(static_cast<uint64_t>(lease_id_)); } int64_t pos = 0; int32_t iret = write_data_info_.serialize(output.get_free(), output.get_free_length(), pos); if (common::TFS_SUCCESS == iret) { output.pour(write_data_info_.length()); iret = output.set_vint64(ds_); } if (common::TFS_SUCCESS == iret && write_data_info_.length_ > 0) { iret = output.set_bytes(data_, write_data_info_.length_); } // reparse, avoid push verion&lease again when clone twice; if (common::TFS_SUCCESS == iret) { parse_special_ds(ds_, version_, lease_id_); } return iret; }
int WriteDataMessage::build(char* data, int32_t len) { if (has_lease_ == true) { ds_.push_back(ULONG_LONG_MAX); ds_.push_back(static_cast<uint64_t>(version_)); ds_.push_back(static_cast<uint64_t>(lease_)); } if (set_object(&data, &len, &write_data_info_, sizeof(WriteDataInfo)) == TFS_ERROR) { return TFS_ERROR; } if (set_vint64(&data, &len, ds_) == TFS_ERROR) { return TFS_ERROR; } if (write_data_info_.length_ > 0) { if (set_object(&data, &len, data_, write_data_info_.length_) == TFS_ERROR) { return TFS_ERROR; } } // reparse, avoid push verion&lease again when clone twice; has_lease_ = parse_special_ds(ds_, version_, lease_); return TFS_SUCCESS; }
int RenameFileMessage::build(char* data, int32_t len) { if (has_lease_ == true) { ds_.push_back(ULONG_LONG_MAX); ds_.push_back(static_cast<uint64_t> (version_)); ds_.push_back(static_cast<uint64_t> (lease_id_)); } if (set_object(&data, &len, &rename_file_info_, sizeof(RenameFileInfo)) == TFS_ERROR) { return TFS_ERROR; } if (set_vint64(&data, &len, ds_) == TFS_ERROR) { return TFS_ERROR; } if (set_int32(&data, &len, option_flag_) == TFS_ERROR) { return TFS_ERROR; } has_lease_ = parse_special_ds(ds_, version_, lease_id_); return TFS_SUCCESS; }
//block_id, server_count, server_id1, server_id2, ..., filename_len, filename int SetBlockInfoMessage::parse(char* data, int32_t len) { if (get_int32(&data, &len, reinterpret_cast<int32_t*> (&block_id_)) == TFS_ERROR) { return TFS_ERROR; } if (get_vint64(&data, &len, ds_) == TFS_ERROR) { return TFS_ERROR; } has_lease_ = parse_special_ds(ds_, version_, lease_); return TFS_SUCCESS; }
int RenameFileMessage::parse(char* data, int32_t len) { if (get_object_copy(&data, &len, reinterpret_cast<void*>(&rename_file_info_), sizeof(RenameFileInfo)) == TFS_ERROR) { return TFS_ERROR; } if (get_vint64(&data, &len, ds_) == TFS_ERROR) { return TFS_ERROR; } get_int32(&data, &len, &option_flag_); has_lease_ = parse_special_ds(ds_, version_, lease_id_); return TFS_SUCCESS; }
int WriteDataMessage::deserialize(common::Stream& input) { int64_t pos = 0; int32_t iret = write_data_info_.deserialize(input.get_data(), input.get_data_length(), pos); if (common::TFS_SUCCESS == iret) { input.drain( write_data_info_.length()); iret = input.get_vint64(ds_); } if (common::TFS_SUCCESS == iret && write_data_info_.length_ > 0) { data_ = input.get_data(); input.drain(write_data_info_.length_); } if (common::TFS_SUCCESS == iret) { parse_special_ds(ds_, version_, lease_id_); } return iret; }
int WriteDataMessage::parse(char* data, int32_t len) { if (get_object_copy(&data, &len, reinterpret_cast<void*>(&write_data_info_), sizeof(WriteDataInfo)) == TFS_ERROR) { return TFS_ERROR; } if (get_vint64(&data, &len, ds_) == TFS_ERROR) { return TFS_ERROR; } if (write_data_info_.length_ > 0) { if (get_object(&data, &len, reinterpret_cast<void**>(&data_), write_data_info_.length_) == TFS_ERROR) { return TFS_ERROR; } } has_lease_ = parse_special_ds(ds_, version_, lease_); return TFS_SUCCESS; }
int SetBlockInfoMessage::build(char* data, int32_t len) { if ((has_lease_ == true) && (ds_.size() > 0)) { ds_.push_back(ULONG_LONG_MAX); ds_.push_back(static_cast<uint64_t> (version_)); ds_.push_back(static_cast<uint64_t> (lease_)); } if (set_int32(&data, &len, block_id_) == TFS_ERROR) { return TFS_ERROR; } if (set_vint64(&data, &len, ds_) == TFS_ERROR) { return TFS_ERROR; } // reparse, avoid push verion&lease again when clone twice; has_lease_ = parse_special_ds(ds_, version_, lease_); return TFS_SUCCESS; }