)]}'
{
  "commit": "6928043a799b4257b048ed6c4a54156fc0f0c339",
  "tree": "6170795170fe1cd4a46fc0e4070249d04872e93d",
  "parents": [
    "3e84ddbe34319ff6e06e9421d2cdb0ae8c73fccd"
  ],
  "author": {
    "name": "ericorth",
    "email": "ericorth@google.com",
    "time": "Thu Aug 27 12:38:54 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Thu Aug 27 12:39:29 2026 -0700"
  },
  "message": "QBONE TUN exchanger async refactor: Cleanup read write calls interface\n\nRemove passing the QboneClient into the Read call in favor of directly using the Visitor because that passed client was acting as a sneaky third visitor type, and we now want everything unified into Visitor.  The call to the client now occurs inside GfeTunDevicePacketExchanger in its visitor impl next to the stats collection.  And while poking at the read/write function signatures, modernize write to use byte spans.\n\nAlso move all epoll callback logic from QboneTunnel to inside GfeTunDevicePacketExchanger to better organize the interactions and remove any need for QboneTunnel to interact with a Read() call of any sort.\n\nAnd since both of these changes require GfeTunDevicePacketExchanger having slightly different interface from the underlying QboneClientPacketExchanger, convert it into being a wrapper of the exchanger rather than being a derived exchanger type itself.  No real reason that class and its contained logic actually needs to be an exchanger.\n\nPiperOrigin-RevId: 972099683\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7168d42b12c3baa1131c4df9ebaf28c7cf23cd06",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/mock_qbone_client_packet_exchanger.h",
      "new_id": "13e96d4e1ea8f72e3a53126a2e7b198b72754687",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/mock_qbone_client_packet_exchanger.h"
    },
    {
      "type": "modify",
      "old_id": "2f15da925d5dcb1928c65c2b3d5820ac4d3aefc0",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/qbone_client_packet_exchanger.h",
      "new_id": "1755d751c62f5164bb65fc3ecb061f8af02b4fae",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/qbone_client_packet_exchanger.h"
    },
    {
      "type": "modify",
      "old_id": "0c804de50433dd0b5aac650bd0cff5d50e48b146",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.cc",
      "new_id": "f002ece71a55c54a81c8751292079a10f7fe8555",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.cc"
    },
    {
      "type": "modify",
      "old_id": "7ba87488846c8d8410a3c8927cd37cb3015180af",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.h",
      "new_id": "13d1ed5792384249106ffff78501f1523e443b83",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.h"
    },
    {
      "type": "modify",
      "old_id": "442af30256a1e3c8901f80d771211168f4374c5b",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger_test.cc",
      "new_id": "38e7e373dbb6b16f6f08bd7b67e8d46bb92bd000",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger_test.cc"
    },
    {
      "type": "modify",
      "old_id": "6e31e61401b576ef55e6e0007444f3cb87bc2e05",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/qbone_client_session.cc",
      "new_id": "90307e5c2ddae8f5c36a62934cf6e07ef5e9ecc0",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/qbone_client_session.cc"
    },
    {
      "type": "modify",
      "old_id": "830628a685969e1683cb11dab12110ee88ed8b0c",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/qbone_client_test.cc",
      "new_id": "80c21b60ae9a337580d23cbb94c557fff40e66d3",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/qbone_client_test.cc"
    },
    {
      "type": "modify",
      "old_id": "81ab85565898a29b1ec282ea47fa5d5b8ff6e163",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/qbone_session_test.cc",
      "new_id": "14e814f31c8536eeda0e623ef81805331ec6d726",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/qbone_session_test.cc"
    }
  ]
}
