*evil scientist laughter* ITS ALIVE! ITS ALIVE!
This commit is contained in:
parent
f801beab75
commit
4bdb7eb4e4
3 changed files with 21 additions and 18 deletions
|
@ -121,9 +121,10 @@ bool DDV::Socket::write(const void * buffer, int len){
|
|||
return false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
sofar += r;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}//DDv::Socket::write
|
||||
|
||||
|
@ -151,9 +152,10 @@ bool DDV::Socket::read(void * buffer, int len){
|
|||
return false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
sofar += r;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}//DDV::Socket::read
|
||||
|
||||
|
|
|
@ -143,7 +143,7 @@ void FLV::Tag::tagTime(unsigned int T){
|
|||
/// The buffer length is initialized to 0, and later automatically
|
||||
/// increased if neccesary.
|
||||
FLV::Tag::Tag(){
|
||||
len = 0; buf = 0; data = 0; isKeyframe = false;
|
||||
len = 0; buf = 0; data = 0; isKeyframe = false; done = true; sofar = 0;
|
||||
}//empty constructor
|
||||
|
||||
/// Copy constructor, copies the contents of an existing tag.
|
||||
|
@ -151,6 +151,8 @@ FLV::Tag::Tag(){
|
|||
/// that is being copied, and later automaticallt increased if
|
||||
/// neccesary.
|
||||
FLV::Tag::Tag(const Tag& O){
|
||||
done = true;
|
||||
sofar = 0;
|
||||
buf = O.len;
|
||||
len = buf;
|
||||
if (len > 0){
|
||||
|
@ -166,14 +168,18 @@ FLV::Tag::Tag(const Tag& O){
|
|||
/// This operator checks for self-assignment.
|
||||
FLV::Tag & FLV::Tag::operator= (const FLV::Tag& O){
|
||||
if (this != &O){//no self-assignment
|
||||
if (data != 0){free(data);}
|
||||
buf = O.len;
|
||||
len = buf;
|
||||
len = O.len;
|
||||
if (len > 0){
|
||||
if (!data){
|
||||
data = (char*)malloc(len);
|
||||
memcpy(data, O.data, len);
|
||||
buf = len;
|
||||
}else{
|
||||
data = 0;
|
||||
if (buf < len){
|
||||
data = (char*)realloc(data, len);
|
||||
buf = len;
|
||||
}
|
||||
}
|
||||
memcpy(data, O.data, len);
|
||||
}
|
||||
isKeyframe = O.isKeyframe;
|
||||
}
|
||||
|
@ -211,8 +217,6 @@ bool FLV::Tag::MemReadUntil(char * buffer, unsigned int count, unsigned int & so
|
|||
/// \param P The current position in the data buffer. Will be updated to reflect new position.
|
||||
/// \return True if a whole tag is succesfully read, false otherwise.
|
||||
bool FLV::Tag::MemLoader(char * D, unsigned int S, unsigned int & P){
|
||||
static bool done = true;
|
||||
static unsigned int sofar = 0;
|
||||
if (buf < 15){data = (char*)realloc(data, 15); buf = 15;}
|
||||
if (done){
|
||||
//read a header
|
||||
|
@ -259,15 +263,14 @@ bool FLV::Tag::MemLoader(char * D, unsigned int S, unsigned int & P){
|
|||
/// \return True if count bytes are read succesfully, false otherwise.
|
||||
bool FLV::Tag::SockReadUntil(char * buffer, unsigned int count, unsigned int & sofar, DDV::Socket & sock){
|
||||
if (sofar == count){return true;}
|
||||
int r = sock.read(buffer + sofar,count-sofar);
|
||||
if (r < 0){
|
||||
if (!sock.read(buffer + sofar,count-sofar)){
|
||||
if (errno != EWOULDBLOCK){
|
||||
FLV::Parse_Error = true;
|
||||
Error_Str = "Error reading from socket.";
|
||||
}
|
||||
return false;
|
||||
}
|
||||
sofar += r;
|
||||
sofar += count-sofar;
|
||||
if (sofar == count){return true;}
|
||||
if (sofar > count){
|
||||
FLV::Parse_Error = true;
|
||||
|
@ -282,8 +285,6 @@ bool FLV::Tag::SockReadUntil(char * buffer, unsigned int count, unsigned int & s
|
|||
/// \param sock The socket to read from.
|
||||
/// \return True if a whole tag is succesfully read, false otherwise.
|
||||
bool FLV::Tag::SockLoader(DDV::Socket sock){
|
||||
static bool done = true;
|
||||
static unsigned int sofar = 0;
|
||||
if (buf < 15){data = (char*)realloc(data, 15); buf = 15;}
|
||||
if (done){
|
||||
if (SockReadUntil(data, 11, sofar, sock)){
|
||||
|
@ -354,8 +355,6 @@ bool FLV::Tag::FileLoader(FILE * f){
|
|||
int preflags = fcntl(fileno(f), F_GETFL, 0);
|
||||
int postflags = preflags | O_NONBLOCK;
|
||||
fcntl(fileno(f), F_SETFL, postflags);
|
||||
static bool done = true;
|
||||
static unsigned int sofar = 0;
|
||||
if (buf < 15){data = (char*)realloc(data, 15); buf = 15;}
|
||||
|
||||
if (done){
|
||||
|
|
|
@ -35,6 +35,8 @@ namespace FLV {
|
|||
bool FileLoader(FILE * f);
|
||||
protected:
|
||||
int buf; ///< Maximum length of buffer space.
|
||||
bool done; ///< Body reading done?
|
||||
unsigned int sofar; ///< How many bytes are read sofar?
|
||||
//loader helper functions
|
||||
bool MemReadUntil(char * buffer, unsigned int count, unsigned int & sofar, char * D, unsigned int S, unsigned int & P);
|
||||
bool SockReadUntil(char * buffer, unsigned int count, unsigned int & sofar, DDV::Socket & sock);
|
||||
|
|
Loading…
Add table
Reference in a new issue