00001
00002
00003
00004 #include "stdafx.h"
00005 #include "OggValidationState.h"
00006 #include <libOOOgg/libOOOgg.h>
00007 #include <fstream>
00008 using namespace std;
00009
00010
00011
00012
00013 #ifdef WIN32
00014 int __cdecl _tmain(int argc, _TCHAR* argv[])
00015 #else
00016 int main(int argc, char * argv[])
00017 #endif
00018 {
00019
00020
00021
00022
00023
00024
00025
00026
00027 if (argc < 2) {
00028 cout<<"Usage : OOOggValidate <filename>"<<endl;
00029 } else {
00030 OggValidationState testValidator;
00031 OggDataBuffer testOggBuff;
00032 testOggBuff.registerVirtualCallback(&testValidator);
00033
00034
00035 const int BUFF_SIZE = 8092;
00036
00037 fstream testFile;
00038 testFile.open(argv[1], ios_base::in | ios_base::binary);
00039 char* locBuff = new char[BUFF_SIZE];
00040 OggDataBuffer::eFeedResult locResult;
00041 while (!testFile.eof()) {
00042 testFile.read(locBuff, BUFF_SIZE);
00043 unsigned long locBytesRead = testFile.gcount();
00044 locResult = testOggBuff.feed((const unsigned char*)locBuff, locBytesRead);
00045 switch(locResult) {
00046 case OggValidationState::OVE_OK:
00047 break;
00048
00049 case OggValidationState::OVE_STRUCTURE_VERSION_NOT_ZERO:
00050 testValidator.error_write(OggValidationState::OVE_STRUCTURE_VERSION_NOT_ZERO, NULL , NULL);
00051 return OggValidationState::OVE_STRUCTURE_VERSION_NOT_ZERO;
00052
00053 case OggValidationState::OVE_MORE_THAN_ONE_BOS:
00054 testValidator.error_write(OggValidationState::OVE_MORE_THAN_ONE_BOS, NULL, NULL);
00055 return OggValidationState::OVE_MORE_THAN_ONE_BOS;
00056
00057 case OggValidationState::OVE_MORE_THAN_ONE_EOS:
00058 testValidator.error_write(OggValidationState::OVE_MORE_THAN_ONE_EOS, NULL, NULL);
00059 return OggValidationState::OVE_MORE_THAN_ONE_EOS;
00060
00061 case OggValidationState::OVE_BOS_PAGE_NOT_AT_START:
00062 testValidator.error_write(OggValidationState::OVE_BOS_PAGE_NOT_AT_START, NULL, NULL);
00063 return OggValidationState::OVE_BOS_PAGE_NOT_AT_START;
00064
00065 case OggValidationState::OVE_EOS_BEFORE_BOS:
00066 testValidator.error_write(OggValidationState::OVE_EOS_BEFORE_BOS, NULL, NULL);
00067 return OggValidationState::OVE_EOS_BEFORE_BOS;
00068 default:
00069 testValidator.error_write(locResult, NULL, NULL);
00070 return locResult;
00071
00072 }
00073 }
00074
00075 if (testValidator.isValid()) {
00076 cout<<"File was valid."<<endl;
00077 } else {
00078 cout<<"File is invalid."<<endl;
00079 }
00080 delete[] locBuff;
00081 }
00082
00083
00084 return 0;
00085 }
00086