summaryrefslogtreecommitdiff
path: root/filter.cpp
diff options
context:
space:
mode:
authorJochen Dolze <vdr@dolze.de>2009-02-13 07:13:42 +0100
committerJochen Dolze <vdr@dolze.de>2009-02-13 07:13:42 +0100
commit0a828794745069f0b978ab001b92b9ef31f5195f (patch)
tree641c9093489df3848578bff89092be211041286a /filter.cpp
parente8c8bbc93ceec475299bb706a12e4fe67dcb0efa (diff)
downloadvdr-plugin-infosatepg-0a828794745069f0b978ab001b92b9ef31f5195f.tar.gz
vdr-plugin-infosatepg-0a828794745069f0b978ab001b92b9ef31f5195f.tar.bz2
Improved status, added missing packet count
Changed channel switching code
Diffstat (limited to 'filter.cpp')
-rw-r--r--filter.cpp28
1 files changed, 20 insertions, 8 deletions
diff --git a/filter.cpp b/filter.cpp
index a12c368..9b85efa 100644
--- a/filter.cpp
+++ b/filter.cpp
@@ -92,6 +92,7 @@ void cFilterInfosatepg::Process(u_short Pid, u_char Tid, const u_char *Data, int
if (!global->CheckMAC(&eth_hdr)) return;
int mac = eth_hdr.h_dest[5];
+ global->ActualMac=mac;
struct iphdr *ip_hdr = (iphdr *) &Data[SECT_IP_HDR_START];
struct udphdr *udp_hdr = (udphdr *) &Data[SECT_UDP_HDR_START];
@@ -120,21 +121,32 @@ void cFilterInfosatepg::Process(u_short Pid, u_char Tid, const u_char *Data, int
if (ntohs(ishdr->technisatId)!=0x0001) return;
+ int pktnr = ntohs(ishdr->pktnr);
+ int pktcnt = ntohs(ishdr->pktcnt);
+
const u_char *infosatdata = &Data[SECT_IS_DATA_START];
int len = Length - SECT_IS_DATA_START-4;
char file[1024];
snprintf(file,sizeof(file),"%s/infosatepg%02i%02i_%03i.dat",global->Directory(),ishdr->day,ishdr->month,
- ntohs(ishdr->pktcnt));
+ pktcnt);
- if (global->Infosatdata[mac].NeverSeen(ishdr->day,ishdr->month,ntohs(ishdr->pktcnt)))
+ if (global->Infosatdata[mac].NeverSeen(ishdr->day,ishdr->month,pktcnt))
{
// never seen such a packet -> init structure
- global->Infosatdata[mac].Init(file,ishdr->day,ishdr->month,ntohs(ishdr->pktcnt));
+ global->Infosatdata[mac].Init(file,ishdr->day,ishdr->month,pktcnt);
}
+ // Check if we missed a packet
+ global->Infosatdata[mac].CheckMissed(pktnr);
+
// Check if we already have this packet
- if (global->Infosatdata[mac].GetBit(ntohs(ishdr->pktnr))) return;
+ if (global->Infosatdata[mac].GetBit(pktnr))
+ {
+ global->Infosatdata[mac].SetLastPkt(pktnr);
+ return;
+ }
+
#ifdef VDRDEBUG
dsyslog("infosatepg: mac=%02x-%02x-%02x-%02x-%02x-%02x",eth_hdr.h_dest[0],eth_hdr.h_dest[1],
@@ -142,7 +154,7 @@ void cFilterInfosatepg::Process(u_short Pid, u_char Tid, const u_char *Data, int
dsyslog("infosatepg: tid=%04i tbl=%04i stbl=%04i day=%02i month=%02i pktnr=%03i pktcnt=%03i len=%i",
ntohs(ishdr->technisatId),ishdr->tableId,ishdr->tablesubId,ishdr->day,
- ishdr->month, ntohs(ishdr->pktnr), ntohs(ishdr->pktcnt), len);
+ ishdr->month, pktnr, pktcnt, len);
dsyslog("infosatepg: save to %s", file);
#endif
@@ -156,7 +168,7 @@ void cFilterInfosatepg::Process(u_short Pid, u_char Tid, const u_char *Data, int
}
return;
}
- off_t offset = (off_t) (ntohs(ishdr->pktnr)*1400);
+ off_t offset = (off_t) (pktnr*1400);
if (lseek(f,offset,SEEK_SET)!=(off_t) -1)
{
#ifdef VDRDEBUG
@@ -165,13 +177,13 @@ void cFilterInfosatepg::Process(u_short Pid, u_char Tid, const u_char *Data, int
if (write(f,infosatdata,len)==len)
{
// set bit in Infosatdata bitfield
- global->Infosatdata[mac].SetBit(ntohs(ishdr->pktnr),true);
+ global->Infosatdata[mac].SetBit(pktnr,true);
}
}
close(f);
#ifdef WRITE_RAW
- sprintf(file,"%s/%03i.dat",dir,ntohs(ishdr->pktnr));
+ sprintf(file,"%s/%03i.dat",dir,pktnr);
f=open(file,O_RDWR|O_CREAT,0664);
if (f==-1) return;
write(f,Data,Length);