20 #include "mediabrowser.h"
22 #include <safec_lib.h>
24 #define RBUS_XUPNP_SERVICE_CONSUMER "rbus.xupnp.dlna.client"
26 #define BUFFER_SIZE 20
27 char keyBuffer[BUFFER_SIZE] = {0};
30 int rbus_response = RBUS_ERROR_SUCCESS;
34 rbus_response = rbus_open(&handle, RBUS_XUPNP_SERVICE_CONSUMER);
35 return (RBUS_ERROR_SUCCESS == rbus_response)?
true:
false;
38 static bool getMediaServer(rbusProperty_t outProps,
char ** friendly_name,
char **udn)
43 int result = rbusProperty_Count(outProps);
46 fprintf(stderr,
"[%s] Expected name/udn pair, but found odd property entries. = %d \n", __FUNCTION__, result);
50 rbusValue_t value = rbusProperty_GetValue(outProps);
52 *friendly_name = rbusValue_ToString(value, NULL, 0);
53 outProps = rbusProperty_GetNext(outProps);
54 value = rbusProperty_GetValue(outProps);
57 *udn = rbusValue_ToString(value, NULL, 0);
62 bool getDiscoveredMediaServers(
int *size)
64 rbusObject_t inParams;
65 rbusObject_t outParams;
69 rbusObject_Init(&inParams, NULL);
70 rbus_response = rbusMethod_Invoke(handle, METHOD_DISCOVER_MEDIA_DEVICES_SIZE, inParams, &outParams);
71 rbusObject_Release(inParams);
72 if (RBUS_ERROR_SUCCESS == rbus_response)
74 rbusProperty_t outProps = rbusObject_GetProperties(outParams);
77 fprintf(stderr,
"[%s] Successfully invoked METHOD_DISCOVER_MEDIA_DEVICES_SIZE \n", __FUNCTION__ );
81 value = rbusProperty_GetValue(outProps);
82 if (value && rbusValue_GetType(value) == RBUS_INT32)
84 payload = rbusValue_GetInt32(value);
88 fprintf(stderr,
"[%s] Expected payload but got type %d \n", __FUNCTION__, rbusValue_GetType(value));
91 fprintf(stderr,
"[%s] payload size %d \n", __FUNCTION__, payload);
97 fprintf(stderr,
"[%s] Failed to retrieve properties \n", __FUNCTION__ );
99 rbusObject_Release(outParams);
103 bool getDiscoveredMediaServerAt(
int index,
char **friendlyName,
char ** udn,
int *err)
105 rbusObject_t inParams;
106 rbusObject_t outParams;
112 rbusObject_Init(&inParams, NULL);
113 rbusValue_Init(&value);
114 rbusValue_SetInt32(value, index);
115 rbusObject_SetValue(inParams,
"pos", value);
116 rbusValue_Release(value);
118 rbus_response = rbusMethod_Invoke(handle, METHOD_GET_MEDIA_DEVICE_AT, inParams, &outParams);
119 rbusObject_Release(inParams);
121 if (RBUS_ERROR_SUCCESS == rbus_response)
123 rbusProperty_t outProps = rbusObject_GetProperties(outParams);
129 status = getMediaServer(outProps, friendlyName,udn);
132 fprintf(stderr,
"[%s] Failed to retrieve media details %d \n", __FUNCTION__, count);
141 rbusObject_Release(outParams);
145 fprintf(stderr,
"[%s] Critical : Failed to invoke rpc communication %d \n", __FUNCTION__, rbus_response);
149 bool browseContentOnServer(
const char * server_udn,
const char * path_id,
int start_index,
150 int max_entries,
int * total_count,
char ** content_list,
int *err)
152 rbusObject_t inParams;
153 rbusObject_t outParams;
159 fprintf(stderr,
"[%s] Received request for browsing udn = [%s], path=[%s] \n", __FUNCTION__, server_udn, path_id);
160 rbusObject_Init(&inParams, NULL);
162 rbusValue_Init(&value);
163 rbusValue_SetString(value, server_udn);
164 rbusObject_SetValue(inParams,
"udn", value);
165 rbusValue_Release(value);
167 rbusValue_Init(&value);
168 rbusValue_SetString(value, path_id);
169 rbusObject_SetValue(inParams,
"path", value);
170 rbusValue_Release(value);
172 rbusValue_Init(&value);
173 rbusValue_SetInt32(value, start_index);
174 rbusObject_SetValue(inParams,
"start_index", value);
175 rbusValue_Release(value);
177 rbusValue_Init(&value);
178 rbusValue_SetInt32(value, max_entries);
179 rbusObject_SetValue(inParams,
"max_results", value);
180 rbusValue_Release(value);
181 rbus_response = rbusMethod_Invoke(handle, METHOD_BROWSE_CONTENT_ON_MEDIA_SERVER, inParams, &outParams);
182 rbusObject_Release(inParams);
184 *content_list = NULL;
187 if (RBUS_ERROR_SUCCESS == rbus_response)
190 rbusProperty_t outProps = rbusObject_GetProperties(outParams);
193 value = rbusProperty_GetValue(outProps);
196 *content_list = rbusValue_ToString(value, NULL, 0);
198 outProps = rbusProperty_GetNext(outProps);
205 value = rbusProperty_GetValue(outProps);
207 *total_count = rbusValue_GetInt32(value);
212 rbusObject_Release(outParams);
216 fprintf(stderr,
"[%s] Received error from Xupnp : %d \n", __FUNCTION__, rbus_response);
219 fprintf(stderr,
"[%s] returning %d \n" , __FUNCTION__, status);