IoT_Error_t iot_tls_read(Network *pNetwork, unsigned char *pMsg, size_t len,
			 Timer *timer, size_t *read_len)
{
	int val = -1;
	int recv_len = 0;
	fd_set fds;
	int time_left, error_flag = false, complete_flag = false;

	FD_ZERO(&fds);
	FD_SET(pNetwork->my_socket, &fds);
	setsockopt(pNetwork->my_socket, SOL_SOCKET, SO_RCVTIMEO,
		   (void *)&pNetwork->tlsConnectParams.timeout_ms,
		   sizeof(pNetwork->tlsConnectParams.timeout_ms));

	do {
		if (tls_handle) {
			val = tls_recv(tls_handle, pMsg + recv_len,
				       len - recv_len);
		}
		if (val >= 0) {
			recv_len += val;
		} else {
			error_flag = true;
		}

		if (recv_len >= len) {
			complete_flag = true;
		}
		time_left = left_ms(timer);
	} while (!error_flag && !complete_flag && time_left > 0);

	*read_len = recv_len;
	if (0 == *read_len && error_flag) {
		return NETWORK_SSL_NOTHING_TO_READ;
	} else if (has_timer_expired(timer) && !complete_flag) {
		return NETWORK_SSL_READ_TIMEOUT_ERROR;
	}

	return AWS_SUCCESS;
}
Example #2
0
int sendPacket(Client* c, int length, Timer* timer)
{
    int rc = FAILURE,
        sent = 0;
    c->send_len = length; //add by yanly
    while (sent < length && !expired(timer))
    {
        rc = c->ipstack->mqttwrite(c->ipstack, &c->buf[sent], length, left_ms(timer));
        if (rc < 0)  // there was an error writing the data
            break;
        sent += rc;
    }
    if (sent == length)
    {
        countdown(&c->ping_timer, c->keepAliveInterval); // record the fact that we have successfully sent the packet
        rc = SUCCESS;
    }
    else
        rc = FAILURE;
    c->send_len = 0; //add by yanly
    return rc;
}
Example #3
0
bool has_timer_expired(Timer *timer) {
  if (left_ms(timer) > 0)
    return false;
  else
    return true;
}