[feature]liblynq-at-extension.so and demo app

Change-Id: I6a66b590774054d29b19352b126de2c24561c43e
diff --git a/lib/liblynq-at-extension/lynq_at.cpp b/lib/liblynq-at-extension/lynq_at.cpp
new file mode 100755
index 0000000..7440c99
--- /dev/null
+++ b/lib/liblynq-at-extension/lynq_at.cpp
@@ -0,0 +1,88 @@
+#include<sys/types.h>
+#include<sys/socket.h>
+#include<unistd.h>
+#include<arpa/inet.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <string.h>
+#include <log/log.h>
+#include "liblog/lynq_deflog.h"
+#include "include/lib_at/lynq_at.h"
+
+#define LYNQ_AT_SERVICE_PORT 8087
+#define OUT_MAX_SIZE 1024
+#define USER_LOG_TAG "LYNQ_AT"
+
+int sockfd = 0;
+char *output = NULL;
+struct sockaddr_in addr_serv;
+socklen_t len;
+
+/**
+ * @brief type:in send third at cmd to service
+ * @param ext_at type:in input at cmd
+ * @param callback type:in
+ * @return int 
+ */
+int lynq_reg_third_at(const char *ext_at, LYNQ_AT_CALLBACK callback)
+{
+    LYDBGLOG("lynq_reg_third_at start\n");
+    sockfd=socket(AF_INET,SOCK_DGRAM,0);
+    memset(&addr_serv, 0, sizeof(addr_serv));
+    addr_serv.sin_family =AF_INET;
+    addr_serv.sin_port =htons(LYNQ_AT_SERVICE_PORT);
+    addr_serv.sin_addr.s_addr = htonl(INADDR_ANY); 
+    len=sizeof(addr_serv);
+    int len_buf = strlen(ext_at);
+    int send = sendto(sockfd, ext_at, len_buf,0,(struct sockaddr*)&addr_serv,len);
+    if(send < 0)
+    {
+        LYDBGLOG("send fail\n");
+        return -1;
+    }
+    char *input = NULL;
+    output = (char *)malloc(sizeof(char)*OUT_MAX_SIZE);
+    if(NULL == output)
+    {
+        LYDBGLOG("malloc fail\n");
+        return -1;
+    }
+    while (1)
+    {
+        /*receive at cmd*/
+        LYDBGLOG("lynq_reg_third_at receive at cmd\n");
+        char at_cmd[100] = {0};
+        int recv = recvfrom(sockfd,at_cmd,sizeof(at_cmd),0,(struct sockaddr*)&addr_serv,&len);
+        if(recv < 0)
+        {
+            LYDBGLOG("recv fail\n");
+            return -1;
+        }
+        input = at_cmd;
+        callback(input, output, OUT_MAX_SIZE);
+        if(NULL == output)
+        {
+            LYDBGLOG("output = null\n");
+            return -1;
+        }
+        LYDBGLOG("lynq_reg_third_at send output to service\n");
+        int send = sendto(sockfd, output, strlen(output),0,(struct sockaddr*)&addr_serv,len);
+        if(send < 0)
+        {
+            LYDBGLOG("send fail\n");
+            continue;
+        }
+    }
+    if(output != NULL)
+    {
+        free(output);
+        output = NULL;
+    }
+    if(sockfd != 0)
+    {
+        close(sockfd);
+    }
+    return 0;
+}
+