00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include "stdafx.h"
00033 #include <libOOOgg/OggPacket.h>
00034
00035
00036 OggPacket::OggPacket(void)
00037 : mPacketSize(0)
00038 , mPacketData(NULL)
00039 , mIsContinuation(false)
00040 , mIsTruncated(false)
00041
00042 {
00043
00044 }
00045
00046
00047 OggPacket::OggPacket(unsigned char* inPackData, unsigned long inPacketSize, bool inIsTruncated, bool inIsContinuation)
00048 : mPacketSize(inPacketSize)
00049 , mPacketData(inPackData)
00050 , mIsContinuation(inIsContinuation)
00051 , mIsTruncated(inIsTruncated)
00052
00053 {
00054 }
00055
00056
00057 OggPacket* OggPacket::clone() {
00058
00059 unsigned char* locBuff = new unsigned char[mPacketSize];
00060
00061
00062 memcpy((void*)locBuff, (const void*)mPacketData, mPacketSize);
00063
00064
00065 OggPacket* retPack = new OggPacket(locBuff, mPacketSize, mIsTruncated, mIsContinuation);
00066 return retPack;
00067 }
00068
00069
00070 OggPacket::~OggPacket(void)
00071 {
00072
00073 delete[] mPacketData;
00074
00075
00076 }
00077
00078 string OggPacket::toPackDumpString() {
00079 string retStr = "";
00080
00081
00083
00084
00085
00086
00087
00088
00089
00090 for (unsigned long i = 0; i < mPacketSize; i++) {
00091
00092 if ( (i % HEX_DUMP_LINE_LENGTH == 0) ) {
00093
00094 if ( i != 0 ) {
00095
00096 retStr.append(dumpNCharsToString( &mPacketData[i - HEX_DUMP_LINE_LENGTH], HEX_DUMP_LINE_LENGTH));
00097 }
00098
00099
00100
00101
00102 retStr.append(padField(StringHelper::numToString(i), 8, '0') + ": ");
00103 }
00104
00105
00106
00107 retStr.append(StringHelper::charToHexString(mPacketData[i]) + " ");
00108 }
00109
00110
00111 unsigned long locLeftovers = (mPacketSize % HEX_DUMP_LINE_LENGTH);
00112
00113 locLeftovers = (locLeftovers > 0) ? (locLeftovers)
00114 : (HEX_DUMP_LINE_LENGTH);
00115
00116
00117
00118 if ( mPacketSize > 0 ) {
00119
00120 retStr.append(dumpNCharsToString( &mPacketData[mPacketSize - locLeftovers], locLeftovers ));
00121 }
00122
00123 retStr+= "==============================================================================\n" ;
00124
00125
00126
00127 return retStr;
00128 }
00129
00130 string OggPacket::padField(string inString, unsigned long inPadWidth, unsigned char inPadChar) {
00131
00132 string retStr = "";
00133 retStr.append(inPadWidth - inString.length(), inPadChar);
00134 retStr.append(inString);
00135
00136 return retStr;
00137 }
00138 string OggPacket::dumpNCharsToString(unsigned char* inStartPoint, unsigned long inNumChars) {
00139
00140
00141
00142
00143
00144
00145
00146 unsigned long locPadding = 3 * (HEX_DUMP_LINE_LENGTH - inNumChars) + 4;
00147
00148
00149 string retStr = padField(" ", locPadding, ' ');
00150
00151
00152 for (unsigned long i = 0; i < inNumChars; i++) {
00153
00154
00155 if ( (inStartPoint[i] >= 32) && (inStartPoint[i] <= 126) ) {
00156
00157 retStr += (char)inStartPoint[i];
00158 } else {
00159
00160 retStr += ((char) '.');
00161 }
00162 }
00163 retStr += "\n";
00164
00165 return retStr;
00166
00167 }
00168
00169
00170
00171 unsigned long OggPacket::packetSize() const {
00172 return mPacketSize;
00173 }
00174
00179 unsigned char* OggPacket::packetData() {
00180 return mPacketData;
00181 }
00182 bool OggPacket::isTruncated() const {
00183 return mIsTruncated;
00184 }
00185 bool OggPacket::isContinuation() const {
00186 return mIsContinuation;
00187 }
00188
00189
00190
00191
00192
00193
00194
00195
00196 void OggPacket::setPacketSize(unsigned long inPacketSize) {
00197 mPacketSize = inPacketSize;
00198 }
00199
00205 void OggPacket::setPacketData(unsigned char* inPacketData) {
00206 mPacketData = inPacketData;
00207 }
00208
00209
00210 void OggPacket::merge(const OggPacket* inMorePacket) {
00211
00212 unsigned char* locBuff = new unsigned char[mPacketSize + inMorePacket->mPacketSize];
00213
00214 memcpy((void*)locBuff, (const void*)mPacketData, mPacketSize);
00215
00216 memcpy((void*)(locBuff + mPacketSize), (const void*)inMorePacket->mPacketData, inMorePacket->mPacketSize);
00217
00218 delete[] mPacketData;
00219
00220 mPacketData = locBuff;
00221
00222 mPacketSize += inMorePacket->mPacketSize;
00223
00224
00225
00226
00227 mIsTruncated = inMorePacket->mIsTruncated;
00228
00229
00230 mIsContinuation = false;
00231
00232 }