|
|
|
@ -9,6 +9,39 @@
|
|
|
|
|
|
|
|
|
|
using namespace std::chrono_literals;
|
|
|
|
|
|
|
|
|
|
namespace
|
|
|
|
|
{
|
|
|
|
|
enum class ConnectionState
|
|
|
|
|
{
|
|
|
|
|
disconnected,
|
|
|
|
|
connected,
|
|
|
|
|
connecting
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C"
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
webfuse_test_provider_onconnected(
|
|
|
|
|
void * user_data)
|
|
|
|
|
{
|
|
|
|
|
auto * fs = reinterpret_cast<wfp_static_filesystem*>(user_data);
|
|
|
|
|
auto * connection_state = reinterpret_cast<ConnectionState*>(wfp_static_filesystem_get_user_data(fs));
|
|
|
|
|
*connection_state = ConnectionState::connected;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
webfuse_test_provider_ondisconnected(
|
|
|
|
|
void * user_data)
|
|
|
|
|
{
|
|
|
|
|
auto * fs = reinterpret_cast<wfp_static_filesystem*>(user_data);
|
|
|
|
|
auto * connection_state = reinterpret_cast<ConnectionState*>(wfp_static_filesystem_get_user_data(fs));
|
|
|
|
|
*connection_state = ConnectionState::disconnected;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
namespace webfuse_test
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
@ -18,23 +51,40 @@ public:
|
|
|
|
|
explicit Private(char const * url)
|
|
|
|
|
: is_shutdown_requested(false)
|
|
|
|
|
{
|
|
|
|
|
ConnectionState connection_state = ConnectionState::connecting;
|
|
|
|
|
|
|
|
|
|
config = wfp_client_config_create();
|
|
|
|
|
wfp_client_config_set_certpath(config, "client-cert.pem");
|
|
|
|
|
wfp_client_config_set_keypath(config, "client-key.pem");
|
|
|
|
|
wfp_client_config_set_ca_filepath(config, "server-cert.pem");
|
|
|
|
|
wfp_client_config_set_onconnected(config, &webfuse_test_provider_onconnected);
|
|
|
|
|
wfp_client_config_set_ondisconnected(config, &webfuse_test_provider_ondisconnected);
|
|
|
|
|
|
|
|
|
|
fs = wfp_static_filesystem_create(config);
|
|
|
|
|
wfp_static_filesystem_set_user_data(fs, reinterpret_cast<void*>(&connection_state));
|
|
|
|
|
wfp_static_filesystem_add_text(fs, "hello.txt", 0444, "Hello, World");
|
|
|
|
|
|
|
|
|
|
client = wfp_client_create(config);
|
|
|
|
|
wfp_client_connect(client, url);
|
|
|
|
|
while (!wfp_impl_client_is_connected(client))
|
|
|
|
|
while (ConnectionState::connecting == connection_state)
|
|
|
|
|
{
|
|
|
|
|
wfp_client_service(client);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
thread = std::thread(Run, this);
|
|
|
|
|
std::this_thread::sleep_for(200ms);
|
|
|
|
|
|
|
|
|
|
if (ConnectionState::connected == connection_state)
|
|
|
|
|
{
|
|
|
|
|
thread = std::thread(Run, this);
|
|
|
|
|
std::this_thread::sleep_for(200ms);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
wfp_client_dispose(client);
|
|
|
|
|
|
|
|
|
|
wfp_static_filesystem_dispose(fs);
|
|
|
|
|
wfp_client_config_dispose(config);
|
|
|
|
|
|
|
|
|
|
throw std::runtime_error("unable to connect");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
~Private()
|
|
|
|
|