|
@@ -69,7 +69,9 @@
|
|
|
#define AP_STATE_AP_START 2
|
|
|
#define AP_STATE_SERVER_LISTEN 3
|
|
|
|
|
|
-#define LISTEN_PORT 8856
|
|
|
+#define LISTEN_PORT_UDP 8857
|
|
|
+#define LISTEN_PORT_TCP 8856
|
|
|
+
|
|
|
#define CONNECTION_LIMIT 1
|
|
|
#define PROTOCOL_ADDR 0
|
|
|
|
|
@@ -686,18 +688,63 @@ int setWPAconf()
|
|
|
}
|
|
|
|
|
|
//==========================================
|
|
|
-// Socket server routine
|
|
|
+// UDP socket server routine
|
|
|
+//==========================================
|
|
|
+int udpSocketServerStart()
|
|
|
+{
|
|
|
+ int sockFd;
|
|
|
+ struct sockaddr_in servaddr;
|
|
|
+ struct sockaddr_in peeraddr;
|
|
|
+ socklen_t peerlen = sizeof(peeraddr);
|
|
|
+ uint8_t inputBuffer[2048] = {};
|
|
|
+ uint8_t outBuffer[2048] = {};
|
|
|
+ int16_t read_size;
|
|
|
+ int16_t tx_size;
|
|
|
+
|
|
|
+ memset(&servaddr, 0, sizeof(servaddr));
|
|
|
+ servaddr.sin_family = AF_INET;
|
|
|
+ servaddr.sin_port = htons(LISTEN_PORT_UDP);
|
|
|
+ servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
|
|
|
+
|
|
|
+ if ((sockFd = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
|
|
|
+ return FAIL;
|
|
|
+
|
|
|
+ if (bind(sockFd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
|
|
|
+ return FAIL;
|
|
|
+
|
|
|
+ for(;;)
|
|
|
+ {
|
|
|
+ if((read_size = recvfrom(sockFd, inputBuffer, sizeof(inputBuffer), 0, (struct sockaddr *)&peeraddr, &peerlen)) > 0)
|
|
|
+ {
|
|
|
+ DEBUG_INFO("Revieve from: %s:%d\r\n", inet_ntoa(peeraddr.sin_addr), htons(peeraddr.sin_port));
|
|
|
+ DEBUG_INFO("Data: %s\r\n", inputBuffer);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * TODO:
|
|
|
+ * - UDP broadcast protocol process here
|
|
|
+ */
|
|
|
+ memcpy(outBuffer, inputBuffer, read_size);
|
|
|
+ tx_size = read_size;
|
|
|
+
|
|
|
+ sendto(sockFd, outBuffer, tx_size, 0, (struct sockaddr *)&peeraddr, peerlen);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return FAIL;
|
|
|
+}
|
|
|
+
|
|
|
+//==========================================
|
|
|
+// TCP socket server routine
|
|
|
//==========================================
|
|
|
-int socketServerStart()
|
|
|
+int tcpSocketServerStart()
|
|
|
{
|
|
|
int sockFd = 0;
|
|
|
int clientSockFd = 0;
|
|
|
uint8_t inputBuffer[2048] = {};
|
|
|
uint8_t outBuffer[2048] = {};
|
|
|
- uint8_t cmdBuf[128];
|
|
|
uint8_t chksum;
|
|
|
- int8_t read_size;
|
|
|
- int8_t tx_size;
|
|
|
+ int16_t read_size;
|
|
|
+ int16_t tx_size;
|
|
|
struct sockaddr_in serverInfo, clientInfo;
|
|
|
socklen_t addrlen = sizeof(clientInfo);
|
|
|
|
|
@@ -706,13 +753,13 @@ int socketServerStart()
|
|
|
{
|
|
|
DEBUG_ERROR("InitSocketServer NG\n");
|
|
|
sleep(5);
|
|
|
- return 0;
|
|
|
+ return FAIL;
|
|
|
}
|
|
|
|
|
|
bzero(&serverInfo,sizeof(serverInfo));
|
|
|
serverInfo.sin_family = PF_INET;
|
|
|
serverInfo.sin_addr.s_addr = htonl(INADDR_ANY);
|
|
|
- serverInfo.sin_port = htons(LISTEN_PORT);
|
|
|
+ serverInfo.sin_port = htons(LISTEN_PORT_TCP);
|
|
|
bind(sockFd, (struct sockaddr *)&serverInfo, sizeof(serverInfo));
|
|
|
listen(sockFd, CONNECTION_LIMIT);
|
|
|
|
|
@@ -728,6 +775,10 @@ int socketServerStart()
|
|
|
{
|
|
|
chksum = 0;
|
|
|
memset(outBuffer, 0x00, sizeof(outBuffer));
|
|
|
+ /*
|
|
|
+ * TODO:
|
|
|
+ * - TCP broadcast protocol process here
|
|
|
+ */
|
|
|
|
|
|
switch(inputBuffer[3])
|
|
|
{
|
|
@@ -765,7 +816,7 @@ int socketServerStart()
|
|
|
outBuffer[4] = 0x01;
|
|
|
outBuffer[5] = 0x00;
|
|
|
outBuffer[6] = 0x00;
|
|
|
- outBuffer[7] = 0x00;
|
|
|
+ outBuffer[7] = chksum;
|
|
|
}
|
|
|
|
|
|
send(clientSockFd, outBuffer, tx_size, 0);
|
|
@@ -784,7 +835,7 @@ int socketServerStart()
|
|
|
sleep(1);
|
|
|
}
|
|
|
|
|
|
- return -1;
|
|
|
+ return FAIL;
|
|
|
}
|
|
|
|
|
|
//==========================================
|
|
@@ -1242,11 +1293,26 @@ int main(void)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- //check internet status
|
|
|
+ // UDP socket server start
|
|
|
+ pid = fork();
|
|
|
+ if(pid == 0)
|
|
|
+ {
|
|
|
+ if(udpSocketServerStart() == FAIL)
|
|
|
+ {
|
|
|
+ DEBUG_ERROR("UDP socket server down.\r\n");
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // TCP socket server start
|
|
|
pid = fork();
|
|
|
if(pid == 0)
|
|
|
{
|
|
|
- socketServerStart();
|
|
|
+ if(tcpSocketServerStart() == FAIL)
|
|
|
+ {
|
|
|
+ DEBUG_ERROR("TCP socket server down.\r\n");
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//=============================================
|