Diff between 7f88b15e1ce97c6d4f9a44cf3382b6b5ba5e340d and 85ecc44d19899b2274654ea0f0c5a7b7d574cc65

Changed Files

File Additions Deletions Status
audio/avrcp.c +13 -14 modified

Full Patch

diff --git a/audio/avrcp.c b/audio/avrcp.c
index 53c4e13..376f4a1 100644
--- a/audio/avrcp.c
+++ b/audio/avrcp.c
@@ -181,6 +181,8 @@ struct avrcp {
 	struct avctp *conn;
 	struct audio_device *dev;
 	struct avrcp_player *player;
+	uint16_t version;
+	int features;
 
 	unsigned int control_handler;
 	unsigned int browsing_handler;
@@ -1348,10 +1350,6 @@ static void state_changed(struct audio_device *dev, avctp_state_t old_state,
 							session);
 
 		server->sessions = g_slist_append(server->sessions, session);
-		break;
-	case AVCTP_STATE_CONNECTED:
-		if (session == NULL)
-			break;
 
 		rec = btd_device_get_record(dev->btd_dev, AVRCP_TARGET_UUID);
 		if (rec == NULL)
@@ -1361,21 +1359,22 @@ static void state_changed(struct audio_device *dev, avctp_state_t old_state,
 			return;
 
 		desc = list->data;
+		session->version = desc->version;
+		sdp_get_int_attr(rec, SDP_ATTR_SUPPORTED_FEATURES,
+							&session->features);
 
-		if (desc && desc->version >= 0x0104) {
-			int feat;
-			int ret;
+		sdp_list_free(list, free);
 
-			register_volume_notification(session);
+		break;
+	case AVCTP_STATE_CONNECTED:
+		if (session == NULL)
+			break;
 
-			ret = sdp_get_int_attr(rec,
-						SDP_ATTR_SUPPORTED_FEATURES,
-						&feat);
-			if (ret == 0 && (feat & AVRCP_FEATURE_BROWSING))
+		if (session->version >= 0x0104) {
+			register_volume_notification(session);
+			if (session->features & AVRCP_FEATURE_BROWSING)
 				avctp_connect_browsing(session->conn);
 		}
-
-		sdp_list_free(list, free);
 	default:
 		return;
 	}