Change default ffs path to match system policy
[sdk/target/sdbd.git] / src / sdb.h
index 0a8f352..5be6f89 100644 (file)
--- a/src/sdb.h
+++ b/src/sdb.h
 
 #include "transport.h"  /* readx(), writex() */
 #include "fdevent.h"
-#include "sdbd_plugin.h"
-#if !SDB_HOST
 #include "commandline_sdbd.h"
-#endif
 #include <tzplatform_config.h>
 
-#define MAX_PAYLOAD 4096
+#define MAX_PAYLOAD_V1  (4*1024)
+#define MAX_PAYLOAD_V2  (256*1024)
+#define MAX_PAYLOAD     MAX_PAYLOAD_V2
 
 #define A_SYNC 0x434e5953
 #define A_CNXN 0x4e584e43
 #define A_CLSE 0x45534c43
 #define A_WRTE 0x45545257
 #define A_STAT 0x54415453
+#define A_ENCR 0x40682018 // encryption 메시지
+
+#ifdef SUPPORT_ENCRYPT
+ #define ENCR_SET_ON_REQ 0 // encryption hello 메시지
+ #define ENCR_SET_ON_OK 1 // encryption ack 메시지
+ #define ENCR_SET_OFF 2 // encryption mode off 메시지
+ #define ENCR_GET 3 // encryption status get 메시지
+ #define ENCR_ON_FAIL 4 // encryption on 실패 메시지
+ #define ENCR_OFF_FAIL 5 // encryption off 실패 메시지
+ #define ENCR_ON 1 // encryption on 상태
+ #define ENCR_OFF 0 // encryption off 상태
+#endif
 
 #define A_VERSION 0x02000000        // SDB protocol version
 
@@ -47,8 +58,6 @@
 
 #define SDB_SERVER_VERSION 0        // Increment this when we want to force users to start a new sdb server
 
-#define SDBD_UMASK 0022        // default file creation mask of sdbd
-
 typedef struct amessage amessage;
 typedef struct apacket apacket;
 typedef struct asocket asocket;
@@ -137,7 +146,7 @@ struct asocket {
         /* socket-type-specific extradata */
     void *extra;
 
-       /* A socket is bound to atransport */
+        /* A socket is bound to atransport */
     atransport *transport;
 };
 
@@ -203,6 +212,13 @@ struct atransport
         /* a list of adisconnect callbacks called when the transport is kicked */
     int          kicked;
     adisconnect  disconnects;
+    int protocol_version;
+    size_t max_payload;
+
+#ifdef SUPPORT_ENCRYPT
+    unsigned encryption; // 해당 연결이 암호화 모드인지 확인하는 flag , 0 = no-encryption / 1 = encryption
+    int sessionID; // 암호화 세션 ID, 암호화 map에 대한 key
+#endif
 };
 
 
@@ -242,9 +258,6 @@ typedef struct platform_info {
 
 #define ENABLED "enabled"
 #define DISABLED "disabled"
-#define CPUARCH_ARMV6 "armv6"
-#define CPUARCH_ARMV7 "armv7"
-#define CPUARCH_X86 "x86"
 #define CAPBUF_SIZE 4096
 #define CAPBUF_ITEMSIZE 32
 #define CAPBUF_L_ITEMSIZE 256
@@ -262,15 +275,21 @@ typedef struct platform_capabilities
     char syncwinsz_support[CAPBUF_ITEMSIZE];    // enabled or disabled
     char usbproto_support[CAPBUF_ITEMSIZE];     // enabled or disabled
     char sockproto_support[CAPBUF_ITEMSIZE];    // enabled or disabled
+    char appcmd_support[CAPBUF_ITEMSIZE];       // enabled or disabled
+    char encryption_support[CAPBUF_ITEMSIZE];   // enabled or disabled
+    char appid2pid_support[CAPBUF_ITEMSIZE];    // enabled or disabled
+    char pkgcmd_debugmode[CAPBUF_ITEMSIZE];     // enabled or disabled
+    char root_permission[CAPBUF_ITEMSIZE];      // enabled or disabled
 
-    char log_enable[CAPBUF_ITEMSIZE];    // enabled or disabled
-    char log_path[CAPBUF_LL_ITEMSIZE];    // path of sdbd log
+    char log_enable[CAPBUF_ITEMSIZE];           // enabled or disabled
+    char log_path[CAPBUF_LL_ITEMSIZE];          // path of sdbd log
 
     char cpu_arch[CAPBUF_ITEMSIZE];             // cpu architecture (ex. x86)
     char profile_name[CAPBUF_ITEMSIZE];         // profile name (ex. mobile)
     char vendor_name[CAPBUF_ITEMSIZE];          // vendor name (ex. Tizen)
     char sdk_toolpath[CAPBUF_L_ITEMSIZE];       // sdk tool path
     char can_launch[CAPBUF_L_ITEMSIZE];         // target name
+    char device_name[CAPBUF_ITEMSIZE];          // device name
 
     char platform_version[CAPBUF_ITEMSIZE];     // platform version (ex. 2.3.0)
     char product_version[CAPBUF_ITEMSIZE];      // product version (ex. 1.0)
@@ -280,13 +299,6 @@ typedef struct platform_capabilities
 } pcap;
 extern pcap g_capabilities;
 
-#define SDBD_PLUGIN_PATH    "/usr/lib/libsdbd_plugin.so"
-#define SDBD_PLUGIN_INTF    "sdbd_plugin_cmd_proc"
-typedef int (*SDBD_PLUGIN_CMD_PROC_PTR)(const char*, const char*, sdbd_plugin_param);
-extern SDBD_PLUGIN_CMD_PROC_PTR sdbd_plugin_cmd_proc;
-int request_plugin_cmd(const char* cmd, const char* in_buf, char *out_buf, unsigned int out_len);
-int request_plugin_verification(const char* cmd, const char* in_buf);
-
 void print_packet(const char *label, apacket *p);
 
 asocket *find_local_socket(unsigned id);
@@ -302,6 +314,7 @@ asocket *create_local_service_socket(const char *destination);
 asocket *create_remote_socket(unsigned id, atransport *t);
 void connect_to_remote(asocket *s, const char *destination);
 void connect_to_smartsocket(asocket *s);
+size_t asock_get_max_payload(asocket *s);
 
 void fatal(const char *fmt, ...);
 void fatal_errno(const char *fmt, ...);
@@ -311,7 +324,7 @@ void send_packet(apacket *p, atransport *t);
 
 void get_my_path(char *s, size_t maxLen);
 int launch_server(int server_port);
-int sdb_main(int is_daemon, int server_port);
+int sdb_main(int server_port);
 
 
 /* transports are ref-counted
@@ -337,9 +350,6 @@ void   run_transport_disconnects( atransport*  t );
 void   kick_transport( atransport*  t );
 
 /* initialize a transport object's func pointers and state */
-#if SDB_HOST
-int get_available_local_transport_index();
-#endif
 int  init_socket_transport(atransport *t, int s, int port, int local);
 void init_usb_transport(atransport *t, usb_handle *usb, int state);
 
@@ -359,23 +369,14 @@ void register_usb_transport(usb_handle *h, const char *serial, unsigned writeabl
 void unregister_usb_transport(usb_handle *usb);
 
 atransport *find_transport(const char *serial);
-#if SDB_HOST
-atransport* find_emulator_transport_by_sdb_port(int sdb_port);
-#endif
 
 int service_to_fd(const char *name);
-#if SDB_HOST
-asocket *host_service_to_socket(const char*  name, const char *serial);
-#endif
 
-#if !SDB_HOST
 int       init_jdwp(void);
 asocket*  create_jdwp_service_socket();
 asocket*  create_jdwp_tracker_service_socket();
 int       create_jdwp_connection_fd(int  jdwp_pid);
-#endif
 
-#if !SDB_HOST
 typedef enum {
     BACKUP,
     RESTORE
@@ -389,6 +390,9 @@ char * get_log_file_path(const char * log_name);
 extern int rootshell_mode; // 0: sdk user, 1: root
 extern int booting_done; // 0: platform booting is in progess 1: platform booting is done
 
+// 1 if locked, 0 if unlocked
+extern int is_pwlocked;
+
 // This is the users and groups config for the platform
 
 #define SID_ROOT        0    /* traditional unix root user */
@@ -402,12 +406,20 @@ extern uid_t g_sdk_user_id;
 extern gid_t g_sdk_group_id;
 extern char* g_sdk_home_dir;
 extern char* g_sdk_home_dir_env;
-#endif
 
-int is_pwlocked(void);
+#define ROOT_USER_NAME          "root"
+#define STATIC_ROOT_USER_ID       0
+#define STATIC_ROOT_GROUP_ID     0
+#define STATIC_ROOT_HOME_DIR     "/root"
+extern uid_t g_root_user_id;
+extern gid_t g_root_group_id;
+extern char* g_root_home_dir;
+extern char* g_root_home_dir_env;
+
 int should_drop_privileges(void);
-int set_sdk_user_privileges();
-void set_root_privileges();
+void send_device_status();
+int set_sdk_user_privileges(int is_drop_capability_after_fork);
+int set_root_privileges();
 
 int get_emulator_forward_port(void);
 int get_emulator_name(char str[], int str_size);
@@ -419,89 +431,9 @@ int get_emulator_guestip(char str[], int str_size);
 apacket *get_apacket(void);
 void put_apacket(apacket *p);
 
-int check_header(apacket *p);
+int check_header(apacket *p, atransport *t);
 int check_data(apacket *p);
 
-/* define SDB_TRACE to 1 to enable tracing support, or 0 to disable it */
-
-#define  SDB_TRACE    1
-
-/* IMPORTANT: if you change the following list, don't
- * forget to update the corresponding 'tags' table in
- * the sdb_trace_init() function implemented in sdb.c
- */
-typedef enum {
-    TRACE_SDB = 0,
-    TRACE_SOCKETS,
-    TRACE_PACKETS,
-    TRACE_TRANSPORT,
-    TRACE_RWX,
-    TRACE_USB,
-    TRACE_SYNC,
-    TRACE_SYSDEPS,
-    TRACE_JDWP,
-    TRACE_SERVICES,
-    TRACE_PROPERTIES,
-    TRACE_SDKTOOLS
-} SdbTrace;
-
-#if SDB_TRACE
-
-#if !SDB_HOST
-/*
- * When running inside the emulator, guest's sdbd can connect to 'sdb-debug'
- * qemud service that can display sdb trace messages (on condition that emulator
- * has been started with '-debug sdb' option).
- */
-
-/* Delivers a trace message to the emulator via QEMU pipe. */
-void sdb_qemu_trace(const char* fmt, ...);
-/* Macro to use to send SDB trace messages to the emulator. */
-#define DQ(...)    sdb_qemu_trace(__VA_ARGS__)
-#else
-#define DQ(...) ((void)0)
-#endif  /* !SDB_HOST */
-
-  extern int     sdb_trace_mask;
-  extern unsigned char    sdb_trace_output_count;
-  void    sdb_trace_init(void);
-
-#  define SDB_TRACING  ((sdb_trace_mask & (1 << TRACE_TAG)) != 0)
-
-  /* you must define TRACE_TAG before using this macro */
-#  define  D(...)                                      \
-        do {                                           \
-            if (SDB_TRACING) {                         \
-                int save_errno = errno;                \
-                sdb_mutex_lock(&D_lock);               \
-                fprintf(stderr, "%s::%s():",           \
-                        __FILE__, __FUNCTION__);       \
-                errno = save_errno;                    \
-                fprintf(stderr, __VA_ARGS__ );         \
-                fflush(stderr);                        \
-                sdb_mutex_unlock(&D_lock);             \
-                errno = save_errno;                    \
-           }                                           \
-        } while (0)
-#  define  DR(...)                                     \
-        do {                                           \
-            if (SDB_TRACING) {                         \
-                int save_errno = errno;                \
-                sdb_mutex_lock(&D_lock);               \
-                errno = save_errno;                    \
-                fprintf(stderr, __VA_ARGS__ );         \
-                fflush(stderr);                        \
-                sdb_mutex_unlock(&D_lock);             \
-                errno = save_errno;                    \
-           }                                           \
-        } while (0)
-#else
-#  define  D(...)          ((void)0)
-#  define  DR(...)         ((void)0)
-#  define  SDB_TRACING     0
-#endif
-
-
 #if !TRACE_PACKETS
 #define print_packet(tag,p) do {} while (0)
 #endif
@@ -530,15 +462,6 @@ int  local_connect(int  port, const char *device_name);
 int  local_connect_arbitrary_ports(int console_port, int sdb_port, const char *device_name);
 
 /* usb host/client interface */
-#if SDB_HOST
-void usb_init();
-void usb_cleanup();
-int usb_write(usb_handle *h, const void *data, int len);
-int usb_read(usb_handle *h, void *data, size_t len);
-int usb_close(usb_handle *h);
-void usb_kick(usb_handle *h);
-#else
-
 extern void (*usb_init)();
 extern void (*usb_cleanup)();
 extern int (*usb_write)(usb_handle *h, const void *data, int len);
@@ -562,13 +485,6 @@ int linux_usb_read(usb_handle *h, void *data, size_t len);
 int linux_usb_close(usb_handle *h);
 void linux_usb_kick(usb_handle *h);
 
-#endif
-
-/* used for USB device detection */
-#if SDB_HOST
-int is_sdb_interface(int vid, int pid, int usb_class, int usb_subclass, int usb_protocol);
-#endif
-
 unsigned host_to_le32(unsigned n);
 int sdb_commandline(int argc, char **argv);
 
@@ -586,11 +502,10 @@ int connection_state(atransport *t);
 
 extern int HOST;
 extern int SHELL_EXIT_NOTIFY_FD;
-#if !SDB_HOST
 extern SdbdCommandlineArgs sdbd_commandline_args;
-#endif
 
 #define CHUNK_SIZE (64*1024)
+#define SDBD_SHELL_CMD_MAX 4096
 
 int sendfailmsg(int fd, const char *reason);
 int handle_host_request(char *service, transport_type ttype, char* serial, int reply_fd, asocket *s);
@@ -599,16 +514,12 @@ int copy_packet(apacket* dest, apacket* src);
 int is_emulator(void);
 #define DEFAULT_DEVICENAME "unknown"
 
-#if SDB_HOST /* tizen-specific */
-#define DEVICEMAP_SEPARATOR ":"
-#define DEVICENAME_MAX 256
-#define VMS_PATH OS_PATH_SEPARATOR_STR "vms" OS_PATH_SEPARATOR_STR // should include sysdeps.h above
+#define USB_FUNCFS_SDB_PATH "/dev/usb-funcs/sdb/default/"
+#define USB_NODE_FILE "/dev/samsung_sdb"
+int create_subprocess(const char *cmd, pid_t *pid, char * const argv[], char * const envp[]);
+void get_env(char *key, char **env);
 
-void register_device_name(const char *device_type, const char *device_name, int port);
-int get_devicename_from_shdmem(int port, char *device_name);
-int read_line(const int fd, char* ptr, const size_t maxlen);
-#endif
-#endif
+#define RESERVE_CAPABILITIES_AFTER_FORK 0
+#define DROP_CAPABILITIES_AFTER_FORK 1
 
-#define USB_FUNCFS_SDB_PATH "/dev/usbgadget/sdb"
-#define USB_NODE_FILE "/dev/samsung_sdb"
+#endif