)]}'
{
  "commit": "863ad14fc5727a5925a02711229fe8a550516b89",
  "tree": "0f6f7fe9f99cfad662dc861cff23d0f5b7d3b0cb",
  "parents": [
    "6928043a799b4257b048ed6c4a54156fc0f0c339"
  ],
  "author": {
    "name": "ericorth",
    "email": "ericorth@google.com",
    "time": "Thu Aug 27 13:11:11 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Thu Aug 27 13:12:02 2026 -0700"
  },
  "message": "QBONE TUN exchanger async refactor: Pass exchanger an exchanger ;)\n\nFinal (I think) refactor needed to unblock off-threading TUN writes.\n\nNeed to pass an exchanger instance to the exchanger for use for underlying-triggered operations.  Particularly, if a read packet is link-local and requires a response directly written back to TUN, the passed exchanger will be used instead of `this`. Allows better layering of implementations so when I have an inner \"thread-local\" exchanger (essentially the current impl) being used by an outer thread-offloading exchanger, the inner exchanger can send writes correctly to the outer exchanger that can write using a worker thread instead of sending writes in-thread.\n\nPiperOrigin-RevId: 972116597\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "13e96d4e1ea8f72e3a53126a2e7b198b72754687",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/mock_qbone_client_packet_exchanger.h",
      "new_id": "5581d7c87b7744015faec62cc504b232f06848db",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/mock_qbone_client_packet_exchanger.h"
    },
    {
      "type": "modify",
      "old_id": "1755d751c62f5164bb65fc3ecb061f8af02b4fae",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/qbone_client_packet_exchanger.h",
      "new_id": "7763850b0f56bbe7f29da3b57bc2b46fc7956f39",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/qbone_client_packet_exchanger.h"
    },
    {
      "type": "modify",
      "old_id": "f002ece71a55c54a81c8751292079a10f7fe8555",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.cc",
      "new_id": "010c5d1cc5a8e032a1a23b634614650ad557b805",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.cc"
    },
    {
      "type": "modify",
      "old_id": "13d1ed5792384249106ffff78501f1523e443b83",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.h",
      "new_id": "2c8130d2145cf552bad25f43fd6797dfa6e8c997",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.h"
    },
    {
      "type": "modify",
      "old_id": "38e7e373dbb6b16f6f08bd7b67e8d46bb92bd000",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger_test.cc",
      "new_id": "34a3f3df4b963f90d2121bd5c8fa66fb65ce5f36",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger_test.cc"
    }
  ]
}
