#include "config.h"
#include "media.h"
+class ResponsePacket;
+
class MVPClient
{
public:
static int nr_clients;
pthread_t runThread;
int initted;
+ Log* log;
TCP tcp;
Config config;
Config* baseConfig;
#ifndef VOMPSTANDALONE
MVPReceiver* lp;
cRecordings* recordingManager;
- RecPlayer* rp;
+ RecPlayer* recplayer;
#endif
- Log* log;
- int processLogin(UCHAR* buffer, int length);
-#ifndef VOMPSTANDALONE
- int processGetRecordingsList(UCHAR* data, int length);
- int processDeleteRecording(UCHAR* data, int length);
- int processMoveRecording(UCHAR* data, int length);
- int processGetChannelsList(UCHAR* data, int length);
- int processStartStreamingChannel(UCHAR* data, int length);
- int processGetBlock(UCHAR* data, int length);
- int processStopStreaming(UCHAR* data, int length);
- int processStartStreamingRecording(UCHAR* data, int length);
- int processGetChannelSchedule(UCHAR* data, int length);
- int processGetTimers(UCHAR* data, int length);
- int processSetTimer(UCHAR* data, int length);
- int processPositionFromFrameNumber(UCHAR* data, int length);
- int processFrameNumberFromPosition(UCHAR* data, int length);
- int processGetIFrame(UCHAR* data, int length);
- int processGetRecInfo(UCHAR* data, int length);
- int processGetMarks(UCHAR* data, int length);
- int processGetChannelPids(UCHAR* data, int length);
- int processDeleteTimer(UCHAR* buffer, int length);
-
- int processReScanRecording(UCHAR* data, int length); // FIXME obselete
+ int processLogin(UCHAR* buffer, int length, ResponsePacket* rp);
+#ifndef VOMPSTANDALONE
+ int processGetRecordingsList(UCHAR* data, int length, ResponsePacket* rp);
+ int processDeleteRecording(UCHAR* data, int length, ResponsePacket* rp);
+ int processMoveRecording(UCHAR* data, int length, ResponsePacket* rp);
+ int processGetChannelsList(UCHAR* data, int length, ResponsePacket* rp);
+ int processStartStreamingChannel(UCHAR* data, int length, ULONG streamID, ResponsePacket* rp);
+ int processGetBlock(UCHAR* data, int length, ResponsePacket* rp);
+ int processStopStreaming(UCHAR* data, int length, ResponsePacket* rp);
+ int processStartStreamingRecording(UCHAR* data, int length, ResponsePacket* rp);
+ int processGetChannelSchedule(UCHAR* data, int length, ResponsePacket* rp);
+ int processGetTimers(UCHAR* data, int length, ResponsePacket* rp);
+ int processSetTimer(UCHAR* data, int length, ResponsePacket* rp);
+ int processPositionFromFrameNumber(UCHAR* data, int length, ResponsePacket* rp);
+ int processFrameNumberFromPosition(UCHAR* data, int length, ResponsePacket* rp);
+ int processGetIFrame(UCHAR* data, int length, ResponsePacket* rp);
+ int processGetRecInfo(UCHAR* data, int length, ResponsePacket* rp);
+ int processGetMarks(UCHAR* data, int length, ResponsePacket* rp);
+ int processGetChannelPids(UCHAR* data, int length, ResponsePacket* rp);
+ int processDeleteTimer(UCHAR* buffer, int length, ResponsePacket* rp);
+
+ int processReScanRecording(UCHAR* data, int length, ResponsePacket* rp); // FIXME obselete
#endif
- int processConfigSave(UCHAR* data, int length);
- int processConfigLoad(UCHAR* data, int length);
- int processGetMediaList(UCHAR* data, int length);
- int processGetPicture(UCHAR* data, int length);
- int processGetImageBlock(UCHAR* data, int length);
+ int processConfigSave(UCHAR* data, int length, ResponsePacket* rp);
+ int processConfigLoad(UCHAR* data, int length, ResponsePacket* rp);
+ int processGetMediaList(UCHAR* data, int length, ResponsePacket* rp);
+ int processGetPicture(UCHAR* data, int length, ResponsePacket* rp);
+ int processGetImageBlock(UCHAR* data, int length, ResponsePacket* rp);
void incClients();
void decClients();
+
#ifndef VOMPSTANDALONE
cChannel* channelFromNumber(ULONG channelNumber);
void writeResumeData();
logger = Log::getInstance();
vdrActivated = false;
inittedOK = 0;
+ streamID = 0;
+ tcp = NULL;
// logger->log("MVPReceiver", Log::DEBUG, "Channel has VPID %i APID %i", channel->Vpid(), channel->Apid(0));
device->AttachReceiver(this);
}
-int MVPReceiver::init()
+int MVPReceiver::init(TCP* ttcp, ULONG tstreamID)
{
+ tcp = ttcp;
+ streamID = tstreamID;
return inittedOK;
}
MVPReceiver::~MVPReceiver()
{
Detach();
+ threadStop();
}
void MVPReceiver::Activate(bool on)
{
vdrActivated = on;
- if (on) logger->log("MVPReceiver", Log::DEBUG, "VDR active");
- else logger->log("MVPReceiver", Log::DEBUG, "VDR inactive");
+ if (on)
+ {
+ logger->log("MVPReceiver", Log::DEBUG, "VDR active");
+ threadStart();
+ }
+ else
+ {
+ logger->log("MVPReceiver", Log::DEBUG, "VDR inactive");
+ threadStop();
+ }
}
bool MVPReceiver::isVdrActivated()
{
pthread_mutex_lock(&processedRingLock);
processed.put(data, length);
+ if (processed.getContent() > streamChunkSize) threadSignal();
pthread_mutex_unlock(&processedRingLock);
}
-unsigned long MVPReceiver::getBlock(unsigned char* buffer, unsigned long amount)
+void MVPReceiver::threadMethod()
+{
+ UCHAR buffer[streamChunkSize + 12];
+ int amountReceived;
+
+// threadSetKillable(); ??
+
+ while(1)
+ {
+ threadWaitForSignal();
+ threadCheckExit();
+
+ pthread_mutex_lock(&processedRingLock);
+ amountReceived = processed.get(buffer+12, streamChunkSize);
+ pthread_mutex_unlock(&processedRingLock);
+
+ *(ULONG*)&buffer[0] = htonl(2); // stream channel
+ *(ULONG*)&buffer[4] = htonl(streamID);
+ *(ULONG*)&buffer[8] = htonl(amountReceived);
+ tcp->sendPacket(buffer, amountReceived + 12);
+ }
+}
+
+ULONG MVPReceiver::getBlock(unsigned char* buffer, unsigned long amount)
{
+/*
pthread_mutex_lock(&processedRingLock);
int numTries = 0;
unsigned long amountReceived = processed.get(buffer, amount);
pthread_mutex_unlock(&processedRingLock);
return amountReceived;
+ */
+ sleep(10);
+ return 0;
}