1 // ------------------------------------------------
6 // (c) 2002-4 peercast.org
7 // ------------------------------------------------
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
17 // ------------------------------------------------
22 // ----------------------------------
30 // ----------------------------------
63 void init(ChanPacketv &p);
64 void init(TYPE t, const void *, unsigned int , unsigned int );
66 void writeRaw(Stream &);
67 void writePeercast(Stream &);
68 void readPeercast(Stream &);
75 char data[MAX_DATALEN];
80 // ----------------------------------
109 type = ChanPacket::T_UNKNOWN;
118 void init(ChanPacket &p)
120 if (data && (datasize < p.len || datasize > p.len + BSIZE * 4)) {
130 priority = p.priority;
132 datasize = (len & ~(BSIZE - 1)) + BSIZE;
133 data = new char[datasize];
135 memcpy(data, p.data, len);
137 void init(ChanPacketv &p)
144 void writeRaw(Stream &);
145 void writePeercast(Stream &);
146 void readPeercast(Stream &);
150 ChanPacket::TYPE type;
153 unsigned int datasize;
158 // ----------------------------------
159 class ChanPacketBuffer
170 lastPos = firstPos = safePos = 0;
171 readPos = writePos = 0;
174 for (int i = 0; i < MAX_PACKETS; i++) packets[i].reset();
180 int copyFrom(ChanPacketBuffer &,unsigned in);
182 bool writePacket(ChanPacket &,bool = false);
183 void readPacket(ChanPacket &);
184 void readPacketPri(ChanPacket &);
188 int numPending() {return writePos-readPos;}
190 unsigned int getFirstDataPos();
191 unsigned int getLatestPos();
192 unsigned int getOldestPos();
193 unsigned int findOldestPos(unsigned int);
194 bool findPacket(unsigned int,ChanPacket &);
195 unsigned int getStreamPos(unsigned int);
196 unsigned int getStreamPosEnd(unsigned int);
197 unsigned int getLastSync();
199 //ChanPacket packets[MAX_PACKETS];
200 ChanPacketv packets[MAX_PACKETS];
201 volatile unsigned int lastPos,firstPos,safePos;
202 volatile unsigned int readPos,writePos;
204 unsigned int lastWriteTime;
207 unsigned int lastSkipTime;
210 // ----------------------------------
221 ,lastClapped(0) //JP-MOD
224 virtual ~ChannelStream() {}
226 void updateStatus(Channel *);
227 bool getStatus(Channel *,ChanPacket &);
229 virtual void kill() {}
230 virtual bool sendPacket(ChanPacket &,GnuID &) {return false;}
231 virtual void flush(Stream &) {}
232 virtual unsigned int flushUb(Stream &, unsigned int) { return 0; }
233 virtual void readHeader(Stream &,Channel *)=0;
234 virtual int readPacket(Stream &,Channel *)=0;
235 virtual void readEnd(Stream &,Channel *)=0;
237 void readRaw(Stream &,Channel *);
243 unsigned int lastUpdate;
244 unsigned int lastCheckTime;
245 unsigned int lastClapped; //JP-MOD