104 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/****************************************************************************
 | 
						|
 | 
						|
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
 | 
						|
 | 
						|
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
 | 
						|
be copied by any method or incorporated into another program without
 | 
						|
the express written consent of Aerospace C.Power. This Information or any portion
 | 
						|
thereof remains the property of Aerospace C.Power. The Information contained herein
 | 
						|
is believed to be accurate and Aerospace C.Power assumes no responsibility or
 | 
						|
liability for its use in any way and conveys no license or title under
 | 
						|
any patent or copyright and makes no representation or warranty that this
 | 
						|
Information is free from patent or copyright infringement.
 | 
						|
 | 
						|
****************************************************************************/
 | 
						|
 | 
						|
#include "lwip/sockets.h"
 | 
						|
#include "iot_config.h"
 | 
						|
 | 
						|
#if (IOT_CLI_INF_MODE == IOT_CLI_INF_MODE_LWIP_SOCKET)
 | 
						|
 | 
						|
int cli_open_lwip_udp_socket(const char* bind_ip, uint32_t port)
 | 
						|
{
 | 
						|
    struct sockaddr_in bindaddr = {0};
 | 
						|
    bindaddr.sin_addr.s_addr = inet_addr(bind_ip);
 | 
						|
    bindaddr.sin_family = AF_INET;
 | 
						|
    bindaddr.sin_len = sizeof(bindaddr);
 | 
						|
    bindaddr.sin_port = PP_HTONS((uint16_t)port);
 | 
						|
 | 
						|
    int socket = lwip_socket(AF_INET, SOCK_DGRAM, 0);
 | 
						|
    lwip_bind(socket, (const struct sockaddr*)&bindaddr, sizeof(bindaddr));
 | 
						|
    return socket;
 | 
						|
}
 | 
						|
 | 
						|
int cli_lwip_sendto(int s, const void *data, size_t size,
 | 
						|
    const char* remote_ip, uint32_t port)
 | 
						|
{
 | 
						|
    struct sockaddr_in remoteaddr = { 0 };
 | 
						|
    remoteaddr.sin_addr.s_addr = inet_addr(remote_ip);
 | 
						|
    remoteaddr.sin_family = AF_INET;
 | 
						|
    remoteaddr.sin_len = sizeof(remoteaddr);
 | 
						|
    remoteaddr.sin_port = PP_HTONS((uint16_t)port);;
 | 
						|
 | 
						|
    return lwip_sendto(s, data, size, 0,
 | 
						|
        (const struct sockaddr*)&remoteaddr, sizeof(remoteaddr));
 | 
						|
}
 | 
						|
 | 
						|
int cli_lwip_recvfrom(int s, void *mem, size_t len, int flags,
 | 
						|
    void *from, uint32_t addrlen)
 | 
						|
{
 | 
						|
    return lwip_recvfrom(s, mem, len, flags, (struct sockaddr*)from,
 | 
						|
        (socklen_t*)&addrlen);
 | 
						|
}
 | 
						|
 | 
						|
int cli_open_lwip_tcp_socket(uint32_t port)
 | 
						|
{
 | 
						|
    struct sockaddr_in bindaddr = { 0 };
 | 
						|
 | 
						|
    bindaddr.sin_addr.s_addr = IPADDR_ANY;
 | 
						|
    bindaddr.sin_family = AF_INET;
 | 
						|
    bindaddr.sin_len = sizeof(bindaddr);
 | 
						|
    bindaddr.sin_port = PP_HTONS((uint16_t)port);
 | 
						|
 | 
						|
    int skt = lwip_socket(AF_INET, SOCK_STREAM, 0);
 | 
						|
    if (skt < 0) {
 | 
						|
        return skt;
 | 
						|
    }
 | 
						|
    int ret = lwip_bind(skt, (const struct sockaddr*)&bindaddr,
 | 
						|
        sizeof(bindaddr));
 | 
						|
    if (ret < 0) {
 | 
						|
        return ret;
 | 
						|
    }
 | 
						|
    int opt = 1;
 | 
						|
    setsockopt(skt, SOL_SOCKET, SO_KEEPALIVE, &opt, sizeof(int));
 | 
						|
    setsockopt(skt, IPPROTO_TCP, TCP_NODELAY, &opt, sizeof(int));
 | 
						|
    ret = lwip_listen(skt, 1); // currently, only support 1 client
 | 
						|
    if (ret < 0) {
 | 
						|
        return ret;
 | 
						|
    }
 | 
						|
    return skt;
 | 
						|
}
 | 
						|
 | 
						|
int cli_lwip_accept(int s)
 | 
						|
{
 | 
						|
    struct sockaddr_in remote;
 | 
						|
    socklen_t len = sizeof(remote);
 | 
						|
    int opt = 1;
 | 
						|
    int new_s = lwip_accept(s, (struct sockaddr*)&remote, &len);
 | 
						|
    setsockopt(new_s, IPPROTO_TCP, TCP_NODELAY, &opt, sizeof(int));
 | 
						|
 | 
						|
    return new_s;
 | 
						|
}
 | 
						|
 | 
						|
int cli_lwip_read(int s, void*men, size_t len)
 | 
						|
{
 | 
						|
    return lwip_read(s, men, len);
 | 
						|
}
 | 
						|
 | 
						|
int cli_lwip_send(int s, void*buf, size_t len)
 | 
						|
{
 | 
						|
    return lwip_send(s, buf, len, 0);
 | 
						|
}
 | 
						|
 | 
						|
#endif /*IOT_CLI_INF_MODE == IOT_CLI_INF_MODE_LWIP_SOCKET*/
 |