public interface IC2Profile
{
// Used to connect to Mythic. This function will send the checkinMessage and perform any EKE, if required.
// On successful connect, this function will return the value of the onResp function.
bool Connect(CheckinMessage checkinMessage, OnResponse<MessageResponse> onResp);
// The main working loop of the agent. This should perform the periodic checkin of the agent,
// dispatch new taskings, and return results.
void Start();
// If the profile, on submission of data, will not receive Mythic's response as a reply,
// this function should be used. Example: The data is submitted to a separate url than
// where Apollo will receive the response. Used if a one way profile.
bool Send<IMythicMessage>(IMythicMessage message);
// Send the data specified by Message to the server and pass the response of
// Mythic ot the onResponse function.
bool SendRecv<T, TResult>(T message, OnResponse<TResult> onResponse);
// Fetch data from Mythic. Used if the profile is a one-way profile.
bool Recv(MessageType mt, OnResponse<IMythicMessage> onResp);
// Tells the caller that this C2 profile is stateful,
// and as such it supports only the SendRecv operation.
bool IsOneWay();
// Return whether or not the C2 profile is currently talking to Mythic
bool IsConnected();
}