)]}'
{
  "commit": "0fc73a2465620c92633c42fb693c847faabc8c0b",
  "tree": "7df3002f3e056c87fd4aff712dd95367e0a63d28",
  "parents": [
    "24ae5d8c69aeb23075f385dd3227bbffc8b18ed3"
  ],
  "author": {
    "name": "ericorth",
    "email": "ericorth@google.com",
    "time": "Tue Aug 11 10:36:12 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Tue Aug 11 10:36:52 2026 -0700"
  },
  "message": "QBONE TUN exchanger async refactor: Move multi-packet read support into exchanger impl\n\nEven with our plan to leave reads in-thread for now, I couldn\u0027t come up with a not-too-much-work way to do the multiple read calls via an async-supporting API. Easier to just move the logic to do it via a single call. Bonus advantage that this moves some more logic into open-source that might as well be open sourced.\n\nWhile at it, made some fixes to the relevant logic. Now avoids unnecessary logging of blocked errors (after first packet), and can continue reading after errors that shouldn\u0027t signal no-more-packets.\n\nPiperOrigin-RevId: 962864740\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d42ab2c4b31f84d8f5c7f00817a0eab97b74b800",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/mock_qbone_client_packet_exchanger.h",
      "new_id": "7168d42b12c3baa1131c4df9ebaf28c7cf23cd06",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/mock_qbone_client_packet_exchanger.h"
    },
    {
      "type": "modify",
      "old_id": "c88b48d29e3578a787ae196956ecb35d8117ddcb",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/qbone_client_packet_exchanger.h",
      "new_id": "2f15da925d5dcb1928c65c2b3d5820ac4d3aefc0",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/qbone_client_packet_exchanger.h"
    },
    {
      "type": "modify",
      "old_id": "8489b3ec4ce4dd2e40ea8395024cf25757ca6f8b",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.cc",
      "new_id": "01a99db777a3c0170f5993aec913a86397be8018",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.cc"
    },
    {
      "type": "modify",
      "old_id": "19b03d5ef6f02b606b8f83a208c18e83ec96555d",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.h",
      "new_id": "7ba87488846c8d8410a3c8927cd37cb3015180af",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.h"
    },
    {
      "type": "modify",
      "old_id": "cecca0a2e7dd09417bb0bbc05baa69ebf83058c6",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger_test.cc",
      "new_id": "442af30256a1e3c8901f80d771211168f4374c5b",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger_test.cc"
    }
  ]
}
