From 26b7e15572d15f03aeb3e30c826f292e2c6fd104 Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Wed, 01 Jan 2020 20:56:40 +0800
Subject: [PATCH] update app_ddns

---
 app_ddns/ddns_client.c |    2 
 app_ddns/ddns.conf     |   13 +++++-
 app_ddns/ddns_server.c |   56 ++++++++++++++++++++++------
 3 files changed, 56 insertions(+), 15 deletions(-)

diff --git a/app_ddns/ddns.conf b/app_ddns/ddns.conf
index 2210c52..7c79ec0 100644
--- a/app_ddns/ddns.conf
+++ b/app_ddns/ddns.conf
@@ -2,11 +2,20 @@
 [common]
 domain="studio.iot-yun.club"
 
+#[host0]
+#comment="localhost"
+#ip=127.0.0.1
+#port=10001
+
 [host1]
-ip=47.74.239.156
+comment="tencent"
+ip=122.51.234.174
 port=10001
 
 [host2]
-ip=122.51.234.174
+comment="aliyun"
+ip=47.74.239.156
 port=10001
 
+
+
diff --git a/app_ddns/ddns_client.c b/app_ddns/ddns_client.c
index 4b4d76f..ede812a 100644
--- a/app_ddns/ddns_client.c
+++ b/app_ddns/ddns_client.c
@@ -102,7 +102,7 @@
         return -1; 
     }
 
-    for(i=1; i<MAX_HOSTS; i++)
+    for(i=0; i<MAX_HOSTS; i++)
     {
         memset(key, 0, sizeof(key));
         snprintf(key, sizeof(key), "host%d:ip", i);
diff --git a/app_ddns/ddns_server.c b/app_ddns/ddns_server.c
index 6d2fa2c..ce261fd 100644
--- a/app_ddns/ddns_server.c
+++ b/app_ddns/ddns_server.c
@@ -17,7 +17,6 @@
 
 #include "logger.h"
 
-#define LOGGER              "/tmp/ddns_server.log"
 
 #define MAX_EVENTS          512
 #define ARRAY_SIZE(x)       (sizeof(x)/sizeof(x[0]))
@@ -29,7 +28,7 @@
 int main(int argc, char **argv)
 {
     int                       listenfd, connfd;
-    int                       serv_port = 0;
+    int                       serv_port = 10001;
     int                       daemon_run = 0;
     char                     *progname = NULL;
     int                       opt;
@@ -37,6 +36,13 @@
     int                       i, j;
     int                       found;
     char                      buf[1024];
+    int                       debug = 0;
+    char                     *logger_file="/tmp/ddns_server.log";
+
+    struct sockaddr_in        cliaddr;
+    socklen_t                 addrlen=sizeof(cliaddr);
+    int                       clifd;
+    char                      ipaddr[16];
 
     int                       epollfd;
     struct epoll_event        event;
@@ -46,6 +52,7 @@
     struct option             long_options[] = 
     {   
         {"daemon", no_argument, NULL, 'b'},
+        {"debug", no_argument, NULL, 'd'},
         {"port", required_argument, NULL, 'p'},
         {"help", no_argument, NULL, 'h'},
         {NULL, 0, NULL, 0}
@@ -54,12 +61,16 @@
     progname = basename(argv[0]);
 
     /*  Parser the command line parameters */
-    while ((opt = getopt_long(argc, argv, "bp:h", long_options, NULL)) != -1) 
+    while ((opt = getopt_long(argc, argv, "bdp:h", long_options, NULL)) != -1) 
     {   
         switch (opt)
         {   
             case 'b':
                 daemon_run=1;
+                break;
+
+            case 'd':
+                debug=1;
                 break;
 
             case 'p':
@@ -81,9 +92,12 @@
         return -1; 
     }
 
-    if( logger_init(LOGGER, LOG_LEVEL_DEBUG, 10) < 0 )
+    if( debug )
+        logger_file = DBG_LOG_FILE;
+
+    if( logger_init(logger_file, LOG_LEVEL_NRML, 10) < 0 )
     {
-        printf("initial logger file '%s' failure\n", LOGGER);
+        printf("initial logger file '%s' failure\n", logger_file);
         return 0;
     }
 
@@ -94,7 +108,7 @@
         log_err("ERROR: %s server listen on port %d failure\n", argv[0],serv_port);
         return -2;
     }
-    log_dbg("%s server start to listen on port %d\n", argv[0],serv_port);
+    log_nrml("%s server start to listen on port %d\n", argv[0],serv_port);
 
 
     /* set program running on background */
@@ -167,17 +181,35 @@
 
             else /* already connected client socket get data incoming */
             {
+                clifd = event_array[i].data.fd;
                 memset(buf, 0, sizeof(buf));
-                if( (rv=read(event_array[i].data.fd, buf, sizeof(buf))) <= 0)
+                if( (rv=read(clifd, buf, sizeof(buf))) <= 0)
                 {
-                    log_err("socket[%d] already get disconncet and will be removed.\n", event_array[i].data.fd);
-                    epoll_ctl(epollfd, EPOLL_CTL_DEL, event_array[i].data.fd, NULL);
-                    close(event_array[i].data.fd);
+                    log_err("socket[%d] already get disconncet and will be removed.\n", clifd);
+                    epoll_ctl(epollfd, EPOLL_CTL_DEL, clifd, NULL);
+                    close(clifd);
                     continue;
                 }
                 else 
                 {
-                    log_dbg("socket[%d] read get %d bytes data: %s\n", event_array[i].data.fd, rv, buf); 
+                    log_dbg("socket[%d] read get %d bytes data: %s\n", clifd, rv, buf); 
+
+                    /* get socket client IP address information */
+                    if( getpeername(clifd, (struct sockaddr *)&cliaddr, &addrlen) < 0 ) 
+                    {
+                        log_err("getpeername get socket client[%d] IP address failure: %s\n", clifd, strerror(errno));
+                        continue;
+                    }
+
+                    memset(ipaddr, 0, sizeof(ipaddr));
+                    if( !inet_ntop(AF_INET, &cliaddr.sin_addr, ipaddr, sizeof(ipaddr)) )
+                    {
+                        log_err("convert sockaddr to IP address character string failure: %s\n", strerror(errno));
+                        continue;
+                    }
+
+
+                    log_nrml("Domain: %s=>%s\n", buf, ipaddr);
                 } 
             } 
         } /* for(i=0; i<rv; i++) */ 
@@ -273,6 +305,6 @@
      limit.rlim_cur  = limit.rlim_max;
      setrlimit(RLIMIT_NOFILE, &limit );
 
-     log_dbg("set socket open fd max count to %d\n", (int)limit.rlim_max);
+     log_nrml("set socket open fd max count to %d\n", (int)limit.rlim_max);
 }
 

--
Gitblit v1.9.1