Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 17 additions & 11 deletions server/gdial-rest.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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/<app_name>/dial_data
* thus the instance data must be included in the query or payload, not the path.
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
Expand All @@ -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;
}

Expand Down Expand Up @@ -1334,4 +1340,4 @@ GDIAL_STATIC_INLINE void GET_APP_response_builder_destroy(void *builder) {
g_free(rbuilder->additionalData);

g_free(builder);
}
}
2 changes: 1 addition & 1 deletion server/gdial-rest.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
46 changes: 44 additions & 2 deletions server/gdial-ssdp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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;
Expand Down Expand Up @@ -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;
}
2 changes: 2 additions & 0 deletions server/gdial-ssdp.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
59 changes: 59 additions & 0 deletions server/gdialservice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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:
{

Expand Down Expand Up @@ -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 ...");
Expand Down
6 changes: 6 additions & 0 deletions server/include/gdial-plat-app.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down
2 changes: 0 additions & 2 deletions server/include/gdial-plat-dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
3 changes: 3 additions & 0 deletions server/include/gdial_app_registry.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 3 additions & 1 deletion server/include/gdialservice.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
#endif /* gdialService_hpp */
4 changes: 4 additions & 0 deletions server/include/gdialserviceimpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ typedef enum _AppRequestEvents
FRIENDLYNAME_CHANGED,
REGISTER_APPLICATIONS,
UPDATE_NW_STANDBY,
UPDATE_MANUFACTURER_NAME,
UPDATE_MODEL_NAME,
INVALID_REQUEST
}
AppRequestEvents;
Expand All @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion server/plat/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
2 changes: 2 additions & 0 deletions server/plat/gdial-os-app.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading