- Filter data channel codecs based on codec name instead of payload type, which may have been remapped.
- Rename the data codec payload types to end with "PlType" instead of "Id", for consistency.

BUG=webrtc:2795

Review-Url: https://codereview.webrtc.org/2397413002
Cr-Commit-Position: refs/heads/master@{#14581}
diff --git a/webrtc/api/webrtcsdp.cc b/webrtc/api/webrtcsdp.cc
index 4df4ef8..28c8be0 100644
--- a/webrtc/api/webrtcsdp.cc
+++ b/webrtc/api/webrtcsdp.cc
@@ -1260,8 +1260,8 @@
       for (std::vector<cricket::DataCodec>::const_iterator it =
            data_desc->codecs().begin();
            it != data_desc->codecs().end(); ++it) {
-        if (it->id == cricket::kGoogleSctpDataCodecId &&
-            it->GetParam(cricket::kCodecParamPort, &sctp_port)) {
+        if (cricket::CodecNamesEq(it->name, cricket::kGoogleSctpDataCodecName)
+            && it->GetParam(cricket::kCodecParamPort, &sctp_port)) {
           break;
         }
       }
@@ -1651,13 +1651,15 @@
 
 bool AddSctpDataCodec(DataContentDescription* media_desc,
                       int sctp_port) {
-  if (media_desc->HasCodec(cricket::kGoogleSctpDataCodecId)) {
-    return ParseFailed("",
-                       "Can't have multiple sctp port attributes.",
-                       NULL);
+  for (const auto& codec : media_desc->codecs()) {
+    if (cricket::CodecNamesEq(codec.name, cricket::kGoogleSctpDataCodecName)) {
+      return ParseFailed("",
+                         "Can't have multiple sctp port attributes.",
+                         NULL);
+    }
   }
   // Add the SCTP Port number as a pseudo-codec "port" parameter
-  cricket::DataCodec codec_port(cricket::kGoogleSctpDataCodecId,
+  cricket::DataCodec codec_port(cricket::kGoogleSctpDataCodecPlType,
                                 cricket::kGoogleSctpDataCodecName);
   codec_port.SetParam(cricket::kCodecParamPort, sctp_port);
   LOG(INFO) << "AddSctpDataCodec: Got SCTP Port Number "
@@ -2185,9 +2187,7 @@
     return;
   }
   RTC_DCHECK(media_desc->codecs().empty());
-  std::vector<int>::const_iterator it = fmts.begin();
-  for (; it != fmts.end(); ++it) {
-    int payload_type = *it;
+  for (int payload_type : fmts) {
     if (!media_desc->HasCodec(payload_type) &&
         payload_type >= 0 &&
         static_cast<uint32_t>(payload_type) <
diff --git a/webrtc/api/webrtcsdp_unittest.cc b/webrtc/api/webrtcsdp_unittest.cc
index 1672268..2faec7e 100644
--- a/webrtc/api/webrtcsdp_unittest.cc
+++ b/webrtc/api/webrtcsdp_unittest.cc
@@ -1395,7 +1395,7 @@
     std::unique_ptr<DataContentDescription> data(new DataContentDescription());
     data_desc_ = data.get();
     data_desc_->set_protocol(cricket::kMediaProtocolDtlsSctp);
-    DataCodec codec(cricket::kGoogleSctpDataCodecId,
+    DataCodec codec(cricket::kGoogleSctpDataCodecPlType,
                     cricket::kGoogleSctpDataCodecName);
     codec.SetParam(cricket::kCodecParamPort, kDefaultSctpPort);
     data_desc_->AddCodec(codec);
@@ -1990,7 +1990,7 @@
       jsep_desc.description()->GetContentDescriptionByName(kDataContentName));
 
   const int kNewPort = 1234;
-  cricket::DataCodec codec(cricket::kGoogleSctpDataCodecId,
+  cricket::DataCodec codec(cricket::kGoogleSctpDataCodecPlType,
                            cricket::kGoogleSctpDataCodecName);
   codec.SetParam(cricket::kCodecParamPort, kNewPort);
   dcdesc->AddOrReplaceCodec(codec);
@@ -2605,7 +2605,7 @@
       mutant->GetContentDescriptionByName(kDataContentName));
   std::vector<cricket::DataCodec> codecs(dcdesc->codecs());
   EXPECT_EQ(1U, codecs.size());
-  EXPECT_EQ(cricket::kGoogleSctpDataCodecId, codecs[0].id);
+  EXPECT_EQ(cricket::kGoogleSctpDataCodecPlType, codecs[0].id);
   codecs[0].SetParam(cricket::kCodecParamPort, kUnusualSctpPort);
   dcdesc->set_codecs(codecs);
 
diff --git a/webrtc/api/webrtcsession_unittest.cc b/webrtc/api/webrtcsession_unittest.cc
index ba9ea2b..800ad3c 100644
--- a/webrtc/api/webrtcsession_unittest.cc
+++ b/webrtc/api/webrtcsession_unittest.cc
@@ -3967,7 +3967,7 @@
   int portnum = -1;
   ASSERT_TRUE(ch != NULL);
   ASSERT_EQ(1UL, ch->send_codecs().size());
-  EXPECT_EQ(cricket::kGoogleSctpDataCodecId, ch->send_codecs()[0].id);
+  EXPECT_EQ(cricket::kGoogleSctpDataCodecPlType, ch->send_codecs()[0].id);
   EXPECT_EQ(0, strcmp(cricket::kGoogleSctpDataCodecName,
                       ch->send_codecs()[0].name.c_str()));
   EXPECT_TRUE(ch->send_codecs()[0].GetParam(cricket::kCodecParamPort,
@@ -3975,7 +3975,7 @@
   EXPECT_EQ(new_send_port, portnum);
 
   ASSERT_EQ(1UL, ch->recv_codecs().size());
-  EXPECT_EQ(cricket::kGoogleSctpDataCodecId, ch->recv_codecs()[0].id);
+  EXPECT_EQ(cricket::kGoogleSctpDataCodecPlType, ch->recv_codecs()[0].id);
   EXPECT_EQ(0, strcmp(cricket::kGoogleSctpDataCodecName,
                       ch->recv_codecs()[0].name.c_str()));
   EXPECT_TRUE(ch->recv_codecs()[0].GetParam(cricket::kCodecParamPort,
diff --git a/webrtc/media/base/mediaconstants.cc b/webrtc/media/base/mediaconstants.cc
index 640c67e..557732e 100644
--- a/webrtc/media/base/mediaconstants.cc
+++ b/webrtc/media/base/mediaconstants.cc
@@ -83,10 +83,10 @@
 const char kCodecParamMaxQuantization[] = "x-google-max-quantization";
 const char kCodecParamPort[] = "x-google-port";
 
-const int kGoogleRtpDataCodecId = 101;
+const int kGoogleRtpDataCodecPlType = 109;
 const char kGoogleRtpDataCodecName[] = "google-data";
 
-const int kGoogleSctpDataCodecId = 108;
+const int kGoogleSctpDataCodecPlType = 108;
 const char kGoogleSctpDataCodecName[] = "google-sctp-data";
 
 const char kComfortNoiseCodecName[] = "CN";
diff --git a/webrtc/media/base/mediaconstants.h b/webrtc/media/base/mediaconstants.h
index 506308a..28fd5e0 100644
--- a/webrtc/media/base/mediaconstants.h
+++ b/webrtc/media/base/mediaconstants.h
@@ -106,13 +106,13 @@
 // We put the data codec names here so callers of
 // DataEngine::CreateChannel don't have to import rtpdataengine.h or
 // sctpdataengine.h to get the codec names they want to pass in.
-extern const int kGoogleRtpDataCodecId;
+extern const int kGoogleRtpDataCodecPlType;
 extern const char kGoogleRtpDataCodecName[];
 
 // TODO(pthatcher): Find an id that won't conflict with anything.  On
 // the other hand, it really shouldn't matter since the id won't be
 // used on the wire.
-extern const int kGoogleSctpDataCodecId;
+extern const int kGoogleSctpDataCodecPlType;
 extern const char kGoogleSctpDataCodecName[];
 
 extern const char kComfortNoiseCodecName[];
diff --git a/webrtc/media/base/rtpdataengine.cc b/webrtc/media/base/rtpdataengine.cc
index 99aa3b1..6c3837d 100644
--- a/webrtc/media/base/rtpdataengine.cc
+++ b/webrtc/media/base/rtpdataengine.cc
@@ -35,7 +35,7 @@
 
 RtpDataEngine::RtpDataEngine() {
   data_codecs_.push_back(
-      DataCodec(kGoogleRtpDataCodecId, kGoogleRtpDataCodecName));
+      DataCodec(kGoogleRtpDataCodecPlType, kGoogleRtpDataCodecName));
 }
 
 DataMediaChannel* RtpDataEngine::CreateChannel(
@@ -84,7 +84,7 @@
 }
 
 const DataCodec* FindUnknownCodec(const std::vector<DataCodec>& codecs) {
-  DataCodec data_codec(kGoogleRtpDataCodecId, kGoogleRtpDataCodecName);
+  DataCodec data_codec(kGoogleRtpDataCodecPlType, kGoogleRtpDataCodecName);
   std::vector<DataCodec>::const_iterator iter;
   for (iter = codecs.begin(); iter != codecs.end(); ++iter) {
     if (!iter->Matches(data_codec)) {
@@ -95,7 +95,7 @@
 }
 
 const DataCodec* FindKnownCodec(const std::vector<DataCodec>& codecs) {
-  DataCodec data_codec(kGoogleRtpDataCodecId, kGoogleRtpDataCodecName);
+  DataCodec data_codec(kGoogleRtpDataCodecPlType, kGoogleRtpDataCodecName);
   std::vector<DataCodec>::const_iterator iter;
   for (iter = codecs.begin(); iter != codecs.end(); ++iter) {
     if (iter->Matches(data_codec)) {
diff --git a/webrtc/media/sctp/sctpdataengine.cc b/webrtc/media/sctp/sctpdataengine.cc
index 0804fed..7975425 100644
--- a/webrtc/media/sctp/sctpdataengine.cc
+++ b/webrtc/media/sctp/sctpdataengine.cc
@@ -320,7 +320,7 @@
 }
 
 DataCodec GetSctpDataCodec() {
-  DataCodec codec(kGoogleSctpDataCodecId, kGoogleSctpDataCodecName);
+  DataCodec codec(kGoogleSctpDataCodecPlType, kGoogleSctpDataCodecName);
   codec.SetParam(kCodecParamPort, kSctpDefaultPort);
   return codec;
 }
@@ -985,14 +985,14 @@
 
 bool SctpDataMediaChannel::SetSendCodecs(const std::vector<DataCodec>& codecs) {
   return GetCodecIntParameter(
-      codecs, kGoogleSctpDataCodecId, kGoogleSctpDataCodecName, kCodecParamPort,
-      &remote_port_);
+      codecs, kGoogleSctpDataCodecPlType, kGoogleSctpDataCodecName,
+      kCodecParamPort, &remote_port_);
 }
 
 bool SctpDataMediaChannel::SetRecvCodecs(const std::vector<DataCodec>& codecs) {
   return GetCodecIntParameter(
-      codecs, kGoogleSctpDataCodecId, kGoogleSctpDataCodecName, kCodecParamPort,
-      &local_port_);
+      codecs, kGoogleSctpDataCodecPlType, kGoogleSctpDataCodecName,
+      kCodecParamPort, &local_port_);
 }
 
 void SctpDataMediaChannel::OnPacketFromSctpToNetwork(
diff --git a/webrtc/pc/mediasession.cc b/webrtc/pc/mediasession.cc
index bfb5692..ebba9ac 100644
--- a/webrtc/pc/mediasession.cc
+++ b/webrtc/pc/mediasession.cc
@@ -302,10 +302,11 @@
 // Filters the data codecs for the data channel type.
 void FilterDataCodecs(std::vector<DataCodec>* codecs, bool sctp) {
   // Filter RTP codec for SCTP and vice versa.
-  int codec_id = sctp ? kGoogleRtpDataCodecId : kGoogleSctpDataCodecId;
+  const char* codec_name =
+      sctp ? kGoogleRtpDataCodecName : kGoogleSctpDataCodecName;
   for (std::vector<DataCodec>::iterator iter = codecs->begin();
        iter != codecs->end();) {
-    if (iter->id == codec_id) {
+    if (CodecNamesEq(iter->name, codec_name)) {
       iter = codecs->erase(iter);
     } else {
       ++iter;