Running as a Client
This example shows a client performing the following:
initializing guardian
finding a service
connecting to an endpoint using profile configured transport security
finding a data channel
sending data over the data channel with configured application layer security
receiving data over the data channel with configured application layer security
Example
bool
guardian_client(
const utilities::InitializeFiles& in_initialize_files)
{
/* create guardian */
Guardian guardian;
/* initialize guardidan */
if( !initialize_guardian("MyComponent",
"MyHardwareIdentifier",
in_initialize_files,
&guardian) )
{
return false;
}
/* find client service */
std::unique_ptr<Service> service;
auto status = guardian.FindService("MyClientServiceName", &service);
if( status )
{
printf("error finding service [%s]:[%u]\r\n",
GuardianStatusEnum::NameOf(EXTRACT_STATUS(status)).c_str(),
status);
return false;
}
/* start profile configured session (blocking) */
std::unique_ptr<Session> session;
status = service->Start(&session);
if( status )
{
printf("error connecting to endpoint [%s]:[%u]\r\n",
GuardianStatusEnum::NameOf(EXTRACT_STATUS(status)).c_str(),
status);
return false;
}
/* find profile configured secure channel */
std::unique_ptr<ChannelGuard> channel;
status = session->FindChannel("MyChannelName", &channel);
if( status )
{
printf("error connecting to endpoint [%s]:[%u]\r\n",
GuardianStatusEnum::NameOf(EXTRACT_STATUS(status)).c_str(),
status);
return false;
}
/* send data through profile configured channel and connection (blocking) */
std::string tx = "Some data to send";
status = channel->DataForChannel(tx.data(), tx.size());
if( status )
{
printf("error sending data [%s]:[%u]\r\n",
GuardianStatusEnum::NameOf(EXTRACT_STATUS(status)).c_str(),
status);
return false;
}
std::string rx(512, 0);
size_t rx_size = rx.size();
/* wait for server to respond (blocking) */
status = channel->DataFromChannel(&rx[0], &rx_size);
if( status )
{
printf("error receiving data [%s]:[%u]\r\n",
GuardianStatusEnum::NameOf(EXTRACT_STATUS(status)).c_str(),
status);
return false;
}
guardian.Shutdown(true);
return true;
}
Last updated
Was this helpful?