diff --git a/server/gdial-rest.c b/server/gdial-rest.c index 4ed904ae..2312b85a 100644 --- a/server/gdial-rest.c +++ b/server/gdial-rest.c @@ -155,9 +155,12 @@ static void gdial_soup_message_set_http_error(SoupMessage *msg, guint state_code g_string_free(value_buf, FALSE); \ } -static GList *gdial_rest_server_registered_apps_clear(GList *registered_apps, GList *found) { +static GList *gdial_rest_server_registered_apps_clear(GDialRestServer *self, GList *registered_apps, GList *found) { + GDialRestServerPrivate *priv = gdial_rest_server_get_instance_private(self); GDialAppRegistry *app_registry = (GDialAppRegistry *)found->data; registered_apps = g_list_remove_link(registered_apps, found); + GDIAL_LOGINFO("Removing handler for app[%s]", app_registry->name); + soup_server_remove_handler(priv->local_soup_instance, app_registry->app_uri); gdial_app_regstry_dispose (app_registry); g_list_free(found); return registered_apps; @@ -281,7 +284,7 @@ GDIAL_STATIC gboolean gdial_rest_server_is_allowed_origin(GDialRestServer *self, return is_allowed; } -GDIAL_STATIC gchar *gdial_rest_server_new_additional_data_url(guint listening_port, const gchar *app_name, gboolean encode) { +GDIAL_STATIC gchar *gdial_rest_server_new_additional_data_url(guint listening_port, const gchar *app_name, gboolean encode , const gchar* app_uri) { /* * The specifciation of additionalDataUrl in form of /apps//dial_data * thus the instance data must be included in the query or payload, not the path. @@ -291,7 +294,7 @@ GDIAL_STATIC gchar *gdial_rest_server_new_additional_data_url(guint listening_po * for MIME type application/x-www-form-urlencoded.]] */ GString *url_buf = g_string_new(""); - g_string_printf(url_buf, "http://%s:%d%s/%s%s", "localhost", listening_port, GDIAL_REST_HTTP_APPS_URI, app_name, GDIAL_REST_HTTP_DIAL_DATA_URI); + g_string_printf(url_buf, "http://%s:%d%s%s", "localhost", listening_port, app_uri, GDIAL_REST_HTTP_DIAL_DATA_URI); gchar *unencoded = g_string_free(url_buf, FALSE); if (encode) { gchar *encoded = soup_uri_encode(unencoded, NULL); @@ -433,7 +436,7 @@ static void gdial_rest_server_handle_POST(GDialRestServer *gdial_rest_server, So if (new_app_instance) { gchar *additional_data_url = NULL; if (app_registry->use_additional_data) { - additional_data_url = gdial_rest_server_new_additional_data_url(listening_port, app_registry->name, FALSE); + additional_data_url = gdial_rest_server_new_additional_data_url(listening_port, app_registry->name, FALSE, app_registry->app_uri ); } gchar *additional_data_url_safe = soup_uri_encode(additional_data_url, NULL); GDIAL_LOGINFO("additionalDataUrl = %s, %s", additional_data_url, additional_data_url_safe); @@ -981,7 +984,7 @@ static void gdial_rest_server_dispose(GObject *object) { g_object_unref(priv->soup_instance); g_object_unref(priv->local_soup_instance); while (priv->registered_apps) { - priv->registered_apps = gdial_rest_server_registered_apps_clear(priv->registered_apps, priv->registered_apps); + priv->registered_apps = gdial_rest_server_registered_apps_clear(object, priv->registered_apps, priv->registered_apps); } G_OBJECT_CLASS (gdial_rest_server_parent_class)->dispose (object); } @@ -1102,10 +1105,7 @@ GDialRestServer *gdial_rest_server_new(SoupServer *rest_http_server,SoupServer * */ soup_server_add_handler(rest_http_server, "/apps/system", gdial_rest_http_server_system_callback, object, NULL); #endif - GDIAL_LOGINFO("gdial_local_rest_http_server_callback add handler"); GDIAL_REST_HTTP_APPS_URI = g_strdup_printf("/%s", random_id); - - soup_server_add_handler(local_rest_http_server, GDIAL_REST_HTTP_APPS_URI, gdial_local_rest_http_server_callback, object, NULL); return object; } @@ -1147,6 +1147,12 @@ gboolean gdial_rest_server_register_app(GDialRestServer *self, const gchar *app_ } g_return_val_if_fail(priv->registered_apps != NULL, FALSE); g_return_val_if_fail(gdial_rest_server_is_app_registered(self, app_name), FALSE); + + if( 0 != strcmp(app_name,"system")) + { + GDIAL_LOGINFO("gdial_local_rest_http_server_callback add handler for app_name:[%s]",app_name); + soup_server_add_handler(priv->local_soup_instance, app_registry->app_uri, gdial_local_rest_http_server_callback, self, NULL); + } GDIAL_LOGTRACE("Exiting ..."); return TRUE; } @@ -1204,7 +1210,7 @@ gboolean gdial_rest_server_unregister_all_apps(GDialRestServer *self) { priv->registered_apps = registered_apps_head; /*Remove all registered apps before*/ while (priv->registered_apps) { - priv->registered_apps = gdial_rest_server_registered_apps_clear(priv->registered_apps, priv->registered_apps); + priv->registered_apps = gdial_rest_server_registered_apps_clear(self, priv->registered_apps, priv->registered_apps); } GDIAL_LOGTRACE("Exiting ..."); return TRUE; @@ -1219,7 +1225,7 @@ gboolean gdial_rest_server_unregister_app(GDialRestServer *self, const gchar *ap GDialRestServerPrivate *priv = gdial_rest_server_get_instance_private(self); GList *found = g_list_find_custom(priv->registered_apps, app_name, GCompareFunc_match_registry_app_name); if (found == NULL) return FALSE; - priv->registered_apps = gdial_rest_server_registered_apps_clear(priv->registered_apps, found); + priv->registered_apps = gdial_rest_server_registered_apps_clear(self, priv->registered_apps, found); return TRUE; } @@ -1334,4 +1340,4 @@ GDIAL_STATIC_INLINE void GET_APP_response_builder_destroy(void *builder) { g_free(rbuilder->additionalData); g_free(builder); -} +} \ No newline at end of file diff --git a/server/gdial-rest.h b/server/gdial-rest.h index ca6f3db9..770d2463 100644 --- a/server/gdial-rest.h +++ b/server/gdial-rest.h @@ -50,7 +50,7 @@ gboolean gdial_rest_server_unregister_all_apps(GDialRestServer *self); typedef struct _GDialAppRegistry GDialAppRegistry; GDIAL_STATIC gboolean gdial_rest_server_is_allowed_origin(GDialRestServer *self, const gchar *header_origin, const gchar *app_name); -GDIAL_STATIC gchar *gdial_rest_server_new_additional_data_url(guint listening_port, const gchar *app_name, gboolean encode); +GDIAL_STATIC gchar *gdial_rest_server_new_additional_data_url(guint listening_port, const gchar *app_name, gboolean encode, const gchar* app_uri); GDIAL_STATIC GDialAppRegistry *gdial_rest_server_find_app_registry(GDialRestServer *self, const gchar *app_name); G_END_DECLS diff --git a/server/gdial-ssdp.c b/server/gdial-ssdp.c index 4b9f2119..d2ed7808 100644 --- a/server/gdial-ssdp.c +++ b/server/gdial-ssdp.c @@ -75,6 +75,8 @@ static const char ssdp_device_xml_template[] = "" static gchar *dd_xml_response_str_ = NULL; static gchar *app_friendly_name = NULL; static gchar *app_random_uuid = NULL; +static gchar *app_manufacturer_name = NULL; +static gchar *app_model_name = NULL; static pthread_mutex_t ssdpServerEventSync = PTHREAD_MUTEX_INITIALIZER; static void ssdp_http_server_callback(SoupServer *server, SoupMessage *msg, const char *path, GHashTable *query, SoupClientContext *client, gpointer user_data) { @@ -95,8 +97,8 @@ static void ssdp_http_server_callback(SoupServer *server, SoupMessage *msg, cons static size_t dd_xml_response_str_len = 0; if (!dd_xml_response_str_) { - const gchar *manufacturer= gdial_plat_dev_get_manufacturer(); - const gchar *model = gdial_plat_dev_get_model(); + const gchar *manufacturer= app_manufacturer_name; + const gchar *model = app_model_name; if (manufacturer == NULL) { manufacturer = gdial_options_->manufacturer; @@ -344,4 +346,44 @@ int gdial_ssdp_set_friendlyname(const gchar *friendlyname) } pthread_mutex_unlock(&ssdpServerEventSync); return 0; +} + +int gdial_ssdp_set_manufacturername(const gchar *manufacturer_name) +{ + pthread_mutex_lock(&ssdpServerEventSync); + if(manufacturer_name) + { + if (app_manufacturer_name != NULL) { + g_free(app_manufacturer_name); + } + app_manufacturer_name = g_strdup(manufacturer_name); + + GDIAL_LOGINFO("app_manufacturer_name :%s ",app_manufacturer_name); + if (dd_xml_response_str_!= NULL){ + g_free(dd_xml_response_str_); + dd_xml_response_str_ = NULL; + } + } + pthread_mutex_unlock(&ssdpServerEventSync); + return 0; +} + +int gdial_ssdp_set_modelname(const gchar *model_name) +{ + pthread_mutex_lock(&ssdpServerEventSync); + if(model_name) + { + if (app_model_name != NULL) { + g_free(app_model_name); + } + app_model_name = g_strdup(model_name); + + GDIAL_LOGINFO("app_model_name :%s ",app_model_name); + if (dd_xml_response_str_!= NULL){ + g_free(dd_xml_response_str_); + dd_xml_response_str_ = NULL; + } + } + pthread_mutex_unlock(&ssdpServerEventSync); + return 0; } \ No newline at end of file diff --git a/server/gdial-ssdp.h b/server/gdial-ssdp.h index 838b148f..3522e6df 100644 --- a/server/gdial-ssdp.h +++ b/server/gdial-ssdp.h @@ -30,6 +30,8 @@ int gdial_ssdp_new(SoupServer *server, GDialOptions *options, const gchar *rando int gdial_ssdp_destroy(); int gdial_ssdp_set_available(bool activationStatus, const gchar *friendlyName); int gdial_ssdp_set_friendlyname(const gchar *friendlyName); +int gdial_ssdp_set_manufacturername(const gchar *manufacturer_name); +int gdial_ssdp_set_modelname(const gchar *model_name); G_END_DECLS #endif diff --git a/server/gdialservice.cpp b/server/gdialservice.cpp index f0b6ee88..c41cf79d 100644 --- a/server/gdialservice.cpp +++ b/server/gdialservice.cpp @@ -171,6 +171,16 @@ static void server_friendlyname_handler(const gchar * friendlyname) gdial_ssdp_set_friendlyname(friendlyname); } +static void server_manufacturername_handler(const gchar * manufacturername) +{ + gdial_ssdp_set_manufacturername(manufacturername); +} + +static void server_modelname_handler(const gchar * modelname) +{ + gdial_ssdp_set_modelname(modelname); +} + static void server_powerstate_handler(const gchar * powerState) { gdialServiceImpl::getInstance()->updatePowerState(std::string(powerState)); @@ -268,6 +278,10 @@ int gdialServiceImpl::start_GDialServer(int argc, char *argv[]) gdail_plat_register_activation_cb(server_activation_handler); gdail_plat_register_friendlyname_cb(server_friendlyname_handler); + + gdail_plat_register_manufacturername_cb(server_manufacturername_handler); + gdail_plat_register_modelname_cb(server_modelname_handler); + gdail_plat_register_registerapps_cb (server_register_application); gdail_plat_dev_register_powerstate_cb(server_powerstate_handler); @@ -678,6 +692,18 @@ void *gdialServiceImpl::requestHandlerThread(void *ctx) gdial_plat_application_update_network_standby_mode((gboolean)reqHdlrPayload.user_param1); } break; + case UPDATE_MANUFACTURER_NAME: + { + GDIAL_LOGINFO("UPDATE_MANUFACTURER_NAME : data:%s",reqHdlrPayload.manufacturer.c_str()); + gdial_plat_application_update_manufacturer_name(reqHdlrPayload.manufacturer.c_str()); + } + break; + case UPDATE_MODEL_NAME: + { + GDIAL_LOGINFO("UPDATE_MODEL_NAME : data:%s",reqHdlrPayload.model.c_str()); + gdial_plat_application_update_model_name(reqHdlrPayload.model.c_str()); + } + break; default: { @@ -1043,6 +1069,39 @@ void gdialService::setNetworkStandbyMode(bool nwStandbymode) GDIAL_LOGTRACE("Exiting ..."); } + +GDIAL_SERVICE_ERROR_CODES gdialService::setManufacturerName(string manufacturer) +{ + gdialServiceImpl* gdialImplInstance = gdialServiceImpl::getInstance(); + GDIAL_LOGTRACE("Entering ..."); + GDIAL_LOGINFO("Manufacturer[%s]",manufacturer.c_str()); + if ((nullptr != m_gdialService ) && (nullptr != gdialImplInstance)) + { + RequestHandlerPayload payload; + payload.event = UPDATE_MANUFACTURER_NAME; + payload.manufacturer = manufacturer; + gdialImplInstance->sendRequest(payload); + } + GDIAL_LOGTRACE("Exiting ..."); + return GDIAL_SERVICE_ERROR_NONE; +} + +GDIAL_SERVICE_ERROR_CODES gdialService::setModelName(string model) +{ + gdialServiceImpl* gdialImplInstance = gdialServiceImpl::getInstance(); + GDIAL_LOGTRACE("Entering ..."); + GDIAL_LOGINFO("Model[%s]",model.c_str()); + if ((nullptr != m_gdialService ) && (nullptr != gdialImplInstance)) + { + RequestHandlerPayload payload; + payload.event = UPDATE_MODEL_NAME; + payload.model = model; + gdialImplInstance->sendRequest(payload); + } + GDIAL_LOGTRACE("Exiting ..."); + return GDIAL_SERVICE_ERROR_NONE; +} + void gdialServiceImpl::sendRequest( const RequestHandlerPayload& payload ) { GDIAL_LOGTRACE("Entering ..."); diff --git a/server/include/gdial-plat-app.h b/server/include/gdial-plat-app.h index 8a5134a9..8382f3ab 100644 --- a/server/include/gdial-plat-app.h +++ b/server/include/gdial-plat-app.h @@ -32,9 +32,13 @@ typedef void * gdial_async_handler_t; typedef void (*gdial_plat_activation_cb)(gboolean, const gchar *); typedef void (*gdial_plat_friendlyname_cb)(const gchar *); typedef void (*gdial_plat_registerapps_cb)(gpointer); +typedef void (*gdial_plat_manufacturername_cb)(const gchar *); +typedef void (*gdial_plat_modelname_cb)(const gchar *); void gdail_plat_register_activation_cb(gdial_plat_activation_cb cb); void gdail_plat_register_friendlyname_cb(gdial_plat_friendlyname_cb cb); void gdail_plat_register_registerapps_cb(gdial_plat_registerapps_cb cb); +void gdail_plat_register_manufacturername_cb(gdial_plat_manufacturername_cb cb); +void gdail_plat_register_modelname_cb(gdial_plat_modelname_cb cb); GDialAppError gdial_plat_application_start(const gchar *app_name, const gchar *payload, const gchar *query, const gchar *additional_data_url, gint *instance_id); GDialAppError gdial_plat_application_hide(const gchar *app_name, gint instance_id); @@ -48,6 +52,8 @@ GDialAppError gdial_plat_application_friendlyname_changed(const char *friendlyna const char* gdial_plat_application_get_protocol_version(); GDialAppError gdial_plat_application_register_applications(void*); void gdial_plat_application_update_network_standby_mode(gboolean nwstandbyMode); +GDialAppError gdial_plat_application_update_manufacturer_name(const char *manufacturer); +GDialAppError gdial_plat_application_update_model_name(const char *model); GDialAppError gdial_plat_application_service_notification(gboolean isNotifyRequired, void* notifier); void * gdial_plat_application_start_async(const gchar *app_name, const gchar *payload, const gchar *query, const gchar *additional_data_url, void *user_data); diff --git a/server/include/gdial-plat-dev.h b/server/include/gdial-plat-dev.h index 99ca0e53..05b607d4 100644 --- a/server/include/gdial-plat-dev.h +++ b/server/include/gdial-plat-dev.h @@ -26,8 +26,6 @@ extern "C" { #endif -const char * gdial_plat_dev_get_manufacturer(); -const char * gdial_plat_dev_get_model(); bool gdial_plat_dev_set_power_state_on(); bool gdial_plat_dev_set_power_state_off(); bool gdial_plat_dev_toggle_power_state(); diff --git a/server/include/gdial_app_registry.h b/server/include/gdial_app_registry.h index 02fbae09..1a701318 100644 --- a/server/include/gdial_app_registry.h +++ b/server/include/gdial_app_registry.h @@ -32,7 +32,10 @@ G_BEGIN_DECLS +#define APP_MAX_UUID_SIZE 64 + typedef struct _GDialAppRegistry { + gchar app_uri[APP_MAX_UUID_SIZE+1]; // for storing uri gchar *name; gboolean use_additional_data; gboolean is_singleton; diff --git a/server/include/gdialservice.h b/server/include/gdialservice.h index 179a1d47..e3523868 100644 --- a/server/include/gdialservice.h +++ b/server/include/gdialservice.h @@ -41,10 +41,12 @@ class gdialService string getProtocolVersion(void); GDIAL_SERVICE_ERROR_CODES RegisterApplications(RegisterAppEntryList* appConfigList); void setNetworkStandbyMode(bool nwStandbymode); + GDIAL_SERVICE_ERROR_CODES setManufacturerName(string manufacturer); + GDIAL_SERVICE_ERROR_CODES setModelName(string model); private: GDialNotifier* m_observer{nullptr}; gdialService(){}; virtual ~gdialService(){}; }; -#endif /* gdialService_hpp */ \ No newline at end of file +#endif /* gdialService_hpp */ diff --git a/server/include/gdialserviceimpl.h b/server/include/gdialserviceimpl.h index 29fd6168..5733b43e 100644 --- a/server/include/gdialserviceimpl.h +++ b/server/include/gdialserviceimpl.h @@ -37,6 +37,8 @@ typedef enum _AppRequestEvents FRIENDLYNAME_CHANGED, REGISTER_APPLICATIONS, UPDATE_NW_STANDBY, + UPDATE_MANUFACTURER_NAME, + UPDATE_MODEL_NAME, INVALID_REQUEST } AppRequestEvents; @@ -59,6 +61,8 @@ typedef struct _RequestHandlerPayload std::string appIdOractivation; std::string state; std::string error; + std::string manufacturer; + std::string model; void* data_param; bool user_param1; AppRequestEvents event; diff --git a/server/plat/CMakeLists.txt b/server/plat/CMakeLists.txt index 341fee74..c6fa074d 100644 --- a/server/plat/CMakeLists.txt +++ b/server/plat/CMakeLists.txt @@ -69,4 +69,4 @@ if(PLATFORM) endif() add_library(gdial-plat SHARED ${GDIAL_PLAT_LIB_SOURCE_FILES}) -target_link_Libraries(gdial-plat PRIVATE ${GLIB_LIBRARIES} ${GOBJECT_LIBRARIES} -lpthread -lWPEFrameworkCore -lWPEFrameworkDefinitions -lWPEFrameworkCOM -lWPEFrameworkPlugins -lWPEFrameworkSecurityUtil -lIARMBus) +target_link_Libraries(gdial-plat PRIVATE ${GLIB_LIBRARIES} ${GOBJECT_LIBRARIES} -lpthread -lWPEFrameworkCore -lWPEFrameworkDefinitions -lWPEFrameworkCOM -lWPEFrameworkPlugins -lWPEFrameworkSecurityUtil -lIARMBus -luuid) diff --git a/server/plat/gdial-os-app.h b/server/plat/gdial-os-app.h index 43229602..c2ed67e1 100644 --- a/server/plat/gdial-os-app.h +++ b/server/plat/gdial-os-app.h @@ -39,6 +39,8 @@ int gdial_os_application_friendlyname_changed(const char *friendlyname); const char* gdial_os_application_get_protocol_version(); int gdial_os_application_register_applications(void*); void gdial_os_application_update_network_standby_mode(gboolean nwstandbyMode); +int gdial_os_application_update_manufacturer_name(const char *manufacturer); +int gdial_os_application_update_model_name(const char *model); int gdial_os_application_service_notification(gboolean isNotifyRequired, void* notifier); #ifdef __cplusplus diff --git a/server/plat/gdial-plat-app.c b/server/plat/gdial-plat-app.c index 56fef49a..0d2d0eea 100644 --- a/server/plat/gdial-plat-app.c +++ b/server/plat/gdial-plat-app.c @@ -35,6 +35,8 @@ static gpointer gdial_app_state_cb_user_data_ = NULL; static gdial_plat_activation_cb g_activation_cb = NULL; static gdial_plat_friendlyname_cb g_friendlyname_cb = NULL; static gdial_plat_registerapps_cb g_registerapps_cb = NULL; +static gdial_plat_manufacturername_cb g_manufacturername_cb = NULL; +static gdial_plat_modelname_cb g_modelname_cb = NULL; #define GDIAL_PLAT_APP_ASYNC_CONTEXT_TYPE_COMMON 0 #define GDIAL_PLAT_APP_ASYNC_CONTEXT_TYPE_START 1 @@ -151,6 +153,18 @@ void gdail_plat_register_registerapps_cb(gdial_plat_registerapps_cb cb) gdial_register_registerapps_cb(cb); } +void gdail_plat_register_manufacturername_cb(gdial_plat_manufacturername_cb cb) +{ + g_manufacturername_cb = cb; + gdial_register_manufacturername_cb(cb); +} + +void gdail_plat_register_modelname_cb(gdial_plat_modelname_cb cb) +{ + g_modelname_cb = cb; + gdial_register_modelname_cb(cb); +} + gint gdial_plat_init(GMainContext *main_context) { g_return_val_if_fail(main_context != NULL, GDIAL_APP_ERROR_INTERNAL); g_return_val_if_fail((g_main_context_ == NULL || g_main_context_ == main_context), GDIAL_APP_ERROR_INTERNAL); @@ -336,8 +350,22 @@ void gdial_plat_application_update_network_standby_mode(gboolean nwstandby) gdial_os_application_update_network_standby_mode(nwstandby); } +GDialAppError gdial_plat_application_update_manufacturer_name(const char *manufacturer) +{ + g_return_val_if_fail(manufacturer != NULL, GDIAL_APP_ERROR_BAD_REQUEST); + + return gdial_os_application_update_manufacturer_name(manufacturer); +} + +GDialAppError gdial_plat_application_update_model_name(const char *model) +{ + g_return_val_if_fail(model != NULL, GDIAL_APP_ERROR_BAD_REQUEST); + + return gdial_os_application_update_model_name(model); +} + GDialAppError gdial_plat_application_service_notification(gboolean isNotifyRequired, void* notifier) { g_return_val_if_fail((notifier != NULL)||(false == isNotifyRequired), GDIAL_APP_ERROR_BAD_REQUEST); return gdial_os_application_service_notification(isNotifyRequired,notifier); -} +} \ No newline at end of file diff --git a/server/plat/gdial-plat-dev.c b/server/plat/gdial-plat-dev.c index 55d4c40f..baef465a 100644 --- a/server/plat/gdial-plat-dev.c +++ b/server/plat/gdial-plat-dev.c @@ -25,14 +25,6 @@ static gdial_plat_dev_nwstandbymode_cb g_nwstandbymode_cb = NULL; static gdial_plat_dev_powerstate_cb g_powerstate_cb = NULL; -const char * gdial_plat_dev_get_manufacturer() { - return g_getenv("GDIAL_DEV_MANUFACTURER"); -} - -const char * gdial_plat_dev_get_model() { - return g_getenv("GDIAL_DEV_MODEL"); -} - void gdial_plat_dev_nwstandby_mode_change(gboolean NetworkStandbyMode) { if(g_nwstandbymode_cb) g_nwstandbymode_cb(NetworkStandbyMode); diff --git a/server/plat/gdial.cpp b/server/plat/gdial.cpp index 465cf5dc..175b8782 100644 --- a/server/plat/gdial.cpp +++ b/server/plat/gdial.cpp @@ -49,6 +49,8 @@ GDialAppStatusCache* AppCache = nullptr; static gdial_activation_cb g_activation_cb = NULL; static gdial_friendlyname_cb g_friendlyname_cb = NULL; static gdial_registerapps_cb g_registerapps_cb = NULL; +static gdial_manufacturername_cb g_manufacturername_cb = NULL; +static gdial_modelname_cb g_modelname_cb = NULL; #define DIAL_MAX_NUM_OF_APPS (64) #define DIAL_MAX_NUM_OF_APP_NAMES (64) @@ -68,7 +70,7 @@ class GDialCastObject AppInfo* AppObj = new AppInfo(applicationName,applicationId,state,error); if ((nullptr != AppObj) && (nullptr != AppCache)) { - GDIAL_LOGINFO("AppName : %s AppID : %s State : %s Error : %s", + GDIAL_LOGINFO("AppName[%s] AppID[%s] State[%s] Error[%s]", AppObj->appName.c_str(), AppObj->appId.c_str(), AppObj->appState.c_str(), @@ -88,7 +90,7 @@ class GDialCastObject GDialErrorCode error = GDIAL_CAST_ERROR_INTERNAL; if( g_friendlyname_cb && friendlyname ) { - GDIAL_LOGINFO("GDialCastObject::friendlyNameChanged :%s ",friendlyname); + GDIAL_LOGINFO("GDialCastObject::friendlyNameChanged:[%s]",friendlyname); g_friendlyname_cb(friendlyname); error = GDIAL_CAST_ERROR_NONE; } @@ -111,7 +113,7 @@ class GDialCastObject { break; } - GDIAL_LOGINFO("Application: %d ", i); + GDIAL_LOGINFO("Application:[%d]", i); gAppPrefxes = g_list_prepend (gAppPrefxes, g_strdup(appEntry->prefixes.c_str())); GDIAL_LOGINFO("%s, ", appEntry->prefixes.c_str()); GDIAL_LOGINFO(""); @@ -123,7 +125,7 @@ class GDialCastObject GHashTable *gProperties = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); std::string appAllowStop = appEntry->allowStop ? "true" : "false"; g_hash_table_insert(gProperties,g_strdup("allowStop"),g_strdup(appAllowStop.c_str())); - GDIAL_LOGINFO("allowStop: %s", appAllowStop.c_str()); + GDIAL_LOGINFO("allowStop:[%s]", appAllowStop.c_str()); GDIAL_LOGINFO(""); GDialAppRegistry* app_registry = gdial_app_registry_new( g_strdup(appEntry->Names.c_str()), @@ -165,7 +167,7 @@ class GDialCastObject { GDIAL_LOGTRACE("Entering ..."); GDialErrorCode error = GDIAL_CAST_ERROR_INTERNAL; - GDIAL_LOGINFO("status: %s friendlyname: %s ",status.c_str(),friendlyName.c_str()); + GDIAL_LOGINFO("status[%s] friendlyname[%s]",status.c_str(),friendlyName.c_str()); if( g_activation_cb ) { if(!strcmp(status.c_str(), "true")) @@ -176,7 +178,7 @@ class GDialCastObject { g_activation_cb(0,friendlyName.c_str()); } - GDIAL_LOGINFO("status: %s g_activation_cb :%p",status.c_str(), g_activation_cb); + GDIAL_LOGINFO("status[%s] g_activation_cb[%p]",status.c_str(), g_activation_cb); error = GDIAL_CAST_ERROR_NONE; } GDIAL_LOGTRACE("Exiting ..."); @@ -189,14 +191,48 @@ class GDialCastObject gdial_plat_dev_nwstandby_mode_change(nwstandbyMode); GDIAL_LOGTRACE("Exiting ..."); } + + GDialErrorCode updateManufacturerName(const char* manufacturerName) + { + GDIAL_LOGTRACE("Entering ..."); + GDialErrorCode error = GDIAL_CAST_ERROR_INTERNAL; + if( g_manufacturername_cb && manufacturerName ) + { + GDIAL_LOGINFO("Manufacturer[%s]",manufacturerName); + g_manufacturername_cb(manufacturerName); + error = GDIAL_CAST_ERROR_NONE; + } + GDIAL_LOGTRACE("Exiting ..."); + return error; + } + + GDialErrorCode updateModelName(const char* modelName) + { + GDIAL_LOGTRACE("Entering ..."); + GDialErrorCode error = GDIAL_CAST_ERROR_INTERNAL; + if( g_modelname_cb && modelName ) + { + GDIAL_LOGINFO("ModelName[%s]",modelName); + g_modelname_cb(modelName); + error = GDIAL_CAST_ERROR_NONE; + } + GDIAL_LOGTRACE("Exiting ..."); + return error; + } GDialErrorCode launchApplication(const char* appName, const char* args) { GDIAL_LOGTRACE("Entering ..."); std::string applicationName = "", parameter = ""; - if (nullptr!=appName) applicationName = appName; - if (nullptr!=args) parameter = args; + + if (nullptr!=appName){ + applicationName = appName; + } + + if (nullptr!=args){ + parameter = args; + } GDIAL_LOGINFO("App[%s] param[%s] observer[%p]",applicationName.c_str(),parameter.c_str(),m_observer); if (nullptr!=m_observer) @@ -215,10 +251,18 @@ class GDialCastObject additionalDataUrl = ""; GDIAL_LOGTRACE("Entering ..."); - if (nullptr!=appName) applicationName = appName; - if (nullptr!=argPayload) payLoad = argPayload; - if (nullptr!=argQueryString) queryString = argQueryString; - if (nullptr!=argAdditionalDataUrl) additionalDataUrl = argAdditionalDataUrl; + if (nullptr!=appName){ + applicationName = appName; + } + if (nullptr!=argPayload){ + payLoad = argPayload; + } + if (nullptr!=argQueryString){ + queryString = argQueryString; + } + if (nullptr!=argAdditionalDataUrl){ + additionalDataUrl = argAdditionalDataUrl; + } GDIAL_LOGINFO("App[%s] payload[%s] query_string[%s] additional_data_url[%s]observer[%p]", applicationName.c_str(), @@ -242,8 +286,12 @@ class GDialCastObject GDIAL_LOGTRACE("Entering ..."); std::string applicationName = "", applicationId = ""; - if (nullptr!=appName) applicationName = appName; - if (nullptr!=appID) applicationId = appID; + if (nullptr!=appName){ + applicationName = appName; + } + if (nullptr!=appID){ + applicationId = appID; + } GDIAL_LOGINFO("App[%s]ID[%s]observer[%p]",applicationName.c_str(),applicationId.c_str(),m_observer); if (nullptr!=m_observer) @@ -260,8 +308,12 @@ class GDialCastObject std::string applicationName = "", applicationId = ""; - if (nullptr!=appName) applicationName = appName; - if (nullptr!=appID) applicationId = appID; + if (nullptr!=appName){ + applicationName = appName; + } + if (nullptr!=appID){ + applicationId = appID; + } GDIAL_LOGINFO("App[%s]ID[%s]observer[%p]",applicationName.c_str(),applicationId.c_str(),m_observer); if (nullptr!=m_observer) @@ -278,8 +330,12 @@ class GDialCastObject std::string applicationName = "", applicationId = ""; - if (nullptr!=appName) applicationName = appName; - if (nullptr!=appID) applicationId = appID; + if (nullptr!=appName){ + applicationName = appName; + } + if (nullptr!=appID){ + applicationId = appID; + } GDIAL_LOGINFO("App[%s]ID[%s]observer[%p]",applicationName.c_str(),applicationId.c_str(),m_observer); if (nullptr!=m_observer) @@ -296,8 +352,12 @@ class GDialCastObject std::string applicationName = "", applicationId = ""; - if (nullptr!=appName) applicationName = appName; - if (nullptr!=appID) applicationId = appID; + if (nullptr!=appName){ + applicationName = appName; + } + if (nullptr!=appID){ + applicationId = appID; + } GDIAL_LOGINFO("App[%s]ID[%s]observer[%p]",applicationName.c_str(),applicationId.c_str(),m_observer); if (nullptr!=m_observer) @@ -333,6 +393,16 @@ void gdial_register_registerapps_cb(gdial_registerapps_cb cb) g_registerapps_cb = cb; } +void gdial_register_manufacturername_cb(gdial_manufacturername_cb cb) +{ + g_manufacturername_cb = cb; +} + +void gdial_register_modelname_cb(gdial_modelname_cb cb) +{ + g_modelname_cb = cb; +} + bool gdial_init(GMainContext *context) { bool returnValue = false; @@ -435,7 +505,7 @@ map parse_query(const char* query_string) { int gdial_os_application_start(const char *app_name, const char *payload, const char *query_string, const char *additional_data_url, int *instance_id) { GDIAL_LOGTRACE("Entering ..."); - GDIAL_LOGINFO("App launch req: appName: %s query: [%s], payload: [%s], additionalDataUrl [%s] instance[%p]", + GDIAL_LOGINFO("App launch req: appName[%s] query[%s], payload[%s], additionalDataUrl [%s] instance[%p]", app_name, query_string, payload, additional_data_url,instance_id); if (strcmp(app_name,"system") == 0) { @@ -508,20 +578,20 @@ std::string GetCurrentState() { } else { string sToken = (char*)buffer; string query = "token=" + sToken; - GDIAL_LOGINFO("Security token = %s ",query.c_str()); + GDIAL_LOGINFO("Security token[%s] ",query.c_str()); controllerRemoteObject = new JSONRPC::LinkType(std::string(), false, query); } } std::string nfxstatus = "status@" + nfx_callsign; if(controllerRemoteObject->Get(1000, _T(nfxstatus), pluginResponse) == Core::ERROR_NONE) { - GDIAL_LOGINFO("Obtained netflix status = %s",nfxstatus.c_str()); + GDIAL_LOGINFO("Obtained netflix status[%s]",nfxstatus.c_str()); Core::JSON::ArrayType::Iterator index(pluginResponse.Elements()); while (index.Next() == true) { netflixState = index.Current().JSONState.Data(); } //end of while loop } //end of if case for querrying - GDIAL_LOGINFO("Netflix State = %s",netflixState.c_str()); + GDIAL_LOGINFO("Netflix State[%s]",netflixState.c_str()); return netflixState; } void stop_netflix() @@ -541,7 +611,7 @@ void stop_netflix() int gdial_os_application_stop(const char *app_name, int instance_id) { bool enable_stop = false; GDIAL_LOGTRACE("Entering ..."); - GDIAL_LOGINFO("AppName = %s appID = %s",app_name,std::to_string(instance_id).c_str()); + GDIAL_LOGINFO("AppName[%s] appID[%s]",app_name,std::to_string(instance_id).c_str()); if((strcmp(app_name,"system") == 0)){ GDIAL_LOGINFO("delete not supported for system app return GDIAL_APP_ERROR_BAD_REQUEST"); return GDIAL_APP_ERROR_BAD_REQUEST; @@ -591,7 +661,7 @@ int gdial_os_application_hide(const char *app_name, int instance_id) return GDIAL_APP_ERROR_NONE; } #if 0 - GDIAL_LOGINFO("gdial_os_application_hide-->stop: appName = %s appID = %s",app_name,std::to_string(instance_id).c_str()); + GDIAL_LOGINFO("gdial_os_application_hide-->stop: appName[%s] appID[%s]",app_name,std::to_string(instance_id).c_str()); std::string State = AppCache->SearchAppStatusInCache(app_name); if (0 && State != "running") { return GDIAL_APP_ERROR_BAD_REQUEST; @@ -607,7 +677,7 @@ int gdial_os_application_hide(const char *app_name, int instance_id) } return GDIAL_APP_ERROR_NONE; #else - GDIAL_LOGINFO("gdial_os_application_hide: appName = %s appID = %s",app_name,std::to_string(instance_id).c_str()); + GDIAL_LOGINFO("gdial_os_application_hide: appName[%s] appID[%s]",app_name,std::to_string(instance_id).c_str()); std::string State = AppCache->SearchAppStatusInCache(app_name); if (State != "running") { @@ -635,7 +705,7 @@ int gdial_os_application_hide(const char *app_name, int instance_id) int gdial_os_application_resume(const char *app_name, int instance_id) { GDIAL_LOGTRACE("Entering ..."); - GDIAL_LOGINFO("appName = %s appID = %s",app_name,std::to_string(instance_id).c_str()); + GDIAL_LOGINFO("appName[%s] appID[%s]",app_name,std::to_string(instance_id).c_str()); if((strcmp(app_name,"system") == 0)){ GDIAL_LOGINFO("system app can not be resume"); @@ -668,7 +738,7 @@ int gdial_os_application_resume(const char *app_name, int instance_id) { int gdial_os_application_state(const char *app_name, int instance_id, GDialAppState *state) { GDIAL_LOGTRACE("Entering ..."); - GDIAL_LOGINFO("App = %s Id = %d",app_name,instance_id); + GDIAL_LOGINFO("App[%s] Id[%d]",app_name,instance_id); if((strcmp(app_name,"system") == 0)){ *state = GDIAL_APP_STATE_HIDE; GDIAL_LOGINFO("getApplicationState: AppState = suspended "); @@ -676,7 +746,7 @@ int gdial_os_application_state(const char *app_name, int instance_id, GDialAppSt return GDIAL_APP_ERROR_NONE; } std::string State = AppCache->SearchAppStatusInCache(app_name); - GDIAL_LOGINFO("getApplicationState: AppState = %s ",State.c_str()); + GDIAL_LOGINFO("getApplicationState: AppState[%s] ",State.c_str()); /* * return cache, but also trigger a refresh */ @@ -710,7 +780,7 @@ int gdial_os_application_state(const char *app_name, int instance_id, GDialAppSt if ( enable_stop != NULL ) { if (strcmp(app_name,"Netflix") == 0 && strcmp(enable_stop,"true") == 0) { std::string app_state = GetCurrentState(); - GDIAL_LOGINFO("Presence of Netflix thunder plugin state = %s to confirm state", app_state.c_str()); + GDIAL_LOGINFO("Presence of Netflix thunder plugin state[%s] to confirm state", app_state.c_str()); if (app_state == "deactivated") { *state = GDIAL_APP_STATE_STOPPED; GDIAL_LOGINFO("app [%s] state converted to [%d]", app_name, *state); @@ -732,7 +802,7 @@ int gdial_os_application_state(const char *app_name, int instance_id, GDialAppSt int gdial_os_application_state_changed(const char *applicationName, const char *applicationId, const char *state, const char *error) { GDIAL_LOGTRACE("Entering ..."); - GDIAL_LOGINFO("appName: %s appId: [%s], state: [%s], error [%s]",applicationName, applicationId, state, error); + GDIAL_LOGINFO("appName[%s] appId[%s], state[%s], error [%s]",applicationName, applicationId, state, error); if (nullptr == GDialObjHandle) { @@ -755,7 +825,7 @@ int gdial_os_application_state_changed(const char *applicationName, const char * int gdial_os_application_activation_changed(const char *activation, const char *friendlyname) { GDIAL_LOGTRACE("Entering ..."); - GDIAL_LOGINFO("activation: %s friendlyname: [%s]",activation, friendlyname); + GDIAL_LOGINFO("activation[%s] friendlyname[%s]",activation, friendlyname); if (nullptr == GDialObjHandle) { @@ -778,7 +848,7 @@ int gdial_os_application_activation_changed(const char *activation, const char * int gdial_os_application_friendlyname_changed(const char *friendlyname) { GDIAL_LOGTRACE("Entering ..."); - GDIAL_LOGINFO("friendlyname: [%s]",friendlyname); + GDIAL_LOGINFO("friendlyname[%s]",friendlyname); if (nullptr == GDialObjHandle) { @@ -849,6 +919,47 @@ void gdial_os_application_update_network_standby_mode(gboolean nwstandbymode) GDIAL_LOGTRACE("Exiting ..."); } +int gdial_os_application_update_manufacturer_name(const char *manufacturer) +{ + GDialErrorCode returnValue = GDIAL_CAST_ERROR_INTERNAL; + GDIAL_LOGTRACE("Entering ..."); + if ((nullptr == GDialObjHandle)||(nullptr == manufacturer)) + { + GDIAL_LOGERROR("NULL GDialObjHandle[%p] manufacturer[%p]",GDialObjHandle,manufacturer); + } + else + { + GDIAL_LOGINFO("Manufacturer[%s]", manufacturer); + returnValue = GDialObjHandle->updateManufacturerName(manufacturer); + if (returnValue != GDIAL_CAST_ERROR_NONE) { + GDIAL_LOGERROR("Failed to updateManufacturerName. Error=%x",returnValue); + } + } + + GDIAL_LOGTRACE("Exiting ..."); + return returnValue; +} + +int gdial_os_application_update_model_name(const char *model) +{ + GDialErrorCode returnValue = GDIAL_CAST_ERROR_INTERNAL; + GDIAL_LOGTRACE("Entering ..."); + if ((nullptr == GDialObjHandle)||(nullptr == model)) + { + GDIAL_LOGERROR("NULL GDialObjHandle[%p] manufacturer[%p]",GDialObjHandle,model); + } + else + { + GDIAL_LOGINFO("Model[%s]", model); + returnValue = GDialObjHandle->updateModelName(model); + if (returnValue != GDIAL_CAST_ERROR_NONE) { + GDIAL_LOGERROR("Failed to updateModelName. Error=%x",returnValue); + } + } + GDIAL_LOGTRACE("Exiting ..."); + return returnValue; +} + int gdial_os_application_service_notification(gboolean isNotifyRequired, void* notifier) { GDIAL_LOGTRACE("Entering ..."); @@ -870,4 +981,4 @@ int gdial_os_application_service_notification(gboolean isNotifyRequired, void* n } GDIAL_LOGTRACE("Exiting ..."); return GDIAL_APP_ERROR_NONE; -} +} \ No newline at end of file diff --git a/server/plat/gdial.hpp b/server/plat/gdial.hpp index dcd36d2e..6570e974 100644 --- a/server/plat/gdial.hpp +++ b/server/plat/gdial.hpp @@ -45,9 +45,14 @@ void gdial_term(); typedef void (*gdial_activation_cb)(bool, const gchar *); typedef void (*gdial_friendlyname_cb)(const gchar *); typedef void (*gdial_registerapps_cb)(gpointer); +typedef void (*gdial_manufacturername_cb)(const gchar *); +typedef void (*gdial_modelname_cb)(const gchar *); + void gdial_register_activation_cb(gdial_activation_cb cb); void gdial_register_friendlyname_cb(gdial_friendlyname_cb cb); void gdial_register_registerapps_cb(gdial_registerapps_cb cb); +void gdial_register_manufacturername_cb(gdial_manufacturername_cb cb); +void gdial_register_modelname_cb(gdial_manufacturername_cb cb); #ifdef __cplusplus } diff --git a/server/plat/gdial_app_registry.c b/server/plat/gdial_app_registry.c index c3346470..2ef69c77 100644 --- a/server/plat/gdial_app_registry.c +++ b/server/plat/gdial_app_registry.c @@ -19,9 +19,12 @@ * limitations under the License. */ +#include #include #include "gdialservicelogging.h" +#define UUID_FILE_TEMPLATE "/tmp/.dial_%s_uuid.txt" + #define GDIAL_STR_ENDS_WITH(s1, s2) ((s1 != NULL) && (s2 != NULL) && ((strlen(s2) == 0) || (g_str_has_suffix(s1, s2)))) void gdial_app_regstry_dispose (GDialAppRegistry *app_registry) { @@ -92,5 +95,34 @@ GDialAppRegistry* gdial_app_registry_new (const gchar *app_name, const GList *ap app_registry->allowed_origins = g_list_prepend(app_registry->allowed_origins, g_strdup(allowed_origins->data)); allowed_origins = allowed_origins->next; } + + char app_uuid_file_path[64] = {0}; + char uuid_data[APP_MAX_UUID_SIZE] = {0}; + snprintf( app_uuid_file_path, sizeof(app_uuid_file_path), UUID_FILE_TEMPLATE , app_name); + + FILE *fuuid = fopen(app_uuid_file_path, "r"); + if (fuuid == NULL) + { + uuid_t random_uuid; + uuid_generate_random(random_uuid); + uuid_unparse(random_uuid, uuid_data); + GDIAL_LOGINFO("generated uuid:[%s]", uuid_data); + + fuuid = fopen(app_uuid_file_path, "w"); + if (fuuid != NULL) + { + fprintf(fuuid, "%s", uuid_data); + fclose(fuuid); + } + } + else + { + fgets(uuid_data, sizeof(uuid_data), fuuid); + fclose(fuuid); + } + + snprintf( app_registry->app_uri, sizeof(app_registry->app_uri), "/%s" , uuid_data); + GDIAL_LOGINFO("App:[%s] uuid:[%s] per Bootup", app_name, uuid_data); + return app_registry; -} +} \ No newline at end of file