Skip to content

Commit c09f75a

Browse files
authored
Add Samba share browse and load content (#18446)
* Add libsmb2 to deps * Implement single SMB share with browse/load content * webOS: enable smb shares * Add SMB implementation to UWP * smb: add Android implementation * Fix missing mmsystem include
1 parent 6393109 commit c09f75a

227 files changed

Lines changed: 54599 additions & 33 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Makefile.common

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2706,6 +2706,96 @@ ifeq ($(HAVE_TEST_DRIVERS), 1)
27062706
OBJ += input/drivers/test_input.o
27072707
endif
27082708

2709+
ifneq (,$(filter 1,$(HAVE_SMBCLIENT) $(HAVE_BUILTINSMBCLIENT)))
2710+
DEFINES += -DHAVE_SMBCLIENT
2711+
2712+
ifeq ($(HAVE_SMBCLIENT),1)
2713+
# system libsmb2
2714+
ifeq ($(shell pkg-config --exists libsmb2 && echo yes),yes)
2715+
CFLAGS += $(shell pkg-config --cflags libsmb2)
2716+
LIBS += $(shell pkg-config --libs libsmb2)
2717+
else
2718+
LIBS += -lsmb2
2719+
endif
2720+
else ifeq ($(HAVE_BUILTINSMBCLIENT),1)
2721+
# builtin libsmb2
2722+
ifneq ($(findstring Win32,$(OS)),)
2723+
CFLAGS += -D_WINDOWS -DWIN32_LEAN_AND_MEAN
2724+
CFLAGS += -DNEED_RANDOM -DNEED_SRANDOM -DNEED_GETLOGIN_R
2725+
endif
2726+
INCLUDE_DIRS += -I$(DEPS_DIR)/libsmb2/include
2727+
INCLUDE_DIRS += -I$(DEPS_DIR)/libsmb2/include/smb2
2728+
CFLAGS += "-D_U_=__attribute__((unused))"
2729+
CFLAGS += -DHAVE_TIME_H -DHAVE_FCNTL_H -DHAVE_UNISTD_H
2730+
CFLAGS += -DHAVE_STDLIB_H -DSTDC_HEADERS
2731+
CFLAGS += -DHAVE_STRING_H
2732+
CFLAGS += -DHAVE_LINGER
2733+
ifeq ($(findstring Win32,$(OS)),)
2734+
CFLAGS += -DHAVE_SYS_UIO_H
2735+
CFLAGS += -DHAVE_POLL_H -DHAVE_NETDB_H
2736+
CFLAGS += -DHAVE_NETINET_TCP_H -DHAVE_NETINET_IN_H
2737+
CFLAGS += -DHAVE_SYS_SOCKET_H -DHAVE_ARPA_INET_H
2738+
endif
2739+
OBJ += \
2740+
deps/libsmb2/lib/aes.o \
2741+
deps/libsmb2/lib/aes_apple.o \
2742+
deps/libsmb2/lib/aes128ccm.o \
2743+
deps/libsmb2/lib/asn1-ber.o \
2744+
deps/libsmb2/lib/aes_reference.o \
2745+
deps/libsmb2/lib/alloc.o \
2746+
deps/libsmb2/lib/compat.o \
2747+
deps/libsmb2/lib/dcerpc.o \
2748+
deps/libsmb2/lib/dcerpc-lsa.o \
2749+
deps/libsmb2/lib/dcerpc-srvsvc.o \
2750+
deps/libsmb2/lib/errors.o \
2751+
deps/libsmb2/lib/hmac.o \
2752+
deps/libsmb2/lib/hmac-md5.o \
2753+
deps/libsmb2/lib/init.o \
2754+
deps/libsmb2/lib/krb5-wrapper.o \
2755+
deps/libsmb2/lib/libsmb2.o \
2756+
deps/libsmb2/lib/md4c.o \
2757+
deps/libsmb2/lib/md5.o \
2758+
deps/libsmb2/lib/ntlmssp.o \
2759+
deps/libsmb2/lib/pdu.o \
2760+
deps/libsmb2/lib/sha1.o \
2761+
deps/libsmb2/lib/sha224-256.o \
2762+
deps/libsmb2/lib/sha384-512.o \
2763+
deps/libsmb2/lib/smb2-cmd-close.o \
2764+
deps/libsmb2/lib/smb2-cmd-create.o \
2765+
deps/libsmb2/lib/smb2-cmd-echo.o \
2766+
deps/libsmb2/lib/smb2-cmd-error.o \
2767+
deps/libsmb2/lib/smb2-cmd-flush.o \
2768+
deps/libsmb2/lib/smb2-cmd-ioctl.o \
2769+
deps/libsmb2/lib/smb2-cmd-lock.o \
2770+
deps/libsmb2/lib/smb2-cmd-logoff.o \
2771+
deps/libsmb2/lib/smb2-cmd-negotiate.o \
2772+
deps/libsmb2/lib/smb2-cmd-oplock-break.o \
2773+
deps/libsmb2/lib/smb2-cmd-notify-change.o \
2774+
deps/libsmb2/lib/smb2-cmd-query-directory.o \
2775+
deps/libsmb2/lib/smb2-cmd-query-info.o \
2776+
deps/libsmb2/lib/smb2-cmd-read.o \
2777+
deps/libsmb2/lib/smb2-cmd-session-setup.o \
2778+
deps/libsmb2/lib/smb2-cmd-set-info.o \
2779+
deps/libsmb2/lib/smb2-cmd-tree-connect.o \
2780+
deps/libsmb2/lib/smb2-cmd-tree-disconnect.o \
2781+
deps/libsmb2/lib/smb2-cmd-write.o \
2782+
deps/libsmb2/lib/smb2-data-file-info.o \
2783+
deps/libsmb2/lib/smb2-data-filesystem-info.o \
2784+
deps/libsmb2/lib/smb2-data-security-descriptor.o \
2785+
deps/libsmb2/lib/smb2-data-reparse-point.o \
2786+
deps/libsmb2/lib/smb2-share-enum.o \
2787+
deps/libsmb2/lib/smb2-signing.o \
2788+
deps/libsmb2/lib/smb3-seal.o \
2789+
deps/libsmb2/lib/socket.o \
2790+
deps/libsmb2/lib/spnego-wrapper.o \
2791+
deps/libsmb2/lib/sync.o \
2792+
deps/libsmb2/lib/timestamps.o \
2793+
deps/libsmb2/lib/usha.o \
2794+
deps/libsmb2/lib/unicode.o
2795+
endif
2796+
2797+
OBJ += $(LIBRETRO_COMM_DIR)/vfs/vfs_implementation_smb.o
2798+
endif
27092799

27102800
#####################################
27112801
### Android Play Feature Delivery ###

Makefile.webos

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ HAVE_STATIC_AUDIO_FILTERS = 1
5151
HAVE_FILTERS_BUILTIN = 1
5252
HAVE_BUILTINMBEDTLS = 1
5353
HAVE_BUILTINZLIB = 1
54+
HAVE_BUILTINSMBCLIENT := 1
5455
HAVE_C99 = 1
5556
HAVE_CC = 1
5657
HAVE_CC_RESAMPLER = 1

config.def.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,7 @@
707707
#define DEFAULT_SETTINGS_SHOW_USER true
708708
#define DEFAULT_SETTINGS_SHOW_DIRECTORY true
709709
#define DEFAULT_SETTINGS_SHOW_STEAM true
710+
#define DEFAULT_SETTINGS_SHOW_SMB_CLIENT true
710711

711712
#define DEFAULT_QUICK_MENU_SHOW_RESUME_CONTENT true
712713
#define DEFAULT_QUICK_MENU_SHOW_RESTART_CONTENT true
@@ -1908,3 +1909,7 @@
19081909
#define DEFAULT_FILTER_BY_CURRENT_CORE false
19091910

19101911
#endif
1912+
1913+
#ifdef HAVE_SMBCLIENT
1914+
#define DEFAULT_SMB_CLIENT_AUTH_MODE 1
1915+
#endif

configuration.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1612,6 +1612,15 @@ static struct config_array_setting *populate_settings_array(
16121612
SETTING_ARRAY("ai_service_url", settings->arrays.ai_service_url, true, DEFAULT_AI_SERVICE_URL, true);
16131613
#endif
16141614

1615+
#ifdef HAVE_SMBCLIENT
1616+
SETTING_ARRAY("smb_client_server_address", settings->arrays.smb_client_server_address, false, NULL, true);
1617+
SETTING_ARRAY("smb_client_share", settings->arrays.smb_client_share, false, NULL, true);
1618+
SETTING_ARRAY("smb_client_subdir", settings->arrays.smb_client_subdir, false, NULL, true);
1619+
SETTING_ARRAY("smb_client_username", settings->arrays.smb_client_username, false, NULL, true);
1620+
SETTING_ARRAY("smb_client_password", settings->arrays.smb_client_password, false, NULL, true);
1621+
SETTING_ARRAY("smb_client_workgroup", settings->arrays.smb_client_workgroup, false, NULL, true);
1622+
#endif
1623+
16151624
#ifdef HAVE_LAKKA
16161625
SETTING_ARRAY("cpu_main_gov", settings->arrays.cpu_main_gov, false, NULL, true);
16171626
SETTING_ARRAY("cpu_menu_gov", settings->arrays.cpu_menu_gov, false, NULL, true);
@@ -2252,6 +2261,10 @@ static struct config_bool_setting *populate_settings_bool(
22522261
SETTING_BOOL("network_remote_enable", &settings->bools.network_remote_enable, false, false /* TODO */, false);
22532262
#endif
22542263
#endif
2264+
#ifdef HAVE_SMBCLIENT
2265+
SETTING_BOOL("settings_show_smb_client", &settings->bools.settings_show_smb_client, true, DEFAULT_SETTINGS_SHOW_SMB_CLIENT, false);
2266+
SETTING_BOOL("smb_client_enable", &settings->bools.smb_client_enable, true, false, false);
2267+
#endif
22552268
#ifdef HAVE_BSV_MOVIE
22562269
SETTING_BOOL("replay_checkpoint_deserialize", &settings->bools.replay_checkpoint_deserialize, true, DEFAULT_REPLAY_CHECKPOINT_DESERIALIZE, false);
22572270
#endif
@@ -2750,6 +2763,10 @@ static struct config_int_setting *populate_settings_int(
27502763
#endif
27512764
SETTING_INT("input_turbo_bind", &settings->ints.input_turbo_bind, true, DEFAULT_TURBO_BIND, false);
27522765

2766+
#ifdef HAVE_SMBCLIENT
2767+
SETTING_INT("smb_client_auth_mode", &settings->ints.smb_client_auth_mode, true, DEFAULT_SMB_CLIENT_AUTH_MODE, false);
2768+
#endif
2769+
27532770
*size = count;
27542771

27552772
return tmp;

configuration.h

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,9 @@ typedef struct settings
155155
int input_overlay_lightgun_port;
156156
#endif
157157
int input_turbo_bind;
158+
#ifdef HAVE_SMBCLIENT
159+
int smb_client_auth_mode;
160+
#endif
158161
} ints;
159162

160163
struct
@@ -544,7 +547,15 @@ typedef struct settings
544547
char ai_service_url[PATH_MAX_LENGTH];
545548

546549
char translation_service_url[2048]; /* TODO/FIXME - check size */
547-
} arrays;
550+
#ifdef HAVE_SMBCLIENT
551+
char smb_client_server_address[256];
552+
char smb_client_share[256];
553+
char smb_client_subdir[PATH_MAX_LENGTH];
554+
char smb_client_username[128];
555+
char smb_client_password[128];
556+
char smb_client_workgroup[64];
557+
#endif
558+
} arrays;
548559

549560
struct
550561
{
@@ -893,6 +904,9 @@ typedef struct settings
893904
bool settings_show_directory;
894905
#ifdef HAVE_MIST
895906
bool settings_show_steam;
907+
#endif
908+
#ifdef HAVE_SMBCLIENT
909+
bool settings_show_smb_client;
896910
#endif
897911
bool quick_menu_show_resume_content;
898912
bool quick_menu_show_restart_content;
@@ -1146,6 +1160,9 @@ typedef struct settings
11461160
bool game_ai_show_debug;
11471161
#endif
11481162

1163+
#ifdef HAVE_SMBCLIENT
1164+
bool smb_client_enable;
1165+
#endif
11491166
} bools;
11501167

11511168
uint8_t flags;

0 commit comments

Comments
 (0)