zte's code,first commit

Change-Id: I9a04da59e459a9bc0d67f101f700d9d7dc8d681b
diff --git a/ap/lib/libdmgr/dmgr_api.h b/ap/lib/libdmgr/dmgr_api.h
new file mode 100644
index 0000000..b00f39e
--- /dev/null
+++ b/ap/lib/libdmgr/dmgr_api.h
@@ -0,0 +1,315 @@
+#ifndef __DMGR_API_H

+#define __DMGR_API_H

+

+#include <stdarg.h>

+

+typedef int dmgr_t;

+struct notifier_block;

+

+enum NOTIFY {

+    NOTIFY_USER_BEGIN = 0,

+    NOTIFY_CHECKVERSION_PREPARE,

+    NOTIFY_CHECKVERSION_ABORTED,

+    NOTIFY_CHECKVERSION_FINISHED,

+    NOTIFY_DOWNLOAD_PREPARE,

+    NOTIFY_DOWNLOAD_ABORTED,

+    NOTIFY_DOWNLOAD_TRANSLATING,

+    NOTIFY_DOWNLOAD_FINISHED,

+    NOTIFY_DOWNLOAD_PARTTIAL_FINISHED,

+    NOTIFY_SOCKET_CONNECT_PREPARE,

+    NOTIFY_SOCKET_CONNECT_ABORTED,

+    NOTIFY_SOCKET_CONNECT_FINISHED,

+    NOTIFY_SOCKET_CONNECT_CLOSED,

+    NOTIFY_SOCKET_SEND_PREPARE,

+    NOTIFY_SOCKET_SEND_TRANSLATING,

+    NOTIFY_SOCKET_SEND_ABORTED,

+    NOTIFY_SOCKET_SEND_FINISHED,

+    NOTIFY_SOCKET_RECV_PREPARE,

+    NOTIFY_SOCKET_RECV_TRANSLATING,

+    NOTIFY_SOCKET_RECV_ABORTED,

+    NOTIFY_SOCKET_RECV_FINISHED,

+    NOTIFY_USER_END

+};

+

+enum NOTIFIER_ID {

+    NOTIFY_ID_CHECK_VERSION = 0,

+    NOTIFY_ID_DOWNLOAD,

+    NOTIFY_ID_SOCKET,

+    MAX_USER_NOTIFIERS

+};

+

+enum _DMGR_ERRNO {

+    E_OK = 0,

+    E_BEGIN = 300,

+    E_NOMEM,

+    E_INVAL_PARAM,

+    E_INVAL_OPERATION,

+    E_IO_FAILED,

+    E_IO_TIMEDOUT,

+    E_VERIFIED_FAILED,

+    E_CANCELLED,

+    E_NESTING_CALLED,

+    E_RESERVE1 = 400,

+    /* Error from server */

+    E_INVAL_TOKEN,

+    E_INVAL_PLATFORM,

+    E_PARAM_MISSING,

+    E_UNCONFIGURED_VERSION,

+    E_INTERNAL_ERROR,

+    E_RESERVE2 = 500,

+    E_URL_MALFORMAT,

+    E_COULDNT_RESOLVE_HOST,

+    E_COULDNT_CONNECT,

+    E_HTTP_RETURNED_ERROR,

+    E_RANGE_ERROR,

+    E_HTTP_POST_ERROR,

+    E_BAD_DOWNLOAD_RESUME,

+    E_ABORTED,

+    E_AGAIN,

+    E_TOO_MANY_REDIRECTS,

+    E_GOT_NOTHING,

+    E_SEND_ERROR,

+    E_RECV_ERROR,

+    E_NO_CONNECTION_AVAILABLE,

+    E_END

+};

+

+#define DMGR_ERRNO(err)                 (int)(-(err))

+#define SOCKET_WAIT_FOREVER             ((int)-1)

+

+#define VERINFO_FLAGS_FORCE_PACKAGE     (int)(0x01 << 0)

+typedef struct version_info {

+    char *version_name;

+    int  file_size;

+    char *delta_id;

+    char *md5sum;

+    char *delta_url;

+    char *release_note;

+    int flags;

+    char *upgrade_from_time;

+    char *upgrade_to_time;

+    char *upgrade_gap;

+    char *meta_data;

+    char *event_id;

+} version_info_t;

+

+typedef struct download_info {

+    long total_bytes;

+    long break_bytes;

+    long saved_bytes;

+    long now_bytes;

+} download_info_t;

+

+typedef struct error_value {

+    int error;

+} error_value_t;

+

+typedef struct socket_sbuf {

+    char *data;

+    size_t size;

+} socket_sbuf_t;

+

+typedef struct notifier_data {

+    union {

+        struct error_value errvalue;

+        struct download_info dlinfo;

+        struct version_info verinfo;

+        struct socket_sbufs {

+            struct socket_sbuf *sock_sbufs;

+            size_t count;

+        } ssbufs;

+    } u;

+} notifier_data_t;

+

+typedef int (*notifier_fn_t)(struct notifier_block *nb,

+                             unsigned long action,

+                             void *data);

+

+typedef struct socket_connect {

+    int (*create)(struct socket_connect *conn,

+                  char *hostname,

+                  int port,

+                  int recv_timeout,

+                  int send_timeout,

+                  int connect_timeout,

+                  int flags);

+    int (*destory)(struct socket_connect *conn);

+    int (*connect)(struct socket_connect *conn);

+    int (*send)(struct socket_connect *conn,

+                char *buf,

+                size_t size,

+                size_t *sent_size);

+    int (*send_sbufs)(struct socket_connect *conn,

+                      struct socket_sbuf *sbufs,

+                      size_t count,

+                      size_t *sent_size);

+    int (*recv)(struct socket_connect *conn,

+                char *buf,

+                size_t size,

+                size_t *recved_size);

+    int (*close)(struct socket_connect *conn);

+} socket_connect_t;

+

+typedef struct notifier_block {

+    notifier_fn_t notifier_call;

+    struct notifier_block *next;

+    int priority;

+    int alloc_set;

+} notifier_block_t;

+

+#define init_notifier_block(nb, call, pri) \

+    do {  \

+        (nb)->notifier_call = call; \

+        (nb)->next = NULL; \

+        (nb)->priority = pri; \

+        (nb)->alloc_set= 0; \

+    } while (0)

+

+#define SERVER_TRANSOPT_NONE        0

+#define SERVER_TRANSOPT_FOTA            ((0x00 << 0) & 0x0f)

+#define SERVER_TRANSOPT_RELIANCE        ((0x01 << 0) & 0x0f)

+#define SERVER_TRANSOPT_RELIANCE_ST     ((0x02 << 0) & 0x0f)

+#define SERVER_TRANSOPT_VEHICLE         ((0x03 << 0) & 0x0f)

+#define SERVER_TRANSOPT_IOT             ((0x04 << 0) & 0x0f)

+#define SERVER_TRANSOPT_HTTPS           ((0x01 << 4) & 0xf0)

+#define SERVER_TRANSOPT_HTTP            ((0x02 << 4) & 0xf0)

+#define SERVER_TRANSOPT_COMPACT_HTTP    ((0x03 << 4) & 0xf0)

+

+typedef struct policy_info {

+    int so_transfer_timeout;        /* The tcp/ip receive/send data timeout */

+    int so_connect_timeout;         /* The tcp/ip connection timeout */

+    int so_recv_buffer_size;        /* The max size of receive buffer */

+    int download_retry;             /* The retry count for download failed */

+    int download_retry_time;        /* The retry delay time(seconds) for download failed */

+    int server_transfer_opt;        /* The type or opt of sepcific server */

+    char *sstate_cached_path;       /* The path used for cache dmgr shared-state */

+    char *root_certificates;        /* Root certificates are self-signed and form

+                                       the basis of an X.509-based public key

+                                       infrastructure (PKI) */

+    char *sub_certificates;         /* The path used for cache dmgr shared-state */

+    int freespace_for_file_frac;    /* file bavail safe proportion */

+} policy_info_t;

+

+#define POLICY_INFO_INIT(name)      \

+    { .so_transfer_timeout = -1,     \

+      .so_connect_timeout = -1,      \

+      .so_recv_buffer_size = 8192,  \

+      .download_retry = 0,          \

+      .download_retry_time = 5,          \

+      .server_transfer_opt = SERVER_TRANSOPT_FOTA| \

+                             SERVER_TRANSOPT_COMPACT_HTTP, \

+      .sstate_cached_path = "/var", \

+      .root_certificates  = NULL,   \

+      .sub_certificates   = NULL, \

+      .freespace_for_file_frac = 90 \

+    }

+

+#define POLICY_INFO(name)           \

+    struct policy_info name = POLICY_INFO_INIT(name)

+

+enum LOGGER {

+    LOGGER_STDIO = 0,

+    LOGGER_BUFFER,

+    LOGGER_FILE

+};

+

+enum LOG_LEVEL {

+    LOG_VERBOSE = 0,

+    LOG_DEBUG,

+    LOG_INFO,

+    LOG_WARNING,

+    LOG_ERROR,

+    LOG_FATAL,

+    LOG_OFF

+};

+

+enum LOG_TYPE {

+    LOG_TYPE_CHECK = 0,

+    LOG_TYPE_DOWNLOAD,

+    LOG_TYPE_HTTP,

+    LOG_TYPE_LAST

+};

+

+dmgr_t dmgr_alloc(struct policy_info *policy,

+                  enum LOG_LEVEL default_log_level,

+                  enum LOGGER logger, ...);

+int dmgr_free(dmgr_t dm_id);

+int dmgr_keepalive_with_server(dmgr_t dm_id);

+int dmgr_register_device_to_server(dmgr_t dm_id);

+int dmgr_register_socket(dmgr_t dm_id, struct socket_connect *conn);

+int dmgr_alloc_notifier(dmgr_t dm_id,

+                        enum NOTIFIER_ID nh_id,

+                        notifier_fn_t notifier_call,

+                        int priority,

+                        int extra_bytes);

+int dmgr_register_notifier(dmgr_t dm_id,

+                           struct notifier_block *nb,

+                           enum NOTIFIER_ID nh_id);

+int dmgr_register_deviceinfo(dmgr_t dm_id,

+                             const char *name,

+                             const char *value);

+int dmgr_register_salesinfo(dmgr_t dm_id,

+                            const char *name,

+                            const char *value);

+

+#define SERI_KEEP_URL               "KEEP_URL"

+#define SERI_REG_URL                "REG_URL"

+#define SERI_CHK_URL                "CHK_URL"

+#define SERI_DL_URL                 "DL_URL"

+#define SERI_REPORT_DLR_URL         "REPORT_DLR_URL"

+#define SERI_REPORT_UPGR_URL        "REPORT_UPGR_URL"

+#define SERI_REPORT_SALES_URL       "REPORT_SALES_URL"

+

+int dmgr_register_serverinfo(dmgr_t dm_id,

+                             const char *name,

+                             const char *value);

+

+/* The public for checking version */

+int dmgr_check_version(dmgr_t dm_id);

+int dmgr_async_check_version(dmgr_t dm_id);

+int dmgr_async_cancel_checking(dmgr_t dm_id);

+

+/* The public interface for downloading */

+#define DOWNLOAD_FILE_SEEK_BEGIN    ((long)0)

+#define DOWNLOAD_FILE_SEEK_END      ((long)-1)

+

+int dmgr_filmap_version(dmgr_t dm_id,

+                        struct version_info *version,

+                        char *file_path,

+                        long file_seek,

+                        long map_addr_start,

+                        long map_size);

+int dmgr_async_filmap_version(dmgr_t dm_id,

+                              struct version_info *version,

+                              char *file_path,

+                              long file_seek,

+                              long map_addr_start,

+                              long map_size);

+

+int dmgr_download_version(dmgr_t dm_id,

+                          struct version_info *version,

+                          char *file_path,

+                          long file_seek,

+                          long start_from,

+                          long max_size);

+int dmgr_async_download_version(dmgr_t dm_id,

+                                struct version_info *version,

+                                char *file_path,

+                                long file_seek,

+                                long start_from,

+                                long max_size);

+

+int dmgr_async_cancel_downloading(dmgr_t dm_id);

+

+/* The public for reporting interface */

+int dmgr_report_upgraded_version(dmgr_t dm_id,

+                                 struct version_info *version,

+                                 const char *upgraded_desc);

+

+int dmgr_report_sales_tracker(dmgr_t dm_id);

+int dmgr_set_log_level(int dm_id,

+                       enum LOG_TYPE type,

+                       enum LOG_LEVEL level);

+int dmgr_version(char *version_buf, int size);

+

+#endif