Restore removed APIs for compatibility 15/210115/1 accepted/tizen/unified/20190716.111304 submit/tizen/20190716.080029
authorhj kim <backto.kim@samsung.com>
Tue, 16 Jul 2019 02:45:02 +0000 (11:45 +0900)
committerhj kim <backto.kim@samsung.com>
Tue, 16 Jul 2019 02:45:02 +0000 (11:45 +0900)
Change-Id: Ic16ac2081c1b1c20a438fef064835a81a9b7500f

CMakeLists.txt
include/media_controller_private.h
packaging/capi-media-controller.spec
src/media_controller_client.c
src/media_controller_server.c

index 992d96c..d3169d5 100755 (executable)
@@ -59,6 +59,9 @@ ADD_DEFINITIONS("-D_FILE_OFFSET_BITS=64")
 IF(ON_DEMAND_SOCKET_ACTIVATION)
 ADD_DEFINITIONS("-D_ON_DEMAND_SOCKET_ACTIVATION")
 ENDIF(ON_DEMAND_SOCKET_ACTIVATION)
+IF(TIZEN_FEATURE_COMPATIBILITY)
+ADD_DEFINITIONS("-DTIZEN_FEATURE_COMPATIBILITY")
+ENDIF(TIZEN_FEATURE_COMPATIBILITY)
 
 SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${LIB_INSTALL_DIR}")
 
index 54247a0..d2c5a71 100644 (file)
@@ -187,21 +187,26 @@ extern "C" {
 #define MC_DBUS_SIGNAL_NAME_SHUFFLE_ABILITY                    "shuffle_ability"
 #define MC_DBUS_SIGNAL_NAME_REPEAT_ABILITY                     "repeat_ability"
 #define MC_DBUS_SIGNAL_NAME_SEARCH_CMD                         "search_cmd"
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+#define MC_DBUS_SIGNAL_NAME_PLAYBACK_STATE_CMD         "pb_state_cmd"
+#define MC_DBUS_SIGNAL_NAME_CUSTOM_COMMAND                     "custom_command"
+#define MC_DBUS_SIGNAL_NAME_CUSTOM_COMMAND_REPLY       "custom_command_reply"
+#endif
 
 
 
-
-#define MC_COMMAND_PLAYBACKSTATE               "_pb_state_cmd_"
 #define MC_COMMAND_PLAYBACKACTION              "_pb_action_cmd_"
 #define MC_COMMAND_PLAYBACKPOSITION            "_pb_position_cmd_"
 #define MC_COMMAND_SHUFFLE                             "_shuffle_cmd_"
 #define MC_COMMAND_REPEAT                              "_repeat_cmd_"
-#define MC_COMMAND_CUSTOM                              "_custom_cmd_"
 #define MC_COMMAND_PLAY_PLAYLIST               "_playlist_cmd_"
 #define MC_COMMAND_CUSTOMACTION                        "_custom_action_"
 #define MC_COMMAND_CMDREPLY                            "_cmd_reply_"
 #define MC_COMMAND_SEARCH                              "_search_cmd_"
-
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+#define MC_COMMAND_PLAYBACKSTATE               "_pb_state_cmd_"
+#define MC_COMMAND_CUSTOM                              "_custom_cmd_"
+#endif
 
 #define MC_EVENT_CUSTOM                                        "_custom_event_"
 #define MC_EVENT_REPLY                                 "_event_reply_"
@@ -289,6 +294,9 @@ typedef enum {
        MC_CLIENT_EVENT_REPEAT_ABILITY  = MC_SUBSCRIPTION_TYPE_REPEAT_ABILITY,
        MC_CLIENT_EVENT_CMD_REPLY,
        MC_CLIENT_EVENT_SERVER_CUSTOM,  //receive event from server to client
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+       MC_CLIENT_EVENT_CLIENT_CUSTOM,  //from client to server. deprecated
+#endif
        MC_CLIENT_EVENT_MAX,
 } mc_client_receive_event_e;
 
@@ -301,6 +309,10 @@ typedef enum {
        MC_SERVER_EVENT_CLIENT_CUSTOM,          //received event from client
        MC_SERVER_EVENT_REPLY_CUSTOM,           //received event reply from client
        MC_SERVER_EVENT_SEARCH,
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+       MC_SERVER_EVENT_PLAYBACK_STATE,         //deprecated. use action instead of it.
+       MC_SERVER_EVENT_CLIENT_CUSTOM_OLD,      //received event from client, deprecated
+#endif
        MC_SERVER_EVENT_MAX,
 } mc_server_receive_event_e;
 
index f541d64..90fced7 100644 (file)
@@ -75,10 +75,11 @@ export LDFLAGS+=" -lgcov"
 MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
 %cmake . -DFULLVER=%{version} -DMAJORVER=${MAJORVER} \
 %if %{on_demand}
- -DON_DEMAND_SOCKET_ACTIVATION=YES
+ -DON_DEMAND_SOCKET_ACTIVATION=YES \
 %else
- -DON_DEMAND_SOCKET_ACTIVATION=NO
+ -DON_DEMAND_SOCKET_ACTIVATION=NO \
 %endif
+ -DTIZEN_FEATURE_COMPATIBILITY=YES
 
 %__make %{?jobs:-j%jobs}
 
index 6e7d05c..1ee8bc2 100644 (file)
@@ -32,6 +32,10 @@ static void __client_playback_ability_cb(const char *interface_name, const char
 static void __client_repeat_ability_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
 static void __client_shuffle_ability_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
 
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+static void __client_reply_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
+#endif
+
 
 static mc_cb_event_s cb_event[MC_CLIENT_EVENT_MAX] = {
        {MC_DBUS_SIGNAL_NAME_SERVER_STATE,              __client_server_cb},
@@ -45,6 +49,9 @@ static mc_cb_event_s cb_event[MC_CLIENT_EVENT_MAX] = {
        {MC_DBUS_SIGNAL_NAME_REPEAT_ABILITY,            __client_repeat_ability_cb},
        {MC_DBUS_SIGNAL_NAME_CMD_REPLY,                 __client_cmd_reply_received_cb},
        {MC_DBUS_SIGNAL_NAME_CUSTOM_EVENT,              __client_custom_event_received_cb},
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+       {MC_DBUS_SIGNAL_NAME_CUSTOM_COMMAND_REPLY,      __client_reply_cb},
+#endif
 };
 
 static void __client_server_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
@@ -572,12 +579,25 @@ static int __mc_client_set_updated_cb(mc_client_h client, mc_client_receive_even
        mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
        mc_retvm_if(callback == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "callback is NULL");
        mc_retvm_if(((event < MC_CLIENT_EVENT_SERVER_STATE) || (event >= MC_CLIENT_EVENT_MAX)) , MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid event [%d]", event);
+
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+       if ((event == MC_CLIENT_EVENT_CLIENT_CUSTOM) && (mc_client->updated_cb[event].callback != NULL)) {      //deprecated
+               mc_client->updated_cb[event].callback = callback;
+               mc_client->updated_cb[event].user_data = user_data;
+
+               return ret;
+       }
+#endif
        mc_retvm_if(mc_client->updated_cb[event].callback != NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "callback is already set [%d]", event);
 
        mc_client->updated_cb[event].callback = callback;
        mc_client->updated_cb[event].user_data = user_data;
 
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+       if ((event == MC_CLIENT_EVENT_CMD_REPLY) || (event == MC_CLIENT_EVENT_SERVER_CUSTOM) || (event == MC_CLIENT_EVENT_CLIENT_CUSTOM)) {
+#else
        if ((event == MC_CLIENT_EVENT_CMD_REPLY) || (event == MC_CLIENT_EVENT_SERVER_CUSTOM)) {
+#endif
                interface_name = mc_util_get_interface_name(MC_CLIENT, mc_client->client_name);
                ret = mc_ipc_register_listener(&mc_client->listeners, mc_client->dconn, interface_name, cb_event[event].signal_name,
                                                cb_event[event].cb_func, (void *)&(mc_client->updated_cb[event]));
@@ -1386,3 +1406,143 @@ int mc_client_destroy(mc_client_h client)
 
        return ret;
 }
+
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+typedef void (*mc_command_reply_received_cb)(const char *server_name, int result_code, bundle *data, void *user_data);
+
+static void __client_reply_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
+{
+       gchar **params = NULL;
+       int enc_size = 0;
+       bundle *bundle_data = NULL;
+
+       media_controller_receiver_s *reciever = (media_controller_receiver_s *)user_data;
+       mc_retm_if(reciever == NULL, "reciever is NULL");
+
+       mc_command_reply_received_cb callback = (mc_command_reply_received_cb)reciever->callback;
+       mc_retm_if(callback == NULL, "reply_cb is NULL");
+       mc_retm_if(message == NULL, "message is NULL");
+
+       mc_debug("__client_reply_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
+
+       params = g_strsplit(message, MC_STRING_DELIMITER, 0);
+       mc_retm_if(params == NULL, "invalid custom data");
+
+       enc_size = atoi(params[2]);
+       if (enc_size > 0)
+               bundle_data = bundle_decode((bundle_raw *)params[3], enc_size);
+
+       callback(params[0], atoi(params[1]), bundle_data, reciever->user_data);
+
+       g_strfreev(params);
+}
+
+int mc_client_destroy_metadata(mc_metadata_h metadata)
+{
+       mc_warning("DEPRECATION WARNING: mc_client_destroy_metadata() is removed from 5.5. Use mc_metadata_destroy() instead.");
+
+       return mc_metadata_destroy(metadata);
+}
+
+int mc_client_get_metadata(mc_metadata_h metadata, mc_meta_e attribute, char **value)
+{
+       mc_warning("DEPRECATION WARNING: mc_client_get_metadata() is removed from 5.5. Use mc_metadata_get() instead.");
+
+       return mc_metadata_get(metadata, attribute, value);
+}
+
+int mc_client_send_custom_command(mc_client_h client, const char *server_name, const char *command, bundle *data, mc_command_reply_received_cb callback, void *user_data)
+{
+       int ret = MEDIA_CONTROLLER_ERROR_NONE;
+       char *message = NULL;
+       char *bundle_str = NULL;
+       media_controller_client_s *mc_client = (media_controller_client_s *)client;
+
+       mc_warning("DEPRECATION WARNING: mc_client_send_custom_command() is removed from 5.5. Use mc_client_send_custom_cmd() instead.");
+
+       mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+       mc_retvm_if(!MC_STRING_VALID(server_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+
+       if (callback) {
+               ret = __mc_client_set_updated_cb(client, MC_CLIENT_EVENT_CLIENT_CUSTOM, callback, user_data);
+               mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Error when __mc_client_set_updated_cb [%d]", ret);
+       }
+
+       ret = mc_util_bundle_to_string(data, &bundle_str);
+       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Error when make string from bundle");
+
+       message = g_strdup_printf("%s%s%s%s%s", mc_client->client_name, MC_STRING_DELIMITER, command, MC_STRING_DELIMITER, bundle_str);
+       MC_SAFE_G_FREE(bundle_str);
+       mc_retvm_if(message == NULL, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "Error when making message");
+
+       ret = __mc_client_send_command(client, server_name, MC_COMMAND_CUSTOM, command, MC_DBUS_SIGNAL_NAME_CUSTOM_COMMAND, message, NULL);
+
+       MC_SAFE_G_FREE(message);
+
+       return ret;
+}
+
+int mc_client_send_playback_state_command(mc_client_h client, const char *server_name, mc_playback_states_e state)
+{
+       int ret = MEDIA_CONTROLLER_ERROR_NONE;
+       char *message = NULL;
+       media_controller_client_s *mc_client = (media_controller_client_s *)client;
+
+       mc_warning("DEPRECATION WARNING: mc_client_send_playback_state_command() is removed from 5.5. Use mc_client_send_playback_action_cmd() instead.");
+
+       mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+       mc_retvm_if(!MC_STRING_VALID(server_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+       //mc_retvm_if(((state < MC_PLAYBACK_STATE_PLAYING) || (state > MC_PLAYBACK_STATE_REWIND)), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "state is invalid");
+
+       message = g_strdup_printf("%s%s%d", mc_client->client_name, MC_STRING_DELIMITER, state);
+       mc_retvm_if(message == NULL, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "fail making message [%d]", ret);
+
+       ret = __mc_client_send_command(client, server_name, MC_COMMAND_PLAYBACKSTATE, NULL, MC_DBUS_SIGNAL_NAME_PLAYBACK_STATE_CMD, message, NULL);
+
+       MC_SAFE_G_FREE(message);
+
+       return ret;
+}
+
+int mc_client_set_metadata_update_cb(mc_client_h client, mc_metadata_updated_cb callback, void *user_data)
+{
+       mc_warning("DEPRECATION WARNING: mc_client_set_metadata_update_cb() is removed from 5.5. Use mc_client_set_metadata_updated_cb() instead.");
+
+       return __mc_client_set_updated_cb(client, MC_CLIENT_EVENT_METADATA, callback, user_data);
+}
+
+int mc_client_unset_metadata_update_cb(mc_client_h client)
+{
+       mc_warning("DEPRECATION WARNING: mc_client_unset_metadata_update_cb() is removed from 5.5. Use mc_client_unset_metadata_updated_cb() instead.");
+
+       return __mc_client_unset_updated_cb(client, MC_CLIENT_EVENT_METADATA);
+}
+
+int mc_client_set_playback_update_cb(mc_client_h client, mc_playback_updated_cb callback, void *user_data)
+{
+       mc_warning("DEPRECATION WARNING: mc_client_set_playback_update_cb() is removed from 5.5. Use mc_client_set_playback_updated_cb() instead.");
+
+       return __mc_client_set_updated_cb(client, MC_CLIENT_EVENT_PLAYBACK_INFO, callback, user_data);
+}
+
+int mc_client_unset_playback_update_cb(mc_client_h client)
+{
+       mc_warning("DEPRECATION WARNING: mc_client_unset_playback_update_cb() is removed from 5.5. Use mc_client_unset_playback_updated_cb() instead.");
+
+       return __mc_client_unset_updated_cb(client, MC_CLIENT_EVENT_PLAYBACK_INFO);
+}
+
+int mc_client_set_server_update_cb(mc_client_h client, mc_server_state_updated_cb callback, void *user_data)
+{
+       mc_warning("DEPRECATION WARNING: mc_client_set_server_update_cb() is removed from 5.5. Use mc_client_set_server_updated_cb() instead.");
+
+       return __mc_client_set_updated_cb(client, MC_CLIENT_EVENT_SERVER_STATE, callback, user_data);
+}
+
+int mc_client_unset_server_update_cb(mc_client_h client)
+{
+       mc_warning("DEPRECATION WARNING: mc_client_unset_server_update_cb() is removed from 5.5. Use mc_client_unset_server_updated_cb() instead.");
+
+       return __mc_client_unset_updated_cb(client, MC_CLIENT_EVENT_SERVER_STATE);
+}
+#endif
index 10f5d40..885fbb6 100644 (file)
@@ -32,6 +32,10 @@ static void __server_event_reply_received_cb(const char *interface_name, const c
 static void __server_search_cmd_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
 static int __mc_server_update_ability(mc_server_h server, int support_item, mc_ability_support_e support, gboolean immediate_update);
 
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+static void __server_playback_state_command_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
+static void __server_custom_command_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
+#endif
 
 static mc_cb_event_s cb_event[MC_SERVER_EVENT_MAX] = {
        {MC_DBUS_SIGNAL_NAME_PLAYBACK_ACTION, __server_playback_action_cb},
@@ -42,6 +46,10 @@ static mc_cb_event_s cb_event[MC_SERVER_EVENT_MAX] = {
        {MC_DBUS_SIGNAL_NAME_CUSTOM_CMD, __server_custom_cmd_cb},
        {MC_DBUS_SIGNAL_NAME_EVENT_REPLY, __server_event_reply_received_cb},
        {MC_DBUS_SIGNAL_NAME_SEARCH_CMD, __server_search_cmd_cb},
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+       {MC_DBUS_SIGNAL_NAME_PLAYBACK_STATE_CMD, __server_playback_state_command_cb},
+       {MC_DBUS_SIGNAL_NAME_CUSTOM_COMMAND, __server_custom_command_cb},       //deprecated one
+#endif
 };
 
 static int __mc_server_create(media_controller_server_s **mc_server)
@@ -1217,3 +1225,143 @@ int mc_server_destroy(mc_server_h server)
        return ret;
 }
 
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+typedef void (*mc_server_custom_command_received_cb)(const char* client_name, const char *command, bundle *data, void *user_data);
+typedef void (*mc_server_playback_state_command_received_cb)(const char* client_name, mc_playback_states_e state, void *user_data);
+
+static void __server_playback_state_command_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
+{
+       gchar **params = NULL;
+       media_controller_receiver_s *receiver = (media_controller_receiver_s *)user_data;
+       int value = 0;
+
+       mc_retm_if(receiver == NULL, "reciever is NULL");
+       mc_retm_if(message == NULL, "message is NULL");
+
+       mc_server_playback_state_command_received_cb callback = receiver->callback;
+       mc_retm_if(receiver->callback == NULL, "playback_state_command_received_cb is NULL");
+
+       mc_debug("__server_playback_state_command_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
+
+       params = g_strsplit(message, MC_STRING_DELIMITER, 0);
+       mc_retm_if(params == NULL, "invalid playback state command");
+
+       if (mc_util_get_command_available(MC_PRIV_TYPE_SERVER, params[0], MC_COMMAND_PLAYBACKSTATE, NULL) != MEDIA_CONTROLLER_ERROR_NONE) {
+               mc_error("Error permission denied");
+               g_strfreev(params);
+               return;
+       }
+
+       if (mc_safe_strtoi(params[1], &value) != MEDIA_CONTROLLER_ERROR_NONE) {
+               mc_error("Error get recieved value");
+               g_strfreev(params);
+               return;
+       }
+
+       callback(params[0], (mc_playback_states_e)value, receiver->user_data);
+
+       g_strfreev(params);
+}
+
+static void __server_custom_command_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
+{
+       gchar **params = NULL;
+       int enc_size = 0;
+       char *sender = NULL;
+       char *command = NULL;
+       bundle *bundle_data = NULL;
+       media_controller_receiver_s *receiver = (media_controller_receiver_s *)user_data;
+
+       mc_retm_if(receiver == NULL, "reciever is NULL");
+       mc_retm_if(message == NULL, "message is NULL");
+
+       mc_server_custom_command_received_cb callback = receiver->callback;
+       mc_retm_if(receiver->callback == NULL, "custom_command_received_cb is NULL");
+
+       mc_debug("__server_custom_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
+
+       params = g_strsplit(message, MC_STRING_DELIMITER, 0);
+       mc_retm_if(params == NULL, "invalid custom data");
+
+       if (params[0])
+               sender = strdup(params[0]);
+
+       if (mc_util_get_command_available(MC_PRIV_TYPE_SERVER, sender, MC_COMMAND_CUSTOM, params[1]) != MEDIA_CONTROLLER_ERROR_NONE) {
+               mc_error("Error permission denied");
+               MC_SAFE_FREE(sender);
+               g_strfreev(params);
+               return;
+       }
+
+       command = strdup(params[1]);
+       enc_size = atoi(params[2]);
+       if (enc_size > 0)
+               bundle_data = bundle_decode((bundle_raw *)params[3], enc_size);
+
+       callback(sender, command, bundle_data, receiver->user_data);
+
+       MC_SAFE_FREE(sender);
+       MC_SAFE_FREE(command);
+
+       g_strfreev(params);
+}
+
+int mc_server_send_command_reply(mc_server_h server, const char *client_name, int result_code, bundle *data)
+{
+       int ret = MEDIA_CONTROLLER_ERROR_NONE;
+       char *message = NULL;
+       char *bundle_str = NULL;
+       media_controller_server_s *mc_server = (media_controller_server_s *)server;
+
+       mc_warning("DEPRECATION WARNING: mc_server_send_command_reply() is removed from 5.5. Use mc_server_send_cmd_reply() instead.");
+
+       mc_retvm_if(mc_server == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+       mc_retvm_if(!MC_STRING_VALID(client_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "client_name is NULL");
+
+       ret = mc_util_bundle_to_string(data, &bundle_str);
+       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Error when make string from bundle");
+
+       message = g_strdup_printf("%s%s%d%s%s", mc_server->server_name, MC_STRING_DELIMITER, result_code, MC_STRING_DELIMITER, bundle_str);
+       MC_SAFE_G_FREE(bundle_str);
+       mc_retvm_if(message == NULL, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "Error when making message");
+
+       char *interface_name = mc_util_get_interface_name(MC_CLIENT, client_name);
+       ret = mc_ipc_send_message(mc_server->dconn, NULL, interface_name, MC_DBUS_SIGNAL_NAME_CUSTOM_COMMAND_REPLY, message, NULL);
+       if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+               mc_error("Error mc_ipc_send_message [%d]", ret);
+
+       MC_SAFE_G_FREE(message);
+       MC_SAFE_G_FREE(interface_name);
+
+       return ret;
+}
+
+int mc_server_set_custom_command_received_cb(mc_server_h server, mc_server_custom_command_received_cb callback, void *user_data)
+{
+       mc_warning("DEPRECATION WARNING: mc_server_set_custom_command_received_cb() is removed from 5.5. Use mc_server_set_custom_cmd_received_cb() instead.");
+
+       return __mc_server_set_updated_cb(server, MC_SERVER_EVENT_CLIENT_CUSTOM_OLD, callback, user_data);
+}
+
+int mc_server_unset_custom_command_received_cb(mc_server_h server)
+{
+       mc_warning("DEPRECATION WARNING: mc_server_unset_custom_command_received_cb() is removed from 5.5. Use mc_server_unset_custom_cmd_received_cb() instead.");
+
+       return __mc_server_unset_updated_cb(server, MC_SERVER_EVENT_CLIENT_CUSTOM_OLD);
+}
+
+int mc_server_set_playback_state_command_received_cb(mc_server_h server, mc_server_playback_state_command_received_cb callback, void *user_data)
+{
+       mc_warning("DEPRECATION WARNING: mc_server_set_playback_state_command_received_cb() is removed from 5.5. Use mc_server_set_playback_action_cmd_received_cb() instead.");
+
+       return __mc_server_set_updated_cb(server, MC_SERVER_EVENT_PLAYBACK_STATE, callback, user_data);
+}
+
+int mc_server_unset_playback_state_command_received_cb(mc_server_h server)
+{
+       mc_warning("DEPRECATION WARNING: mc_server_unset_playback_state_command_received_cb() is removed from 5.5. Use mc_server_unset_playback_action_cmd_received_cb() instead.");
+
+       return __mc_server_unset_updated_cb(server, MC_SERVER_EVENT_PLAYBACK_STATE);
+}
+
+#endif