A library with common code used by libraries and tools around the libimobiledevice project

Overview

libimobiledevice-glue

Library with common code used by the libraries and tools around the libimobiledevice project.

Features

The main functionality provided by this library are socket helper functions and a platform independent thread/mutex implementation. Besides that it comes with a number of string, file, and plist helper functions, as well as some other commonly used code that was originally duplicated in the dedicated projects.

Projects using this library

Installation / Getting started

Debian / Ubuntu Linux

First install all required dependencies and build tools:

sudo apt-get install \
	build-essential \
	checkinstall \
	git \
	autoconf \
	automake \
	libtool-bin \
	libplist-dev \

Then clone the actual project repository:

git clone https://github.com/libimobiledevice/libimobiledevice-glue.git
cd libimobiledevice-glue

Now you can build and install it:

./autogen.sh
make
sudo make install

If you require a custom prefix or other option being passed to ./configure you can pass them directly to ./autogen.sh like this:

./autogen.sh --prefix=/opt/local
make
sudo make install

Usage

This library is directly used by libusbmuxd, libimobiledevice, etc., so there is no need to do anything in particular.

Contributing

We welcome contributions from anyone and are grateful for every pull request!

If you'd like to contribute, please fork the master branch, change, commit and send a pull request for review. Once approved it can be merged into the main code base.

If you plan to contribute larger changes or a major refactoring, please create a ticket first to discuss the idea upfront to ensure less effort for everyone.

Please make sure your contribution adheres to:

  • Try to follow the code style of the project
  • Commit messages should describe the change well without being to short
  • Try to split larger changes into individual commits of a common domain

Links

License

This library and utilities are licensed under the GNU Lesser General Public License v2.1, also included in the repository in the COPYING file.

Credits

Apple, iPhone, iPad, iPod, iPod Touch, Apple TV, Apple Watch, Mac, iOS, iPadOS, tvOS, watchOS, and macOS are trademarks of Apple Inc.

This project is an independent software and has not been authorized, sponsored, or otherwise approved by Apple Inc.

README Updated on: 2021-06-07

Comments
  • socket: select returns 1 when the socket is closed

    socket: select returns 1 when the socket is closed

    On Windows, when I quickly unplug the device. Sometimes it gets stuck in send(). The reason is that when the peer (driver) closes the socket, select returns a value of 1. So I use very little time to check if the current is readable. If the read data is less than or equal to 0, the socket is closed. We don't need to send, because continuing the operation will prevent the thread from returning and continue to consume CPU resources.

    opened by xanadu-lee 4
  • usbmuxd does not find  libimobiledevice-glue

    usbmuxd does not find libimobiledevice-glue

    I tried building libimobiledevice-glue by doing the following

    [email protected] ~ % git clone https://github.com/libimobiledevice/libimobiledevice-glue.git
    Cloning into 'libimobiledevice-glue'...
    remote: Enumerating objects: 116, done.
    remote: Counting objects: 100% (116/116), done.
    remote: Compressing objects: 100% (77/77), done.
    remote: Total 116 (delta 59), reused 92 (delta 35), pack-reused 0
    Receiving objects: 100% (116/116), 55.27 KiB | 1.23 MiB/s, done.
    Resolving deltas: 100% (59/59), done.
    [email protected] ~ % cd libimobiledevice-glue
    [email protected] libimobiledevice-glue % ./autogen.sh
    glibtoolize: putting auxiliary files in '.'.
    glibtoolize: linking file './ltmain.sh'
    glibtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
    glibtoolize: linking file 'm4/libtool.m4'
    glibtoolize: linking file 'm4/ltoptions.m4'
    glibtoolize: linking file 'm4/ltsugar.m4'
    glibtoolize: linking file 'm4/ltversion.m4'
    glibtoolize: linking file 'm4/lt~obsolete.m4'
    configure.ac:27: installing './compile'
    configure.ac:30: installing './config.guess'
    configure.ac:30: installing './config.sub'
    configure.ac:6: installing './install-sh'
    configure.ac:6: installing './missing'
    src/Makefile.am: installing './depcomp'
    checking for a BSD-compatible install... /usr/bin/install -c
    checking whether build environment is sane... yes
    checking for a race-free mkdir -p... ./install-sh -c -d
    checking for gawk... no
    checking for mawk... no
    checking for nawk... no
    checking for awk... awk
    checking whether make sets $(MAKE)... yes
    checking whether make supports nested variables... yes
    checking whether make supports nested variables... (cached) yes
    checking for gcc... gcc
    checking whether the C compiler works... yes
    checking for C compiler default output file name... a.out
    checking for suffix of executables... 
    checking whether we are cross compiling... no
    checking for suffix of object files... o
    checking whether the compiler supports GNU C... yes
    checking whether gcc accepts -g... yes
    checking for gcc option to enable C11 features... none needed
    checking whether gcc understands -c and -o together... yes
    checking whether make supports the include directive... yes (GNU style)
    checking dependency style of gcc... gcc3
    checking build system type... x86_64-apple-darwin21.1.0
    checking host system type... x86_64-apple-darwin21.1.0
    checking how to print strings... printf
    checking for a sed that does not truncate output... /usr/bin/sed
    checking for grep that handles long lines and -e... /usr/bin/grep
    checking for egrep... /usr/bin/grep -E
    checking for fgrep... /usr/bin/grep -F
    checking for ld used by gcc... /Library/Developer/CommandLineTools/usr/bin/ld
    checking if the linker (/Library/Developer/CommandLineTools/usr/bin/ld) is GNU ld... no
    checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
    checking the name lister (/usr/bin/nm -B) interface... BSD nm
    checking whether ln -s works... yes
    checking the maximum length of command line arguments... 786432
    checking how to convert x86_64-apple-darwin21.1.0 file names to x86_64-apple-darwin21.1.0 format... func_convert_file_noop
    checking how to convert x86_64-apple-darwin21.1.0 file names to toolchain format... func_convert_file_noop
    checking for /Library/Developer/CommandLineTools/usr/bin/ld option to reload object files... -r
    checking for objdump... objdump
    checking how to recognize dependent libraries... pass_all
    checking for dlltool... no
    checking how to associate runtime and link libraries... printf %s\n
    checking for ar... ar
    checking for archiver @FILE support... no
    checking for strip... strip
    checking for ranlib... ranlib
    checking command to parse /usr/bin/nm -B output from gcc object... ok
    checking for sysroot... no
    checking for a working dd... /bin/dd
    checking how to truncate binary pipes... /bin/dd bs=4096 count=1
    checking for mt... no
    checking if : is a manifest tool... no
    checking for dsymutil... dsymutil
    checking for nmedit... nmedit
    checking for lipo... lipo
    checking for otool... otool
    checking for otool64... no
    checking for -single_module linker flag... yes
    checking for -exported_symbols_list linker flag... yes
    checking for -force_load linker flag... yes
    checking for stdio.h... yes
    checking for stdlib.h... yes
    checking for string.h... yes
    checking for inttypes.h... yes
    checking for stdint.h... yes
    checking for strings.h... yes
    checking for sys/stat.h... yes
    checking for sys/types.h... yes
    checking for unistd.h... yes
    checking for dlfcn.h... yes
    checking for objdir... .libs
    checking if gcc supports -fno-rtti -fno-exceptions... yes
    checking for gcc option to produce PIC... -fno-common -DPIC
    checking if gcc PIC flag -fno-common -DPIC works... yes
    checking if gcc static flag -static works... no
    checking if gcc supports -c -o file.o... yes
    checking if gcc supports -c -o file.o... (cached) yes
    checking whether the gcc linker (/Library/Developer/CommandLineTools/usr/bin/ld) supports shared libraries... yes
    checking dynamic linker characteristics... darwin21.1.0 dyld
    checking how to hardcode library paths into programs... immediate
    checking whether stripping libraries is possible... yes
    checking if libtool supports shared libraries... yes
    checking whether to build shared libraries... yes
    checking whether to build static libraries... yes
    checking for pkg-config... /usr/local/bin/pkg-config
    checking pkg-config is at least version 0.9.0... yes
    checking for libplist-2.0 >= 2.2.0... yes
    checking for stdint.h... (cached) yes
    checking for stdlib.h... (cached) yes
    checking for string.h... (cached) yes
    checking for an ANSI C-conforming const... yes
    checking for size_t... yes
    checking for ssize_t... yes
    checking for uint16_t... yes
    checking for uint32_t... yes
    checking for uint8_t... yes
    checking for asprintf... yes
    checking for strcasecmp... yes
    checking for strdup... yes
    checking for strerror... yes
    checking for strndup... yes
    checking for stpcpy... yes
    checking for vasprintf... yes
    checking for getifaddrs... yes
    checking for platform-specific build settings... darwin21.1.0
    checking how to run the C preprocessor... gcc -E
    checking whether gcc is Clang... yes
    checking whether pthreads work with "-pthread" and "-lpthread"... yes
    checking whether Clang needs flag to prevent "argument unused" warning when linking with -pthread... no
    checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE
    checking whether more special flags are required for pthreads... no
    checking for PTHREAD_PRIO_INHERIT... yes
    checking for pthread_once... yes
    checking for pthread_cancel... yes
    checking wether the C compiler supports constructor/destructor attributes... yes
    checking for struct dirent.d_type... yes
    checking for supported compiler flags...  -Wall -Wextra -Wmissing-declarations -Wredundant-decls -Wshadow -Wpointer-arith -Wwrite-strings -Wswitch-default -Wno-unused-parameter -fsigned-char -fvisibility=hidden
    checking for special C compiler options needed for large files... no
    checking for _FILE_OFFSET_BITS value needed for large files... no
    checking whether make supports nested variables... (cached) yes
    checking that generated files are newer than configure... done
    configure: creating ./config.status
    config.status: creating Makefile
    config.status: creating src/Makefile
    config.status: creating src/libimobiledevice-glue-1.0.pc
    config.status: creating include/Makefile
    config.status: creating config.h
    config.status: executing depfiles commands
    config.status: executing libtool commands
    
    Configuration for libimobiledevice-glue 1.0.0:
    -------------------------------------------
    
      Install prefix: .........: /usr/local
    
      Now type 'make' to build libimobiledevice-glue 1.0.0,
      and then 'make install' for installation.
    
    [email protected] libimobiledevice-glue % make
    /Library/Developer/CommandLineTools/usr/bin/make  all-recursive
    Making all in src
      CC       glue.lo
      CC       socket.lo
      CC       thread.lo
      CC       utils.lo
      CC       collection.lo
      CC       termcolors.lo
      CCLD     libimobiledevice-glue-1.0.la
    Making all in include
    make[2]: Nothing to be done for `all'.
    make[2]: Nothing to be done for `all-am'.
    [email protected] libimobiledevice-glue % sudo make install
    Password:
    Making install in src
     .././install-sh -c -d '/usr/local/lib'
     /bin/sh ../libtool   --mode=install /usr/bin/install -c   libimobiledevice-glue-1.0.la '/usr/local/lib'
    libtool: install: /usr/bin/install -c .libs/libimobiledevice-glue-1.0.0.dylib /usr/local/lib/libimobiledevice-glue-1.0.0.dylib
    libtool: install: (cd /usr/local/lib && { ln -s -f libimobiledevice-glue-1.0.0.dylib libimobiledevice-glue-1.0.dylib || { rm -f libimobiledevice-glue-1.0.dylib && ln -s libimobiledevice-glue-1.0.0.dylib libimobiledevice-glue-1.0.dylib; }; })
    libtool: install: /usr/bin/install -c .libs/libimobiledevice-glue-1.0.lai /usr/local/lib/libimobiledevice-glue-1.0.la
    libtool: install: /usr/bin/install -c .libs/libimobiledevice-glue-1.0.a /usr/local/lib/libimobiledevice-glue-1.0.a
    libtool: install: chmod 644 /usr/local/lib/libimobiledevice-glue-1.0.a
    libtool: install: ranlib /usr/local/lib/libimobiledevice-glue-1.0.a
     .././install-sh -c -d '/usr/local/lib/pkgconfig'
     /usr/bin/install -c -m 644 libimobiledevice-glue-1.0.pc '/usr/local/lib/pkgconfig'
    Making install in include
    make[2]: Nothing to be done for `install-exec-am'.
     .././install-sh -c -d '/usr/local/include'
     .././install-sh -c -d '/usr/local/include/libimobiledevice-glue'
     /usr/bin/install -c -m 644  libimobiledevice-glue/socket.h libimobiledevice-glue/thread.h libimobiledevice-glue/utils.h libimobiledevice-glue/collection.h libimobiledevice-glue/termcolors.h '/usr/local/include/libimobiledevice-glue'
    make[2]: Nothing to be done for `install-exec-am'.
    make[2]: Nothing to be done for `install-data-am'.
    [email protected] libimobiledevice-glue % 
    

    But when I use brew to install usbmuxd, it does not find libimobiledevice-glue

    [email protected] libimobiledevice-glue % brew install --HEAD usbmuxd                                                                                               
    Updating Homebrew...
    ==> Auto-updated Homebrew!
    Updated 2 taps (homebrew/core and homebrew/cask).
    ==> Updated Formulae
    Updated 16 formulae.
    ==> Updated Casks
    Updated 13 casks.
    
    ==> Cloning https://github.com/libimobiledevice/libusbmuxd.git
    Updating /Users/diginetiot/Library/Caches/Homebrew/libusbmuxd--git
    ==> Checking out branch master
    Already on 'master'
    Your branch is up to date with 'origin/master'.
    HEAD is now at 2ec5354 [github-actions] macOS: build for arm64 too
    ==> ./autogen.sh
    Last 15 lines from /Users/diginetiot/Library/Logs/Homebrew/libusbmuxd/01.autogen.sh:
    checking whether to build static libraries... yes
    checking for pkg-config... /usr/local/Homebrew/Library/Homebrew/shims/mac/super/pkg-config
    checking pkg-config is at least version 0.9.0... yes
    checking for libplist-2.0 >= 2.2.0... yes
    checking for libimobiledevice-glue-1.0 >= 1.0.0... no
    configure: error: Package requirements (libimobiledevice-glue-1.0 >= 1.0.0) were not met:
    
    No package 'libimobiledevice-glue-1.0' found
    
    Consider adjusting the PKG_CONFIG_PATH environment variable if you
    installed software in a non-standard prefix.
    
    Alternatively, you may set the environment variables limd_glue_CFLAGS
    and limd_glue_LIBS to avoid the need to call pkg-config.
    See the pkg-config man page for more details.
    
    READ THIS: https://docs.brew.sh/Troubleshooting
    
    Please create pull requests instead of asking for help on Homebrew's GitHub,
    Twitter or any other official channels.
    [email protected] libimobiledevice-glue
    

    Please does anyone have any ideas?

    opened by man4567890 2
  • Undefined symbols for architecture x86_64

    Undefined symbols for architecture x86_64

    MacBook Pro (13-inch, M1, 2020) 11.5.2 (20G95) Apple M1 iTerm2 Build 3.3.12

    Configuration for libimobiledevice-glue 1.0.0:

    Install prefix: .........: /usr/local

    Now type 'make' to build libimobiledevice-glue 1.0.0, and then 'make install' for installation.

    /Applications/Xcode.app/Contents/Developer/usr/bin/make all-recursive Making all in src CC glue.lo CC socket.lo CC thread.lo CC utils.lo CC collection.lo CC termcolors.lo CCLD libimobiledevice-glue-1.0.la Undefined symbols for architecture x86_64: "_plist_array_get_item", referenced from: _plist_print_to_stream_with_indentation in utils.o _plist_node_print_to_stream in utils.o "_plist_array_get_size", referenced from: _plist_print_to_stream_with_indentation in utils.o _plist_dict_print_to_stream in utils.o _plist_node_print_to_stream in utils.o "_plist_dict_new_iter", referenced from: _plist_dict_print_to_stream in utils.o "_plist_dict_next_item", referenced from: _plist_dict_print_to_stream in utils.o "_plist_from_bin", referenced from: _plist_read_from_filename in utils.o "_plist_from_xml", referenced from: _plist_read_from_filename in utils.o "_plist_get_bool_val", referenced from: _plist_node_print_to_stream in utils.o "_plist_get_data_val", referenced from: _plist_node_print_to_stream in utils.o "_plist_get_date_val", referenced from: _plist_node_print_to_stream in utils.o "_plist_get_key_val", referenced from: _plist_node_print_to_stream in utils.o "_plist_get_node_type", referenced from: _plist_print_to_stream_with_indentation in utils.o _plist_dict_print_to_stream in utils.o _plist_node_print_to_stream in utils.o "_plist_get_real_val", referenced from: _plist_node_print_to_stream in utils.o "_plist_get_string_val", referenced from: _plist_node_print_to_stream in utils.o "_plist_get_uint_val", referenced from: _plist_node_print_to_stream in utils.o "_plist_to_bin", referenced from: _plist_write_to_filename in utils.o "_plist_to_xml", referenced from: _plist_write_to_filename in utils.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[2]: *** [libimobiledevice-glue-1.0.la] Error 1 make[1]: *** [all-recursive] Error 1 make: *** [all] Error 2

    opened by likenow 2
  • Include stdio.h

    Include stdio.h

    When trying to compile the library files as a swift package to expose the API to swift, you will get an error message, that stdio.h must be included in termcolors.h, since FILE is defined in stdio.h. The error says:

    Declaration of 'FILE' must be imported from module 'Darwin.C._stdio' before it is required
    

    The error does only appear if you try to import the generated module inside of swift. This change should not break any existing functionality and it would help with compiling the project as a swift module. Is there any reason not to include stdio.h ? You can find an example swift module here. You would still need to add a test target, that imports the module and remove the #include <stdio.h> line that I added to my fork, to reproduce the error.

    opened by Schlaubischlump 1
  • Add missing package to dependencies list.

    Add missing package to dependencies list.

    While building this on Debian 11, I noticed that this couldn't build unless I either removed the package check for libplist or installed pkg-config. I added pkg-config to the dependencies list so others wouldn't run into this issue.

    opened by ichbluu 1
  • Fix select failing when the process has many file descriptors by using poll instead.

    Fix select failing when the process has many file descriptors by using poll instead.

    This happens, for example, when a process links with libusbmuxd, and the process is file descriptor heavy. Note: 'poll' means the syscall poll, not a polling approach. This patch does not add a busy wait and is not a performance regression.

    opened by Syrco 0
  • Occasionally blocks in send() when device is disconnected quickly.

    Occasionally blocks in send() when device is disconnected quickly.

    If usbmuxd notifies the device to disconnect, but the application is sending data, it may cause blocking in socket_send() . When running on Windows, this bug occurs sporadically with high frequency. So I added an interface that might help some applications. And, if you ignore this interface, it will not affect the original logic.

    opened by xanadu-lee 0
  • select does not return correctly when the device is disconnected

    select does not return correctly when the device is disconnected

    I am listening to devices in an application. When a device is connected, I read some device data. Now, when I quickly unplug the device, it may return 1 (device disconnected) if run right before select() , however subsequent send/recv blocks and never returns.

    Here is some information I found

    image

    Am I doing something wrong? (Currently only tested on Windows)

    opened by xanadu-lee 0
  • About conditional compilation

    About conditional compilation

    I see that you can compile header files including winsock2.h with useful conditions.

    Why not include unistd.h in the same way?

    In this way, we can improve it step by step until it can be compiled on MSVC instead of using the MinGW version that MSVC can't debug

    I built some cmake based libraries in https://github.com/libimobiledevice-cmake.

    It has been successfully compiled in MSVC.

    opened by xanadu-lee 0
  • socket.c:746:2: error: #error get_primary_mac_address is not supported on this platform.

    socket.c:746:2: error: #error get_primary_mac_address is not supported on this platform.

    I build libimobliedevice-glue in MSYS2(MinGW-w64), on Windows 10;

    Error Happend:

    $ make make all-recursive make[1]: Entering directory '/home/Admin/iOS_Wired_Build/libimobiledevice-glue' Making all in src make[2]: Entering directory '/home/Admin/iOS_Wired_Build/libimobiledevice-glue/src' CC glue.lo CC socket.lo socket.c: In function ‘get_primary_mac_address’: socket.c:746:2: error: #error get_primary_mac_address is not supported on this platform. 746 | #error get_primary_mac_address is not supported on this platform. | ^~~~~ make[2]: *** [Makefile:484: socket.lo] Error 1 make[2]: Leaving directory '/home/Admin/iOS_Wired_Build/libimobiledevice-glue/src' make[1]: *** [Makefile:415: all-recursive] Error 1 make[1]: Leaving directory '/home/Admin/iOS_Wired_Build/libimobiledevice-glue' make: *** [Makefile:347: all] Error 2

    anyone can help me ? Thanks

    opened by hellomanyi 0
  • Fix select failing when the process has many file descriptors by using poll instead

    Fix select failing when the process has many file descriptors by using poll instead

    This happens, for example, when a process links with libusbmuxd, and the process is file descriptor heavy. Note: 'poll' means the syscall poll, not a polling approach. This patch does not add a busy wait and is not a performance regression.

    opened by Syrco 3
  • Fixed compilation on msys

    Fixed compilation on msys

    when compiling on msys2, gcc doesn't define WIN32 (unless you use windows SDK, which i don't), i'm using default environment with cygwin64 compiler, therefore CYGWIN macro is defined.

    opened by mexmer 0
  • No reference implementation for getifaddrs available for this platform

    No reference implementation for getifaddrs available for this platform

    I'm building against an ancient uclibc (not my choice) and I can't build libimobiledevice-glue

    make  all-recursive
    make[1]: Entering directory '/src/libimobiledevice-glue'
    Making all in src
    make[2]: Entering directory '/src/libimobiledevice-glue/src'
      CC     socket.lo
    socket.c:698:2: error: #error No reference implementation for getifaddrs available for this platform.
    

    All I'm after in the end is USB tethering, is it possible to #ifdef out all the wifi based stuff as well?

    Otherwise, I note that you've got a portable-ish getifaddrs for Windows in socket.c, could this be made to work for uclibc as well?

    opened by voltagex 14
  • Error code API mismatch on Win32

    Error code API mismatch on Win32

    When building for Win32, socket code from the glue library gets error codes with WSAGetLastError() function rather than errno variable, which is correct: e.g. 1 When some error happens, we sometimes set errno ourselves: 1 2 3 In other cases, when we detect that error happened we don't touch errno and just return -1 to indicate error: 1 But the code in libusbmuxd always expects that errno will be set to some non-zero value if error happened: 1 2 3 As a result, on Windows some socket-related errors are not "masked" by libusbmuxd because errno is 0. This results to bugs later on, when the surrounding code thinks that no error have happened.

    This should be fixed in either of the following approaches:

    1. Fix libusbmuxd (and probably other users of socket_* code) to not expect non-zero errno in case of error: if (res < 0 && errno != 0) res = -errno; etc
    2. Somehow "map" WSAGetLastError() codes to corresponding errno values in socket.c functions. This may be hard to achieve but would give the best results for the surrounding code which would then be able to properly report errors to the user.
    3. Just make sure that errno is non-zero if we are going to return error. For example, we can do errno = WSAGetLastError() to return WSA error code (which is always > 10000 in case of error), or errno = EIO to always return I/O error if any WSA error happened (this is ugly though), or maybe map some WSA errors to corresponding errno values and return others as is.

    I think the last option would be the best one. We can map several known WSA error codes to errno values, and for other errors just set errno to the raw WSA code just to indicate that an error have happened. This will abstract platform-dependent error handling logic from the outer code, and still allow it to handle some known errors like EAGAIN. The only problem with this approach is that the outer code won't be able to properly describe an error to the user, because WSA error codes won't be handled by strerror - for example, here. This code is also where partial error mapping would be helpful - if we map WSAECONNREFUSED to ECONNREFUSED maybe some WSA code to ENODEV then idevice_connect will return the right errors.

    opened by MarSoft 3
Owner
libimobiledevice
A cross-platform protocol library to access iOS devices
libimobiledevice
Wangle is a framework providing a set of common client/server abstractions for building services in a consistent, modular, and composable way.

Wangle C++ networking library Wangle is a library that makes it easy to build protocols, application clients, and application servers. It's like Netty

Facebook 2.9k Nov 23, 2022
Common files for Packet Batch. Read this for configuration guidance and more!

Packet Batch (Common) Description This is a repository for Packet Batch that includes common files for all versions of Packet Batch to use (standard,

Packet Batch 3 Oct 1, 2022
The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.

Welcome! The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design

Microsoft 7.1k Nov 26, 2022
Triton Python and C++ client libraries and example, and client examples for go, java and scala.

Triton Client Libraries and Examples To simplify communication with Triton, the Triton project provides several client libraries and examples of how t

Triton Inference Server 211 Nov 25, 2022
Simple useful interoperability tests for WebRTC libraries. If you are a WebRTC library developer we'd love to include you!

Overview This project aims to be a convenient location for WebRTC library developers to perform interoperability tests. Who can Participate The projec

Aaron Clauson 103 Sep 8, 2022
nghttp2 - HTTP/2 C Library and tools

nghttp2 - HTTP/2 C Library This is an implementation of the Hypertext Transfer Protocol version 2 in C. The framing layer of HTTP/2 is implemented as

nghttp2 4.1k Nov 29, 2022
Basic jam templates using Handmade libraries to get up and running quickly.

This is a selection of template projects to get up and running with for the Wheel Reinvention Jam. They are built on top of Handmade-inspired librarie

Handmade Network 17 Sep 7, 2022
This is example for coding with Kotlin/Native, linking C libraries and comparison java.net.* with libcurl

KotlinNativeExample This is example for coding with Kotlin/Native, linking C libraries and comparison java.net.* with libcurl Running Running mingw64

Artem Musatenko 2 Jan 22, 2022
A collection of C++ HTTP libraries including an easy to use HTTP server.

Proxygen: Facebook's C++ HTTP Libraries This project comprises the core C++ HTTP abstractions used at Facebook. Internally, it is used as the basis fo

Facebook 7.7k Nov 25, 2022
LibVNCServer/LibVNCClient are cross-platform C libraries that allow you to easily implement VNC server or client functionality in your program.

LibVNCServer: A library for easy implementation of a VNC server. Copyright (C) 2001-2003 Johannes E. Schindelin If you already used LibVNCServer, you

null 878 Nov 24, 2022
Tiny HTTP Server on C, using only standard libraries

hell_o Linux only. Tiny HTTP Server on C, using only standard libraries. It is unfinished yet, going to add working interface and rewrite handler late

null 3 Feb 1, 2022
T-Watch 2020 v1 compatible firmware providing WiFi and BLE testing tools (and also, a watch :D)

ESP-IDF template app This is a template application to be used with Espressif IoT Development Framework. Please check ESP-IDF docs for getting started

Damien Cauquil 47 Nov 8, 2022
A simple networking library for C++. Designed with games in mind, but can be used for other things

A simple networking library for C++. Designed with games in mind, but can be used for other things. Tested to work on Android and Windows.

Matthew 5 Nov 14, 2019
Proxy that can be used in GTPS to crash and others. All commands are already in

Credit to ama6nen Real Repo This proxy can be used and modified by everyone. This proxy already has several command exploits for gtps Features: /proxy

Sersinals 1 Nov 12, 2022
tiny HTTP parser written in C (used in HTTP::Parser::XS et al.)

PicoHTTPParser Copyright (c) 2009-2014 Kazuho Oku, Tokuhiro Matsuno, Daisuke Murase, Shigeo Mitsunari PicoHTTPParser is a tiny, primitive, fast HTTP r

H2O 1.6k Nov 23, 2022
A webserver hosting a bank system for Minecraft, able to be used from web browser or from CC/OC if you're playing modded.

CCash A webserver hosting a bank system for Minecraft, able to be used from web browser or from CC/OC if you're playing modded. Description the curren

William Katz 23 Aug 7, 2022
Our own modification of RakNet used in open.mp

RakNet 2.52 This is a modified version of RakNet 2.52 used in open.mp. Modifications are done to work with SA:MP version of RakNet with some additiona

Open Multiplayer 15 Jan 3, 2022
A tool for bruteforcing the Camellia key used in the DDON Login Server <-> Client exchange

ddon_common_key_bruteforce Tool for bruteforcing the Camellia key used in the DDON Login Server <-> Client exchange. This works by seeding the PRNG by

Andrew Gutekanst 4 Apr 18, 2022
The C++ Network Library Project -- cross-platform, standards compliant networking library.

C++ Network Library Modern C++ network programming libraries. Join us on Slack: http://slack.cpp-netlib.org/ Subscribe to the mailing list: https://gr

C++ Network Library 1.9k Nov 11, 2022