jsonrpc client: move around functions so no forwad declaration is needed
Change-Id: Ie3cdf0fa51c9a373cb7d98e26dfab6a5d45c6005 Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com> Reviewed-on: https://review.gerrithub.io/429911 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Xiaodong Liu <xiaodong.liu@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
edf2305dee
commit
4734811dc6
@ -36,7 +36,122 @@
|
||||
|
||||
#define RPC_DEFAULT_PORT "5260"
|
||||
|
||||
static int _spdk_jsonrpc_client_poll(struct spdk_jsonrpc_client *client);
|
||||
static int
|
||||
_spdk_jsonrpc_client_send_request(struct spdk_jsonrpc_client *client)
|
||||
{
|
||||
ssize_t rc;
|
||||
struct spdk_jsonrpc_client_request *request = client->request;
|
||||
|
||||
if (!request) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Reset offset in request */
|
||||
request->send_offset = 0;
|
||||
|
||||
while (request->send_len > 0) {
|
||||
rc = send(client->sockfd, request->send_buf + request->send_offset,
|
||||
request->send_len, 0);
|
||||
if (rc <= 0) {
|
||||
if (rc < 0 && errno == EINTR) {
|
||||
rc = 0;
|
||||
} else {
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
request->send_offset += rc;
|
||||
request->send_len -= rc;
|
||||
}
|
||||
|
||||
client->request = NULL;
|
||||
|
||||
spdk_jsonrpc_client_free_request(request);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
recv_buf_expand(struct spdk_jsonrpc_client *client)
|
||||
{
|
||||
uint8_t *new_buf;
|
||||
|
||||
if (client->recv_buf_size * 2 > SPDK_JSONRPC_SEND_BUF_SIZE_MAX) {
|
||||
return -ENOSPC;
|
||||
}
|
||||
|
||||
new_buf = realloc(client->recv_buf, client->recv_buf_size * 2);
|
||||
if (new_buf == NULL) {
|
||||
SPDK_ERRLOG("Resizing recv_buf failed (current size %zu, new size %zu)\n",
|
||||
client->recv_buf_size, client->recv_buf_size * 2);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
client->recv_buf = new_buf;
|
||||
client->recv_buf_size *= 2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
_spdk_jsonrpc_client_poll(struct spdk_jsonrpc_client *client)
|
||||
{
|
||||
ssize_t rc = 0;
|
||||
size_t recv_avail;
|
||||
|
||||
_spdk_jsonrpc_client_send_request(client);
|
||||
|
||||
if (client->recv_buf == NULL) {
|
||||
/* memory malloc for recv-buf */
|
||||
client->recv_buf = malloc(SPDK_JSONRPC_SEND_BUF_SIZE_INIT);
|
||||
if (!client->recv_buf) {
|
||||
rc = errno;
|
||||
SPDK_ERRLOG("malloc() failed (%d): %s\n", (int)rc, spdk_strerror(rc));
|
||||
return -rc;
|
||||
}
|
||||
client->recv_buf_size = SPDK_JSONRPC_SEND_BUF_SIZE_INIT;
|
||||
client->recv_offset = 0;
|
||||
}
|
||||
|
||||
recv_avail = client->recv_buf_size - client->recv_offset;
|
||||
while (recv_avail > 0) {
|
||||
rc = recv(client->sockfd, client->recv_buf + client->recv_offset, recv_avail - 1, 0);
|
||||
if (rc < 0) {
|
||||
if (errno == EINTR) {
|
||||
continue;
|
||||
} else {
|
||||
return errno;
|
||||
}
|
||||
} else if (rc == 0) {
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
client->recv_offset += rc;
|
||||
recv_avail -= rc;
|
||||
|
||||
client->recv_buf[client->recv_offset] = '\0';
|
||||
|
||||
/* Check to see if we have received a full JSON value. */
|
||||
rc = spdk_jsonrpc_parse_response(client);
|
||||
if (rc == 0) {
|
||||
/* Successfully parsed response */
|
||||
return 0;
|
||||
} else if (rc && rc != -EAGAIN) {
|
||||
SPDK_ERRLOG("jsonrpc parse request failed\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Expand receive buffer if larger one is needed */
|
||||
if (recv_avail == 1) {
|
||||
rc = recv_buf_expand(client);
|
||||
if (rc != 0) {
|
||||
return rc;
|
||||
}
|
||||
recv_avail = client->recv_buf_size - client->recv_offset;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
_spdk_jsonrpc_client_connect(struct spdk_jsonrpc_client *client, int domain, int protocol,
|
||||
@ -183,123 +298,6 @@ spdk_jsonrpc_client_free_request(struct spdk_jsonrpc_client_request *req)
|
||||
free(req);
|
||||
}
|
||||
|
||||
static int
|
||||
_spdk_jsonrpc_client_send_request(struct spdk_jsonrpc_client *client)
|
||||
{
|
||||
ssize_t rc;
|
||||
struct spdk_jsonrpc_client_request *request = client->request;
|
||||
|
||||
if (!request) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Reset offset in request */
|
||||
request->send_offset = 0;
|
||||
|
||||
while (request->send_len > 0) {
|
||||
rc = send(client->sockfd, request->send_buf + request->send_offset,
|
||||
request->send_len, 0);
|
||||
if (rc <= 0) {
|
||||
if (rc < 0 && errno == EINTR) {
|
||||
rc = 0;
|
||||
} else {
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
request->send_offset += rc;
|
||||
request->send_len -= rc;
|
||||
}
|
||||
|
||||
client->request = NULL;
|
||||
|
||||
spdk_jsonrpc_client_free_request(request);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
recv_buf_expand(struct spdk_jsonrpc_client *client)
|
||||
{
|
||||
uint8_t *new_buf;
|
||||
|
||||
if (client->recv_buf_size * 2 > SPDK_JSONRPC_SEND_BUF_SIZE_MAX) {
|
||||
return -ENOSPC;
|
||||
}
|
||||
|
||||
new_buf = realloc(client->recv_buf, client->recv_buf_size * 2);
|
||||
if (new_buf == NULL) {
|
||||
SPDK_ERRLOG("Resizing recv_buf failed (current size %zu, new size %zu)\n",
|
||||
client->recv_buf_size, client->recv_buf_size * 2);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
client->recv_buf = new_buf;
|
||||
client->recv_buf_size *= 2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
_spdk_jsonrpc_client_poll(struct spdk_jsonrpc_client *client)
|
||||
{
|
||||
ssize_t rc = 0;
|
||||
size_t recv_avail;
|
||||
|
||||
_spdk_jsonrpc_client_send_request(client);
|
||||
|
||||
if (client->recv_buf == NULL) {
|
||||
/* memory malloc for recv-buf */
|
||||
client->recv_buf = malloc(SPDK_JSONRPC_SEND_BUF_SIZE_INIT);
|
||||
if (!client->recv_buf) {
|
||||
rc = errno;
|
||||
SPDK_ERRLOG("malloc() failed (%d): %s\n", (int)rc, spdk_strerror(rc));
|
||||
return -rc;
|
||||
}
|
||||
client->recv_buf_size = SPDK_JSONRPC_SEND_BUF_SIZE_INIT;
|
||||
client->recv_offset = 0;
|
||||
}
|
||||
|
||||
recv_avail = client->recv_buf_size - client->recv_offset;
|
||||
while (recv_avail > 0) {
|
||||
rc = recv(client->sockfd, client->recv_buf + client->recv_offset, recv_avail - 1, 0);
|
||||
if (rc < 0) {
|
||||
if (errno == EINTR) {
|
||||
continue;
|
||||
} else {
|
||||
return errno;
|
||||
}
|
||||
} else if (rc == 0) {
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
client->recv_offset += rc;
|
||||
recv_avail -= rc;
|
||||
|
||||
client->recv_buf[client->recv_offset] = '\0';
|
||||
|
||||
/* Check to see if we have received a full JSON value. */
|
||||
rc = spdk_jsonrpc_parse_response(client);
|
||||
if (rc == 0) {
|
||||
/* Successfully parsed response */
|
||||
return 0;
|
||||
} else if (rc && rc != -EAGAIN) {
|
||||
SPDK_ERRLOG("jsonrpc parse request failed\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Expand receive buffer if larger one is needed */
|
||||
if (recv_avail == 1) {
|
||||
rc = recv_buf_expand(client);
|
||||
if (rc != 0) {
|
||||
return rc;
|
||||
}
|
||||
recv_avail = client->recv_buf_size - client->recv_offset;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
spdk_jsonrpc_client_recv_response(struct spdk_jsonrpc_client *client)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user