Beispiel #1
0
tm_socket_t tm_udp_open ()
{
	if (!hw_net_online_status()) return -1;
	CC3000_START;

	int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	CC3000_END;
	return (tm_socket_t) sock;
}
Beispiel #2
0
int tm_udp_close (int ulSocket)
{
	if (!hw_net_online_status()) return -1;
	CC3000_START;

	closesocket(ulSocket);
	CC3000_END;
	return 0xFFFFFFFF;
}
Beispiel #3
0
int tm_tcp_close (tm_socket_t sock)
{
	if (!hw_net_online_status()) return -1;
	CC3000_START;

	int ret = closesocket(sock);
	
	CC3000_END;
	return ret;
}
Beispiel #4
0
int tm_tcp_write (tm_socket_t sock, const uint8_t *buf, size_t buflen)
{
	if (!hw_net_online_status()) return -1;
	CC3000_START;

	int sentLen = send(sock, buf, buflen, 0);
	// TM_DEBUG("Wrote %d bytes to TCP socket.", sentLen);
	CC3000_END;
	return sentLen;
}
Beispiel #5
0
// Returns -1 on error or no socket.
// Returns -2 on pending connection.
// Returns >= 0 for socket descriptor.
tm_socket_t tm_tcp_accept (tm_socket_t sock, uint32_t *addr, uint16_t *port)
{
	if (!hw_net_online_status()) return -1;

	// the family is always AF_INET
	sockaddr_in addrClient;
	socklen_t addrlen = sizeof(addrClient);
	CC3000_START;
	int res = accept(sock, (sockaddr *) &addrClient, &addrlen);
	CC3000_END;
	*addr = ntohl(addrClient.sin_addr.s_addr);
	*port = ntohs(addrClient.sin_addr.s_addr);
	return res;
}
Beispiel #6
0
int tm_tcp_read (tm_socket_t sock, uint8_t *buf, size_t buflen)
{
	if (!hw_net_online_status()) return -1;

	// Limit buffer limit to 512 bytes to be reliable.
	if (buflen > 512) {
		buflen = 512;
	}
	
	CC3000_START;
	int read = recv(sock, buf, buflen, 0);
	CC3000_END;
	return read;
}
Beispiel #7
0
int hw_net_ssid (char ssid[33])
{
	if (hw_net_online_status()) {
		CC3000_START;
		tNetappIpconfigRetArgs ipinfo;
		netapp_ipconfig(&ipinfo);
		memset(ssid, 0, 33);
		memcpy(ssid, ipinfo.uaSSID, 32);
		CC3000_END;
	} else {
		memset(ssid, 0, 33);
	}
	return 0;
}
Beispiel #8
0
tm_socket_t tm_tcp_open ()
{
	if (!hw_net_online_status()) return -1;
	CC3000_START;

	int ulSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	uint16_t wAccept = SOCK_ON;
	setsockopt(ulSocket, SOL_SOCKET, SOCKOPT_ACCEPT_NONBLOCK, &wAccept, sizeof(wAccept)); // TODO this is duplicated in tm_tcp_listen
	unsigned long wRecvTimeout = 10;
	if (setsockopt(ulSocket, SOL_SOCKET, SOCKOPT_RECV_TIMEOUT, &wRecvTimeout, sizeof(wRecvTimeout)) != 0) {
		TM_LOG("setting recv_timeout failed.");
	}
	CC3000_END;
	return ulSocket;
}
Beispiel #9
0
uint32_t tm_hostname_lookup (const uint8_t *hostname)
{
	if (!hw_net_online_status()) return -1;
	CC3000_START;

	unsigned long out_ip_addr = 0;

	/* get the host info */
	int err = 0;
	if ((err = gethostbyname((char *) hostname, strlen((char *) hostname), &out_ip_addr)) < 0) {
		TM_DEBUG("gethostbyname(): error %d", err);
		return 0;
	}
	CC3000_END;
	return (uint32_t) out_ip_addr;
}
Beispiel #10
0
int tm_udp_receive (int ulSocket, uint8_t *buf, unsigned long buf_len, uint32_t *ip)
{
	if (!hw_net_online_status()) return -1;
	CC3000_START;

	sockaddr from;
	socklen_t from_len;
	signed long ret = recvfrom(ulSocket, buf, buf_len, 0, &from, &from_len);
	char* aliasable_ip = (char*) &(from.sa_data[2]);
	*ip = *((uint32_t *) aliasable_ip);
	CC3000_END;
	if (ret <= 0) {
		TM_DEBUG("No data recieved");
	} else {
		TM_DEBUG("Recieved %d UDP bytes", (unsigned int) ret);
	}
	return ret;
}
Beispiel #11
0
int tm_tcp_connect (tm_socket_t sock, uint32_t addr, uint16_t port)
{
	if (!hw_net_online_status()) return 1;
	CC3000_START;

	// the family is always AF_INET
	sockaddr_in remoteSocketAddr;
	remoteSocketAddr.sin_family = AF_INET;
	remoteSocketAddr.sin_port = htons(port);
	remoteSocketAddr.sin_addr.s_addr = htonl(addr);

	int lerr = connect(sock, (sockaddr *) &remoteSocketAddr, sizeof(sockaddr));
	if (lerr != ESUCCESS) {
		TM_DEBUG("Error connecting to TCP socket.");
	}
	CC3000_END;
	return lerr;
}
Beispiel #12
0
int tm_udp_send (int ulSocket, uint8_t ip0, uint8_t ip1, uint8_t ip2, uint8_t ip3, int port, const uint8_t *buf, unsigned long buf_len)
{
	if (!hw_net_online_status()) return -1;

	sockaddr tSocketAddr;

	tSocketAddr.sa_family = AF_INET;
	tSocketAddr.sa_data[0] = (port & 0xFF00) >> 8;
	tSocketAddr.sa_data[1] = (port & 0x00FF);
	tSocketAddr.sa_data[2] = ip0;
	tSocketAddr.sa_data[3] = ip1;
	tSocketAddr.sa_data[4] = ip2;
	tSocketAddr.sa_data[5] = ip3;

	CC3000_START;
	int sent = sendto(ulSocket, buf, buf_len, 0, &tSocketAddr, sizeof(sockaddr));
//	TM_DEBUG("Sent udp packet %d to %d.%d.%d.%d:%d", sent, ip0, ip1, ip2, ip3, port);
	CC3000_END;
	return sent;
}
Beispiel #13
0
int tm_udp_readable (tm_socket_t sock)
{
	if (!hw_net_online_status()) return -1;
    CC3000_START;

    fd_set readSet;        // Socket file descriptors we want to wake up for, using select()
    FD_ZERO(&readSet);
    FD_SET(sock, &readSet);
    struct timeval timeout;

    timeout.tv_sec = 0;
    timeout.tv_usec = 0;

    int rcount = select(sock+1, &readSet, (fd_set *) 0, (fd_set *) 0, &timeout );
    int flag = FD_ISSET(sock, &readSet);
    CC3000_END;

    (void) rcount;
    return flag;
}
Beispiel #14
0
int tm_udp_listen (int ulSocket, int port)
{
	if (!hw_net_online_status()) return 1;

	sockaddr localSocketAddr;
	localSocketAddr.sa_family = AF_INET;
	localSocketAddr.sa_data[0] = (port & 0xFF00) >> 8;
	localSocketAddr.sa_data[1] = (port & 0x00FF);
	localSocketAddr.sa_data[2] = 0;
	localSocketAddr.sa_data[3] = 0;
	localSocketAddr.sa_data[4] = 0;
	localSocketAddr.sa_data[5] = 0;

	// Bind socket
	CC3000_START;
	int sockStatus;
	if ( (sockStatus = bind(ulSocket, &localSocketAddr, sizeof(sockaddr)) ) != 0) {
		TM_ERR("Binding UDP socket failed: %d", sockStatus);
	}
	CC3000_END;
	return sockStatus;
}
Beispiel #15
0
int tm_tcp_listen (tm_socket_t sock, uint16_t port)
{
	if (!hw_net_online_status()) return -1;
	CC3000_START;

	sockaddr_in localSocketAddr;
	localSocketAddr.sin_family = AF_INET;
	localSocketAddr.sin_port = htons(port);
	localSocketAddr.sin_addr.s_addr = 0;

	// Bind socket
	TM_DEBUG("Binding local socket...");
	int sockStatus;
	if ((sockStatus = bind(sock, (sockaddr *) &localSocketAddr, sizeof(localSocketAddr))) != 0) {
		TM_DEBUG("binding failed: %d", sockStatus);
		CC3000_END;
		return -1;
	}

	TM_DEBUG("Listening on local socket...");
	int listenStatus = listen(sock, 1);
	if (listenStatus != 0) {
		TM_DEBUG("cannot listen to socket: %d", listenStatus);
		CC3000_END;
		return -1;
	}

	char arg = SOCK_ON;
	if (setsockopt(sock, SOL_SOCKET, SOCKOPT_ACCEPT_NONBLOCK, &arg, sizeof(arg)) < 0) {
		TM_DEBUG("Couldn't set socket as non-blocking!");
		CC3000_END;
		return -1;
	}

	CC3000_END;
	return 0;
}