本文整理汇总了C++中DateBuffer类的典型用法代码示例。如果您正苦于以下问题:C++ DateBuffer类的具体用法?C++ DateBuffer怎么用?C++ DateBuffer使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了DateBuffer类的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Assert
void HTTPRequest::AppendDateField()
{
Assert(OSThread::GetCurrent() != NULL);
DateBuffer* theDateBuffer = OSThread::GetCurrent()->GetDateBuffer();
theDateBuffer->InexactUpdate(); // Update the date buffer to the current date & time
StrPtrLen theDate(theDateBuffer->GetDateBuffer(), DateBuffer::kDateBufferLen);
// Append date
this->AppendResponseHeader(httpDateHeader, &theDate);
}
示例2: Assert
void RTSPRequestInterface::AppendDateAndExpires()
{
if (!fStandardHeadersWritten)
this->WriteStandardHeaders();
Assert(OSThread::GetCurrent() != NULL);
DateBuffer* theDateBuffer = OSThread::GetCurrent()->GetDateBuffer();
theDateBuffer->InexactUpdate(); // Update the date buffer to the current date & time
StrPtrLen theDate(theDateBuffer->GetDateBuffer(), DateBuffer::kDateBufferLen);
// Append dates, and have this response expire immediately
this->AppendHeader(qtssDateHeader, &theDate);
this->AppendHeader(qtssExpiresHeader, &theDate);
}
示例3: qtss_printf
QTSS_Error HTTPResponseStream::Flush()
{
UInt32 amtInBuffer = this->GetCurrentOffset() - fBytesSentInBuffer;
if (amtInBuffer > 0)
{
if (fPrintMSG)
{
DateBuffer theDate;
DateTranslator::UpdateDateBuffer(&theDate, 0); // get the current GMT date and time
qtss_printf("\n#S->C:\n#time: ms=%" _U32BITARG_ " date=%s\n", (UInt32)OS::StartTimeMilli_Int(), theDate.GetDateBuffer());
StrPtrLen str(this->GetBufPtr() + fBytesSentInBuffer, amtInBuffer);
str.PrintStrEOL();
}
UInt32 theLengthSent = 0;
//(void)fSocket->Send(this->GetBufPtr() + fBytesSentInBuffer, amtInBuffer, &theLengthSent);
QTSS_Error theErr = fSocket->Send(this->GetBufPtr() + fBytesSentInBuffer, amtInBuffer, &theLengthSent);
if ((theErr != QTSS_NoErr) && (theErr != EAGAIN))
{
return theErr;
}
// Refresh the timeout if we were able to send any data
if (theLengthSent > 0)
fTimeoutTask->RefreshTimeout();
if (theLengthSent == amtInBuffer)
{
// We were able to send all the data in the buffer. Great. Flush it.
this->Reset();
fBytesSentInBuffer = 0;
}
else
{
// Not all the data was sent, so report an EAGAIN
fBytesSentInBuffer += theLengthSent;
Assert(fBytesSentInBuffer < this->GetCurrentOffset());
return EAGAIN;
}
}
return QTSS_NoErr;
}
示例4: qtss_printf
/* 先统计buffer中还有多少待送出的数据,再用Socket::Send()向外发送数据.只要能够送出数据,就refresh timeout.假如一次全部送出数据,就flush清空它,否则累计已送出的数据,返回EAGAIN */
QTSS_Error RTSPResponseStream::Flush()
{
/* 得到剩余数据的长度 */
UInt32 amtInBuffer = this->GetCurrentOffset() - fBytesSentInBuffer;
if (amtInBuffer > 0)
{
/*********** 逐行打印出剩余数据的信息,注意打印信息就是从这里出来的 **************/
if (fPrintRTSP)
{
DateBuffer theDate;
DateTranslator::UpdateDateBuffer(&theDate, 0); // get the current GMT date and time
qtss_printf("\n#S->C:\n#time: ms=%lu date=%s\n", (UInt32) OS::StartTimeMilli_Int(), theDate.GetDateBuffer() );
StrPtrLen str(this->GetBufPtr() + fBytesSentInBuffer, amtInBuffer);
str.PrintStrEOL();
}
UInt32 theLengthSent = 0;
/* 使用TCPSocket发送出RTSP Response流缓存中剩余的数据,实际发送数据长为theLengthSent */
(void)fSocket->Send(this->GetBufPtr() + fBytesSentInBuffer, amtInBuffer, &theLengthSent);
// Refresh the timeout if we were able to send any data
/* 只要能发送出数据,就刷新超时 */
if (theLengthSent > 0)
fTimeoutTask->RefreshTimeout();
/* 假如成功发送出所有数据,就重置缓冲区指针和已发送数据长度 */
if (theLengthSent == amtInBuffer)
{
// We were able to send all the data in the buffer. Great. Flush it.
this->Reset();
fBytesSentInBuffer = 0;
}
else
{
// Not all the data was sent, so report an EAGAIN
/* 否则,累计发送出的数据,返回EAGAIN */
fBytesSentInBuffer += theLengthSent;
Assert(fBytesSentInBuffer < this->GetCurrentOffset());
return EAGAIN;
}
}
return QTSS_NoErr;
}
示例5: qtss_printf
QTSS_Error HTTPResponseStream::WriteV(iovec* inVec, UInt32 inNumVectors, UInt32 inTotalLength,
UInt32* outLengthSent, UInt32 inSendType)
{
QTSS_Error theErr = QTSS_NoErr;
UInt32 theLengthSent = 0;
UInt32 amtInBuffer = this->GetCurrentOffset() - fBytesSentInBuffer;
if (amtInBuffer > 0)
{
// There is some data in the output buffer. Make sure to send that
// first, using the empty space in the ioVec.
inVec[0].iov_base = this->GetBufPtr() + fBytesSentInBuffer;
inVec[0].iov_len = amtInBuffer;
theErr = fSocket->GetSocket()->WriteV(inVec, inNumVectors, &theLengthSent);
if (fPrintMsg)
{
DateBuffer theDate;
DateTranslator::UpdateDateBuffer(&theDate, 0); // get the current GMT date and time
qtss_printf("\n#S->C:\n#time: ms=%"_U32BITARG_" date=%s\n", (UInt32) OS::StartTimeMilli_Int(), theDate.GetDateBuffer() );
for (UInt32 i =0; i < inNumVectors; i++)
{ StrPtrLen str((char*)inVec[i].iov_base, (UInt32) inVec[i].iov_len);
str.PrintStrEOL();
}
}
if (theLengthSent >= amtInBuffer)
{
// We were able to send all the data in the buffer. Great. Flush it.
this->Reset();
fBytesSentInBuffer = 0;
// Make theLengthSent reflect the amount of data sent in the ioVec
theLengthSent -= amtInBuffer;
}
else
{
// Uh oh. Not all the data in the buffer was sent. Update the
// fBytesSentInBuffer count, and set theLengthSent to 0.
fBytesSentInBuffer += theLengthSent;
Assert(fBytesSentInBuffer < this->GetCurrentOffset());
theLengthSent = 0;
}
// theLengthSent now represents how much data in the ioVec was sent
}
else if (inNumVectors > 1)
{
theErr = fSocket->GetSocket()->WriteV(&inVec[1], inNumVectors - 1, &theLengthSent);
}
// We are supposed to refresh the timeout if there is a successful write.
if (theErr == QTSS_NoErr)
fTimeoutTask->RefreshTimeout();
// If there was an error, don't alter anything, just bail
if ((theErr != QTSS_NoErr) && (theErr != EAGAIN))
return theErr;
// theLengthSent at this point is the amount of data passed into
// this function that was sent.
if (outLengthSent != NULL)
*outLengthSent = theLengthSent;
// Update the StringFormatter fBytesWritten variable... this data
// wasn't buffered in the output buffer at any time, so if we
// don't do this, this amount would get lost
fBytesWritten += theLengthSent;
// All of the data was sent... whew!
if (theLengthSent == inTotalLength)
return QTSS_NoErr;
// We need to determine now whether to copy the remaining unsent
// iovec data into the buffer. This is determined based on
// the inSendType parameter passed in.
if (inSendType == kDontBuffer)
return theErr;
if ((inSendType == kAllOrNothing) && (theLengthSent == 0))
return EAGAIN;
// Some or none of the iovec data was sent. Copy the remainder into the output
// buffer.
// The caller should consider this data sent.
if (outLengthSent != NULL)
*outLengthSent = inTotalLength;
UInt32 curVec = 1;
while (theLengthSent >= inVec[curVec].iov_len)
{
// Skip over the vectors that were in fact sent.
Assert(curVec < inNumVectors);
theLengthSent -= inVec[curVec].iov_len;
curVec++;
}
while (curVec < inNumVectors)
//.........这里部分代码省略.........
示例6: while
QTSS_Error HTTPResponseStream::Flush()
{
QTSS_Error theErr = QTSS_NoErr;
while(true)
{
// 获取缓冲区中需要发送的数据长度
UInt32 amtInBuffer = this->GetCurrentOffset() - fBytesSentInBuffer;
// 多次发送缓冲区中的数据
if (amtInBuffer > QTSS_MAX_REQUEST_BUFFER_SIZE)
amtInBuffer = QTSS_MAX_REQUEST_BUFFER_SIZE;
printf("this->GetCurrentOffset(%d) - fBytesSentInBuffer(%d) = amtInBuffer(%d)\n", this->GetCurrentOffset(), fBytesSentInBuffer, amtInBuffer);
if (amtInBuffer > 0)
{
if (fPrintMsg)
{
DateBuffer theDate;
DateTranslator::UpdateDateBuffer(&theDate, 0); // get the current GMT date and time
qtss_printf("\n#S->C:\n#time: ms=%"_U32BITARG_" date=%s\n", (UInt32) OS::StartTimeMilli_Int(), theDate.GetDateBuffer() );
StrPtrLen str(this->GetBufPtr() + fBytesSentInBuffer, amtInBuffer);
str.PrintStrEOL();
}
//UInt32 theLengthSent = 0;
//(void)fSocket->GetSocket()->Send(this->GetBufPtr() + fBytesSentInBuffer, amtInBuffer, &theLengthSent);
theErr = fSocket->Send(this->GetBufPtr() + fBytesSentInBuffer, amtInBuffer);
//// Refresh the timeout if we were able to send any data
//if (theLengthSent > 0)
// fTimeoutTask->RefreshTimeout();
// 单次发送成功,继续发送
if (theErr == OS_NoErr)
{
fBytesSentInBuffer += amtInBuffer;
Assert(fBytesSentInBuffer < this->GetCurrentOffset());
}
else
return theErr;
if(fBytesSentInBuffer < this->GetCurrentOffset())
{
continue;
}
else
{
// We were able to send all the data in the buffer. Great. Flush it.
this->Reset();
fBytesSentInBuffer = 0;
break;
}
}
else
{
// We were able to send all the data in the buffer. Great. Flush it.
this->Reset();
fBytesSentInBuffer = 0;
break;
}
}
return theErr;
}
示例7: while
//.........这里部分代码省略.........
// be ignored.
if (decodeErr == QTSS_NoErr)
Assert(fEncodedBytesRemaining < 4);
}
else
fRequest.Len += newOffset;
Assert(fRequest.Len < kRequestBufferSizeInBytes);
fCurOffset += newOffset;
}
Assert(newOffset > 0);
// See if this is an interleaved data packet
if ('$' == *(fRequest.Ptr))
{
if (fRequest.Len < 4)
continue;
UInt16* dataLenP = (UInt16*)fRequest.Ptr;
UInt32 interleavedPacketLen = ntohs(dataLenP[1]) + 4;
if (interleavedPacketLen > fRequest.Len)
continue;
//put back any data that is not part of the header
fRetreatBytes += fRequest.Len - interleavedPacketLen;
fRequest.Len = interleavedPacketLen;
fRequestPtr = &fRequest;
fIsDataPacket = true;
return QTSS_RequestArrived;
}
fIsDataPacket = false;
if (fPrintRTSP)
{
DateBuffer theDate;
DateTranslator::UpdateDateBuffer(&theDate, 0); // get the current GMT date and time
qtss_printf("\n\n#C->S:\n#time: ms=%lu date=%s\n", (UInt32) OS::StartTimeMilli_Int(), theDate.GetDateBuffer());
if (fSocket != NULL)
{
UInt16 serverPort = fSocket->GetLocalPort();
UInt16 clientPort = fSocket->GetRemotePort();
StrPtrLen* theLocalAddrStr = fSocket->GetLocalAddrStr();
StrPtrLen* theRemoteAddrStr = fSocket->GetRemoteAddrStr();
if (theLocalAddrStr != NULL)
{ qtss_printf("#server: ip="); theLocalAddrStr->PrintStr(); qtss_printf(" port=%u\n" , serverPort );
}
else
{ qtss_printf("#server: ip=NULL port=%u\n" , serverPort );
}
if (theRemoteAddrStr != NULL)
{ qtss_printf("#client: ip="); theRemoteAddrStr->PrintStr(); qtss_printf(" port=%u\n" , clientPort );
}
else
{ qtss_printf("#client: ip=NULL port=%u\n" , clientPort );
}
}
StrPtrLen str(fRequest);
str.PrintStrEOL("\n\r\n", "\n");// print the request but stop on \n\r\n and add a \n afterwards.
}
//use a StringParser object to search for a double EOL, which signifies the end of
//the header.
Bool16 weAreDone = false;
示例8: sizeof
QTSS_Error QTSSModuleUtils::SendHTTPErrorResponse( QTSS_RTSPRequestObject inRequest,
QTSS_SessionStatusCode inStatusCode,
Bool16 inKillSession,
char *errorMessage)
{
static Bool16 sFalse = false;
//set status code for access log
(void)QTSS_SetValue(inRequest, qtssRTSPReqStatusCode, 0, &inStatusCode, sizeof(inStatusCode));
if (inKillSession) // tell the server to end the session
(void)QTSS_SetValue(inRequest, qtssRTSPReqRespKeepAlive, 0, &sFalse, sizeof(sFalse));
ResizeableStringFormatter theErrorMessage(NULL, 0); //allocates and deletes memory
ResizeableStringFormatter bodyMessage(NULL,0); //allocates and deletes memory
char messageLineBuffer[64]; // used for each line
static const int maxMessageBufferChars = sizeof(messageLineBuffer) -1;
messageLineBuffer[maxMessageBufferChars] = 0; // guarantee termination
// ToDo: put in a more meaningful http error message for each error. Not required by spec.
// ToDo: maybe use the HTTP protcol class static error strings.
char* errorMsg = "error";
DateBuffer theDate;
DateTranslator::UpdateDateBuffer(&theDate, 0); // get the current GMT date and time
UInt32 realCode = 0;
UInt32 len = sizeof(realCode);
(void) QTSS_GetValue(inRequest, qtssRTSPReqRealStatusCode, 0, (void*)&realCode,&len);
char serverHeaderBuffer[64]; // the qtss Server: header field
len = sizeof(serverHeaderBuffer) -1; // leave room for terminator
(void) QTSS_GetValue(sServer, qtssSvrRTSPServerHeader, 0, (void*)serverHeaderBuffer,&len);
serverHeaderBuffer[len] = 0; // terminate.
qtss_snprintf(messageLineBuffer,maxMessageBufferChars, "HTTP/1.1 %"_U32BITARG_" %s",realCode, errorMsg);
theErrorMessage.Put(messageLineBuffer,::strlen(messageLineBuffer));
theErrorMessage.PutEOL();
theErrorMessage.Put(serverHeaderBuffer,::strlen(serverHeaderBuffer));
theErrorMessage.PutEOL();
qtss_snprintf(messageLineBuffer,maxMessageBufferChars, "Date: %s",theDate.GetDateBuffer());
theErrorMessage.Put(messageLineBuffer,::strlen(messageLineBuffer));
theErrorMessage.PutEOL();
Bool16 addBody = (errorMessage != NULL && ::strlen(errorMessage) != 0); // body error message so add body headers
if (addBody) // body error message so add body headers
{
// first create the html body
static const StrPtrLen htmlBodyStart("<html><body>\n");
bodyMessage.Put(htmlBodyStart.Ptr,htmlBodyStart.Len);
//<h1>errorMessage</h1>\n
static const StrPtrLen hStart("<h1>");
bodyMessage.Put(hStart.Ptr,hStart.Len);
bodyMessage.Put(errorMessage,::strlen(errorMessage));
static const StrPtrLen hTerm("</h1>\n");
bodyMessage.Put(hTerm.Ptr,hTerm.Len);
static const StrPtrLen htmlBodyTerm("</body></html>\n");
bodyMessage.Put(htmlBodyTerm.Ptr,htmlBodyTerm.Len);
// write body headers
static const StrPtrLen bodyHeaderType("Content-Type: text/html");
theErrorMessage.Put(bodyHeaderType.Ptr,bodyHeaderType.Len);
theErrorMessage.PutEOL();
qtss_snprintf(messageLineBuffer,maxMessageBufferChars, "Content-Length: %"_U32BITARG_"", bodyMessage.GetBytesWritten());
theErrorMessage.Put(messageLineBuffer,::strlen(messageLineBuffer));
theErrorMessage.PutEOL();
}
static const StrPtrLen headerClose("Connection: close");
theErrorMessage.Put(headerClose.Ptr,headerClose.Len);
theErrorMessage.PutEOL();
theErrorMessage.PutEOL(); // terminate headers with empty line
if (addBody) // add html body
{
theErrorMessage.Put(bodyMessage.GetBufPtr(),bodyMessage.GetBytesWritten());
}
//
// Now that we've formatted the message into the temporary buffer,
// write it out to the request stream and the Client Session object
(void)QTSS_Write(inRequest, theErrorMessage.GetBufPtr(), theErrorMessage.GetBytesWritten(), NULL, 0);
(void)QTSS_SetValue(inRequest, qtssRTSPReqRespMsg, 0, theErrorMessage.GetBufPtr(), theErrorMessage.GetBytesWritten());
return QTSS_RequestFailed;
}
示例9: while
//.........这里部分代码省略.........
continue;
UInt16* dataLenP = (UInt16*)fRequest.Ptr;
/* 获取混叠包长度 */
UInt32 interleavedPacketLen = ntohs(dataLenP[1]) + 4;
if (interleavedPacketLen > fRequest.Len)
continue;
//put back any data that is not part of the header
/* 将不是header部分的数据放回失控数据处 */
fRetreatBytes += fRequest.Len - interleavedPacketLen;
fRequest.Len = interleavedPacketLen;
fRequestPtr = &fRequest;
fIsDataPacket = true;
return QTSS_RequestArrived;
}
fIsDataPacket = false;
/* 当打印RTSP info时,打印出如下信息:
(空两行)
#C->S;
#time: ms=*** data=Mon,29 July 2009 15:17:17 GTM
#server: ip=172.16.32.37 port=***
或#server: ip=NULL port=***
#client: ip=172.16.39.30 port=***
或#client: ip=NULL port=***
*********fRequest info***************
*/
if (fPrintRTSP)
{
/* 类似RTSPResponseStream::WriteV() */
/* 得到当前的GTM时间,格式为"Mon, 04 Nov 1996 21:42:17 GMT" */
DateBuffer theDate;
DateTranslator::UpdateDateBuffer(&theDate, 0); // get the current GMT date and time
/* OS::StartTimeMilli_Int()表示服务器运行多长时间? */
qtss_printf("\n\n#C->S:\n#time: ms=%lu date=%s\n", (UInt32) OS::StartTimeMilli_Int(), theDate.GetDateBuffer());
/* 假如有TCPSocket存在,就获取并打印其相关信息 */
if (fSocket != NULL)
{
UInt16 serverPort = fSocket->GetLocalPort();
UInt16 clientPort = fSocket->GetRemotePort();
StrPtrLen* theLocalAddrStr = fSocket->GetLocalAddrStr();
StrPtrLen* theRemoteAddrStr = fSocket->GetRemoteAddrStr();
if (theLocalAddrStr != NULL)
{ qtss_printf("#server: ip="); theLocalAddrStr->PrintStr(); qtss_printf(" port=%u\n" , serverPort );
}
else
{ qtss_printf("#server: ip=NULL port=%u\n" , serverPort );
}
if (theRemoteAddrStr != NULL)
{ qtss_printf("#client: ip="); theRemoteAddrStr->PrintStr(); qtss_printf(" port=%u\n" , clientPort );
}
else
{ qtss_printf("#client: ip=NULL port=%u\n" , clientPort );
}
}
/* 打印fRequest字符串 */
StrPtrLen str(fRequest);
str.PrintStrEOL("\n\r\n", "\n");// print the request but stop on \n\r\n and add a \n afterwards.
}