diff --git a/src/lynq/lib/liblynq-protcl/include/ftp/lynq_ftp.h b/src/lynq/lib/liblynq-protcl/include/ftp/lynq_ftp.h
new file mode 100644
index 0000000..12e3f09
--- /dev/null
+++ b/src/lynq/lib/liblynq-protcl/include/ftp/lynq_ftp.h
@@ -0,0 +1,171 @@
+#include<stdio.h>
+#include<sys/socket.h>
+#include<stdlib.h>
+#include<string.h>
+#include<strings.h>
+#include<unistd.h>
+#include<netinet/in.h>
+#include<netdb.h>
+#include<errno.h>
+#include<sys/types.h>
+#include<sys/stat.h>
+#include<fcntl.h>
+#include "liblog/liblog.h"
+#include "liblog/lynq_deflog.h"
+
+
+#define SERV_PORT 21
+#define MAXSIZE 1024
+//#define MAXBUF 1024
+#define FTP_FILE_TYPE_LEN 4
+#define FTP_MAX_ASCII_LEN 1024
+#define FTPSHMPATH "/"
+#define FTPSHMID  'K'
+
+
+int error;
+char errorbuf[10];
+
+#if 1
+/*log error info */
+
+#define FTP_NET_ERROR                  	31	//network
+#define FTP_DNS_ERROR                 	32	//DNS
+#define FTP_CONNECT_ERROR           	33	//connect
+#define FTP_TIMEROUT                    34	//time out
+#define FTP_SERVER_ERROR             	35	//server
+#define FTP_OPERATION_NOT_ALLOW         36	//operation not allow
+#define FTP_REPLAY_ERROR               	37	//replay
+#define FTP_USER_ERROR                 	38	//user
+#define FTP_PASSWORD_ERROR              39	//pwd
+#define FTP_TYPE_ERROR                 	40	//type
+#define FTP_REST_ERROR                 	41	//rest
+#define FTP_PASSIVE_ERROR              	42	//passive
+#define FTP_ACTIVE_ERROR               	43	//active
+#define FTP_OPERATE_ERROR              	44	//operate
+#define FTP_UPLOAD_ERROR               	45	//upload
+#define FTP_DOWNLOAD_ERROR              46	//download
+#define FTP_FILE_ACTION_ERROR	        47	//action error
+#define FTP_MANUAL_QUIT                	48	//manual quit
+#define FTP_ERROR_FLAG                 	49
+#define FTP_SOCK_ERROR                 	50	//socket error
+#define FTP_RCV_ERROR                 	51	//rcv error
+#define FTP_SEND_ERROR                 	52	//send error 
+#define FTP_CLOSE_ERROR                 53    //close error
+#define FTP_READ_ERROR                 	54    //read error
+#define FTP_WRITE_ERROR                 55    //write error
+#define FTP_LS_ERROR                 55    //ls error
+
+#endif
+
+#if 1
+/***********ftp return vauil******************/
+
+#define FTP_100_INIT_WAIT_LAST_CMD			100
+#define FTP_125_TRANSFER_START				125
+#define FTP_150_OPEN_DATA_CONNECT			150
+
+#define FTP_200_COMMAND_SUCCESSFUL			200
+#define FTP_213_FILE_STATUS				213
+#define FTP_220_SERVER_READY_FOR_NEW_USER		220
+#define FTP_221_CLOSE_CONTROL_CONNECT			221
+#define FTP_226_TRANSFER_COMPLATE			226
+#define FTP_227_ENTRY_PASV_MODE				227
+#define FTP_230_USER_LOGGED_IN				230
+#define FTP_250_REQUEST_FILE_ACTION_OK			250
+#define FTP_257_PATH_NAME				257
+
+
+#define FTP_331_NAMEOK_PASS_REQUIRE			331
+#define FTP_350_FILE_OPER_OK_WAIT_NEXT			350
+
+#define FTP_421_CONTROL_LINK_SHUTDOWN 			421
+#define FTP_425_CANNOT_OPEN_DATA_CONNECT		425
+
+
+#define FTP_500_COMMAND_ERROR				500
+#define FTP_501_PARAMETER_ERROR				501
+#define FTP_502_COMMAND_NOT_IMP				502
+#define FTP_503_BAD_SEQUENCE_OF_CMD			503
+
+#define FTP_530_CANNOT_LOG_IN				530
+#define FTP_532_NEED_ACCOUNT				532
+#define FTP_534_CANNOT_CONN_CAUSE_SSL			534
+#define FTP_550_FILE_CANT_FIND				550
+
+
+#endif
+
+typedef struct ftp_socket_info
+{
+	int id;
+	int index;
+	char protocol[10];
+	int  session;
+	char action[10];
+
+	int control_sockfd;
+	int portnum;//port num 1~65535
+	char is_pasv_mode[225];//0:initiative 1:pasv
+	char file_type[FTP_FILE_TYPE_LEN+1];//type "A" or "I"
+	char put_opt[FTP_FILE_TYPE_LEN+1];// "APPE", "STOU", "STOR"
+	int rest; //xu chuan wei zhi;
+	char sevname[FTP_MAX_ASCII_LEN + 1];//addr :192.168.1.89;
+	char username[FTP_MAX_ASCII_LEN + 1];//user
+	char pw[FTP_MAX_ASCII_LEN + 1];//password
+	char getfilename[FTP_MAX_ASCII_LEN + 1];//get file  name;
+	char getfilename_path[FTP_MAX_ASCII_LEN + 1];//get file path;
+	char putfilename[FTP_MAX_ASCII_LEN + 1];//put file name;
+	char putfilename_path[FTP_MAX_ASCII_LEN + 1];//put file path;
+	//char conmd[255];
+	char dir[1024];
+	char del_mkr_filename[1024];
+	char respond[1024];
+	int flag;
+	int flag1;
+	int modify_thread;
+	int add_thread;
+}lynq_ftp_socker_info;
+
+
+int control_sockfd;
+int login_yes;
+int f;
+char putpathname[225];
+char hoster[255];
+struct sockaddr_in servaddr;
+char rbuf[1024],rbuf1[1024],wbuf[1024],wbuf1[1024];
+int ftpshm_id;
+lynq_ftp_socker_info *FTP;
+
+int uartfd;
+int usbfd;
+//char BUF[1024];
+
+
+
+int  lynq_ftp_put(int sck,char *pUploadFileName_s);
+extern int lynq_ftp_login(lynq_ftp_socker_info *FTP);
+extern void zeromery(char *a,int len);
+extern char *itoa(int value, char *string, int radix);
+extern void lynq_ftp_pwd(int control_sockfd);
+extern int strtosrv(char *str);
+extern void lynq_ftp_get(int sck, char *pDownloadFileName, int session);
+extern void lynq_ftp_rest(int control_sockfd);
+extern int cliopen(char *hoster, int port);
+extern int lynq_ftp_download(lynq_ftp_socker_info* FTP);
+extern int lynq_ftp_up(lynq_ftp_socker_info* FTP);
+int lynq_ftp_ls(lynq_ftp_socker_info* FTP);
+void lynq_ftp_cd(lynq_ftp_socker_info* FTP);
+void lynq_ftp_creat_mkd(lynq_ftp_socker_info* FTP);
+void lynq_ftp_delete_mkd(lynq_ftp_socker_info* FTP);
+void ftp_list(int sockfd, int session);
+void lynq_ftp_quit(lynq_ftp_socker_info* FTP);
+void lynq_ftp_deletefile_mkd(lynq_ftp_socker_info* FTP);
+
+
+extern void init(lynq_ftp_socker_info* FTP);
+extern int lynq_ftpshm_create( void );
+extern lynq_ftp_socker_info *ftpshm_act(int shmid);
+extern void lynq_ftpshm_deact(lynq_ftp_socker_info *shm);
+extern void lynq_ftpshm_del(int shmid);
diff --git a/src/lynq/lib/liblynq-protcl/include/http/lynq_http.h b/src/lynq/lib/liblynq-protcl/include/http/lynq_http.h
new file mode 100644
index 0000000..455abc2
--- /dev/null
+++ b/src/lynq/lib/liblynq-protcl/include/http/lynq_http.h
@@ -0,0 +1,185 @@
+#ifndef _LYNQ_HTTP_H_
+#define _LYNQ_HTTP_H_
+
+#define HTTP_API
+
+
+#include "lynq_http_parser.h"
+#include "lynq_msgq.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <pthread.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/select.h>
+#include <time.h> 
+#include <ctype.h>
+#include <netdb.h>
+#include <strings.h>
+#include <openssl/ssl.h>
+#include <openssl/err.h>
+
+#ifdef _cplusplus
+extern "C" {
+#endif
+
+#define HTTP_INVALID_SOCKET -1
+#define HTTP_EINTR EINTR
+#define HTTP_EINPROGRESS EINPROGRESS
+#define HTTP_EWOULDBLOCK EWOULDBLOCK
+#define HTTP_EALREADY EALREADY
+
+#define free_member(member) if((member)) { free(member); (member) = NULL; }
+#define close_socket(fd) if(fd != HTTP_INVALID_SOCKET) { socket_close(fd); fd = HTTP_INVALID_SOCKET; }
+#define close_file(pf) if(pf != NULL) { fclose(pf); pf = NULL; }
+
+#define RECV_BUF_SIZE 4 * 1024
+
+#define socket_close close
+
+
+enum parser_statue_e { PARSERD_NONE = 0, PARSERD_FIELD, PARSERD_VALUE, PARSERD_BODY };
+
+enum proto_type_e { PROTO_HTTP = 0, PROTO_HTTPS };
+	typedef enum http_request_method_e 
+	{ 
+		M_GET = 0, 
+		M_POST, 
+		M_HEAD 
+	} http_request_method_e;
+
+	typedef enum http_connent_method_e 
+	{ 
+		M_CLOSE = 0, 
+		M_KEEP,
+	} http_connent_method_e;
+
+	enum http_error_e
+	{
+		ERR_OK = 0,
+
+		ERR_INVALID_PARAM,
+		ERR_OUT_MEMORY,
+		ERR_OPEN_FILE,
+		ERR_PARSE_REP,
+		ERR_URL_INVALID,
+		ERR_URL_INVALID_PROTO,
+		ERR_URL_INVALID_HOST,
+		ERR_URL_INVALID_IP,
+		ERR_URL_RESOLVED_HOST,
+		ERR_SOCKET_CREATE = 10,
+		ERR_SOCKET_SET_OPT,
+		ERR_SOCKET_NOBLOCKING,
+		ERR_SOCKET_CONNECT,
+		ERR_SOCKET_CONNECT_TIMEOUT,
+		ERR_SOCKET_SELECT,
+		ERR_SOCKET_WRITE,
+		ERR_SOCKET_READ,
+		ERR_SOCKET_TIMEOUT,
+		ERR_SOCKET_CLOSED,
+		ERR_SOCKET_GET_OPT = 20,
+		ERR_SSL_CREATE_CTX,
+		ERR_SSL_CREATE_SSL,
+		ERR_SSL_SET_FD,
+		ERR_SSL_CONNECT,
+		ERR_SSL_WRITE,
+		ERR_SSL_READ,
+		ERR_NOCERT,
+		ERR_MSG
+	};
+
+	struct lynq_http_client_t;
+	typedef struct lynq_http_client_t lynq_http_client_t;
+	typedef int (*data_recv_cb_t)( lynq_http_client_t* http, const char* data, int size, int total, void* user);
+
+ typedef int socket_t;
+
+ 
+ struct lynq_http_client_t
+ {
+	int index;
+
+	char protocol[10];
+	int  session;
+
+	char action[10];
+	char *data;
+	char *section;
+	int request_method;
+	int connent_method;
+	int sockfd;
+	int modify_thread;
+	int add_thread;
+
+	FILE* pf;
+	char* filename;
+	char* body;
+	char* redirect_url;
+	char* header_field;
+	char* header_value;
+
+	char* post_data;
+	char* url;
+	int post_data_len;
+	struct http_parser_url u;
+	char* user_header;
+	int user_header_len;
+	
+	http_parser_settings parser_setting;
+	struct http_parser parser;
+
+
+	char* user;
+	data_recv_cb_t recv_cb;
+	
+	unsigned long body_len;
+	unsigned long content_length;
+
+	enum http_request_method_e method;
+	enum http_connent_method_e conn_method;
+	enum proto_type_e proto_type;
+
+	unsigned short field_size;
+	unsigned short value_size;
+	unsigned short cur_field_size;
+	unsigned short cur_value_size;
+	SSL_CTX *ctx;
+	SSL *ssl;
+
+	socket_t fd; 
+	int timeout;
+	
+	short status_code;
+	char parser_statue;
+	char error_code;
+	unsigned cancel   : 1;
+	unsigned exit	  : 1;
+	unsigned download : 1;
+	unsigned redirect : 1;
+};
+
+
+int lynq_http_init(void);
+lynq_http_client_t* lynq_http_new();
+void lynq_http_destroy(lynq_http_client_t* http);
+int lynq_http_get_error_code(lynq_http_client_t* http);
+const char* lynq_http_sync_request(lynq_http_client_t* http, const char* url, http_request_method_e m, http_connent_method_e c_m);
+const char* lynq_http_sync_post_request(lynq_http_client_t* http, char* url, char* post_data, http_request_method_e m, http_connent_method_e c_m);
+int lynq_http_sync_download_file(lynq_http_client_t* http, char* url, char* filepath, http_request_method_e m, http_connent_method_e c_m);
+int lynq_http_set_data_recv_cb(lynq_http_client_t* http, data_recv_cb_t cb, void* user);
+int lynq_http_exit(lynq_http_client_t* http);
+int lynq_http_data_send(char *data);
+void *lynq_http_write_head_data(lynq_http_client_t* http);
+#ifdef _cplusplus
+}
+#endif
+#endif
+
diff --git a/src/lynq/lib/liblynq-protcl/include/http/lynq_http_parser.h b/src/lynq/lib/liblynq-protcl/include/http/lynq_http_parser.h
new file mode 100644
index 0000000..99d9f20
--- /dev/null
+++ b/src/lynq/lib/liblynq-protcl/include/http/lynq_http_parser.h
@@ -0,0 +1,220 @@
+#ifndef _LYNQ_HTTP_PARSER_H_
+#define _LYNQ_HTTP_PARSER_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define HTTP_PARSER_VERSION_MAJOR 2
+#define HTTP_PARSER_VERSION_MINOR 5
+#define HTTP_PARSER_VERSION_PATCH 0
+#include <stddef.h>
+#include <stdint.h>
+#include "liblog/liblog.h"
+#include "liblog/lynq_deflog.h"
+
+
+
+#ifndef HTTP_PARSER_STRICT
+# define HTTP_PARSER_STRICT 1
+#endif
+
+#ifndef HTTP_MAX_HEADER_SIZE
+# define HTTP_MAX_HEADER_SIZE (80*1024)
+#endif
+
+	typedef struct http_parser http_parser;
+	typedef struct http_parser_settings http_parser_settings;
+
+	typedef int (*http_data_cb) (http_parser*, const char *at, size_t length);
+	typedef int (*http_cb) (http_parser*);
+
+
+	/* Request Methods */
+#define HTTP_METHOD_MAP(XX)         \
+	XX(0,  DELETE,      DELETE)       \
+	XX(1,  GET,         GET)          \
+	XX(2,  HEAD,        HEAD)         \
+	XX(3,  POST,        POST)         \
+	XX(4,  PUT,         PUT)          \
+	/* pathological */                \
+	XX(5,  CONNECT,     CONNECT)      \
+	XX(6,  OPTIONS,     OPTIONS)      \
+	XX(7,  TRACE,       TRACE)        \
+	/* WebDAV */                      \
+	XX(8,  COPY,        COPY)         \
+	XX(9,  LOCK,        LOCK)         \
+	XX(10, MKCOL,       MKCOL)        \
+	XX(11, MOVE,        MOVE)         \
+	XX(12, PROPFIND,    PROPFIND)     \
+	XX(13, PROPPATCH,   PROPPATCH)    \
+	XX(14, SEARCH,      SEARCH)       \
+	XX(15, UNLOCK,      UNLOCK)       \
+	XX(16, BIND,        BIND)         \
+	XX(17, REBIND,      REBIND)       \
+	XX(18, UNBIND,      UNBIND)       \
+	XX(19, ACL,         ACL)          \
+	/* subversion */                  \
+	XX(20, REPORT,      REPORT)       \
+	XX(21, MKACTIVITY,  MKACTIVITY)   \
+	XX(22, CHECKOUT,    CHECKOUT)     \
+	XX(23, MERGE,       MERGE)        \
+	/* upnp */                        \
+	XX(24, MSEARCH,     M-SEARCH)     \
+	XX(25, NOTIFY,      NOTIFY)       \
+	XX(26, SUBSCRIBE,   SUBSCRIBE)    \
+	XX(27, UNSUBSCRIBE, UNSUBSCRIBE)  \
+	/* RFC-5789 */                    \
+	XX(28, PATCH,       PATCH)        \
+	XX(29, PURGE,       PURGE)        \
+	/* CalDAV */                      \
+	XX(30, MKCALENDAR,  MKCALENDAR)   \
+
+	enum http_method
+	{
+#define XX(num, name, string) HTTP_##name = num,
+		HTTP_METHOD_MAP(XX)
+#undef XX
+	};
+
+
+	enum http_parser_type { HTTP_REQUEST, HTTP_RESPONSE, HTTP_BOTH };
+	enum flags
+	{ F_CHUNKED               = 1 << 0
+		, F_CONNECTION_KEEP_ALIVE = 1 << 1
+			, F_CONNECTION_CLOSE      = 1 << 2
+			, F_CONNECTION_UPGRADE    = 1 << 3
+			, F_TRAILING              = 1 << 4
+			, F_UPGRADE               = 1 << 5
+			, F_SKIPBODY              = 1 << 6
+	};
+
+#define HTTP_ERRNO_MAP(XX)                                           \
+	/* No error */                                                     \
+	XX(OK, "success")                                                  \
+	\
+	/* Callback-related errors */                                      \
+	XX(CB_message_begin, "the on_message_begin callback failed")       \
+	XX(CB_url, "the on_url callback failed")                           \
+	XX(CB_header_field, "the on_header_field callback failed")         \
+	XX(CB_header_value, "the on_header_value callback failed")         \
+	XX(CB_headers_complete, "the on_headers_complete callback failed") \
+	XX(CB_body, "the on_body callback failed")                         \
+	XX(CB_message_complete, "the on_message_complete callback failed") \
+	XX(CB_status, "the on_status callback failed")                     \
+	XX(CB_chunk_header, "the on_chunk_header callback failed")         \
+	XX(CB_chunk_complete, "the on_chunk_complete callback failed")     \
+	\
+	/* Parsing-related errors */                                       \
+	XX(INVALID_EOF_STATE, "stream ended at an unexpected time")        \
+	XX(HEADER_OVERFLOW,                                                \
+			"too many header bytes seen; overflow detected")                \
+	XX(CLOSED_CONNECTION,                                              \
+			"data received after completed connection: close message")      \
+	XX(INVALID_VERSION, "invalid HTTP version")                        \
+	XX(INVALID_STATUS, "invalid HTTP status code")                     \
+	XX(INVALID_METHOD, "invalid HTTP method")                          \
+	XX(INVALID_URL, "invalid URL")                                     \
+	XX(INVALID_HOST, "invalid host")                                   \
+	XX(INVALID_PORT, "invalid port")                                   \
+	XX(INVALID_PATH, "invalid path")                                   \
+	XX(INVALID_QUERY_STRING, "invalid query string")                   \
+	XX(INVALID_FRAGMENT, "invalid fragment")                           \
+	XX(LF_EXPECTED, "LF character expected")                           \
+	XX(INVALID_HEADER_TOKEN, "invalid character in header")            \
+	XX(INVALID_CONTENT_LENGTH,                                         \
+			"invalid character in content-length header")                   \
+	XX(INVALID_CHUNK_SIZE,                                             \
+			"invalid character in chunk size header")                       \
+	XX(INVALID_CONSTANT, "invalid constant string")                    \
+	XX(INVALID_INTERNAL_STATE, "encountered unexpected internal state")\
+	XX(STRICT, "strict mode assertion failed")                         \
+	XX(PAUSED, "parser is paused")                                     \
+	XX(UNKNOWN, "an unknown error occurred")
+
+#define HTTP_ERRNO_GEN(n, s) HPE_##n,
+	enum http_errno {
+		HTTP_ERRNO_MAP(HTTP_ERRNO_GEN)
+	};
+#undef HTTP_ERRNO_GEN
+
+#define HTTP_PARSER_ERRNO(p)            ((enum http_errno) (p)->http_errno)
+
+	struct http_parser {
+		unsigned int type : 2;         /* enum http_parser_type */
+		unsigned int flags : 7;        /* F_* values from 'flags' enum; semi-public */
+		unsigned int state : 7;        /* enum state from http_parser.c */
+		unsigned int header_state : 8; /* enum header_state from http_parser.c */
+		unsigned int index : 8;        /* index into current matcher */
+
+		uint32_t nread;          /* # bytes read in various scenarios */
+		uint64_t content_length; /* # bytes in body (0 if no Content-Length header) */
+
+		unsigned short http_major;
+		unsigned short http_minor;
+		unsigned int status_code : 16;
+		unsigned int method : 8;
+		unsigned int http_errno : 7;
+		unsigned int upgrade : 1;
+		void *data;
+	};
+
+
+	struct http_parser_settings {
+		http_cb      on_message_begin;
+		http_data_cb on_url;
+		http_data_cb on_status;
+		http_data_cb on_header_field;
+		http_data_cb on_header_value;
+		http_cb      on_headers_complete;
+		http_data_cb on_body;
+		http_cb      on_message_complete;
+		http_cb      on_chunk_header;
+		http_cb      on_chunk_complete;
+	};
+
+
+	enum http_parser_url_fields
+	{ 
+		UF_SCHEMA           = 0,
+		UF_HOST             = 1,
+		UF_PORT             = 2,
+		UF_PATH             = 3,
+		UF_QUERY            = 4,
+		UF_FRAGMENT         = 5,
+		UF_USERINFO         = 6,
+		UF_MAX              = 7,
+	};
+
+	struct http_parser_url {
+		uint16_t field_set;           /* Bitmask of (1 << UF_*) values */
+		uint16_t port;                /* Converted UF_PORT string */
+
+		struct {
+			uint16_t off;               /* Offset into buffer in which field starts */
+			uint16_t len;               /* Length of run in buffer */
+		} field_data[UF_MAX];
+	};
+
+	unsigned long http_parser_version(void);
+	void http_parser_init(http_parser *parser, enum http_parser_type type);
+	void http_parser_settings_init(http_parser_settings *settings);
+	size_t http_parser_execute(http_parser *parser,
+			const http_parser_settings *settings,
+			const char *data,
+			size_t len);
+
+	int http_should_keep_alive(const http_parser *parser);
+	const char *http_method_str(enum http_method m);
+	const char *http_errno_name(enum http_errno err);
+	const char *http_errno_description(enum http_errno err);
+	int http_parser_parse_url(const char *buf, size_t buflen,
+			int is_connect,
+			struct http_parser_url *u);
+	void http_parser_pause(http_parser *parser, int paused);
+	int http_body_is_final(const http_parser *parser);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/lynq/lib/liblynq-protcl/include/http/lynq_msgq.h b/src/lynq/lib/liblynq-protcl/include/http/lynq_msgq.h
new file mode 100644
index 0000000..784e077
--- /dev/null
+++ b/src/lynq/lib/liblynq-protcl/include/http/lynq_msgq.h
@@ -0,0 +1,19 @@
+#ifndef _LYNQ_MSGQ_H_
+#define _LYNQ_MSGQ_H_
+
+#include <sys/msg.h>
+#include <sys/ipc.h>
+#include "liblog/liblog.h"
+#include "liblog/lynq_deflog.h"
+#include "http/lynq_http.h"
+
+struct mymesg{
+	long int mtype;
+	char mtext[512];
+};
+
+int lynq_msgq_init(char *pathname,  int create);
+int lynq_msgq_send(int queueId, struct mymesg *ckxmsg);
+
+#endif
+
diff --git a/src/lynq/lib/liblynq-protcl/include/lynq_mqtt/lynq_mqtt.h b/src/lynq/lib/liblynq-protcl/include/lynq_mqtt/lynq_mqtt.h
new file mode 100644
index 0000000..0422faa
--- /dev/null
+++ b/src/lynq/lib/liblynq-protcl/include/lynq_mqtt/lynq_mqtt.h
@@ -0,0 +1,70 @@
+#ifndef __LYNQ_MQTT_H__
+#define __LYNQ_MQTT_H__
+#include <mosquitto.h>
+
+
+struct mqtt_set_will{
+	int will_flag;
+	char *will_topic;
+	int will_payloadlen;
+	char *will_payload;
+	int will_qos;
+	bool retain;
+};
+
+struct mqtt_set_parament
+{
+	char *protocol;
+	int  session;
+	char *action;
+	int modify_thread;
+	int add_thread;
+
+	 char *usrname; //服务端用户名
+	 char *pwd; //服务端密码
+	 char *ip_addr;
+	 int port;
+	 int keep_time; 
+
+	 int subscribe_qos;
+	 int publish_qos;
+
+	 char *subscribe_topic;
+	 char *unsubscribe_topic; //lt add @2021.7.13 for unsubscribe topic
+
+	 char *publish_topic;
+	 char *publish_data;
+
+	char *client_id;
+	bool clean_session;
+
+	struct mqtt_set_will set_will;
+	 
+};
+
+
+#define NO_ERROR 0
+#define CREATE_LIENT_ERROR 1
+#define USER_PWD_ERROR 2
+#define CONNECT_FAIL 3
+#define CREATE_LOOP_FAIL 4
+#define MQTT_DISCONNECT_FAIL 5
+#define MQTT_CONNECT_FAIL 6
+
+
+int lynq_mqtt_connect_init(struct mqtt_set_parament mqtt_message);
+void lynq_mosquitto_set_connect_callback(void (*connect_callback)(struct mosquitto *mosq, void *userdata, int result));
+void lynq_mosquitto_set_message_callback(void (*message_callback)(struct mosquitto *mosq, void *userdata, const struct mosquitto_message *message));
+void lynq_mosquitto_set_subscribe_callback(void (*subscribe_callback)(struct mosquitto *mosq, void *userdata, int mid, int qos_count, const int *granted_qos));
+void lynq_mosquitto_set_disconnect_callback( void (*disconnect_callback)( struct mosquitto *mosq,void *obj, int rc));
+void lynq_mosquitto_set_publish_callback(void (*on_publish)(struct mosquitto *mosq, void *obj, int mid));
+
+void lynq_mosquitto_publish_message(char *pub_topic,int pub_buf_len,char *pub_buf,int qos); //发布
+void lynq_mosquitto_subscribe_message(char *sub_topic,int sub_qos); // 订阅
+void lynq_mosquitto_disconnect(void); //断开
+
+int lynq_mqtt_login(struct mqtt_set_parament mqtt_message);
+void lynq_mosquitto_subscribe_message(char *sub_topic,int sub_qos);
+void lynq_mosquitto_publish_message(char *pub_topic,int pub_buf_len,char *pub_buf,int qos);
+void lynq_mosquitto_unsubscribe_message(char *unsub_topic);
+#endif //__LYNQ_MQTT_H__
