static gboolean _client_start(struct gridd_client_s *client) { EXTRA_ASSERT(client != NULL); EXTRA_ASSERT(client->abstract.vtable == &VTABLE_CLIENT); client->tv_start = client->tv_step = oio_ext_monotonic_time (); if (client->step != NONE) return FALSE; if (!client->url[0]) { _client_reset_error(client); client->error = NEWERROR(EINVAL, "No target"); return FALSE; } GError *err = _client_connect(client); if (NULL == err) return TRUE; client->step = STATUS_FAILED; client->error = err; return FALSE; }
static void _client_free(struct gridd_client_s *client) { EXTRA_ASSERT(client != NULL); EXTRA_ASSERT(client->abstract.vtable == &VTABLE_CLIENT); _client_reset_reply(client); _client_reset_request(client); _client_reset_cnx(client); _client_reset_target(client); _client_reset_error(client); if (client->reply) g_byte_array_free(client->reply, TRUE); client->fd = -1; SLICE_FREE (struct gridd_client_s, client); }
static GError* _client_request(struct gridd_client_s *client, GByteArray *req, gpointer ctx, client_on_reply cb) { EXTRA_ASSERT(client != NULL); EXTRA_ASSERT(client->abstract.vtable == &VTABLE_CLIENT); if ( NULL == req) return NEWERROR(CODE_INTERNAL_ERROR, "Invalid parameter"); switch (client->step) { case NONE: case CONNECTING: case CONNECTED: if (client->request != NULL) return NEWERROR(500, "Request already pending"); /* ok */ break; case REQ_SENDING: case REP_READING_SIZE: case REP_READING_DATA: return NEWERROR(500, "Request not terminated"); case STATUS_OK: case STATUS_FAILED: /* ok */ if (client->fd >= 0) client->step = REQ_SENDING; else client->step = CONNECTING; break; } /* if any, reset the last reply */ _client_reset_reply(client); _client_reset_request(client); _client_reset_error(client); /* Now set the new request components */ client->ctx = ctx; client->on_reply = cb; client->request = g_byte_array_ref(req); return NULL; }
static void _client_free(struct gridd_client_s *client) { EXTRA_ASSERT(client != NULL); EXTRA_ASSERT(client->abstract.vtable == &VTABLE_CLIENT); _client_reset_reply(client); _client_reset_request(client); _client_reset_cnx(client); _client_reset_target(client); _client_reset_error(client); if (client->reply) g_byte_array_free(client->reply, TRUE); if (client->past_url) g_string_free(client->past_url, TRUE); memset(client, 0, sizeof(*client)); client->fd = -1; g_free(client); }