[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;
+}
+