move gotd fork into repo. (#111)

- update to latest telegram layer
- remove some references to fields in tg.Entities that don't exist in
the schema
- originally added here:
https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e
  - referenced here
-
https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3
-
https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
This commit is contained in:
Adam Van Ymeren
2025-06-27 20:03:37 -07:00
committed by GitHub
parent 0952df0244
commit 7a04f298d2
19264 changed files with 1539697 additions and 84 deletions
+84
View File
@@ -0,0 +1,84 @@
package mtproxy
import (
"github.com/go-faster/errors"
"go.mau.fi/mautrix-telegram/pkg/gotd/proto/codec"
)
// SecretType represents MTProxy secret type.
type SecretType int
const (
// Simple is a basic MTProxy secret.
Simple SecretType = iota + 1
// Secured is dd-secret.
Secured
// TLS is fakeTLS MTProxy secret.
// First byte should be ee.
TLS
)
// Secret represents MTProxy secret.
type Secret struct {
Secret []byte
Tag byte
CloakHost string
Type SecretType
}
// ExpectedCodec returns codec from secret tag if it exists.
func (s Secret) ExpectedCodec() (cdc codec.Codec, _ bool) {
switch s.Tag {
case codec.AbridgedClientStart[0]:
cdc = codec.Abridged{}
case codec.IntermediateClientStart[0]:
cdc = codec.Intermediate{}
case codec.PaddedIntermediateClientStart[0]:
cdc = codec.PaddedIntermediate{}
default:
return nil, false
}
return cdc, true
}
// ParseSecret checks and parses secret.
func ParseSecret(secret []byte) (Secret, error) {
r := Secret{
Secret: secret,
}
const simpleLength = 16
switch {
case len(secret) == 1+simpleLength:
r.Type = Secured
r.Tag = secret[0]
secret = secret[1:]
r.Secret = secret[:simpleLength]
case len(secret) > simpleLength:
r.Type = TLS
r.Tag = secret[0]
secret = secret[1:]
r.Secret = secret[:simpleLength]
r.CloakHost = string(secret[simpleLength:])
case len(secret) == simpleLength:
r.Type = Simple
default:
return Secret{}, errors.Errorf("invalid secret %q", string(secret))
}
if r.Type != Simple {
switch r.Tag {
case codec.AbridgedClientStart[0],
codec.IntermediateClientStart[0],
codec.PaddedIntermediateClientStart[0]:
default:
return Secret{}, errors.Errorf("unknown tag %+x", r.Tag)
}
}
return r, nil
}