mirror of
https://github.com/EnderIce2/rpc-bridge.git
synced 2025-05-28 23:44:36 +00:00
Compare commits
6 Commits
08feef776b
...
9f1a9de3d7
Author | SHA1 | Date | |
---|---|---|---|
|
9f1a9de3d7 | ||
|
ccf09806c9 | ||
|
7363ee64d5 | ||
|
a3023e349e | ||
|
39966d7149 | ||
|
a8904bf3f1 |
4
.github/workflows/build-deploy.yml
vendored
4
.github/workflows/build-deploy.yml
vendored
@ -13,13 +13,13 @@ jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: dependencies
|
||||
run: sudo apt-get update && sudo apt-get install gcc-mingw-w64 make
|
||||
- name: make
|
||||
run: make
|
||||
- name: artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: bridge
|
||||
path: build
|
||||
|
5
.vscode/c_cpp_properties.json
vendored
5
.vscode/c_cpp_properties.json
vendored
@ -5,7 +5,10 @@
|
||||
"includePath": [
|
||||
"${workspaceFolder}/**"
|
||||
],
|
||||
"defines": [],
|
||||
"defines": [
|
||||
"GIT_COMMIT",
|
||||
"GIT_BRANCH"
|
||||
],
|
||||
"cStandard": "c17",
|
||||
"cppStandard": "gnu++17",
|
||||
"intelliSenseMode": "windows-gcc-x64"
|
||||
|
5
Makefile
5
Makefile
@ -1,7 +1,10 @@
|
||||
C_SOURCES = $(shell find ./ -type f -name '*.c')
|
||||
C_OBJECTS = $(C_SOURCES:.c=.o)
|
||||
|
||||
CFLAGS = -std=c17 -Wno-int-conversion
|
||||
GIT_COMMIT = $(shell git rev-parse --short HEAD)
|
||||
GIT_BRANCH = $(shell git rev-parse --abbrev-ref HEAD)
|
||||
|
||||
CFLAGS = -std=c17 -Wno-int-conversion -DGIT_COMMIT='"$(GIT_COMMIT)"' -DGIT_BRANCH='"$(GIT_BRANCH)"'
|
||||
LFLAGS = -lgdi32
|
||||
|
||||
# DBGFLAGS = -Wl,--export-all-symbols -g -O0 -ggdb3 -Wall
|
||||
|
56
bridge.c
56
bridge.c
@ -282,41 +282,53 @@ void ConnectToSocket(int fd)
|
||||
print("IPC directory: %s\n", runtime);
|
||||
|
||||
/* TODO: check for multiple discord instances and create a pipe for each */
|
||||
const char *discordUnixPipes[] = {
|
||||
"/discord-ipc-0",
|
||||
"/snap.discord/discord-ipc-0",
|
||||
"/app/com.discordapp.Discord/discord-ipc-0",
|
||||
const char *discordUnixSockets[] = {
|
||||
"%s/discord-ipc-%d",
|
||||
"%s/app/com.discordapp.Discord/discord-ipc-%d",
|
||||
"%s/.flatpak/dev.vencord.Vesktop/xdg-run/discord-ipc-%d",
|
||||
"%s/snap.discord/discord-ipc-%d",
|
||||
"%s/snap.discord-canary/discord-ipc-%d",
|
||||
};
|
||||
|
||||
struct sockaddr_un socketAddr;
|
||||
socketAddr.sun_family = AF_UNIX;
|
||||
char *pipePath = NULL;
|
||||
int sockRet = -1;
|
||||
|
||||
for (int i = 0; i < sizeof(discordUnixPipes) / sizeof(discordUnixPipes[0]); i++)
|
||||
int sockRet = 0;
|
||||
for (int i = 0; i < sizeof(discordUnixSockets) / sizeof(discordUnixSockets[0]); i++)
|
||||
{
|
||||
pipePath = malloc(strlen(runtime) + strlen(discordUnixPipes[i]) + 1);
|
||||
strcpy(pipePath, runtime);
|
||||
strcat(pipePath, discordUnixPipes[i]);
|
||||
strcpy_s(socketAddr.sun_path, sizeof(socketAddr.sun_path), pipePath);
|
||||
size_t pipePathLen = strlen(runtime) + strlen(discordUnixSockets[i]) + 1;
|
||||
char *pipePath = malloc(pipePathLen);
|
||||
|
||||
print("Connecting to %s\n", pipePath);
|
||||
|
||||
if (IsLinux)
|
||||
for (int j = 0; j < 16; j++)
|
||||
{
|
||||
unsigned long socketArgs[] = {
|
||||
(unsigned long)fd,
|
||||
(unsigned long)(intptr_t)&socketAddr,
|
||||
sizeof(socketAddr)};
|
||||
snprintf(pipePath, pipePathLen, discordUnixSockets[i], runtime, j);
|
||||
strcpy_s(socketAddr.sun_path, sizeof(socketAddr.sun_path), pipePath);
|
||||
print("Probing %s\n", pipePath);
|
||||
|
||||
sockRet = sys_socketcall(SYS_CONNECT, socketArgs);
|
||||
if (IsLinux)
|
||||
{
|
||||
unsigned long socketArgs[] = {
|
||||
(unsigned long)fd,
|
||||
(unsigned long)(intptr_t)&socketAddr,
|
||||
sizeof(socketAddr)};
|
||||
|
||||
sockRet = sys_socketcall(SYS_CONNECT, socketArgs);
|
||||
}
|
||||
else
|
||||
sockRet = sys_connect(fd, (caddr_t)&socketAddr, sizeof(socketAddr));
|
||||
|
||||
print(" error: %d\n", sockRet);
|
||||
if (sockRet >= 0)
|
||||
break;
|
||||
}
|
||||
else
|
||||
sockRet = sys_connect(fd, (caddr_t)&socketAddr, sizeof(socketAddr));
|
||||
|
||||
free(pipePath);
|
||||
if (sockRet >= 0)
|
||||
{
|
||||
print("Connecting to %s\n", pipePath);
|
||||
free(pipePath);
|
||||
break;
|
||||
}
|
||||
free(pipePath);
|
||||
}
|
||||
|
||||
if (sockRet < 0)
|
||||
|
@ -3,7 +3,7 @@
|
||||
<assemblyIdentity
|
||||
version="1.0.0.0"
|
||||
processorArchitecture="amd64"
|
||||
name="EnderIce2.rpc-bridge"
|
||||
name="com.enderice2.rpc-bridge"
|
||||
type="win32"
|
||||
/>
|
||||
<description>Simple bridge that allows you to use Discord Rich Presence with Wine games/software.</description>
|
||||
|
@ -21,10 +21,10 @@ TEMP_PATH="$XDG_RUNTIME_DIR"
|
||||
TEMP_PATH=${TEMP_PATH:-"$TMPDIR"}
|
||||
|
||||
VESSEL_PATH="$BRIDGE_PATH"
|
||||
IPC_PATHS="$TEMP_PATH /run/user/$UID $TEMP_PATH/snap.discord $TEMP_PATH/app/com.discordapp.Discord"
|
||||
IPC_PATHS="$TEMP_PATH /run/user/$UID $TEMP_PATH/app/com.discordapp.Discord $TEMP_PATH/.flatpak/dev.vencord.Vesktop/xdg-run $TEMP_PATH/snap.discord $TEMP_PATH/snap.discord-canary"
|
||||
for discord_ipc in $IPC_PATHS; do
|
||||
if [ -S "$discord_ipc"/discord-ipc-0 ]; then
|
||||
VESSEL_PATH="$BRIDGE_PATH:$(echo "$discord_ipc"/discord-ipc-0)"
|
||||
if [ -S "$discord_ipc"/discord-ipc-? ]; then
|
||||
VESSEL_PATH="$BRIDGE_PATH:$(echo "$discord_ipc"/discord-ipc-?)"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
13
gui.c
13
gui.c
@ -191,11 +191,14 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
case IDM_HELP_ABOUT:
|
||||
{
|
||||
char msg[256];
|
||||
sprintf(msg, "rpc-bridge v%s\n\n"
|
||||
"Simple bridge that allows you to use Discord Rich Presence with Wine games/software.\n\n"
|
||||
"Created by EnderIce2\n\n"
|
||||
"Licensed under the MIT License",
|
||||
VER_VERSION_STR);
|
||||
snprintf(msg, sizeof(msg),
|
||||
"rpc-bridge v%s\n"
|
||||
" branch: %s\n"
|
||||
" commit: %s\n\n"
|
||||
"Simple bridge that allows you to use Discord Rich Presence with Wine games/software.\n\n"
|
||||
"Created by EnderIce2\n\n"
|
||||
"Licensed under the MIT License",
|
||||
VER_VERSION_STR, GIT_BRANCH, GIT_COMMIT);
|
||||
MessageBox(NULL, msg, "About", MB_OK);
|
||||
break;
|
||||
}
|
||||
|
61
main.c
61
main.c
@ -273,38 +273,38 @@ void HandleArguments(int argc, char *argv[])
|
||||
}
|
||||
else if (strcmp(argv[1], "--version") == 0)
|
||||
{
|
||||
printf("%s\n", VER_VERSION_STR);
|
||||
/* Already shows the version */
|
||||
ExitProcess(0);
|
||||
}
|
||||
else if (strcmp(argv[1], "--help") == 0)
|
||||
{
|
||||
printf("Usage:\n"
|
||||
" %s [args]\n"
|
||||
"\n"
|
||||
"Arguments:\n"
|
||||
" --help Show this help\n"
|
||||
"\n"
|
||||
" --version Show version\n"
|
||||
"\n"
|
||||
" --install Install service\n"
|
||||
" This will copy the binary to C:\\windows\\bridge.exe and register it as a service\n"
|
||||
"\n"
|
||||
" --uninstall Uninstall service\n"
|
||||
" This will remove the service and delete C:\\windows\\bridge.exe\n"
|
||||
"\n"
|
||||
" --steam Reserved for Steam\n"
|
||||
" This will start the service and exit (used with bridge.sh)\n"
|
||||
"\n"
|
||||
" --no-service Do not run as service\n"
|
||||
" (only for --steam)\n"
|
||||
"\n"
|
||||
" --service Reserved for service\n"
|
||||
"\n"
|
||||
" --rpc <dir> Set RPC_PATH environment variable\n"
|
||||
" This is used to specify the directory where 'discord-ipc-0' is located\n"
|
||||
"\n"
|
||||
"Note: If no arguments are provided, the GUI will be shown instead\n",
|
||||
argv[0]);
|
||||
print("Usage:\n"
|
||||
" %s [args]\n"
|
||||
"\n"
|
||||
"Arguments:\n"
|
||||
" --help Show this help\n"
|
||||
"\n"
|
||||
" --version Show version\n"
|
||||
"\n"
|
||||
" --install Install service\n"
|
||||
" This will copy the binary to C:\\windows\\bridge.exe and register it as a service\n"
|
||||
"\n"
|
||||
" --uninstall Uninstall service\n"
|
||||
" This will remove the service and delete C:\\windows\\bridge.exe\n"
|
||||
"\n"
|
||||
" --steam Reserved for Steam\n"
|
||||
" This will start the service and exit (used with bridge.sh)\n"
|
||||
"\n"
|
||||
" --no-service Do not run as service\n"
|
||||
" (only for --steam)\n"
|
||||
"\n"
|
||||
" --service Reserved for service\n"
|
||||
"\n"
|
||||
" --rpc <dir> Set RPC_PATH environment variable\n"
|
||||
" This is used to specify the directory where 'discord-ipc-0' is located\n"
|
||||
"\n"
|
||||
"Note: If no arguments are provided, the GUI will be shown instead\n",
|
||||
argv[0]);
|
||||
ExitProcess(0);
|
||||
}
|
||||
}
|
||||
@ -316,11 +316,12 @@ int main(int argc, char *argv[])
|
||||
g_logFile = fopen(logFilePath, "w");
|
||||
if (g_logFile == NULL)
|
||||
{
|
||||
printf("Failed to open logs file: %ld\n",
|
||||
GetLastError());
|
||||
MessageBox(NULL, "Failed to open logs file", "Error", MB_OK | MB_ICONERROR);
|
||||
printf("Failed to open logs file: %ld\n", GetLastError());
|
||||
ExitProcess(1);
|
||||
}
|
||||
|
||||
print("rpc-bridge v%s %s-%s\n", VER_VERSION_STR, GIT_BRANCH, GIT_COMMIT);
|
||||
if (argc > 1)
|
||||
HandleArguments(argc, argv);
|
||||
else
|
||||
|
@ -5,5 +5,5 @@
|
||||
#define IDM_HELP_ABOUT 40003
|
||||
#define IDM_VIEW_LOG 40004
|
||||
|
||||
#define VER_VERSION 1, 2, 0, 0
|
||||
#define VER_VERSION_STR "1.2\0"
|
||||
#define VER_VERSION 1, 3, 0, 0
|
||||
#define VER_VERSION_STR "1.3\0"
|
||||
|
Loading…
x
Reference in New Issue
Block a user