diff options
author | Jochen Dolze <vdr@dolze.de> | 2009-10-06 00:36:26 +0200 |
---|---|---|
committer | Jochen Dolze <vdr@dolze.de> | 2009-10-06 00:36:26 +0200 |
commit | c11caab8aa7f1e296694e2eaa4477d299adcd1e6 (patch) | |
tree | 64adfc0dbab11a45f804489f9f4bddbef720fb0c /tools.cpp | |
parent | c69708374c62615009e2b92783dcea696166470e (diff) | |
download | vdr-plugin-markad-c11caab8aa7f1e296694e2eaa4477d299adcd1e6.tar.gz vdr-plugin-markad-c11caab8aa7f1e296694e2eaa4477d299adcd1e6.tar.bz2 |
Fixed TS packet processing (buffer overflows)
Added packet injection
Diffstat (limited to 'tools.cpp')
-rw-r--r-- | tools.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -26,6 +26,36 @@ cMarkAdPaketQueue::~cMarkAdPaketQueue() if (buffer) free(buffer); } +bool cMarkAdPaketQueue::Inject(uchar *Data, int Size) +{ + if (!buffer) return false; + if (outptr>Size) + { + uchar temp[Size+1]; + memcpy(temp,Data,Size); + outptr-=Size; + memcpy(&buffer[outptr],temp,Size); + pktinfo.pkthdr=-1; + } + else + { + int oldSize=Length(); + uchar tempold[oldSize+1]; + memcpy(tempold,&buffer[outptr],oldSize); + + uchar temp[Size+1]; + memcpy(temp,Data,Size); + + memcpy(buffer,temp,Size); + memcpy(buffer+Size,tempold,oldSize); + + inptr=Size+oldSize; + outptr=0; + pktinfo.pkthdr=-1; + } + return true; +} + bool cMarkAdPaketQueue::Put(uchar *Data, int Size) { if (!buffer) return false; |