slidge-whatsapp 0.2.5__cp311-cp311-manylinux_2_36_aarch64.whl → 0.2.7__cp311-cp311-manylinux_2_36_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of slidge-whatsapp might be problematic. Click here for more details.
- slidge_whatsapp/config.py +3 -0
- slidge_whatsapp/event.go +31 -26
- slidge_whatsapp/gateway.go +13 -9
- slidge_whatsapp/gateway.py +2 -2
- slidge_whatsapp/generated/_whatsapp.cpython-311-aarch64-linux-gnu.h +170 -170
- slidge_whatsapp/generated/_whatsapp.cpython-311-aarch64-linux-gnu.so +0 -0
- slidge_whatsapp/generated/build.py +135 -135
- slidge_whatsapp/generated/whatsapp.c +1496 -1496
- slidge_whatsapp/generated/whatsapp.go +1137 -1137
- slidge_whatsapp/generated/whatsapp.py +1216 -1216
- slidge_whatsapp/generated/whatsapp_go.h +170 -170
- slidge_whatsapp/go.mod +15 -12
- slidge_whatsapp/go.sum +35 -29
- slidge_whatsapp/media/media.go +21 -11
- slidge_whatsapp/session.go +73 -66
- slidge_whatsapp/vendor/github.com/ebitengine/purego/dlfcn.go +4 -4
- slidge_whatsapp/vendor/github.com/ebitengine/purego/dlfcn_darwin.go +0 -5
- slidge_whatsapp/vendor/github.com/ebitengine/purego/internal/fakecgo/go_libinit.go +3 -0
- slidge_whatsapp/vendor/github.com/ebitengine/purego/internal/fakecgo/symbols.go +40 -20
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/CHANGELOG.md +14 -1
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/ffi.go +2 -2
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/fun.go +10 -2
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/lib.go +1 -1
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/lib_unix.go +1 -1
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/lib_windows.go +1 -1
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/README.md +2 -7
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/callback.go +2 -1
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c +8510 -5090
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h +344 -150
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3.go +57 -23
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.c +4 -0
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.go +4 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/.gitignore +4 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/LICENSE +202 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/README.md +4 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid.go +35 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_gccgo.go +26 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.3.c +23 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.3.go +22 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.4.go +35 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.4.s +18 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.5.go +28 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.5.s +44 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_slow.go +24 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_gccgo_go1.8.go +17 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.23.go +38 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.5.go +57 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.6.go +43 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.9.go +37 -0
- slidge_whatsapp/vendor/github.com/rs/zerolog/CONTRIBUTING.md +43 -0
- slidge_whatsapp/vendor/github.com/rs/zerolog/README.md +31 -0
- slidge_whatsapp/vendor/github.com/rs/zerolog/console.go +20 -5
- slidge_whatsapp/vendor/github.com/rs/zerolog/log/log.go +131 -0
- slidge_whatsapp/vendor/github.com/rs/zerolog/log.go +1 -1
- slidge_whatsapp/vendor/github.com/rs/zerolog/sampler.go +4 -1
- slidge_whatsapp/vendor/github.com/rs/zerolog/writer.go +9 -0
- slidge_whatsapp/vendor/go.mau.fi/libsignal/groups/GroupCipher.go +17 -6
- slidge_whatsapp/vendor/go.mau.fi/libsignal/groups/GroupSessionBuilder.go +17 -7
- slidge_whatsapp/vendor/go.mau.fi/libsignal/groups/state/store/SenderKeyStore.go +4 -2
- slidge_whatsapp/vendor/go.mau.fi/libsignal/keys/chain/ChainKey.go +1 -0
- slidge_whatsapp/vendor/go.mau.fi/libsignal/keys/identity/IdentityKey.go +1 -0
- slidge_whatsapp/vendor/go.mau.fi/libsignal/logger/DefaultLogger.go +2 -2
- slidge_whatsapp/vendor/go.mau.fi/libsignal/serialize/FingerprintProtocol.pb.go +3 -2
- slidge_whatsapp/vendor/go.mau.fi/libsignal/serialize/LocalStorageProtocol.pb.go +3 -2
- slidge_whatsapp/vendor/go.mau.fi/libsignal/serialize/WhisperTextProtocol.pb.go +3 -2
- slidge_whatsapp/vendor/go.mau.fi/libsignal/session/Session.go +41 -17
- slidge_whatsapp/vendor/go.mau.fi/libsignal/session/SessionCipher.go +64 -30
- slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/IdentityKeyStore.go +5 -3
- slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/MessageKeyStore.go +6 -4
- slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/PreKeyStore.go +6 -4
- slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/SessionStore.go +8 -6
- slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/SignedPreKeyStore.go +7 -5
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/connlog.go +257 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/database.go +309 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/iter.go +233 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/json.go +47 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/log.go +129 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/massinsert.go +164 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/queryhelper.go +137 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/reflectscan.go +30 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/transaction.go +180 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/upgrades.go +250 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/upgradetable.go +331 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exerrors/dualerror.go +33 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exerrors/must.go +23 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exhttp/cors.go +32 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exhttp/handleerrors.go +64 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exhttp/json.go +36 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exhttp/middleware.go +30 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exhttp/networkerror.go +37 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exstrings/stringutil.go +76 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exsync/event.go +88 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exsync/returnonce.go +25 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exsync/ringbuffer.go +139 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exsync/syncmap.go +94 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exsync/syncset.go +136 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/callermarshal.go +28 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/defaults.go +32 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/generics.go +45 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/writer.go +81 -0
- slidge_whatsapp/vendor/go.mau.fi/util/ptr/ptr.go +43 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/decode.go +27 -26
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/encode.go +4 -3
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/keys.go +5 -4
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate.go +27 -25
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/armadillomessage.go +40 -7
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/binary/encoder.go +1 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/broadcast.go +5 -4
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/call.go +1 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/client.go +119 -37
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/connectionevents.go +29 -11
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/download-to-file.go +63 -30
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/download.go +74 -34
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/errors.go +1 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/group.go +61 -31
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/internals.go +188 -152
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/keepalive.go +3 -2
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/mediaconn.go +5 -3
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/mediaretry.go +2 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/message.go +444 -135
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/msgsecret.go +118 -31
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/notification.go +78 -42
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/pair-code.go +7 -4
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/pair.go +42 -18
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/prekeys.go +9 -5
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/presence.go +2 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/privacysettings.go +10 -11
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/extra.go +7 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/InstamadilloAddMessage.pb.go +983 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/InstamadilloAddMessage.proto +85 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/extra.go +3 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.pb.go +197 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.proto +13 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.pb.go +279 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.proto +21 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.pb.go +137 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.proto +10 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink/InstamadilloCoreTypeLink.pb.go +313 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink/InstamadilloCoreTypeLink.proto +27 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.pb.go +1299 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto +112 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText/InstamadilloCoreTypeText.pb.go +514 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText/InstamadilloCoreTypeText.proto +47 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/InstamadilloDeleteMessage.pb.go +123 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/InstamadilloDeleteMessage.proto +7 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/extra.go +3 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/InstamadilloSupplementMessage.pb.go +720 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/InstamadilloSupplementMessage.proto +59 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/extra.go +3 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloTransportPayload/InstamadilloTransportPayload.pb.go +365 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloTransportPayload/InstamadilloTransportPayload.proto +33 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef/InstamadilloXmaContentRef.pb.go +1238 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef/InstamadilloXmaContentRef.proto +105 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.go +39 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.go +354 -175
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.proto +5 -5
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.go +170 -15
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.proto +4 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.go +29 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.go +13 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.go +344 -31
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.proto +26 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/{WAWebProtobufsCompanionReg.pb.go → WACompanionReg.pb.go} +184 -89
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/{WAWebProtobufsCompanionReg.proto → WACompanionReg.proto} +2 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.go +173 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.go +78 -16
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.proto +5 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.go +7428 -2151
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.proto +373 -44
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.go +456 -135
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.proto +14 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload/WAWebProtobufLidMigrationSyncPayload.pb.go +198 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload/WAWebProtobufLidMigrationSyncPayload.proto +14 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.go +162 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.proto +1 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.go +32 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.proto +1 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.go +192 -52
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.proto +8 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.go +60 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/extra.go +7 -6
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.go +39 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.go +61 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.pb.go +800 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.proto +72 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.go +1344 -438
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.proto +52 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.go +27 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.go +59 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.go +382 -78
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.proto +8 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.go +563 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.proto +4 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/receipt.go +25 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/reportingfields.json +1 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/reportingtoken.go +176 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/retry.go +39 -21
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/send.go +261 -75
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/sendfb.go +28 -16
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/clientpayload.go +3 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/noop.go +85 -43
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/signal.go +75 -88
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/container.go +86 -65
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/lidmap.go +186 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/store.go +291 -167
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/00-latest-schema.sql +155 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/03-message-secrets.sql +11 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/04-privacy-tokens.sql +8 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/05-account-jid-format.sql +2 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/06-facebook-uuid.sql +2 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/07-account-lid.sql +2 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/08-lid-mapping.sql +5 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/09-decryption-buffer.sql +10 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/10-chat-db-lid-migration-ts.sql +2 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/upgrades.go +22 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/store.go +107 -56
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/botmap.go +210 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/events/events.go +13 -2
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/group.go +15 -6
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/jid.go +7 -8
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/message.go +18 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/update.go +3 -2
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/upload.go +1 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/user.go +47 -29
- slidge_whatsapp/vendor/golang.org/x/exp/LICENSE +27 -0
- slidge_whatsapp/vendor/golang.org/x/exp/PATENTS +22 -0
- slidge_whatsapp/vendor/golang.org/x/exp/constraints/constraints.go +54 -0
- slidge_whatsapp/vendor/golang.org/x/net/http/httpguts/guts.go +50 -0
- slidge_whatsapp/vendor/golang.org/x/net/http/httpguts/httplex.go +347 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/.gitignore +2 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/ascii.go +53 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/ciphers.go +641 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/client_conn_pool.go +311 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/config.go +122 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/config_go124.go +61 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/config_pre_go124.go +16 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/databuffer.go +149 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/errors.go +145 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/flow.go +120 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/frame.go +1702 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/gotrack.go +170 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/encode.go +245 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/hpack.go +523 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/huffman.go +226 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/static_table.go +188 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/tables.go +403 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/http2.go +432 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/pipe.go +184 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/server.go +3350 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/timer.go +20 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/transport.go +3287 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/unencrypted.go +32 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/write.go +381 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/writesched.go +251 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_priority.go +451 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_random.go +77 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_roundrobin.go +119 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/go118.go +13 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/idna10.0.0.go +769 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/idna9.0.0.go +717 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/pre_go118.go +11 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/punycode.go +217 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables10.0.0.go +4559 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables11.0.0.go +4653 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables12.0.0.go +4733 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables13.0.0.go +4959 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables15.0.0.go +5144 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables9.0.0.go +4486 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/trie.go +51 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/trie12.0.0.go +30 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/trie13.0.0.go +30 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/trieval.go +119 -0
- slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/ascii.go +53 -0
- slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/headermap.go +115 -0
- slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/request.go +467 -0
- slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_darwin.go +148 -1
- slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_linux.go +16 -26
- slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +84 -0
- slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +20 -0
- slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +84 -0
- slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +20 -0
- slidge_whatsapp/vendor/golang.org/x/sys/windows/security_windows.go +44 -5
- slidge_whatsapp/vendor/golang.org/x/sys/windows/syscall_windows.go +4 -2
- slidge_whatsapp/vendor/golang.org/x/sys/windows/types_windows.go +239 -0
- slidge_whatsapp/vendor/golang.org/x/sys/windows/zsyscall_windows.go +9 -0
- slidge_whatsapp/vendor/golang.org/x/text/LICENSE +27 -0
- slidge_whatsapp/vendor/golang.org/x/text/PATENTS +22 -0
- slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule.go +336 -0
- slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go +11 -0
- slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go +14 -0
- slidge_whatsapp/vendor/golang.org/x/text/transform/transform.go +709 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/bidi.go +359 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/bracket.go +335 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/core.go +1071 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/prop.go +206 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go +1815 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go +1887 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go +1923 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go +1955 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go +2042 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go +1781 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/trieval.go +48 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/composition.go +512 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/forminfo.go +279 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/input.go +109 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/iter.go +458 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/normalize.go +610 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/readwriter.go +125 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go +7657 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables11.0.0.go +7693 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go +7710 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go +7760 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go +7907 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go +7637 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/transform.go +88 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/trie.go +54 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb +0 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/filedesc/editions.go +3 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +16 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/strs/{strings_unsafe_go121.go → strings_unsafe.go} +0 -2
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/version/version.go +1 -1
- slidge_whatsapp/vendor/google.golang.org/protobuf/proto/merge.go +6 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +2 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/{value_unsafe_go121.go → value_unsafe.go} +0 -2
- slidge_whatsapp/vendor/modules.txt +52 -13
- {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.7.dist-info}/METADATA +1 -1
- {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.7.dist-info}/RECORD +330 -184
- {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.7.dist-info}/WHEEL +1 -1
- slidge_whatsapp/vendor/github.com/rs/zerolog/CNAME +0 -1
- slidge_whatsapp/vendor/github.com/rs/zerolog/_config.yml +0 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.raw +0 -23
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.raw +0 -7
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WAWebProtobufsCompanionReg.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrade.go +0 -296
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go +0 -94
- slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go +0 -98
- {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.7.dist-info}/LICENSE +0 -0
- {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.7.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
// Copyright 2016 The Go Authors. All rights reserved.
|
|
2
|
+
// Use of this source code is governed by a BSD-style
|
|
3
|
+
// license that can be found in the LICENSE file.
|
|
4
|
+
|
|
5
|
+
package http2
|
|
6
|
+
|
|
7
|
+
import (
|
|
8
|
+
"fmt"
|
|
9
|
+
"math"
|
|
10
|
+
"sort"
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
// RFC 7540, Section 5.3.5: the default weight is 16.
|
|
14
|
+
const priorityDefaultWeight = 15 // 16 = 15 + 1
|
|
15
|
+
|
|
16
|
+
// PriorityWriteSchedulerConfig configures a priorityWriteScheduler.
|
|
17
|
+
type PriorityWriteSchedulerConfig struct {
|
|
18
|
+
// MaxClosedNodesInTree controls the maximum number of closed streams to
|
|
19
|
+
// retain in the priority tree. Setting this to zero saves a small amount
|
|
20
|
+
// of memory at the cost of performance.
|
|
21
|
+
//
|
|
22
|
+
// See RFC 7540, Section 5.3.4:
|
|
23
|
+
// "It is possible for a stream to become closed while prioritization
|
|
24
|
+
// information ... is in transit. ... This potentially creates suboptimal
|
|
25
|
+
// prioritization, since the stream could be given a priority that is
|
|
26
|
+
// different from what is intended. To avoid these problems, an endpoint
|
|
27
|
+
// SHOULD retain stream prioritization state for a period after streams
|
|
28
|
+
// become closed. The longer state is retained, the lower the chance that
|
|
29
|
+
// streams are assigned incorrect or default priority values."
|
|
30
|
+
MaxClosedNodesInTree int
|
|
31
|
+
|
|
32
|
+
// MaxIdleNodesInTree controls the maximum number of idle streams to
|
|
33
|
+
// retain in the priority tree. Setting this to zero saves a small amount
|
|
34
|
+
// of memory at the cost of performance.
|
|
35
|
+
//
|
|
36
|
+
// See RFC 7540, Section 5.3.4:
|
|
37
|
+
// Similarly, streams that are in the "idle" state can be assigned
|
|
38
|
+
// priority or become a parent of other streams. This allows for the
|
|
39
|
+
// creation of a grouping node in the dependency tree, which enables
|
|
40
|
+
// more flexible expressions of priority. Idle streams begin with a
|
|
41
|
+
// default priority (Section 5.3.5).
|
|
42
|
+
MaxIdleNodesInTree int
|
|
43
|
+
|
|
44
|
+
// ThrottleOutOfOrderWrites enables write throttling to help ensure that
|
|
45
|
+
// data is delivered in priority order. This works around a race where
|
|
46
|
+
// stream B depends on stream A and both streams are about to call Write
|
|
47
|
+
// to queue DATA frames. If B wins the race, a naive scheduler would eagerly
|
|
48
|
+
// write as much data from B as possible, but this is suboptimal because A
|
|
49
|
+
// is a higher-priority stream. With throttling enabled, we write a small
|
|
50
|
+
// amount of data from B to minimize the amount of bandwidth that B can
|
|
51
|
+
// steal from A.
|
|
52
|
+
ThrottleOutOfOrderWrites bool
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// NewPriorityWriteScheduler constructs a WriteScheduler that schedules
|
|
56
|
+
// frames by following HTTP/2 priorities as described in RFC 7540 Section 5.3.
|
|
57
|
+
// If cfg is nil, default options are used.
|
|
58
|
+
func NewPriorityWriteScheduler(cfg *PriorityWriteSchedulerConfig) WriteScheduler {
|
|
59
|
+
if cfg == nil {
|
|
60
|
+
// For justification of these defaults, see:
|
|
61
|
+
// https://docs.google.com/document/d/1oLhNg1skaWD4_DtaoCxdSRN5erEXrH-KnLrMwEpOtFY
|
|
62
|
+
cfg = &PriorityWriteSchedulerConfig{
|
|
63
|
+
MaxClosedNodesInTree: 10,
|
|
64
|
+
MaxIdleNodesInTree: 10,
|
|
65
|
+
ThrottleOutOfOrderWrites: false,
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
ws := &priorityWriteScheduler{
|
|
70
|
+
nodes: make(map[uint32]*priorityNode),
|
|
71
|
+
maxClosedNodesInTree: cfg.MaxClosedNodesInTree,
|
|
72
|
+
maxIdleNodesInTree: cfg.MaxIdleNodesInTree,
|
|
73
|
+
enableWriteThrottle: cfg.ThrottleOutOfOrderWrites,
|
|
74
|
+
}
|
|
75
|
+
ws.nodes[0] = &ws.root
|
|
76
|
+
if cfg.ThrottleOutOfOrderWrites {
|
|
77
|
+
ws.writeThrottleLimit = 1024
|
|
78
|
+
} else {
|
|
79
|
+
ws.writeThrottleLimit = math.MaxInt32
|
|
80
|
+
}
|
|
81
|
+
return ws
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
type priorityNodeState int
|
|
85
|
+
|
|
86
|
+
const (
|
|
87
|
+
priorityNodeOpen priorityNodeState = iota
|
|
88
|
+
priorityNodeClosed
|
|
89
|
+
priorityNodeIdle
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
// priorityNode is a node in an HTTP/2 priority tree.
|
|
93
|
+
// Each node is associated with a single stream ID.
|
|
94
|
+
// See RFC 7540, Section 5.3.
|
|
95
|
+
type priorityNode struct {
|
|
96
|
+
q writeQueue // queue of pending frames to write
|
|
97
|
+
id uint32 // id of the stream, or 0 for the root of the tree
|
|
98
|
+
weight uint8 // the actual weight is weight+1, so the value is in [1,256]
|
|
99
|
+
state priorityNodeState // open | closed | idle
|
|
100
|
+
bytes int64 // number of bytes written by this node, or 0 if closed
|
|
101
|
+
subtreeBytes int64 // sum(node.bytes) of all nodes in this subtree
|
|
102
|
+
|
|
103
|
+
// These links form the priority tree.
|
|
104
|
+
parent *priorityNode
|
|
105
|
+
kids *priorityNode // start of the kids list
|
|
106
|
+
prev, next *priorityNode // doubly-linked list of siblings
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
func (n *priorityNode) setParent(parent *priorityNode) {
|
|
110
|
+
if n == parent {
|
|
111
|
+
panic("setParent to self")
|
|
112
|
+
}
|
|
113
|
+
if n.parent == parent {
|
|
114
|
+
return
|
|
115
|
+
}
|
|
116
|
+
// Unlink from current parent.
|
|
117
|
+
if parent := n.parent; parent != nil {
|
|
118
|
+
if n.prev == nil {
|
|
119
|
+
parent.kids = n.next
|
|
120
|
+
} else {
|
|
121
|
+
n.prev.next = n.next
|
|
122
|
+
}
|
|
123
|
+
if n.next != nil {
|
|
124
|
+
n.next.prev = n.prev
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Link to new parent.
|
|
128
|
+
// If parent=nil, remove n from the tree.
|
|
129
|
+
// Always insert at the head of parent.kids (this is assumed by walkReadyInOrder).
|
|
130
|
+
n.parent = parent
|
|
131
|
+
if parent == nil {
|
|
132
|
+
n.next = nil
|
|
133
|
+
n.prev = nil
|
|
134
|
+
} else {
|
|
135
|
+
n.next = parent.kids
|
|
136
|
+
n.prev = nil
|
|
137
|
+
if n.next != nil {
|
|
138
|
+
n.next.prev = n
|
|
139
|
+
}
|
|
140
|
+
parent.kids = n
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
func (n *priorityNode) addBytes(b int64) {
|
|
145
|
+
n.bytes += b
|
|
146
|
+
for ; n != nil; n = n.parent {
|
|
147
|
+
n.subtreeBytes += b
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// walkReadyInOrder iterates over the tree in priority order, calling f for each node
|
|
152
|
+
// with a non-empty write queue. When f returns true, this function returns true and the
|
|
153
|
+
// walk halts. tmp is used as scratch space for sorting.
|
|
154
|
+
//
|
|
155
|
+
// f(n, openParent) takes two arguments: the node to visit, n, and a bool that is true
|
|
156
|
+
// if any ancestor p of n is still open (ignoring the root node).
|
|
157
|
+
func (n *priorityNode) walkReadyInOrder(openParent bool, tmp *[]*priorityNode, f func(*priorityNode, bool) bool) bool {
|
|
158
|
+
if !n.q.empty() && f(n, openParent) {
|
|
159
|
+
return true
|
|
160
|
+
}
|
|
161
|
+
if n.kids == nil {
|
|
162
|
+
return false
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Don't consider the root "open" when updating openParent since
|
|
166
|
+
// we can't send data frames on the root stream (only control frames).
|
|
167
|
+
if n.id != 0 {
|
|
168
|
+
openParent = openParent || (n.state == priorityNodeOpen)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Common case: only one kid or all kids have the same weight.
|
|
172
|
+
// Some clients don't use weights; other clients (like web browsers)
|
|
173
|
+
// use mostly-linear priority trees.
|
|
174
|
+
w := n.kids.weight
|
|
175
|
+
needSort := false
|
|
176
|
+
for k := n.kids.next; k != nil; k = k.next {
|
|
177
|
+
if k.weight != w {
|
|
178
|
+
needSort = true
|
|
179
|
+
break
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if !needSort {
|
|
183
|
+
for k := n.kids; k != nil; k = k.next {
|
|
184
|
+
if k.walkReadyInOrder(openParent, tmp, f) {
|
|
185
|
+
return true
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return false
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Uncommon case: sort the child nodes. We remove the kids from the parent,
|
|
192
|
+
// then re-insert after sorting so we can reuse tmp for future sort calls.
|
|
193
|
+
*tmp = (*tmp)[:0]
|
|
194
|
+
for n.kids != nil {
|
|
195
|
+
*tmp = append(*tmp, n.kids)
|
|
196
|
+
n.kids.setParent(nil)
|
|
197
|
+
}
|
|
198
|
+
sort.Sort(sortPriorityNodeSiblings(*tmp))
|
|
199
|
+
for i := len(*tmp) - 1; i >= 0; i-- {
|
|
200
|
+
(*tmp)[i].setParent(n) // setParent inserts at the head of n.kids
|
|
201
|
+
}
|
|
202
|
+
for k := n.kids; k != nil; k = k.next {
|
|
203
|
+
if k.walkReadyInOrder(openParent, tmp, f) {
|
|
204
|
+
return true
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return false
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
type sortPriorityNodeSiblings []*priorityNode
|
|
211
|
+
|
|
212
|
+
func (z sortPriorityNodeSiblings) Len() int { return len(z) }
|
|
213
|
+
func (z sortPriorityNodeSiblings) Swap(i, k int) { z[i], z[k] = z[k], z[i] }
|
|
214
|
+
func (z sortPriorityNodeSiblings) Less(i, k int) bool {
|
|
215
|
+
// Prefer the subtree that has sent fewer bytes relative to its weight.
|
|
216
|
+
// See sections 5.3.2 and 5.3.4.
|
|
217
|
+
wi, bi := float64(z[i].weight+1), float64(z[i].subtreeBytes)
|
|
218
|
+
wk, bk := float64(z[k].weight+1), float64(z[k].subtreeBytes)
|
|
219
|
+
if bi == 0 && bk == 0 {
|
|
220
|
+
return wi >= wk
|
|
221
|
+
}
|
|
222
|
+
if bk == 0 {
|
|
223
|
+
return false
|
|
224
|
+
}
|
|
225
|
+
return bi/bk <= wi/wk
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
type priorityWriteScheduler struct {
|
|
229
|
+
// root is the root of the priority tree, where root.id = 0.
|
|
230
|
+
// The root queues control frames that are not associated with any stream.
|
|
231
|
+
root priorityNode
|
|
232
|
+
|
|
233
|
+
// nodes maps stream ids to priority tree nodes.
|
|
234
|
+
nodes map[uint32]*priorityNode
|
|
235
|
+
|
|
236
|
+
// maxID is the maximum stream id in nodes.
|
|
237
|
+
maxID uint32
|
|
238
|
+
|
|
239
|
+
// lists of nodes that have been closed or are idle, but are kept in
|
|
240
|
+
// the tree for improved prioritization. When the lengths exceed either
|
|
241
|
+
// maxClosedNodesInTree or maxIdleNodesInTree, old nodes are discarded.
|
|
242
|
+
closedNodes, idleNodes []*priorityNode
|
|
243
|
+
|
|
244
|
+
// From the config.
|
|
245
|
+
maxClosedNodesInTree int
|
|
246
|
+
maxIdleNodesInTree int
|
|
247
|
+
writeThrottleLimit int32
|
|
248
|
+
enableWriteThrottle bool
|
|
249
|
+
|
|
250
|
+
// tmp is scratch space for priorityNode.walkReadyInOrder to reduce allocations.
|
|
251
|
+
tmp []*priorityNode
|
|
252
|
+
|
|
253
|
+
// pool of empty queues for reuse.
|
|
254
|
+
queuePool writeQueuePool
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
func (ws *priorityWriteScheduler) OpenStream(streamID uint32, options OpenStreamOptions) {
|
|
258
|
+
// The stream may be currently idle but cannot be opened or closed.
|
|
259
|
+
if curr := ws.nodes[streamID]; curr != nil {
|
|
260
|
+
if curr.state != priorityNodeIdle {
|
|
261
|
+
panic(fmt.Sprintf("stream %d already opened", streamID))
|
|
262
|
+
}
|
|
263
|
+
curr.state = priorityNodeOpen
|
|
264
|
+
return
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// RFC 7540, Section 5.3.5:
|
|
268
|
+
// "All streams are initially assigned a non-exclusive dependency on stream 0x0.
|
|
269
|
+
// Pushed streams initially depend on their associated stream. In both cases,
|
|
270
|
+
// streams are assigned a default weight of 16."
|
|
271
|
+
parent := ws.nodes[options.PusherID]
|
|
272
|
+
if parent == nil {
|
|
273
|
+
parent = &ws.root
|
|
274
|
+
}
|
|
275
|
+
n := &priorityNode{
|
|
276
|
+
q: *ws.queuePool.get(),
|
|
277
|
+
id: streamID,
|
|
278
|
+
weight: priorityDefaultWeight,
|
|
279
|
+
state: priorityNodeOpen,
|
|
280
|
+
}
|
|
281
|
+
n.setParent(parent)
|
|
282
|
+
ws.nodes[streamID] = n
|
|
283
|
+
if streamID > ws.maxID {
|
|
284
|
+
ws.maxID = streamID
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
func (ws *priorityWriteScheduler) CloseStream(streamID uint32) {
|
|
289
|
+
if streamID == 0 {
|
|
290
|
+
panic("violation of WriteScheduler interface: cannot close stream 0")
|
|
291
|
+
}
|
|
292
|
+
if ws.nodes[streamID] == nil {
|
|
293
|
+
panic(fmt.Sprintf("violation of WriteScheduler interface: unknown stream %d", streamID))
|
|
294
|
+
}
|
|
295
|
+
if ws.nodes[streamID].state != priorityNodeOpen {
|
|
296
|
+
panic(fmt.Sprintf("violation of WriteScheduler interface: stream %d already closed", streamID))
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
n := ws.nodes[streamID]
|
|
300
|
+
n.state = priorityNodeClosed
|
|
301
|
+
n.addBytes(-n.bytes)
|
|
302
|
+
|
|
303
|
+
q := n.q
|
|
304
|
+
ws.queuePool.put(&q)
|
|
305
|
+
n.q.s = nil
|
|
306
|
+
if ws.maxClosedNodesInTree > 0 {
|
|
307
|
+
ws.addClosedOrIdleNode(&ws.closedNodes, ws.maxClosedNodesInTree, n)
|
|
308
|
+
} else {
|
|
309
|
+
ws.removeNode(n)
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
func (ws *priorityWriteScheduler) AdjustStream(streamID uint32, priority PriorityParam) {
|
|
314
|
+
if streamID == 0 {
|
|
315
|
+
panic("adjustPriority on root")
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// If streamID does not exist, there are two cases:
|
|
319
|
+
// - A closed stream that has been removed (this will have ID <= maxID)
|
|
320
|
+
// - An idle stream that is being used for "grouping" (this will have ID > maxID)
|
|
321
|
+
n := ws.nodes[streamID]
|
|
322
|
+
if n == nil {
|
|
323
|
+
if streamID <= ws.maxID || ws.maxIdleNodesInTree == 0 {
|
|
324
|
+
return
|
|
325
|
+
}
|
|
326
|
+
ws.maxID = streamID
|
|
327
|
+
n = &priorityNode{
|
|
328
|
+
q: *ws.queuePool.get(),
|
|
329
|
+
id: streamID,
|
|
330
|
+
weight: priorityDefaultWeight,
|
|
331
|
+
state: priorityNodeIdle,
|
|
332
|
+
}
|
|
333
|
+
n.setParent(&ws.root)
|
|
334
|
+
ws.nodes[streamID] = n
|
|
335
|
+
ws.addClosedOrIdleNode(&ws.idleNodes, ws.maxIdleNodesInTree, n)
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// Section 5.3.1: A dependency on a stream that is not currently in the tree
|
|
339
|
+
// results in that stream being given a default priority (Section 5.3.5).
|
|
340
|
+
parent := ws.nodes[priority.StreamDep]
|
|
341
|
+
if parent == nil {
|
|
342
|
+
n.setParent(&ws.root)
|
|
343
|
+
n.weight = priorityDefaultWeight
|
|
344
|
+
return
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// Ignore if the client tries to make a node its own parent.
|
|
348
|
+
if n == parent {
|
|
349
|
+
return
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// Section 5.3.3:
|
|
353
|
+
// "If a stream is made dependent on one of its own dependencies, the
|
|
354
|
+
// formerly dependent stream is first moved to be dependent on the
|
|
355
|
+
// reprioritized stream's previous parent. The moved dependency retains
|
|
356
|
+
// its weight."
|
|
357
|
+
//
|
|
358
|
+
// That is: if parent depends on n, move parent to depend on n.parent.
|
|
359
|
+
for x := parent.parent; x != nil; x = x.parent {
|
|
360
|
+
if x == n {
|
|
361
|
+
parent.setParent(n.parent)
|
|
362
|
+
break
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// Section 5.3.3: The exclusive flag causes the stream to become the sole
|
|
367
|
+
// dependency of its parent stream, causing other dependencies to become
|
|
368
|
+
// dependent on the exclusive stream.
|
|
369
|
+
if priority.Exclusive {
|
|
370
|
+
k := parent.kids
|
|
371
|
+
for k != nil {
|
|
372
|
+
next := k.next
|
|
373
|
+
if k != n {
|
|
374
|
+
k.setParent(n)
|
|
375
|
+
}
|
|
376
|
+
k = next
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
n.setParent(parent)
|
|
381
|
+
n.weight = priority.Weight
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
func (ws *priorityWriteScheduler) Push(wr FrameWriteRequest) {
|
|
385
|
+
var n *priorityNode
|
|
386
|
+
if wr.isControl() {
|
|
387
|
+
n = &ws.root
|
|
388
|
+
} else {
|
|
389
|
+
id := wr.StreamID()
|
|
390
|
+
n = ws.nodes[id]
|
|
391
|
+
if n == nil {
|
|
392
|
+
// id is an idle or closed stream. wr should not be a HEADERS or
|
|
393
|
+
// DATA frame. In other case, we push wr onto the root, rather
|
|
394
|
+
// than creating a new priorityNode.
|
|
395
|
+
if wr.DataSize() > 0 {
|
|
396
|
+
panic("add DATA on non-open stream")
|
|
397
|
+
}
|
|
398
|
+
n = &ws.root
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
n.q.push(wr)
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
func (ws *priorityWriteScheduler) Pop() (wr FrameWriteRequest, ok bool) {
|
|
405
|
+
ws.root.walkReadyInOrder(false, &ws.tmp, func(n *priorityNode, openParent bool) bool {
|
|
406
|
+
limit := int32(math.MaxInt32)
|
|
407
|
+
if openParent {
|
|
408
|
+
limit = ws.writeThrottleLimit
|
|
409
|
+
}
|
|
410
|
+
wr, ok = n.q.consume(limit)
|
|
411
|
+
if !ok {
|
|
412
|
+
return false
|
|
413
|
+
}
|
|
414
|
+
n.addBytes(int64(wr.DataSize()))
|
|
415
|
+
// If B depends on A and B continuously has data available but A
|
|
416
|
+
// does not, gradually increase the throttling limit to allow B to
|
|
417
|
+
// steal more and more bandwidth from A.
|
|
418
|
+
if openParent {
|
|
419
|
+
ws.writeThrottleLimit += 1024
|
|
420
|
+
if ws.writeThrottleLimit < 0 {
|
|
421
|
+
ws.writeThrottleLimit = math.MaxInt32
|
|
422
|
+
}
|
|
423
|
+
} else if ws.enableWriteThrottle {
|
|
424
|
+
ws.writeThrottleLimit = 1024
|
|
425
|
+
}
|
|
426
|
+
return true
|
|
427
|
+
})
|
|
428
|
+
return wr, ok
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
func (ws *priorityWriteScheduler) addClosedOrIdleNode(list *[]*priorityNode, maxSize int, n *priorityNode) {
|
|
432
|
+
if maxSize == 0 {
|
|
433
|
+
return
|
|
434
|
+
}
|
|
435
|
+
if len(*list) == maxSize {
|
|
436
|
+
// Remove the oldest node, then shift left.
|
|
437
|
+
ws.removeNode((*list)[0])
|
|
438
|
+
x := (*list)[1:]
|
|
439
|
+
copy(*list, x)
|
|
440
|
+
*list = (*list)[:len(x)]
|
|
441
|
+
}
|
|
442
|
+
*list = append(*list, n)
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
func (ws *priorityWriteScheduler) removeNode(n *priorityNode) {
|
|
446
|
+
for n.kids != nil {
|
|
447
|
+
n.kids.setParent(n.parent)
|
|
448
|
+
}
|
|
449
|
+
n.setParent(nil)
|
|
450
|
+
delete(ws.nodes, n.id)
|
|
451
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// Copyright 2014 The Go Authors. All rights reserved.
|
|
2
|
+
// Use of this source code is governed by a BSD-style
|
|
3
|
+
// license that can be found in the LICENSE file.
|
|
4
|
+
|
|
5
|
+
package http2
|
|
6
|
+
|
|
7
|
+
import "math"
|
|
8
|
+
|
|
9
|
+
// NewRandomWriteScheduler constructs a WriteScheduler that ignores HTTP/2
|
|
10
|
+
// priorities. Control frames like SETTINGS and PING are written before DATA
|
|
11
|
+
// frames, but if no control frames are queued and multiple streams have queued
|
|
12
|
+
// HEADERS or DATA frames, Pop selects a ready stream arbitrarily.
|
|
13
|
+
func NewRandomWriteScheduler() WriteScheduler {
|
|
14
|
+
return &randomWriteScheduler{sq: make(map[uint32]*writeQueue)}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
type randomWriteScheduler struct {
|
|
18
|
+
// zero are frames not associated with a specific stream.
|
|
19
|
+
zero writeQueue
|
|
20
|
+
|
|
21
|
+
// sq contains the stream-specific queues, keyed by stream ID.
|
|
22
|
+
// When a stream is idle, closed, or emptied, it's deleted
|
|
23
|
+
// from the map.
|
|
24
|
+
sq map[uint32]*writeQueue
|
|
25
|
+
|
|
26
|
+
// pool of empty queues for reuse.
|
|
27
|
+
queuePool writeQueuePool
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
func (ws *randomWriteScheduler) OpenStream(streamID uint32, options OpenStreamOptions) {
|
|
31
|
+
// no-op: idle streams are not tracked
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
func (ws *randomWriteScheduler) CloseStream(streamID uint32) {
|
|
35
|
+
q, ok := ws.sq[streamID]
|
|
36
|
+
if !ok {
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
delete(ws.sq, streamID)
|
|
40
|
+
ws.queuePool.put(q)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
func (ws *randomWriteScheduler) AdjustStream(streamID uint32, priority PriorityParam) {
|
|
44
|
+
// no-op: priorities are ignored
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
func (ws *randomWriteScheduler) Push(wr FrameWriteRequest) {
|
|
48
|
+
if wr.isControl() {
|
|
49
|
+
ws.zero.push(wr)
|
|
50
|
+
return
|
|
51
|
+
}
|
|
52
|
+
id := wr.StreamID()
|
|
53
|
+
q, ok := ws.sq[id]
|
|
54
|
+
if !ok {
|
|
55
|
+
q = ws.queuePool.get()
|
|
56
|
+
ws.sq[id] = q
|
|
57
|
+
}
|
|
58
|
+
q.push(wr)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
func (ws *randomWriteScheduler) Pop() (FrameWriteRequest, bool) {
|
|
62
|
+
// Control and RST_STREAM frames first.
|
|
63
|
+
if !ws.zero.empty() {
|
|
64
|
+
return ws.zero.shift(), true
|
|
65
|
+
}
|
|
66
|
+
// Iterate over all non-idle streams until finding one that can be consumed.
|
|
67
|
+
for streamID, q := range ws.sq {
|
|
68
|
+
if wr, ok := q.consume(math.MaxInt32); ok {
|
|
69
|
+
if q.empty() {
|
|
70
|
+
delete(ws.sq, streamID)
|
|
71
|
+
ws.queuePool.put(q)
|
|
72
|
+
}
|
|
73
|
+
return wr, true
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return FrameWriteRequest{}, false
|
|
77
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// Copyright 2023 The Go Authors. All rights reserved.
|
|
2
|
+
// Use of this source code is governed by a BSD-style
|
|
3
|
+
// license that can be found in the LICENSE file.
|
|
4
|
+
|
|
5
|
+
package http2
|
|
6
|
+
|
|
7
|
+
import (
|
|
8
|
+
"fmt"
|
|
9
|
+
"math"
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
type roundRobinWriteScheduler struct {
|
|
13
|
+
// control contains control frames (SETTINGS, PING, etc.).
|
|
14
|
+
control writeQueue
|
|
15
|
+
|
|
16
|
+
// streams maps stream ID to a queue.
|
|
17
|
+
streams map[uint32]*writeQueue
|
|
18
|
+
|
|
19
|
+
// stream queues are stored in a circular linked list.
|
|
20
|
+
// head is the next stream to write, or nil if there are no streams open.
|
|
21
|
+
head *writeQueue
|
|
22
|
+
|
|
23
|
+
// pool of empty queues for reuse.
|
|
24
|
+
queuePool writeQueuePool
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// newRoundRobinWriteScheduler constructs a new write scheduler.
|
|
28
|
+
// The round robin scheduler priorizes control frames
|
|
29
|
+
// like SETTINGS and PING over DATA frames.
|
|
30
|
+
// When there are no control frames to send, it performs a round-robin
|
|
31
|
+
// selection from the ready streams.
|
|
32
|
+
func newRoundRobinWriteScheduler() WriteScheduler {
|
|
33
|
+
ws := &roundRobinWriteScheduler{
|
|
34
|
+
streams: make(map[uint32]*writeQueue),
|
|
35
|
+
}
|
|
36
|
+
return ws
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
func (ws *roundRobinWriteScheduler) OpenStream(streamID uint32, options OpenStreamOptions) {
|
|
40
|
+
if ws.streams[streamID] != nil {
|
|
41
|
+
panic(fmt.Errorf("stream %d already opened", streamID))
|
|
42
|
+
}
|
|
43
|
+
q := ws.queuePool.get()
|
|
44
|
+
ws.streams[streamID] = q
|
|
45
|
+
if ws.head == nil {
|
|
46
|
+
ws.head = q
|
|
47
|
+
q.next = q
|
|
48
|
+
q.prev = q
|
|
49
|
+
} else {
|
|
50
|
+
// Queues are stored in a ring.
|
|
51
|
+
// Insert the new stream before ws.head, putting it at the end of the list.
|
|
52
|
+
q.prev = ws.head.prev
|
|
53
|
+
q.next = ws.head
|
|
54
|
+
q.prev.next = q
|
|
55
|
+
q.next.prev = q
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
func (ws *roundRobinWriteScheduler) CloseStream(streamID uint32) {
|
|
60
|
+
q := ws.streams[streamID]
|
|
61
|
+
if q == nil {
|
|
62
|
+
return
|
|
63
|
+
}
|
|
64
|
+
if q.next == q {
|
|
65
|
+
// This was the only open stream.
|
|
66
|
+
ws.head = nil
|
|
67
|
+
} else {
|
|
68
|
+
q.prev.next = q.next
|
|
69
|
+
q.next.prev = q.prev
|
|
70
|
+
if ws.head == q {
|
|
71
|
+
ws.head = q.next
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
delete(ws.streams, streamID)
|
|
75
|
+
ws.queuePool.put(q)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
func (ws *roundRobinWriteScheduler) AdjustStream(streamID uint32, priority PriorityParam) {}
|
|
79
|
+
|
|
80
|
+
func (ws *roundRobinWriteScheduler) Push(wr FrameWriteRequest) {
|
|
81
|
+
if wr.isControl() {
|
|
82
|
+
ws.control.push(wr)
|
|
83
|
+
return
|
|
84
|
+
}
|
|
85
|
+
q := ws.streams[wr.StreamID()]
|
|
86
|
+
if q == nil {
|
|
87
|
+
// This is a closed stream.
|
|
88
|
+
// wr should not be a HEADERS or DATA frame.
|
|
89
|
+
// We push the request onto the control queue.
|
|
90
|
+
if wr.DataSize() > 0 {
|
|
91
|
+
panic("add DATA on non-open stream")
|
|
92
|
+
}
|
|
93
|
+
ws.control.push(wr)
|
|
94
|
+
return
|
|
95
|
+
}
|
|
96
|
+
q.push(wr)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
func (ws *roundRobinWriteScheduler) Pop() (FrameWriteRequest, bool) {
|
|
100
|
+
// Control and RST_STREAM frames first.
|
|
101
|
+
if !ws.control.empty() {
|
|
102
|
+
return ws.control.shift(), true
|
|
103
|
+
}
|
|
104
|
+
if ws.head == nil {
|
|
105
|
+
return FrameWriteRequest{}, false
|
|
106
|
+
}
|
|
107
|
+
q := ws.head
|
|
108
|
+
for {
|
|
109
|
+
if wr, ok := q.consume(math.MaxInt32); ok {
|
|
110
|
+
ws.head = q.next
|
|
111
|
+
return wr, true
|
|
112
|
+
}
|
|
113
|
+
q = q.next
|
|
114
|
+
if q == ws.head {
|
|
115
|
+
break
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return FrameWriteRequest{}, false
|
|
119
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
// Copyright 2021 The Go Authors. All rights reserved.
|
|
4
|
+
// Use of this source code is governed by a BSD-style
|
|
5
|
+
// license that can be found in the LICENSE file.
|
|
6
|
+
|
|
7
|
+
//go:build go1.18
|
|
8
|
+
|
|
9
|
+
package idna
|
|
10
|
+
|
|
11
|
+
// Transitional processing is disabled by default in Go 1.18.
|
|
12
|
+
// https://golang.org/issue/47510
|
|
13
|
+
const transitionalLookup = false
|