return CERTSVC_FAIL;
}
+static int sendBuffer(int socket, const char *buffer, size_t length)
+{
+ char *data = (char *)buffer;
+ size_t remaining_length = length;
+
+ do {
+ ssize_t res = send(socket, data, remaining_length, MSG_NOSIGNAL);
+ if (res == -1) {
+ SLOGE("Error during sending data via %d socket errno[%d]", socket, errno);
+ return -1;
+ }
+
+ data += res;
+ remaining_length -= res;
+ } while (remaining_length > 0);
+
+ return length;
+}
+
void CertSvcServerComm(void)
{
int server_sockfd = 0;
recv_data.gname,
send_data.dataBlock);
send_data.dataBlockLen = strlen(send_data.dataBlock);
- result = send(client_sockfd, (char *)&send_data,
- sizeof(send_data), MSG_NOSIGNAL);
+
+ result = sendBuffer(client_sockfd, (char *)&send_data, sizeof(send_data));
break;
}
recv_data.gname,
send_data.dataBlock);
send_data.dataBlockLen = strlen(send_data.dataBlock);
- result = send(client_sockfd, (char *)&send_data,
- sizeof(send_data), MSG_NOSIGNAL);
+
+ result = sendBuffer(client_sockfd, (char *)&send_data, sizeof(send_data));
break;
}
if (send_data.result == CERTSVC_SUCCESS)
send_data.result = update_ca_certificate_file(NULL);
- result = send(client_sockfd, (char *)&send_data,
- sizeof(send_data), MSG_NOSIGNAL);
+ result = sendBuffer(client_sockfd, (char *)&send_data, sizeof(send_data));
break;
}
recv_data.storeType,
recv_data.gname,
&send_data.certStatus);
- result = send(client_sockfd, (char *)&send_data,
- sizeof(send_data), MSG_NOSIGNAL);
+ result = sendBuffer(client_sockfd, (char *)&send_data, sizeof(send_data));
break;
}
if (send_data.result == CERTSVC_SUCCESS)
send_data.result = update_ca_certificate_file(NULL);
- result = send(client_sockfd, (char *)&send_data,
- sizeof(send_data), MSG_NOSIGNAL);
+ result = sendBuffer(client_sockfd, (char *)&send_data, sizeof(send_data));
break;
}
recv_data.storeType,
recv_data.gname,
&send_data.isAliasUnique);
- result = send(client_sockfd, (char *)&send_data,
- sizeof(send_data), MSG_NOSIGNAL);
+ result = sendBuffer(client_sockfd, (char *)&send_data, sizeof(send_data));
break;
}
if (recv_data.certType == PEM_CRT || recv_data.certType == P12_TRUSTED)
send_data.result = update_ca_certificate_file(recv_data.dataBlock);
- result = send(client_sockfd, (char *)&send_data,
- sizeof(send_data), MSG_NOSIGNAL);
+ result = sendBuffer(client_sockfd, (char *)&send_data, sizeof(send_data));
break;
}
&certListBuffer,
&bufferLen,
&send_data.certCount);
- result = send(client_sockfd, (char *)&send_data,
- sizeof(send_data), MSG_NOSIGNAL);
+ result = sendBuffer(client_sockfd, (char *)&send_data, sizeof(send_data));
+
+ if ((result > 0) && (bufferLen > 0)) {
+ result = sendBuffer(client_sockfd, certListBuffer, bufferLen);
+ }
- if (bufferLen > 0)
- result = send(client_sockfd, certListBuffer,
- bufferLen, MSG_NOSIGNAL);
+ free(certListBuffer);
+ certListBuffer = NULL;
break;
}
recv_data.gname,
send_data.common_name,
sizeof(send_data.common_name));
- result = send(client_sockfd, (char *)&send_data,
- sizeof(send_data), MSG_NOSIGNAL);
+
+ result = sendBuffer(client_sockfd, (char *)&send_data, sizeof(send_data));
break;
}
&certBlockBuffer,
&blockBufferLen,
&send_data.certBlockCount);
- result = send(client_sockfd, (char *)&send_data,
- sizeof(send_data), MSG_NOSIGNAL);
- if (blockBufferLen > 0)
- result = send(client_sockfd, certBlockBuffer,
- blockBufferLen, MSG_NOSIGNAL);
+ result = sendBuffer(client_sockfd, (char *)&send_data, sizeof(send_data));
+
+ if ((result > 0) && (blockBufferLen > 0)) {
+ result = sendBuffer(client_sockfd, certBlockBuffer, blockBufferLen);
+ }
+
+ free(certBlockBuffer);
+ certBlockBuffer = NULL;
+
break;
}