ssize_t nabto_read( nabto_socket_t socket, uint8_t* buf, size_t len, uint32_t* addr, uint16_t* port ) { int res; struct freertos_sockaddr xAddress; socklen_t xAddresslen = sizeof(xAddress); memset( &xAddress, 0, sizeof( xAddress ) ); res = FreeRTOS_recvfrom( socket, buf, ( int ) len , 0, &xAddress, &xAddresslen ); if( res > 0 ) { *addr = FreeRTOS_htonl( xAddress.sin_addr ); *port = FreeRTOS_htons( xAddress.sin_port ); } else { res = 0; } return res; }
static void prvSwapFields( struct SNtpPacket *pxPacket) { /* NTP messages are big-endian */ pxPacket->rootDelay = FreeRTOS_htonl( pxPacket->rootDelay ); pxPacket->rootDispersion = FreeRTOS_htonl( pxPacket->rootDispersion ); pxPacket->referenceTimestamp.seconds = FreeRTOS_htonl( pxPacket->referenceTimestamp.seconds ); pxPacket->referenceTimestamp.fraction = FreeRTOS_htonl( pxPacket->referenceTimestamp.fraction ); pxPacket->originateTimestamp.seconds = FreeRTOS_htonl( pxPacket->originateTimestamp.seconds ); pxPacket->originateTimestamp.fraction = FreeRTOS_htonl( pxPacket->originateTimestamp.fraction ); pxPacket->receiveTimestamp.seconds = FreeRTOS_htonl( pxPacket->receiveTimestamp.seconds ); pxPacket->receiveTimestamp.fraction = FreeRTOS_htonl( pxPacket->receiveTimestamp.fraction ); pxPacket->transmitTimestamp.seconds = FreeRTOS_htonl( pxPacket->transmitTimestamp.seconds ); pxPacket->transmitTimestamp.fraction = FreeRTOS_htonl( pxPacket->transmitTimestamp.fraction ); }
ssize_t nabto_write( nabto_socket_t socket, const uint8_t* buf, size_t len, uint32_t addr, uint16_t port ) { int res; struct freertos_sockaddr xAddress; memset( &xAddress, 0, sizeof( xAddress ) ); xAddress.sin_addr = FreeRTOS_htonl( addr ); xAddress.sin_port = FreeRTOS_htons( port ); res = FreeRTOS_sendto( socket, buf, ( int )len, 0, ( struct freertos_sockaddr * ) &xAddress, sizeof( xAddress ) ); return res; }
bool nabto_init_socket( uint32_t localAddr, uint16_t* localPort, nabto_socket_t* socketDescriptor ) { int to = 0; struct freertos_sockaddr xAddress, *pxAddressToUse; bool bReturn = true; if (MAX_SOCKETS <= nSockets) { bReturn = false; } else { *socketDescriptor = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP ); if( NULL == *socketDescriptor ) { bReturn = false; } else { memset( &xAddress, 0, sizeof( xAddress ) ); xAddress.sin_addr = FreeRTOS_htonl( localAddr ); xAddress.sin_port = FreeRTOS_htons( *localPort ); pxAddressToUse = &xAddress; if( 0 > FreeRTOS_bind(*socketDescriptor, pxAddressToUse, sizeof( xAddress ) ) ) { FreeRTOS_closesocket( *socketDescriptor ); bReturn = false; } else { /* Set receive time out to 0. Timeouts are performed using a select() call. */ FreeRTOS_setsockopt( *socketDescriptor, 0, FREERTOS_SO_RCVTIMEO, &to, sizeof( to ) ); activeSockets[nSockets++] = *socketDescriptor; } *localPort = FreeRTOS_htons( xAddress.sin_port ); } } return bReturn; }
nabto_dns_status_t nabto_dns_is_resolved( const char *id, uint32_t* v4addr ) { uint32_t addr; nabto_dns_status_t status; addr = FreeRTOS_gethostbyname( id ); if( 0 == addr ) { status = NABTO_DNS_ERROR; } else { *v4addr = FreeRTOS_htonl(addr); status = NABTO_DNS_OK; } return status; }