)]}'
{
  "commit": "783415921a109b3dc51b19dee7b2e664c3801de7",
  "tree": "b7c1c50aa2b3f8f1b4850cd0848776c0bea1460e",
  "parents": [
    "b0e6aa46401841a9843a3a0642f654284c945273"
  ],
  "author": {
    "name": "martinduke",
    "email": "martinduke@google.com",
    "time": "Fri Jul 17 08:47:56 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Fri Jul 17 08:48:33 2026 -0700"
  },
  "message": "Move SUBSCRIBE to a dedicated bidirectional stream.\n\nThis change refactors MoQT to handle SUBSCRIBE messages on their own bidirectional streams, rather than on the control stream.\n\nKey changes include:\n-   New `MoqtSubscribeRequestStream` and `MoqtSubscribeResponseStream` classes.\n-   `MoqtSession::Subscribe` now opens a bidi stream and sends the SUBSCRIBE message on it.\n-   `MoqtSession::Unsubscribe` now resets the bidi stream associated with the subscription.\n-   `MoqtSession::RequestUpdate` sends the update on the existing subscribe bidi stream.\n-   The control stream no longer processes SUBSCRIBE, SUBSCRIBE_OK, or UNSUBSCRIBE messages.\n-   `MoqtUnsubscribe` message type and serialization/parsing are removed.\n-   MoqtSession no longer owns any subscriptions\n-   All external state is now destroyed in Detach(). On teardown, streams are destroyed in arbitrary order, making clearing such state in the destructor dangerous.\n\nI wrote better helper functions in MoqtSessionTest to reduce the toil in sending/receiving messages, setting up bidi streams, and not hard-coding message formats.\n\nPiperOrigin-RevId: 949593252\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "30e8046636f9624cf46aac82f53fceeedd2aeabb",
      "old_mode": 33188,
      "old_path": "build/source_list.bzl",
      "new_id": "b1fa635ac2442eced62e619726b117a5f2605e52",
      "new_mode": 33188,
      "new_path": "build/source_list.bzl"
    },
    {
      "type": "modify",
      "old_id": "96933ebc55b0004d382fa14605d9d16b88577bec",
      "old_mode": 33188,
      "old_path": "build/source_list.gni",
      "new_id": "43addc56f66bf494401837be205280c9102b8ae3",
      "new_mode": 33188,
      "new_path": "build/source_list.gni"
    },
    {
      "type": "modify",
      "old_id": "f8008d335b8388a35506acd5d3437723257e9098",
      "old_mode": 33188,
      "old_path": "build/source_list.json",
      "new_id": "ea8c64948a0fd442c2d41ab0116736607ef8a8ed",
      "new_mode": 33188,
      "new_path": "build/source_list.json"
    },
    {
      "type": "modify",
      "old_id": "df1256926d7a0776ecab00c7b107b19b30822ebe",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_bidi_stream.cc",
      "new_id": "58bafea07826a9bf12c5740979ed0f0ce49175a4",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_bidi_stream.cc"
    },
    {
      "type": "modify",
      "old_id": "0ebb74c6a0cc3054d7056f46adb03282f7f25041",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_bidi_stream.h",
      "new_id": "22af6b9c6fc316cbc900be22931ebbc896eeca5c",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_bidi_stream.h"
    },
    {
      "type": "modify",
      "old_id": "8b5f0113c34d00997db3d85b81934108cdc329f7",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_bidi_stream_test.cc",
      "new_id": "9da725382da7767f605bf892932294f4473f62f6",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_bidi_stream_test.cc"
    },
    {
      "type": "modify",
      "old_id": "17fd0e045260b2d4e086e3fc2c18f559e7503d3e",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_framer.cc",
      "new_id": "d44696792fbe0f59c7243fbf670792e5e02dff07",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_framer.cc"
    },
    {
      "type": "modify",
      "old_id": "96a72514415d59c9760a6841fd905e6cedc330ec",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_framer.h",
      "new_id": "0d8df945c0c3b2ceb6365d0b4fb3c90075ee62da",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_framer.h"
    },
    {
      "type": "modify",
      "old_id": "482e5c4ddaab744a04383e9fa299d314c446b622",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_framer_test.cc",
      "new_id": "2000e6971368cf810bdf5221f0bd9648d2b93ec3",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_framer_test.cc"
    },
    {
      "type": "modify",
      "old_id": "c00cd600f92257bbf700066b6c25ee2bed821f9f",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_integration_test.cc",
      "new_id": "89a2d22c479dbd7e3b002759abb1962d0041c8a0",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_integration_test.cc"
    },
    {
      "type": "modify",
      "old_id": "edfe38bd241a8be4f4b6bf8704abb01f44545302",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_messages.h",
      "new_id": "b05a392ee764ac70bc461d846700ac1efee5c6e6",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_messages.h"
    },
    {
      "type": "modify",
      "old_id": "a80c4a17091402d03f1b5509f6cc0bb0233188c4",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_namespace_stream.h",
      "new_id": "34e64d182c0a3e590873da91b8bfb3e3b22f8255",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_namespace_stream.h"
    },
    {
      "type": "modify",
      "old_id": "13bfe26ab76bd1aa904a7f1a740523e285f433d2",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_parser.cc",
      "new_id": "5a297a697c5552bd77233a1c2b33b11776941997",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_parser.cc"
    },
    {
      "type": "modify",
      "old_id": "f36415cada5938af0601613ca4a326f6714a9d6d",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_parser.h",
      "new_id": "eca79f437718f33a57e40cc4986e0863f29894fc",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_parser.h"
    },
    {
      "type": "modify",
      "old_id": "7b9d69c4853dda583288c8ee3891278902a221f8",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_parser_test.cc",
      "new_id": "74fcd621b8893a5888ee25f852e45b5ed72637bd",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_parser_test.cc"
    },
    {
      "type": "modify",
      "old_id": "dd7c36e62689c38f8cc847e5e7e641584a858e26",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_publish_stream.cc",
      "new_id": "1ffe56cb648c3ce36dda92c32d3fe1ea65a48a1f",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_publish_stream.cc"
    },
    {
      "type": "modify",
      "old_id": "a3cef790d2c440d8f27e9ee9f71d7aaa463e5912",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_publish_stream.h",
      "new_id": "43e6dbeedb66efeadb84461acac5700aafaeed62",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_publish_stream.h"
    },
    {
      "type": "modify",
      "old_id": "e59cb951024ddb85c9889298f6111064936309e2",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_publish_stream_test.cc",
      "new_id": "9de992f401f30530f8577d06127cded9757c37d5",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_publish_stream_test.cc"
    },
    {
      "type": "modify",
      "old_id": "f7f8333127475e645872b18421bdf6ba430d4ccf",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_session.cc",
      "new_id": "9dd7d62ae1165c867e32156c1fbb4e6e8bbe7503",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_session.cc"
    },
    {
      "type": "modify",
      "old_id": "d0bcb2131732129bba76b17936f0cf135d08a3c1",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_session.h",
      "new_id": "fd45f9de04449780218c3ebf02e08976fd5b2179",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_session.h"
    },
    {
      "type": "modify",
      "old_id": "e1455a61b40ad830dc2b3313462fac3b1b9c6cf8",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_session_interface.h",
      "new_id": "72c516439959a6a9776ee5ad05c5d226bd3d1a9e",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_session_interface.h"
    },
    {
      "type": "modify",
      "old_id": "c327f5e591c4f84c623764f895b9e2ea83d5319a",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_session_test.cc",
      "new_id": "afff2a74ef5e59f661a98a1266138c560386d9b7",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_session_test.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "473de8990c4185ad144d4747fbdb946d2a0eda8b",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_subscribe_stream.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3b6f5aaba000bfd10433c270f35b0d8fd466adf5",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_subscribe_stream.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "300dafba30a7a1c2f7864b6577f511dc79ad1e5a",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_subscribe_stream_test.cc"
    },
    {
      "type": "modify",
      "old_id": "9bf4513822d096bc8e6b6be98aa23b40e4cef8d4",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_subscription.cc",
      "new_id": "fa83093b9e9bf7b5ceb6bb29841e34520fed60a3",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_subscription.cc"
    },
    {
      "type": "modify",
      "old_id": "d32ed4c1fdbccb1b05997c0bf95db19111280e3d",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_subscription.h",
      "new_id": "d4af9029dd82c0965ae93aa01d25e9fe422b45ef",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_subscription.h"
    },
    {
      "type": "modify",
      "old_id": "154725b7ea606f2357c059ad43f6370a2b87430e",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_subscription_test.cc",
      "new_id": "b35818ddb35066e3ea75d8d9d95877913191d110",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_subscription_test.cc"
    },
    {
      "type": "modify",
      "old_id": "36e06cfa6a123a884c65bd7daff35ae9a2dd4889",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_track.cc",
      "new_id": "23060f0465e1c86244d29e49dcf18c236c1947b0",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_track.cc"
    },
    {
      "type": "modify",
      "old_id": "54716d18a64676acfb5ec1a4de52ffafaacd173e",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_track.h",
      "new_id": "269ef2ea4fb03d215cecfc094a11c2aa45846947",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_track.h"
    },
    {
      "type": "modify",
      "old_id": "010cda9d0b03890b1c2adaf0e12c6bc4f5c962ca",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_track_test.cc",
      "new_id": "bb50891826a6ed4477c50e5384cae9578532fc3a",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_track_test.cc"
    },
    {
      "type": "modify",
      "old_id": "9efcabdd42bb4d8325b259754349e1181f17dddd",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/moqt_uni_stream_test.cc",
      "new_id": "65c8ad2167176b49a23baad38bec9c718bf048a1",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/moqt_uni_stream_test.cc"
    },
    {
      "type": "modify",
      "old_id": "c09c8c632fcc3b2a2dbe361b60554042fd6e6fe9",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/test_tools/mock_moqt_session.h",
      "new_id": "8583e26f40005c7af6a2518d0e209a0c95b20726",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/test_tools/mock_moqt_session.h"
    },
    {
      "type": "modify",
      "old_id": "72144261394293d09ff196554c9e16aa54617657",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/test_tools/moqt_framer_utils.cc",
      "new_id": "a0e6d426da0864d481bca967dd5112e77e7114e4",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/test_tools/moqt_framer_utils.cc"
    },
    {
      "type": "modify",
      "old_id": "be2f36b3afbb76c814427d5807abfc4b0f982a19",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/test_tools/moqt_framer_utils.h",
      "new_id": "c5a5d4adecd1349e0be5b6ca9ce9bb9cdbc8407c",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/test_tools/moqt_framer_utils.h"
    },
    {
      "type": "modify",
      "old_id": "3bb847bb3a445f7e834ce8ca9f7fc3f6ea87ae81",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/test_tools/moqt_session_peer.h",
      "new_id": "c7bdb73676dd7b5189999c747d6009407ff41b1f",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/test_tools/moqt_session_peer.h"
    },
    {
      "type": "modify",
      "old_id": "4a01ac2be207d8adfb33a139454834e77524d2a3",
      "old_mode": 33188,
      "old_path": "quiche/quic/moqt/test_tools/moqt_test_message.h",
      "new_id": "4e1d394b115053fbe0d6e22ac4826f9e70bb6361",
      "new_mode": 33188,
      "new_path": "quiche/quic/moqt/test_tools/moqt_test_message.h"
    }
  ]
}
