*evil scientist laughter* ITS ALIVE! ITS ALIVE!
This commit is contained in:
parent
c8bc0fbafe
commit
66a66b155c
5 changed files with 26 additions and 23 deletions
|
@ -230,16 +230,16 @@ namespace Buffer{
|
|||
users.back().MyBuffer = lastproper;
|
||||
users.back().MyBuffer_num = -1;
|
||||
/// \todo Do this more nicely?
|
||||
if (!incoming.write(FLV::Header, 13)){
|
||||
if (!users.back().S.write(FLV::Header, 13)){
|
||||
users.back().Disconnect("failed to receive the header!");
|
||||
}else{
|
||||
if (!incoming.write(metadata.data, metadata.len)){
|
||||
if (!users.back().S.write(metadata.data, metadata.len)){
|
||||
users.back().Disconnect("failed to receive metadata!");
|
||||
}
|
||||
if (!incoming.write(video_init.data, video_init.len)){
|
||||
if (!users.back().S.write(video_init.data, video_init.len)){
|
||||
users.back().Disconnect("failed to receive video init!");
|
||||
}
|
||||
if (!incoming.write(audio_init.data, audio_init.len)){
|
||||
if (!users.back().S.write(audio_init.data, audio_init.len)){
|
||||
users.back().Disconnect("failed to receive audio init!");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -337,7 +337,7 @@ namespace Connector_HTTP{
|
|||
conn.close();
|
||||
if (inited) ss.close();
|
||||
#if DEBUG >= 1
|
||||
if (FLV::Parse_Error){fprintf(stderr, "FLV Parser Error\n");}
|
||||
if (FLV::Parse_Error){fprintf(stderr, "FLV Parser Error: %s\n", FLV::Error_Str.c_str());}
|
||||
fprintf(stderr, "User %i disconnected.\n", conn.getSocket());
|
||||
if (inited){
|
||||
fprintf(stderr, "Status was: inited\n");
|
||||
|
|
|
@ -121,8 +121,9 @@ bool DDV::Socket::write(const void * buffer, int len){
|
|||
return false;
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
sofar += r;
|
||||
}
|
||||
sofar += r;
|
||||
}
|
||||
return true;
|
||||
}//DDv::Socket::write
|
||||
|
@ -151,8 +152,9 @@ bool DDV::Socket::read(void * buffer, int len){
|
|||
return false;
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
sofar += r;
|
||||
}
|
||||
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){
|
||||
data = (char*)malloc(len);
|
||||
if (!data){
|
||||
data = (char*)malloc(len);
|
||||
buf = len;
|
||||
}else{
|
||||
if (buf < len){
|
||||
data = (char*)realloc(data, len);
|
||||
buf = len;
|
||||
}
|
||||
}
|
||||
memcpy(data, O.data, len);
|
||||
}else{
|
||||
data = 0;
|
||||
}
|
||||
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