[Feature][S300][task-view-902][project] add s300 common project
Change-Id: I5e0ce7e50fb0b968befef03ad42bae55f43287d6
diff --git a/lynq/S300_COMMON/ap/app/wefota/wefota_socket.c b/lynq/S300_COMMON/ap/app/wefota/wefota_socket.c
new file mode 100755
index 0000000..35c4ee1
--- /dev/null
+++ b/lynq/S300_COMMON/ap/app/wefota/wefota_socket.c
@@ -0,0 +1,77 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include "wefota_socket.h"
+#include "wefota_main.h"
+#include <errno.h>
+
+#define WEFOTA_RECV_TIMEOUT_SEC 3
+
+int create_udp_socket(void) {
+ int sock = socket(AF_INET, SOCK_DGRAM, 0);
+ if (sock < 0) {
+ perror("socket create failed");
+ return -1;
+ }
+ return sock;
+}
+
+void close_udp_socket(int sock) {
+ if (sock >= 0) {
+ close(sock);
+ }
+}
+
+int init_server_addr(struct sockaddr_in* addr, const char* ip, int port) {
+ if (addr == NULL || ip == NULL || port <= 0) {
+ return -1;
+ }
+
+ memset(addr, 0, sizeof(*addr));
+ addr->sin_family = AF_INET;
+ if (inet_pton(AF_INET, ip, &(addr->sin_addr)) <= 0) {
+ perror("wrong ip address");
+ return -1;
+ }
+ addr->sin_port = htons(port);
+ return 0;
+}
+
+int send_message(int sock, const void* msg, size_t len, struct sockaddr_in* server_addr) {
+ int sent = sendto(sock, msg, len, 0,
+ (struct sockaddr*)server_addr, sizeof(*server_addr));
+ if (sent < 0) {
+ perror("send message failed");
+ return -1;
+ }
+ printf("send message end, sent=%d\n", sent);
+ return 0;
+}
+
+int receive_message(int sock, void* response, size_t response_size, struct sockaddr_in* server_addr) {
+ set_recv_timeout(sock, WEFOTA_RECV_TIMEOUT_SEC);
+ socklen_t addr_len = sizeof(*server_addr);
+ int received = recvfrom(sock, response, response_size, 0,
+ (struct sockaddr*)server_addr, &addr_len);
+ if (received < 0)
+ {
+ printf("error num:%d\n", errno);
+ perror("recvfrom");
+ }
+ printf("recv message end, received=%d\n", received);
+ return received;
+}
+
+int set_recv_timeout(int sock, int timeout_sec) {
+ struct timeval tv;
+ tv.tv_sec = timeout_sec;
+ tv.tv_usec = 0;
+
+ if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) < 0) {
+ perror("set socket timeout failed");
+ return -1;
+ }
+ return 0;
+}