1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #include "smb/smb_context_manager.h" #include "smb2/smb2.h"
SmbContextManager::SmbContextManager() : ctx_(nullptr, smb2_destroy_context) {}
SmbContextManager::~SmbContextManager() { Disconnect(); }
bool SmbContextManager::Connect(const DeviceInfo &deviceInfo) { std::lock_guard<std::mutex> lock(mutex_); deviceInfo_ = deviceInfo; // 初始化 context ctx_.reset(smb2_init_context()); if (!ctx_) { return false; } smb2_set_security_mode(ctx_.get(), SMB2_NEGOTIATE_SIGNING_REQUIRED);
smb2_set_user(ctx_.get(), deviceInfo_.user_.c_str()); smb2_set_password(ctx_.get(), deviceInfo_.password_.c_str());
if (smb2_connect_share(ctx_.get(), deviceInfo_.server_.c_str(), "IPC$", deviceInfo_.user_.c_str()) != 0) { ctx_.reset(); return false; } connected_ = true; return true; }
void SmbContextManager::Disconnect() { std::lock_guard<std::mutex> lock(mutex_); if (ctx_) { smb2_disconnect_share(ctx_.get()); ctx_.reset(); } connected_ = false; }
bool SmbContextManager::IsConnected() const { std::lock_guard<std::mutex> lock(mutex_); return connected_; }
struct smb2_context *SmbContextManager::GetContext() { std::lock_guard<std::mutex> lock(mutex_); return ctx_.get(); }
std::string SmbContextManager::GetSharePath() const { return deviceInfo_.share_; }
|