
{"id":13002,"date":"2026-08-03T07:44:14","date_gmt":"2026-08-03T07:44:14","guid":{"rendered":"https:\/\/developer.rdkcentral.com\/documentation\/?page_id=13002"},"modified":"2026-08-04T05:25:27","modified_gmt":"2026-08-04T05:25:27","slug":"webconfigframework","status":"publish","type":"page","link":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/webconfigframework\/","title":{"rendered":"WebconfigFramework"},"content":{"rendered":"\n<p>WebconfigFramework is a shared C library (<code>libwebconfig_framework<\/code>) that provides RDK middleware components with a standardized interface for registering configuration sub-documents and handling binary configuration blob updates delivered by a webconfig client. The library manages the full lifecycle of a configuration request \u2014 from initial sub-document registration and version tracking, through queued execution with timeout enforcement, to acknowledgement and rollback \u2014 without requiring each consuming component to implement these mechanisms independently.<\/p>\n\n\n\n<p>As a device-side library, WebconfigFramework bridges cloud-driven or management-plane configuration delivery with the internal processing logic of individual RDK middleware components. A webconfig client pushes encoded configuration payloads (blobs) targeted at specific sub-documents owned by device components. Each component that participates in this model links against <code>libwebconfig_framework<\/code>, registers the sub-documents it manages, and provides callback function pointers to execute, roll back, and free blob data. The framework takes responsibility for queuing, scheduling, timeout management, and reporting results back to the webconfig client.<\/p>\n\n\n\n<p>The framework is platform-agnostic and designed to support deployments across both video streaming and broadband gateway devices. Its design accommodates single-component blob execution and, through the optional multi-component execution model, coordinated blob delivery across a master component and one or more slave components running in separate processes.<\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">flowchart LR\n\nclassDef Apps stroke:#00B9F1,fill:#E6F7FD,stroke-width:2px;\nclassDef RDKMW stroke:#75D701,fill:#F1FFE6,stroke-width:2px;\nclassDef VL stroke:#808080,fill:#F2F2F2,stroke-width:2px;\nclassDef Ext stroke:#FF8C00,fill:#FFF3E0,stroke-width:2px;\n\nsubgraph Ext[\"External Systems\"]\n    WebcfgClient[\"Webconfig Client\"]\nend\n\nsubgraph Apps[\"Apps &amp; Runtimes\"]\n    FBApps[\"Firebolt Apps\"]\n    WPE_RT[\"WPE Runtime\"]\nend\n\nsubgraph RDKMW[\"RDK Core Middleware\"]\n    WCF[\"WebconfigFramework\\n(libwebconfig_framework)\"]\n    CompA[\"RDK Component A\"]\n    CompB[\"RDK Component B\"]\n    Thunder[\"WPEFramework (Thunder)\"]\n    AM[\"App Manager\"]\nend\n\nsubgraph VL[\"Vendor Layer\"]\n    HAL[\"Platform HAL\"]\n    BSP[\"BSP\"]\nend\n\nWebcfgClient -->|\"Config blob delivery\"| CompA\nWebcfgClient -->|\"Config blob delivery\"| CompB\nCompA -->|\"register_sub_docs \/ PushBlobRequest\"| WCF\nCompB -->|\"register_sub_docs \/ PushBlobRequest\"| WCF\nWCF -->|\"ACK \/ NACK (rbus signal)\"| WebcfgClient\nApps -->|\"Firebolt APIs\"| RDKMW\nRDKMW -->|\"HAL APIs\"| VL\n\nclass Apps Apps;\nclass RDKMW RDKMW;\nclass VL VL;\nclass Ext Ext;<\/pre><\/div>\n\n\n\n<p><strong>Key Features &amp; Responsibilities:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sub-document Registration<\/strong>: Components register the configuration sub-documents they own during initialization, providing the framework with the sub-document names, current versions, and getter\/setter callbacks for version persistence.<\/li>\n\n\n\n<li><strong>Version Deduplication<\/strong>: Before queuing any blob request, the framework checks whether the incoming version already exists or is already pending execution. Duplicate requests are discarded, and transaction IDs are updated in place rather than re-queuing.<\/li>\n\n\n\n<li><strong>Request Queuing<\/strong>: Accepted blob requests are placed in a bounded circular queue and dispatched via a POSIX message queue to a dedicated processing thread, decoupling the receiving component from the execution path.<\/li>\n\n\n\n<li><strong>Timed Execution with Timeout Enforcement<\/strong>: Each blob execution runs in a cancelable worker thread. The framework applies a calculated timeout (component-provided or default) and cancels the thread upon expiry, sending a NACK to the webconfig client.<\/li>\n\n\n\n<li><strong>Rollback Support<\/strong>: If blob execution fails (other than a validation-only failure), the framework invokes the component-supplied rollback callback to restore the previous configuration state.<\/li>\n\n\n\n<li><strong>ACK\/NACK Signaling<\/strong>: The framework signals the webconfig client with ACK (success or pending with estimated timeout) or NACK (failure with error code and message) via rbus signals.<\/li>\n\n\n\n<li><strong>Crash Recovery Notification<\/strong>: Components can call <code>check_component_crash()<\/code> at startup. The framework detects whether the component is recovering from a crash by checking for the presence of a designated init-file and notifies the webconfig client of current sub-document versions accordingly.<\/li>\n\n\n\n<li><strong>Force-Reset Event Subscription<\/strong>: The framework subscribes to the <code>Device.X_RDK_WebConfig.webcfgSubdocForceReset<\/code> rbus event. When received, it resets the stored versions of the specified sub-documents, causing the webconfig client to re-apply those configurations on the next sync.<\/li>\n\n\n\n<li><strong>Multi-Component Coordination<\/strong>: When enabled, the framework supports a master\/slave execution model across processes. A master component coordinates blob data delivery to slave components using rbus events, collects their execution results, and reports a consolidated outcome to the webconfig client.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Design<\/h2>\n\n\n\n<p>WebconfigFramework is designed as a thin, self-contained library that imposes minimal coupling on the consuming component. It initializes its own internal threads and POSIX message queues at registration time, requiring no daemon lifecycle management from the component. The framework operates around a producer-consumer model: the component acts as producer by calling <code>PushBlobRequest()<\/code> after receiving and parsing a blob, and the framework&#8217;s internal processing thread acts as consumer by dispatching execution to a component-supplied callback with a bounded timeout.<\/p>\n\n\n\n<p>Version management is central to the design. The framework maintains a registry of all registered sub-documents with their current applied versions. When a new blob arrives, the version is compared against the registered version and against any pending queue entries. This three-way check \u2014 already applied, in queue, or new \u2014 prevents redundant execution and ensures the webconfig client receives meaningful feedback for every request.<\/p>\n\n\n\n<p>The northbound interface toward the webconfig client is handled exclusively through rbus signals. The framework opens a dedicated rbus connection at first use and sends structured signal strings encoding sub-document name, transaction ID, version, result type (ACK\/NACK), timeout, error code, and error message. The framework also subscribes to force-reset events over rbus, enabling the webconfig client to invalidate previously applied versions and trigger re-delivery.<\/p>\n\n\n\n<p>The southbound interface toward the platform is entirely callback-driven. The framework invokes function pointers provided by the component at registration time \u2014 <code>executeBlobRequest<\/code>, <code>rollbackFunc<\/code>, <code>calcTimeout<\/code>, and <code>freeResources<\/code> \u2014 keeping the library fully portable across device categories with no platform-specific code paths embedded within it.<\/p>\n\n\n\n<p>Version state is managed through the <code>getVersion<\/code> and <code>setVersion<\/code> callbacks supplied by the consuming component at <code>register_sub_docs()<\/code>. The framework maintains in-memory versions in the <code>blobRegInfo<\/code> array and calls the component&#8217;s setter after each successful blob execution.<\/p>\n\n\n\n<p>The IPC mechanism selection is uniform across all interactions: rbus is used for all external signaling (ACK\/NACK to webconfig client, force-reset subscription, and multi-component event delivery). POSIX message queues serve only as an internal, intra-process dispatch channel between the <code>PushBlobRequest()<\/code> API call and the <code>messageQueueProcessing<\/code> worker thread.<\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">graph TD\n    REG[\"Registration Module\\nregister_sub_docs \/ check_component_crash\"]\n    QUEUE[\"Circular Queue\\nqueueInfo\"]\n    MQ[\"POSIX Message Queue\\nper-process\"]\n    MQPROC[\"messageQueueProcessing\\nThread\"]\n    EXECTH[\"execute_request Thread\\ntimed and cancelable\"]\n    RBUS[\"rbus Interface\\nrbusInit \/ rbusEvent_Subscribe\"]\n    FORCERESET[\"subscribeSubdocForceReset\\nThread\"]\n    MASTER[\"Multi-Comp Master\\nQueue and Processing Thread\"]\n    SLAVE[\"Multi-Comp Slave\\nQueue and Processing Thread\"]\n    EVTS[\"rbus Events\\nBroadcast \/ Master \/ Slave\"]\n    LOG[\"Logging Module\\nLOG.RDK.WEBCONFIG\"]\n    CompCB[\"Component Callback\"]\n\n    REG -->|\"initialize\"| MQ\n    REG -->|\"initialize\"| FORCERESET\n    MQ -->|\"dispatch\"| MQPROC\n    MQPROC -->|\"spawn\"| EXECTH\n    MQPROC -->|\"addEntry\"| QUEUE\n    EXECTH -->|\"executeBlobRequest\"| CompCB\n    MQPROC -->|\"send result\"| RBUS\n    FORCERESET -->|\"subscribe\"| RBUS\n    MASTER -->|\"coordinate via\"| EVTS\n    SLAVE -->|\"coordinate via\"| EVTS<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Threading Model<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Threading Architecture<\/strong>: Multi-threaded<\/li>\n\n\n\n<li><strong><code>messageQueueProcessing<\/code> Thread<\/strong>: Blocks on <code>mq_receive()<\/code> waiting for blob requests posted by <code>PushBlobRequest()<\/code>. Upon receipt, it updates queue state, spawns an <code>execute_request<\/code> thread, and waits on a timed condition variable (<code>pthread_cond_timedwait<\/code>). It owns the execution mutex (<code>webconfig_exec<\/code>) and the queue access mutex (<code>queue_access<\/code>).<\/li>\n\n\n\n<li><strong><code>execute_request<\/code> Thread<\/strong>: Created per blob request with <code>PTHREAD_CANCEL_ASYNCHRONOUS<\/code>. Invokes the component&#8217;s <code>executeBlobRequest<\/code> callback and signals the <code>messageQueueProcessing<\/code> thread via <code>pthread_cond_signal<\/code> on completion. Cancelled by the processing thread if the timeout elapses.<\/li>\n\n\n\n<li><strong><code>subscribeSubdocForceReset<\/code> Thread<\/strong>: Detached thread that polls for the webconfig component&#8217;s rbus presence using <code>webcfg_rbus_discover_component()<\/code> and then subscribes to <code>Device.X_RDK_WebConfig.webcfgSubdocForceReset<\/code>. Runs once at registration and exits after subscribing.<\/li>\n\n\n\n<li><strong><code>display_subDocs<\/code> Thread<\/strong>: Detached diagnostic thread that activates only when <code>\/tmp\/webconfig_dbg<\/code> exists. Logs registered sub-document names, versions, and queue contents at a configurable interval for a configurable number of iterations.<\/li>\n\n\n\n<li><strong>Multi-component Threads<\/strong> (when <code>WBCFG_MULTI_COMP_SUPPORT<\/code> is enabled):<\/li>\n\n\n\n<li><em><code>messageQueueProcessingMultiComp<\/code><\/em>: Master-side queue processing thread that coordinates blob delivery to slave components and collects their results.<\/li>\n\n\n\n<li><em><code>messageQueueProcessingMultiCompSlave<\/code><\/em>: Slave-side queue processing thread that receives and executes blob data forwarded by the master.<\/li>\n\n\n\n<li><em><code>event_register_slave<\/code><\/em>: Per-subdoc thread that registers slave-side rbus events and signals readiness to the master.<\/li>\n\n\n\n<li><strong>Synchronization<\/strong>: <code>webconfig_exec<\/code> mutex guards blob execution; <code>queue_access<\/code> mutex protects the circular queue; <code>reg_subdoc<\/code> mutex protects the <code>blobRegInfo<\/code> registry; <code>webcfg_rbus_enable<\/code> mutex guards the one-time rbus initialization. Timed waits use <code>CLOCK_MONOTONIC<\/code> via <code>pthread_condattr_setclock<\/code>.<\/li>\n\n\n\n<li><strong>Async \/ Event Dispatch<\/strong>: rbus event callbacks (<code>subdocForceReset_callbk_rbus<\/code>, <code>multiComp_callbk_rbus<\/code>) are invoked on the rbus callback thread. The multi-component callbacks signal processing threads via <code>pthread_cond_signal<\/code> to keep callback handlers non-blocking.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Prerequisites and Dependencies<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Platform and Integration Requirements<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Build Dependencies<\/strong>: <code>rbus<\/code> (runtime bus library, required at link time); <code>libpthread<\/code>, <code>librt<\/code>, <code>libz<\/code> (linked via <code>libwebconfig_framework_la_LDFLAGS<\/code>). When <code>CCSP_SUPPORT_ENABLED<\/code> is set: <code>libccsp_common<\/code>.<\/li>\n\n\n\n<li><strong>Startup Order<\/strong>: The library initializes fully within the calling component&#8217;s process at <code>register_sub_docs()<\/code> time. There is no external daemon or service ordering requirement.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Component State Flow<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Initialization to Active State<\/h4>\n\n\n\n<p>The framework transitions through the following states during initialization when a component calls <code>register_sub_docs()<\/code>:<\/p>\n\n\n\n<p><strong>Initializing<\/strong> (populate <code>blobRegInfo<\/code> registry, zero the circular queue) \u2192 <strong>Hydrating<\/strong> (invoke <code>getVersion<\/code> callbacks to load current applied versions into the registry) \u2192 <strong>QueueReady<\/strong> (create POSIX message queue and spawn <code>messageQueueProcessing<\/code> thread) \u2192 <strong>Subscribing<\/strong> (spawn <code>subscribeSubdocForceReset<\/code> thread to establish rbus force-reset subscription) \u2192 <strong>Active<\/strong> (ready to accept <code>PushBlobRequest()<\/code> calls and process blob execution).<\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant Component as RDK Component\n    participant WCF as WebconfigFramework\n    participant POSIXMQ as POSIX Message Queue\n    participant RBUS as rbus\n\n    Component->>WCF: register_sub_docs(blobRegInfo, count, getVersion, setVersion)\n    WCF->>WCF: Populate blobRegInfo registry\n    WCF->>Component: getVersion(subdoc_name) [per subdoc]\n    Component-->>WCF: Current version\n\n    WCF->>POSIXMQ: mq_open (create per-process queue)\n    POSIXMQ-->>WCF: Queue ready\n\n    WCF->>WCF: pthread_create \u2014 messageQueueProcessing thread\n    WCF->>WCF: pthread_create \u2014 display_subDocs thread\n    WCF->>WCF: pthread_create \u2014 subscribeSubdocForceReset thread\n\n    WCF->>RBUS: rbusInit() [lazy, on first need]\n    RBUS-->>WCF: rbus handle open\n\n    WCF->>RBUS: webcfg_rbus_discover_component (poll)\n    RBUS-->>WCF: Component found\n\n    WCF->>RBUS: rbusEvent_Subscribe(webcfgSubdocForceReset)\n    RBUS-->>WCF: Subscribed\n\n    WCF-->>Component: register_sub_docs() returns\n    Note over Component,WCF: Framework is Active \u2014 ready to accept PushBlobRequest()<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Runtime State Changes<\/h4>\n\n\n\n<p><strong>State Change Triggers:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A blob delivered with a version matching the currently registered version is treated as a no-op: it is not queued, and (unless <code>disableWebCfgNotification==1<\/code>) the framework sends an immediate ACK with <code>timeout=0<\/code> (<code>VERSION_ALREADY_EXIST<\/code>). The exception is the <code>hotspot<\/code> sub-document when the version-ignore override file (<code>\/tmp\/hotspot_version_ignore<\/code>) is present, in which case the framework treats the request as a new version update.<\/li>\n\n\n\n<li>A blob with the same version already pending in the queue results in only the transaction ID being updated in the existing queue entry.<\/li>\n\n\n\n<li>If <code>check_component_crash()<\/code> is called at startup and the init-file is present (indicating a previous crash), the framework reports all registered sub-document versions to the webconfig client with a <code>COMPONENT_CRASH_EVENT<\/code> tag; if absent, it sends <code>COMPONENT_INIT_EVENT<\/code>.<\/li>\n\n\n\n<li>Upon receiving <code>Device.X_RDK_WebConfig.webcfgSubdocForceReset<\/code>, the framework calls <code>resetSubdocVersion()<\/code> for each comma-separated sub-document name in the event payload, zeroing the in-memory version so the next delivery of any version is treated as <code>VERSION_UPDATE_REQUIRED<\/code>.<\/li>\n<\/ul>\n\n\n\n<p><strong>Context Switching Scenarios:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If execution times out, the worker thread is cancelled, <code>BLOB_EXECUTION_TIMEDOUT<\/code> NACK is sent to the webconfig client, and the optional rollback function is invoked.<\/li>\n\n\n\n<li>If the internal circular queue is full (queue depth <code>QUEUE_SIZE = 10<\/code> reached), the new request is rejected with a <code>QUEUE_PUSH_FAILED<\/code> NACK immediately. (If <code>mq_send<\/code> fails, the framework sends <code>MQUEUE_SEND_FAILED<\/code>.)<\/li>\n\n\n\n<li>In multi-component mode, a slave component that exceeds <code>MAX_RESPONSE_TIME<\/code> (150 seconds) causes the master to mark the execution as timed out and send a <code>SLAVE_RESPONSE_TIME_OUT<\/code> NACK to the webconfig client.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Call Flows<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Initialization Call Flow<\/h4>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant Component as RDK Component\n    participant WCF as WebconfigFramework\n    participant POSIXMQ as POSIX Message Queue\n    participant RBUS as rbus\n\n    Component->>WCF: register_sub_docs(blobRegInfo, numDocs, getVersion, setVersion)\n    WCF->>WCF: Store blobData pointer and doc count\n    WCF->>WCF: Zero queueInfo (front = rear = -1)\n    WCF->>Component: getVersion(subdoc_name) for each subdoc\n    Component-->>WCF: Current version per subdoc\n    WCF->>WCF: Store setVersion function pointer\n    WCF->>WCF: initMessageQueue() \u2014 derive process_name from \/proc\/&lt;pid>\/comm\n    WCF->>POSIXMQ: mq_open(\"\/webconfig_queue-&lt;proc>\", O_CREAT)\n    POSIXMQ-->>WCF: mqd_t handle\n    WCF->>WCF: pthread_create \u2014 messageQueueProcessing\n    WCF->>WCF: pthread_create \u2014 display_subDocs\n    WCF->>WCF: pthread_create \u2014 subscribeSubdocForceReset\n    WCF->>RBUS: rbus_open(\"&lt;proc>_wbcfg\")\n    RBUS-->>WCF: Handle opened\n    WCF->>RBUS: rbus_discoverComponentName(webcfgSubdocForceReset) [retry loop]\n    RBUS-->>WCF: Provider found\n    WCF->>RBUS: rbusEvent_Subscribe(Device.X_RDK_WebConfig.webcfgSubdocForceReset)\n    RBUS-->>WCF: Subscribed\n    WCF-->>Component: Returns<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Request Processing Call Flow<\/h4>\n\n\n\n<p>The component receives blob data from the webconfig client via its own delivery channel, unpacks it, and calls <code>PushBlobRequest()<\/code> with a populated <code>execData<\/code> structure containing the sub-document name, transaction ID, version, entry count, parsed user data, and callback pointers. The framework performs version checks, queues the request, and notifies the webconfig client of the estimated execution time before invoking the component&#8217;s execution handler.<\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant WebcfgClient as Webconfig Client\n    participant Component as RDK Component\n    participant WCF as WebconfigFramework\n    participant POSIXMQ as POSIX Message Queue\n    participant RBUS as rbus\n\n    WebcfgClient->>Component: Blob delivery (subdoc data)\n    Component->>Component: Unpack blob, populate execData struct\n    Component->>WCF: PushBlobRequest(execData)\n\n    WCF->>WCF: checkNewVersionUpdateRequired()\n    alt VERSION_ALREADY_EXIST\n        WCF->>RBUS: sendWebConfigSignal (ACK, timeout=0)\n        RBUS->>WebcfgClient: ACK signal (no-op)\n        WCF-->>Component: Returns\n    else EXECUTION_IN_QUEUE\n        WCF->>WCF: Update txid in existing queue entry\n        WCF->>RBUS: sendWebConfigSignal (ACK with timeout)\n        RBUS->>WebcfgClient: ACK signal (subdoc, txid, version, timeout)\n        WCF-->>Component: Returns\n    else VERSION_UPDATE_REQUIRED\n        WCF->>WCF: calcTimeout(numOfEntries)\n        WCF->>WCF: addEntryToQueue(version, txid, timeout)\n        WCF->>RBUS: sendWebConfigSignal (ACK with timeout)\n        RBUS->>WebcfgClient: ACK signal (subdoc, txid, version, timeout)\n        WCF->>POSIXMQ: mq_send(execData)\n        POSIXMQ-->>WCF: Sent\n\n        POSIXMQ->>WCF: mq_receive (messageQueueProcessing thread)\n        WCF->>WCF: Mark queue entry IN_PROGRESS\n        WCF->>WCF: pthread_create \u2014 execute_request thread\n        WCF->>WCF: pthread_cond_timedwait (MAX_FUNC_EXEC_TIMEOUT \u00d7 timeout)\n\n        alt Execution completes within timeout\n            WCF->>Component: executeBlobRequest(user_data) callback\n            Component-->>WCF: Err {ErrorCode, ErrorMsg}\n            WCF->>WCF: pthread_cond_signal\n            alt BLOB_EXEC_SUCCESS\n                WCF->>WCF: updateVersionAndState (setVersion callback)\n                WCF->>RBUS: sendWebConfigSignal (ACK, timeout=0)\n                RBUS->>WebcfgClient: ACK signal (complete)\n            else Execution failed\n                WCF->>Component: rollbackFunc() [if provided]\n                WCF->>RBUS: sendWebConfigSignal (NACK, ErrorCode, ErrorMsg)\n                RBUS->>WebcfgClient: NACK signal\n            end\n        else Timeout elapsed\n            WCF->>WCF: pthread_cancel(execute_request thread)\n            WCF->>Component: rollbackFunc() [if provided]\n            WCF->>RBUS: sendWebConfigSignal (NACK, BLOB_EXECUTION_TIMEDOUT)\n            RBUS->>WebcfgClient: NACK signal\n        end\n\n        WCF->>WCF: freeResources() callback\n        WCF->>WCF: removeEntryFromQueue()\n    end<\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Internal Modules<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Module \/ Class<\/th><th>Description<\/th><th>Key Files<\/th><\/tr><\/thead><tbody><tr><td><code>webconfig_framework<\/code><\/td><td>Core registration and execution module. Implements <code>register_sub_docs()<\/code>, <code>check_component_crash()<\/code>, <code>PushBlobRequest()<\/code>, version management, the circular queue, POSIX message queue setup, <code>messageQueueProcessing<\/code> thread, <code>execute_request<\/code> thread, <code>send_ACK()<\/code>, <code>send_NACK()<\/code>, and the debug <code>display_subDocs<\/code> thread.<\/td><td><code>webconfig_framework.c<\/code>, <code>webconfig_framework.h<\/code><\/td><\/tr><tr><td><code>webconfig_bus_interface<\/code><\/td><td>rbus integration module. Implements rbus handle initialization, component discovery polling, <code>subscribeSubdocForceReset<\/code> thread, and the <code>subdocForceReset_callbk_rbus<\/code> event callback. Also provides multi-component rbus event registration, subscription, and publish functions when <code>WBCFG_MULTI_COMP_SUPPORT<\/code> is enabled.<\/td><td><code>webconfig_bus_interface.c<\/code>, <code>webconfig_bus_interface.h<\/code><\/td><\/tr><tr><td><code>webconfig_framework_multi_comp<\/code><\/td><td>Multi-component coordination module. Implements master and slave message queue processing threads, broadcast\/master\/slave signal callbacks, execution result exchange between master and slave processes, rollback coordination, and timeout exchange. Compiled only when <code>WBCFG_MULTI_COMP_SUPPORT<\/code> is defined.<\/td><td><code>webconfig_framework_multi_comp.c<\/code><\/td><\/tr><tr><td><code>webconfig_logging<\/code><\/td><td>Logging abstraction module. Provides <code>wbTraceLogAPI()<\/code> as a <code>printf<\/code>-based fallback logger, active when the build is configured with neither CCSP tracing nor the camera-platform logging backend.<\/td><td><code>webconfig_logging.c<\/code>, <code>webconfig_logging.h<\/code><\/td><\/tr><tr><td><code>webconfig_err<\/code><\/td><td>Error code definitions. Defines numeric error codes in the range 300\u2013950 covering execution states, queue failures, validation failures, and sub-system-specific failure categories.<\/td><td><code>webconfig_err.h<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Component Interactions<\/h2>\n\n\n\n<p>WebconfigFramework interacts externally with the rbus daemon for all outbound signaling and event subscriptions. All platform-specific operations are performed exclusively by the consuming component through its registered callbacks.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Interaction Matrix<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Target Component \/ Layer<\/th><th>Interaction Purpose<\/th><th>Key APIs \/ Topics<\/th><\/tr><\/thead><tbody><tr><td><strong>External Systems<\/strong><\/td><td><\/td><td><\/td><\/tr><tr><td>Webconfig Client<\/td><td>Deliver execution outcome (success \/ failure) and estimated timeout for each blob request<\/td><td><code>sendWebConfigSignal()<\/code> encoding <code>ACK<\/code> \/ <code>NACK<\/code> with sub-document name, txid, version, timeout, error code, and error message<\/td><\/tr><tr><td>Webconfig Client<\/td><td>Notify current sub-document versions at component startup or after crash recovery<\/td><td><code>notifyVersion_to_Webconfig()<\/code> \u2192 <code>sendWebConfigSignal()<\/code> with <code>COMPONENT_INIT_EVENT<\/code> or <code>COMPONENT_CRASH_EVENT<\/code><\/td><\/tr><tr><td><strong>Bus \/ IPC<\/strong><\/td><td><\/td><td><\/td><\/tr><tr><td>rbus<\/td><td>All external IPC \u2014 outbound signals to webconfig client, inbound force-reset event, multi-component event delivery<\/td><td><code>rbus_open<\/code>, <code>rbusEvent_Subscribe<\/code>, <code>rbus_discoverComponentName<\/code>, <code>rbusEvent_Publish<\/code>, <code>rbusEvent_Unsubscribe<\/code><\/td><\/tr><tr><td>POSIX Message Queue<\/td><td>Intra-process dispatch of blob requests from <code>PushBlobRequest()<\/code> to <code>messageQueueProcessing<\/code> thread<\/td><td><code>mq_open<\/code>, <code>mq_send<\/code>, <code>mq_receive<\/code>, <code>mq_unlink<\/code> \u2014 queue named <code>\/webconfig_queue-&lt;process_name&gt;<\/code><\/td><\/tr><tr><td><strong>Consuming Component<\/strong><\/td><td><\/td><td><\/td><\/tr><tr><td>RDK Component<\/td><td>Receive blob execution request and return error code\/message<\/td><td><code>executeBlobRequest(void*)<\/code> \u2192 <code>pErr<\/code> callback<\/td><\/tr><tr><td>RDK Component<\/td><td>Restore previous configuration state on execution failure<\/td><td><code>rollbackFunc()<\/code> callback<\/td><\/tr><tr><td>RDK Component<\/td><td>Calculate execution time budget for a given number of blob entries<\/td><td><code>calcTimeout(size_t numOfEntries)<\/code> callback<\/td><\/tr><tr><td>RDK Component<\/td><td>Release parsed blob data after execution completes<\/td><td><code>freeResources(void*)<\/code> callback<\/td><\/tr><tr><td>RDK Component<\/td><td>Read current applied version for a sub-document<\/td><td><code>getVersion(char* subdoc_name)<\/code> callback<\/td><\/tr><tr><td>RDK Component<\/td><td>Persist a newly applied version for a sub-document<\/td><td><code>setVersion(char* subdoc_name, uint32_t version)<\/code> callback<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Events Published<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Signal \/ Event<\/th><th>Topic<\/th><th>Trigger Condition<\/th><th>Receiver<\/th><\/tr><\/thead><tbody><tr><td>ACK with timeout<\/td><td>rbus signal via <code>sendWebConfigSignal<\/code><\/td><td>New blob version accepted and queued; reports estimated execution timeout<\/td><td>Webconfig Client<\/td><\/tr><tr><td>ACK completion<\/td><td>rbus signal via <code>sendWebConfigSignal<\/code><\/td><td>Blob execution returned <code>BLOB_EXEC_SUCCESS<\/code><\/td><td>Webconfig Client<\/td><\/tr><tr><td>NACK<\/td><td>rbus signal via <code>sendWebConfigSignal<\/code><\/td><td>Blob execution failed, timed out, queue full, or null function pointer; includes <code>ErrorCode<\/code> and <code>ErrorMsg<\/code><\/td><td>Webconfig Client<\/td><\/tr><tr><td><code>COMPONENT_INIT_EVENT<\/code><\/td><td>rbus signal via <code>sendWebConfigSignal<\/code><\/td><td>Component startup without crash (init-file absent at <code>check_component_crash()<\/code>)<\/td><td>Webconfig Client<\/td><\/tr><tr><td><code>COMPONENT_CRASH_EVENT<\/code><\/td><td>rbus signal via <code>sendWebConfigSignal<\/code><\/td><td>Component restart after crash (init-file present at <code>check_component_crash()<\/code>)<\/td><td>Webconfig Client<\/td><\/tr><tr><td><code>multiCompBroadCastSignal<\/code><\/td><td>rbus event<\/td><td>Master has a blob requiring slave participation; announces master name and subdoc<\/td><td>Slave components<\/td><\/tr><tr><td><code>multiCompSlaveProcessSignal<\/code><\/td><td>rbus event<\/td><td>Master sends blob data or rollback request to a specific slave component<\/td><td>Slave component<\/td><\/tr><tr><td><code>multiCompMasterProcessSignal<\/code><\/td><td>rbus event<\/td><td>Slave sends ready-signal, timeout value, or execution result back to master<\/td><td>Master component<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">IPC Flow Patterns<\/h3>\n\n\n\n<p><strong>Primary Request \/ Response Flow:<\/strong><\/p>\n\n\n\n<p><code>PushBlobRequest()<\/code> is the API boundary between the consuming component and the framework. Validation and version deduplication occur synchronously in the caller&#8217;s thread before the request enters the asynchronous queue path.<\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant Component as RDK Component\n    participant WCF as WebconfigFramework\n    participant POSIXMQ as POSIX Message Queue\n    participant RBUS as rbus\n\n    Component->>WCF: PushBlobRequest(execData)\n    WCF->>WCF: Version check (deduplicate)\n    WCF->>WCF: addEntryToQueue\n    WCF->>RBUS: ACK signal (timeout estimate)\n    WCF->>POSIXMQ: mq_send(execData)\n    POSIXMQ->>WCF: mq_receive (processing thread)\n    WCF->>Component: executeBlobRequest callback\n    Component-->>WCF: Err result\n    WCF->>RBUS: ACK or NACK signal (final result)<\/pre><\/div>\n\n\n\n<p><strong>Force-Reset Event Flow:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant WebcfgClient as Webconfig Client\n    participant RBUS as rbus\n    participant WCF as WebconfigFramework\n\n    WebcfgClient->>RBUS: Publish Device.X_RDK_WebConfig.webcfgSubdocForceReset\n    RBUS->>WCF: subdocForceReset_callbk_rbus (comma-separated subdoc names)\n    WCF->>WCF: resetSubdocVersion() for each subdoc name\n    Note over WCF: In-memory version set to 0.\n    Note over WCF: Next delivery accepted as a new update.<\/pre><\/div>\n\n\n\n<p><strong>Multi-Component Execution Flow:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant WebcfgClient as Webconfig Client\n    participant Master as Master Component + WCF\n    participant RBUS as rbus\n    participant Slave as Slave Component + WCF\n\n    WebcfgClient->>Master: Blob delivery\n    Master->>RBUS: Publish multiCompBroadCastSignal (master name, subdoc)\n    RBUS->>Slave: Broadcast received\n    Slave->>RBUS: Subscribe multiCompSlaveProcessSignal\n    Slave->>RBUS: Publish multiCompMasterProcessSignal (READY_TO_RECEIVE_DATA)\n    RBUS->>Master: Slave is ready\n    Master->>RBUS: Publish multiCompSlaveProcessSignal (blob data)\n    RBUS->>Slave: Blob data received\n    Slave->>Slave: executeBlobRequest callback\n    Slave->>RBUS: Publish multiCompMasterProcessSignal (result)\n    RBUS->>Master: Execution result\n    Master->>RBUS: sendWebConfigSignal (ACK or NACK)\n    RBUS->>WebcfgClient: Final result<\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Implementation Details<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Key Implementation Logic<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>State \/ Lifecycle Management<\/strong>: The circular queue (<code>queueInfo<\/code>) is the primary runtime state structure. Each entry tracks version, transaction ID, timeout, blob execution state (<code>NOT_STARTED<\/code>, <code>PENDING<\/code>, <code>IN_PROGRESS<\/code>, <code>COMPLETED<\/code>, <code>FAILED<\/code>), and the <code>execData<\/code> pointer for deferred memory release. Queue state transitions are protected by <code>queue_access<\/code> mutex.<\/li>\n\n\n\n<li>Queue management: <code>webconfig_framework.c<\/code><\/li>\n\n\n\n<li>Version registry: <code>webconfig_framework.c<\/code> (<code>blobRegInfo<\/code> array, <code>reg_subdoc<\/code> mutex)<\/li>\n\n\n\n<li><strong>Event Processing<\/strong>: Blob requests arrive at <code>PushBlobRequest()<\/code>, are serialized into the POSIX message queue (<code>mq_send<\/code>), and consumed by <code>messageQueueProcessing<\/code>. The worker thread spawns a cancelable <code>execute_request<\/code> thread per request and waits on <code>webconfig_exec_completed<\/code> condition variable with an absolute monotonic deadline of <code>MAX_FUNC_EXEC_TIMEOUT \u00d7 calcTimeout<\/code> seconds. In multi-component mode, rbus event callbacks deliver signals to dedicated master\/slave processing threads via <code>pthread_cond_signal<\/code> on <code>MultiCompCond<\/code>.<\/li>\n\n\n\n<li><strong>Error Handling Strategy<\/strong>: <code>executeBlobRequest<\/code> returns a heap-allocated <code>pErr<\/code> struct containing a <code>uint16_t ErrorCode<\/code> and a 128-byte <code>ErrorMsg<\/code>. Error code <code>BLOB_EXEC_SUCCESS<\/code> (300) indicates success; all other non-zero codes trigger NACK. The special code <code>VALIDATION_FALIED<\/code> (307) (note: spelled this way in <code>webconfig_err.h<\/code>) suppresses rollback invocation since no state was changed. The error code and message are embedded verbatim into the NACK signal sent to the webconfig client. The framework frees the returned <code>pErr<\/code> struct after processing.<\/li>\n\n\n\n<li><strong>Logging &amp; Diagnostics<\/strong>: The logging module selects its backend at compile time: <code>WbInfo<\/code>, <code>WbError<\/code>, <code>WbWarning<\/code>, and <code>WbDebug<\/code> macros map to CCSP trace functions when <code>CCSP_SUPPORT_ENABLED<\/code> is set, to <code>cimplog_*<\/code> functions when <code>ENABLE_RDKC_SUPPORT<\/code> is set, and to <code>wbTraceLogAPI()<\/code> (a <code>printf<\/code>-based implementation) otherwise.<\/li>\n\n\n\n<li>Logger module name: <code>WEBCONFIG<\/code> (cimplog tag); <code>LOG.RDK.WEBCONFIG<\/code> is returned by <code>rdk_logger_module_fetch()<\/code> when <code>ENABLE_RDKC_SUPPORT<\/code> is enabled.<\/li>\n\n\n\n<li>Runtime debug trigger: creating <code>\/tmp\/webconfig_dbg<\/code> activates the <code>display_subDocs<\/code> thread to log queue state and registered sub-document versions at a configurable interval.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Configuration<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Key Configuration Parameters<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Parameter<\/th><th>Type<\/th><th>Default<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>DEFAULT_TIMEOUT<\/code><\/td><td><code>size_t<\/code> (seconds)<\/td><td><code>10<\/code><\/td><td>Base timeout added to every blob execution timeout calculation when using the default <code>defFunc_calculateTimeout<\/code>.<\/td><\/tr><tr><td><code>DEFAULT_TIMEOUT_PER_ENTRY<\/code><\/td><td><code>size_t<\/code> (seconds)<\/td><td><code>3<\/code><\/td><td>Per-entry timeout increment applied by the default timeout calculation function. Total default timeout = <code>DEFAULT_TIMEOUT + (numOfEntries \u00d7 DEFAULT_TIMEOUT_PER_ENTRY)<\/code>.<\/td><\/tr><tr><td><code>MAX_FUNC_EXEC_TIMEOUT<\/code><\/td><td>multiplier<\/td><td><code>3<\/code><\/td><td>Multiplier applied to the component-calculated (or default) timeout when setting the <code>pthread_cond_timedwait<\/code> deadline for the <code>execute_request<\/code> thread.<\/td><\/tr><tr><td><code>QUEUE_SIZE<\/code><\/td><td>int<\/td><td><code>10<\/code><\/td><td>Maximum number of concurrent blob requests held in the circular queue per registered component.<\/td><\/tr><tr><td><code>MAX_EVENTS_IN_MQUEUE<\/code><\/td><td>int<\/td><td><code>10<\/code><\/td><td>POSIX message queue depth (<code>mq_maxmsg<\/code>).<\/td><\/tr><tr><td><code>MAX_RESPONSE_TIME<\/code><\/td><td>int (seconds)<\/td><td><code>150<\/code><\/td><td>Maximum time the master component waits for a slave response in multi-component execution before declaring a timeout.<\/td><\/tr><tr><td><code>SUBDOC_FORCE_RESET_SUB_TIMEOUT<\/code><\/td><td>int (seconds)<\/td><td><code>60<\/code><\/td><td>Subscription timeout passed to <code>rbusEvent_Subscribe<\/code> for the force-reset event.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Runtime Configuration<\/h3>\n\n\n\n<p>The debug verbosity of the <code>display_subDocs<\/code> thread can be adjusted at runtime by writing interval and iteration count values to <code>\/tmp\/webconfig_dbg<\/code>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">echo \"&lt;interval_seconds> &lt;num_iterations>\" > \/tmp\/webconfig_dbg<\/pre>\n\n\n\n<p>When the file is present, the thread logs registered sub-document names, current versions, and queue state for <code>&lt;num_iterations&gt;<\/code> cycles at <code>&lt;interval_seconds&gt;<\/code> intervals, then removes the file and returns to idle.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Configuration Persistence<\/h3>\n\n\n\n<p>Version state is maintained through the <code>setVersion<\/code> and <code>getVersion<\/code> callbacks supplied by the consuming component at registration. The framework invokes <code>setVersion<\/code> after each successful blob execution and calls <code>getVersion<\/code> at registration time to populate its in-memory version registry.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>WebconfigFramework is a shared C library (libwebconfig_framework) that provides RDK middleware components with a standardized [&hellip;]<\/p>\n","protected":false},"author":659,"featured_media":0,"parent":9844,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"class_list":["post-13002","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>WebconfigFramework - RDK Documentation Portal | Documentation<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/webconfigframework\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WebconfigFramework - RDK Documentation Portal | Documentation\" \/>\n<meta property=\"og:description\" content=\"WebconfigFramework is a shared C library (libwebconfig_framework) that provides RDK middleware components with a standardized [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/webconfigframework\/\" \/>\n<meta property=\"og:site_name\" content=\"RDK Documentation Portal | Documentation\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-04T05:25:27+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/webconfigframework\/\",\"url\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/webconfigframework\/\",\"name\":\"WebconfigFramework - RDK Documentation Portal | Documentation\",\"isPartOf\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/#website\"},\"datePublished\":\"2026-08-03T07:44:14+00:00\",\"dateModified\":\"2026-08-04T05:25:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/webconfigframework\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/webconfigframework\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/webconfigframework\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Documentation\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"RDK Video\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Components\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"WebconfigFramework\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/#website\",\"url\":\"https:\/\/developer.rdkcentral.com\/documentation\/\",\"name\":\"RDK Documentation Portal | Documentation\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/developer.rdkcentral.com\/documentation\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WebconfigFramework - RDK Documentation Portal | Documentation","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/webconfigframework\/","og_locale":"en_US","og_type":"article","og_title":"WebconfigFramework - RDK Documentation Portal | Documentation","og_description":"WebconfigFramework is a shared C library (libwebconfig_framework) that provides RDK middleware components with a standardized [&hellip;]","og_url":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/webconfigframework\/","og_site_name":"RDK Documentation Portal | Documentation","article_modified_time":"2026-08-04T05:25:27+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/webconfigframework\/","url":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/webconfigframework\/","name":"WebconfigFramework - RDK Documentation Portal | Documentation","isPartOf":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/#website"},"datePublished":"2026-08-03T07:44:14+00:00","dateModified":"2026-08-04T05:25:27+00:00","breadcrumb":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/webconfigframework\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/webconfigframework\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/webconfigframework\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/developer.rdkcentral.com\/documentation\/"},{"@type":"ListItem","position":2,"name":"Documentation","item":"https:\/\/developer.rdkcentral.com\/documentation\/"},{"@type":"ListItem","position":3,"name":"RDK Video","item":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/"},{"@type":"ListItem","position":4,"name":"Components","item":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/components\/"},{"@type":"ListItem","position":5,"name":"WebconfigFramework"}]},{"@type":"WebSite","@id":"https:\/\/developer.rdkcentral.com\/documentation\/#website","url":"https:\/\/developer.rdkcentral.com\/documentation\/","name":"RDK Documentation Portal | Documentation","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/developer.rdkcentral.com\/documentation\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/13002","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/users\/659"}],"replies":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/comments?post=13002"}],"version-history":[{"count":1,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/13002\/revisions"}],"predecessor-version":[{"id":13003,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/13002\/revisions\/13003"}],"up":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/9844"}],"wp:attachment":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/media?parent=13002"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}