35 pthread_mutex_t receiveCompleteMutex;
36 pthread_cond_t receiveComplete;
39 } DefaultCallbackData;
43 DefaultCallbackData * data = client_data;
44 pthread_mutex_lock(&data->receiveCompleteMutex);
45 data->status = kinetic_data->
status;
46 data->completed =
true;
47 pthread_cond_signal(&data->receiveComplete);
48 pthread_mutex_unlock(&data->receiveCompleteMutex);
64 KineticSession *session = operation->session;
70 if (closure != NULL) {
71 operation->closure = *closure;
75 DefaultCallbackData data;
76 pthread_mutex_init(&data.receiveCompleteMutex, NULL);
77 pthread_cond_init(&data.receiveComplete, NULL);
79 data.completed =
false;
87 pthread_mutex_lock(&data.receiveCompleteMutex);
88 while(data.completed ==
false) {
89 pthread_cond_wait(&data.receiveComplete, &data.receiveCompleteMutex);
92 pthread_mutex_unlock(&data.receiveCompleteMutex);
95 pthread_cond_destroy(&data.receiveComplete);
96 pthread_mutex_destroy(&data.receiveCompleteMutex);
144 LOGF0(
"bus_to_kinetic_status: UNMATCHED %d", status);
150 LOGF3(
"bus_to_kinetic_status: mapping status %d => %d",
171 return "bad_response";
173 return "unregistered socket";
175 return "internal timeout";
185 KineticSession* session = socket_udata;
186 bool connetionInfoReceived =
false;
187 char const * statusTag =
"[PDU RX STATUS]";
188 char const * unexpectedTag =
"[PDU RX UNEXPECTED]";
189 char const * logTag = unexpectedTag;
190 int logAtLevel, protoLogAtLevel;
197 if (connectionID != 0)
201 LOGF2(
"Extracted connection ID from unsolicited status PDU (id=%lld)", connectionID);
202 connetionInfoReceived =
true;
208 LOG0(
"WARNING: Unsolicited status received. Connection being terminated by remote!");
217 LOG0(
"WARNING: Received unexpected response!");
218 logTag = unexpectedTag;
224 "fd: %6d, seq: %8lld, protoLen: %8u, valueLen: %8u",
226 (
void*)response, (
void*)session,
227 (
void*)session->messageBus,
228 session->socket, (
long long)seq_id,
235 if (connetionInfoReceived) {
242 KineticOperation* op = udata;
253 LOGF2(
"[PDU RX] pdu: %p, session: %p, bus: %p, "
254 "fd: %6d, seq: %8lld, protoLen: %8u, valueLen: %8u, op: %p, status: %s",
256 (
void*)op->session, (
void*)op->session->messageBus,
257 op->session->socket, response->
command->header->acksequence,
265 if (op->response == NULL) {
266 op->response = response;
276 if (op->opCallback != NULL) {
277 status = op->opCallback(op, status);
void KineticLogger_LogHeader(int log_level, const KineticPDUHeader *header)
void KineticResourceWaiter_SetAvailable(KineticResourceWaiter *const waiter)
void KineticController_HandleResult(bus_msg_result_t *res, void *udata)
Device did not respond to the operation in time.
static KineticCompletionClosure DefaultClosure(DefaultCallbackData *const data)
Com__Seagate__Kinetic__Proto__Message * proto
uint32_t KineticResponse_GetValueLength(KineticResponse *response)
uint32_t KineticResponse_GetProtobufLength(KineticResponse *response)
void KineticSession_SetTerminationStatus(KineticSession *const session, KineticStatus status)
KineticStatus KineticResponse_GetStatus(KineticResponse *response)
Closure which can be specified for operations which support asynchronous mode.
const char * Kinetic_GetStatusDescription(KineticStatus status)
Provides a string representation for a KineticStatus code.
void KineticOperation_Complete(KineticOperation *op, KineticStatus status)
#define KINETIC_ASSERT(cond)
A timeout occurred while waiting for a socket operation.
KineticCompletionCallback callback
Function to be called upon completion.
struct bus_msg_result_t::@3::@5 response
Completion data which will be provided to KineticCompletionClosure for asynchronous operations...
Com__Seagate__Kinetic__Proto__Command * command
#define LOGF3(message,...)
#define LOGF0(message,...)
The session has been terminated by the Kinetic device.
KineticStatus bus_to_kinetic_status(bus_send_status_t const status)
void KineticAllocator_FreeKineticResponse(KineticResponse *response)
void KineticLogger_LogProtobuf(int log_level, const Com__Seagate__Kinetic__Proto__Message *msg)
KineticStatus status
Resultant status of the operation.
KineticStatus KineticSession_Disconnect(KineticSession *const session)
KineticStatus KineticSession_GetTerminationStatus(KineticSession const *const session)
Status not available (no reponse/status available)
KineticStatus
Kinetic status codes.
union bus_msg_result_t::@3 u
void KineticLogger_LogPrintf(int log_level, const char *format,...)
An I/O error occurred during a socket operation.
static const char * bus_error_string(bus_send_status_t t)
static void DefaultCallback(KineticCompletionData *kinetic_data, void *client_data)
KineticStatus KineticController_ExecuteOperation(KineticOperation *operation, KineticCompletionClosure *const closure)
void KineticSession_SetConnectionID(KineticSession *const session, int64_t id)
void KineticController_HandleUnexpectedResponse(void *msg, int64_t seq_id, void *bus_udata, void *socket_udata)
int64_t KineticResponse_GetConnectionID(KineticResponse *response)
KineticStatus KineticOperation_SendRequest(KineticOperation *const op)
#define LOGF2(message,...)