初始提交
This commit is contained in:
103
cli/communicator/cli_lwip_api.c
Executable file
103
cli/communicator/cli_lwip_api.c
Executable file
@@ -0,0 +1,103 @@
|
||||
/****************************************************************************
|
||||
|
||||
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*/
|
||||
Reference in New Issue
Block a user