Skip to content

Commit 6df514d

Browse files
committed
First commit. Uploading the first completed form of the library implementation for OBS websocket v5 communication protocol.
0 parents  commit 6df514d

File tree

521 files changed

+52325
-0
lines changed

Some content is hidden

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

521 files changed

+52325
-0
lines changed

.gitignore

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Build directories
2+
build/
3+
cmake-build-*/
4+
out/
5+
6+
.zencoder/
7+
8+
# Compiled files
9+
*.o
10+
*.a
11+
*.so
12+
*.dylib
13+
*.dll
14+
*.exe
15+
16+
# CMake files
17+
CMakeCache.txt
18+
CMakeFiles/
19+
cmake_install.cmake
20+
Makefile
21+
*.cmake
22+
!CMakeLists.txt
23+
24+
# IDE files
25+
.vscode/
26+
.idea/
27+
*.swp
28+
*.swo
29+
*~
30+
.DS_Store
31+
32+
# Example binaries
33+
obsws_example
34+
example
35+
36+
# Log files
37+
*.log
38+
39+
# Python cache (from original script)
40+
__pycache__/
41+
*.pyc
42+
*.pyo
43+
venv/
44+
.venv/
45+
46+
# Backup files
47+
*.bak
48+
*.backup
49+
*~
50+
51+
# Documentation build
52+
#doc/
53+
#docs/
54+
#docs/_build/
55+
#docs/html/
56+
#docs/latex/
57+
58+
# Package files
59+
*.tar.gz
60+
*.zip
61+
*.deb
62+
*.rpm

CMakeLists.txt

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
cmake_minimum_required(VERSION 3.10)
2+
project(libwsv5 C)
3+
4+
set(CMAKE_C_STANDARD 11)
5+
set(CMAKE_C_STANDARD_REQUIRED ON)
6+
7+
# Find required packages
8+
find_package(OpenSSL REQUIRED)
9+
find_package(Threads REQUIRED)
10+
11+
# Find libwebsockets
12+
find_path(LIBWEBSOCKETS_INCLUDE_DIR libwebsockets.h)
13+
find_library(LIBWEBSOCKETS_LIBRARY NAMES websockets)
14+
15+
# Find cJSON
16+
find_path(CJSON_INCLUDE_DIR cjson/cJSON.h)
17+
find_library(CJSON_LIBRARY NAMES cjson)
18+
19+
# Check if all dependencies are found
20+
if(NOT LIBWEBSOCKETS_INCLUDE_DIR OR NOT LIBWEBSOCKETS_LIBRARY)
21+
message(FATAL_ERROR "libwebsockets not found. Please install libwebsockets-dev")
22+
endif()
23+
24+
if(NOT CJSON_INCLUDE_DIR OR NOT CJSON_LIBRARY)
25+
message(FATAL_ERROR "cJSON not found. Please install libcjson-dev")
26+
endif()
27+
28+
# Source files
29+
set(SOURCES
30+
library.c
31+
)
32+
33+
set(HEADERS
34+
library.h
35+
)
36+
37+
# Create static library
38+
add_library(libwsv5 STATIC ${SOURCES} ${HEADERS})
39+
40+
# Set library output name (removes 'lib' prefix duplication)
41+
set_target_properties(libwsv5 PROPERTIES OUTPUT_NAME wsv5)
42+
43+
# Include directories
44+
target_include_directories(libwsv5 PUBLIC
45+
${CMAKE_CURRENT_SOURCE_DIR}
46+
${OPENSSL_INCLUDE_DIR}
47+
${LIBWEBSOCKETS_INCLUDE_DIR}
48+
${CJSON_INCLUDE_DIR}
49+
)
50+
51+
# Link libraries
52+
target_link_libraries(libwsv5 PUBLIC
53+
${OPENSSL_LIBRARIES}
54+
${LIBWEBSOCKETS_LIBRARY}
55+
${CJSON_LIBRARY}
56+
Threads::Threads
57+
m
58+
)
59+
60+
# Compiler flags
61+
target_compile_options(libwsv5 PRIVATE
62+
-Wall
63+
-Wextra
64+
-Wpedantic
65+
-Wno-unused-parameter
66+
)
67+
68+
# Optional: Build example/test program
69+
option(BUILD_EXAMPLES "Build example programs" ON)
70+
71+
if(BUILD_EXAMPLES)
72+
add_executable(obsws_example example.c)
73+
target_link_libraries(obsws_example libwsv5)
74+
endif()
75+
76+
# Installation
77+
install(TARGETS libwsv5
78+
ARCHIVE DESTINATION lib
79+
LIBRARY DESTINATION lib
80+
)
81+
82+
install(FILES ${HEADERS}
83+
DESTINATION include/libwsv5
84+
)
85+
86+
# Doxygen documentation generation
87+
find_package(Doxygen OPTIONAL_COMPONENTS dot)
88+
89+
if(DOXYGEN_FOUND)
90+
# Configure Doxyfile
91+
set(DOXYGEN_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc)
92+
set(DOXYGEN_HTML_OUTPUT html)
93+
set(DOXYGEN_LATEX_OUTPUT latex)
94+
set(DOXYGEN_INPUT ${CMAKE_CURRENT_SOURCE_DIR}/library.h ${CMAKE_CURRENT_SOURCE_DIR}/library.c)
95+
set(DOXYGEN_EXCLUDE_PATTERNS "*/test/*" "*/.git/*")
96+
set(DOXYGEN_GENERATE_HTML YES)
97+
set(DOXYGEN_GENERATE_LATEX YES)
98+
set(DOXYGEN_GENERATE_PDF YES)
99+
set(DOXYGEN_USE_PDFLATEX YES)
100+
set(DOXYGEN_OPTIMIZE_OUTPUT_FOR_C YES)
101+
set(DOXYGEN_EXTRACT_ALL NO)
102+
set(DOXYGEN_EXTRACT_PRIVATE NO)
103+
set(DOXYGEN_EXTRACT_STATIC YES)
104+
set(DOXYGEN_SOURCE_BROWSER YES)
105+
set(DOXYGEN_CALL_GRAPH YES)
106+
set(DOXYGEN_CALLER_GRAPH YES)
107+
set(DOXYGEN_HAVE_DOT YES)
108+
set(DOXYGEN_MARKDOWN_SUPPORT YES)
109+
110+
# Add doc target
111+
add_custom_target(doc
112+
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile
113+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
114+
COMMENT "Generating API documentation with Doxygen"
115+
VERBATIM
116+
)
117+
118+
message(STATUS "Doxygen: Found - use 'make doc' to generate documentation")
119+
else()
120+
message(STATUS "Doxygen: Not found - documentation generation disabled")
121+
message(STATUS " Install doxygen to enable: sudo apt-get install doxygen graphviz")
122+
endif()
123+
124+
# Print configuration summary
125+
message(STATUS "")
126+
message(STATUS "libwsv5 Configuration Summary:")
127+
message(STATUS " Version: 1.0.0")
128+
message(STATUS " C Standard: ${CMAKE_C_STANDARD}")
129+
message(STATUS " Build Type: ${CMAKE_BUILD_TYPE}")
130+
message(STATUS "")
131+
message(STATUS "Dependencies:")
132+
message(STATUS " OpenSSL: ${OPENSSL_VERSION}")
133+
message(STATUS " libwebsockets: ${LIBWEBSOCKETS_LIBRARY}")
134+
message(STATUS " cJSON: ${CJSON_LIBRARY}")
135+
message(STATUS " Threads: ${CMAKE_THREAD_LIBS_INIT}")
136+
message(STATUS "")
137+
message(STATUS "Build Options:")
138+
message(STATUS " Build Examples: ${BUILD_EXAMPLES}")
139+
message(STATUS "")

Doxyfile

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# Doxyfile for libwsv5 - OBS WebSocket v5 Protocol Library
2+
# Generate comprehensive documentation from all source code with rich details
3+
4+
PROJECT_NAME = "libwsv5"
5+
PROJECT_NUMBER = "1.0.0"
6+
PROJECT_BRIEF = "A simple C library for OBS WebSocket v5 protocol communication with async request/response handling"
7+
8+
# Output directories
9+
OUTPUT_DIRECTORY = ./doc
10+
HTML_OUTPUT = html
11+
LATEX_OUTPUT = latex
12+
13+
# Input files - process both headers and implementation
14+
INPUT = ./library.h ./library.c
15+
FILE_PATTERNS = *.h *.c
16+
RECURSIVE = NO
17+
18+
# === DOCUMENTATION EXTRACTION SETTINGS ===
19+
# Extract all entities - critical for comprehensive documentation
20+
EXTRACT_ALL = YES
21+
EXTRACT_PRIVATE = YES
22+
EXTRACT_STATIC = YES
23+
EXTRACT_LOCAL_CLASSES = YES
24+
EXTRACT_LOCAL_METHODS = YES
25+
EXTRACT_ANON_NSPACES = YES
26+
27+
# Generate additional lists for comprehensive documentation
28+
GENERATE_TODOLIST = YES
29+
GENERATE_TESTLIST = YES
30+
GENERATE_BUGLIST = YES
31+
GENERATE_DEPRECATEDLIST = YES
32+
GENERATE_LEGEND = YES
33+
34+
# === C-SPECIFIC OPTIMIZATIONS ===
35+
OPTIMIZE_OUTPUT_FOR_C = YES
36+
SHOW_USED_FILES = YES
37+
SHOW_FILES = YES
38+
39+
# Include all namespaces and groups
40+
SHOW_NAMESPACES = YES
41+
SHOW_GROUPED_MEMBVARS = YES
42+
43+
# === HTML GENERATION ===
44+
GENERATE_HTML = YES
45+
HTML_DYNAMIC_SECTIONS = YES
46+
47+
# HTML index settings
48+
DISABLE_INDEX = NO
49+
GENERATE_TREEVIEW = YES
50+
ENUM_VALUES_PER_LINE = 4
51+
52+
# === PDF/LATEX GENERATION ===
53+
GENERATE_LATEX = YES
54+
LATEX_OUTPUT = latex
55+
56+
# Critical PDF generation settings
57+
LATEX_BATCHMODE = YES
58+
LATEX_HIDE_INDICES = NO
59+
LATEX_SOURCE_CODE = YES
60+
61+
# === MARKDOWN AND FORMATTING ===
62+
MARKDOWN_SUPPORT = YES
63+
JAVADOC_AUTOBRIEF = YES
64+
65+
# === SORTING ===
66+
SORT_BY_SCOPE_NAME = YES
67+
SORT_MEMBER_DOCS = YES
68+
SORT_GROUP_NAMES = YES
69+
70+
# === DETAILED SETTINGS ===
71+
DETAILS_AT_TOP = YES
72+
REPEAT_BRIEF = YES
73+
BRIEF_MEMBER_DESC = YES
74+
75+
# Multi-line brief descriptions
76+
MULTILINE_CPP_IS_BRIEF = YES
77+
78+
# === SOURCE CODE DISPLAY ===
79+
SOURCE_BROWSER = YES
80+
INLINE_SOURCES = YES
81+
STRIP_CODE_COMMENTS = NO
82+
83+
# === CALL GRAPHS - CRITICAL FOR ARCHITECTURE VISUALIZATION ===
84+
CALL_GRAPH = YES
85+
CALLER_GRAPH = YES
86+
GRAPHICAL_HIERARCHY = YES
87+
DIRECTORY_GRAPH = YES
88+
89+
# Graphviz/DOT configuration
90+
HAVE_DOT = YES
91+
DOT_GRAPH_MAX_NODES = 200
92+
DOT_TRANSPARENT = NO
93+
DOT_IMAGE_FORMAT = svg
94+
95+
# === CROSS-REFERENCING ===
96+
CREATE_SUBDIRS = YES
97+
CASE_SENSE_FILENAMES = YES
98+
99+
# === VISIBILITY AND RELATIONSHIPS ===
100+
HIDE_UNDOC_MEMBERS = NO
101+
HIDE_UNDOC_CLASSES = NO
102+
HIDE_FRIEND_COMPOUNDS = NO
103+
104+
# === MEMBER AND CLASS OPTIONS ===
105+
INTERNAL_DOCS = YES
106+
107+
# === SEARCH FUNCTIONALITY ===
108+
SEARCHENGINE = YES
109+
110+
# === DOCUMENTATION LANGUAGE ===
111+
OUTPUT_LANGUAGE = English
112+
USE_WINDOWS_ENCODING = NO
113+
114+
# === PERFORMANCE SETTINGS ===
115+
QUIET = NO
116+
WARNINGS = YES
117+
WARN_IF_UNDOCUMENTED = YES
118+
119+
# End of Doxyfile - optimized for publication

0 commit comments

Comments
 (0)