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