diff --git a/IMFHeader.cpp b/IMFHeader.cpp index 10cb9b6..df639b0 100644 --- a/IMFHeader.cpp +++ b/IMFHeader.cpp @@ -7,14 +7,26 @@ namespace coreutils { IMFHeader::IMFHeader(int fd) {} - virtual int parse() { - char ch; - int rc = ::read(fd, &ch, 1); - while(ch != '\r') { - IMFHeaderField *headerField = new IMFHeaderField(ch, fd); - headers.push_back(headerField); + virtual int parse() { + switch(state) { + case NAME: + name << buffer.getTokenInclude("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-0123456789"); + if(buffer.ifNext(":")) + state = FIELD; + else + return 2; + case FIELD: + field << buffer.getTokenInclude("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-;'\"0123456789"); + if(!buffer.ifNext("\r\n")) + if(buffer.eod()) + return 2; + // Right here is where we should check if next line is an extension to the previous line. + + + } - rc = ::read(fd, &ch, 1); + + } } \ No newline at end of file diff --git a/IMFHeader.h b/IMFHeader.h index 8e2bca2..5c4f567 100644 --- a/IMFHeader.h +++ b/IMFHeader.h @@ -3,6 +3,7 @@ # include "StreamReader.h" # include "Parser.h" +# include "MString.h" # include "IMFHeaderField.h" # include @@ -16,7 +17,9 @@ namespace coreutils { virtual int parse(); private: - std::vector headers; + MString name; + MString field; + std::map headers; };