FoxiGram/TMessagesProj/jni/voip/libtgvoip/PacketReassembler.h
instant992 8e79f2ee9c FoxiGram: Telegram client with built-in Xray VLESS proxy
Based on Nekogram. Key additions:
- Rebrand to FoxiGram (app name, APK name, applicationId com.foxigram.app)
- Embedded Xray (VLESS+Reality) proxy client via JNI libxray.so
- Bundled hidden one-tap proxies (LTE + WiFi), read-only in UI
- Auto-restore proxy on restart, rebind to active network (LTE/WiFi)
- Server credentials externalized to git-ignored XrayServers.java (+ template)
- libxray Go source included; compiled .so, keystore, google-services.json ignored
2026-06-08 16:41:07 +04:00

72 lines
1.7 KiB
C++

//
// Created by Grishka on 19.03.2018.
//
#ifndef TGVOIP_PACKETREASSEMBLER_H
#define TGVOIP_PACKETREASSEMBLER_H
#include <vector>
#include <functional>
#include <unordered_map>
#include "Buffers.h"
namespace tgvoip {
class PacketReassembler{
public:
PacketReassembler();
virtual ~PacketReassembler();
void Reset();
void AddFragment(Buffer pkt, unsigned int fragmentIndex, unsigned int fragmentCount, uint32_t pts, bool keyframe, uint16_t rotation);
void SetCallback(std::function<void(Buffer packet, uint32_t pts, bool keyframe, uint16_t rotation)> callback);
private:
struct Packet{
uint32_t timestamp;
uint32_t partCount;
uint32_t receivedPartCount;
bool isKeyframe;
uint16_t rotation;
Buffer* parts;
TGVOIP_DISALLOW_COPY_AND_ASSIGN(Packet);
Packet(Packet&& other) : timestamp(other.timestamp), partCount(other.partCount), receivedPartCount(other.receivedPartCount), isKeyframe(other.isKeyframe), rotation(other.rotation){
parts=other.parts;
other.parts=NULL;
}
Packet& operator=(Packet&& other){
if(&other!=this){
if(parts)
delete[] parts;
parts=other.parts;
other.parts=NULL;
timestamp=other.timestamp;
partCount=other.partCount;
receivedPartCount=other.receivedPartCount;
isKeyframe=other.isKeyframe;
rotation=other.rotation;
}
return *this;
}
Packet(uint32_t partCount) : partCount(partCount){
parts=new Buffer[partCount];
}
~Packet(){
if(parts)
delete[] parts;
}
void AddFragment(Buffer pkt, uint32_t fragmentIndex);
Buffer Reassemble();
};
std::function<void(Buffer, uint32_t, bool, uint16_t)> callback;
std::vector<Packet> packets;
uint32_t maxTimestamp=0;
};
}
#endif //TGVOIP_PACKETREASSEMBLER_H