?? shpprequest.cpp
字號:
/*******************************************
* file name: SHPPRequest.h
* date: 2002.7.26
* 用途: 分解請求包
* 作者: 林游海
*******************************************/
#include "SHPPRequest.h"
#include "SHPPProtocol.h"
CSHPPRequest::CSHPPRequest(CSHPPSocket* pSocket)
: CSHPPResponseStream(pSocket),
m_pShppSocket(pSocket),
m_nPacketLen(0),
m_nServerType(0),
m_nPacketM(1),
m_nResult(0)
{
memset(m_chPhone,0,knTelOffset);
}
CSHPPRequest::~CSHPPRequest()
{
}
KN_Error CSHPPRequest::Parse()
{
LPSCHAR pRequest;
int nReadLen;
// this->Reset();
m_pShppSocket->SetReadBuf();
nReadLen = m_pShppSocket->ReadRtspHeaderLine((char**)&pRequest,10000);
pRequest[nReadLen] = '\0';
//接收的長度
if(nReadLen < knPacketMinSize)
return shppRequestErr;
m_nServerType = CSHPPProtocol::GetServerType(pRequest);
//判斷版本是否錯誤
GetTel(pRequest,m_chPhone);
m_nPacketLen = CSHPPProtocol::GetPacketLen(pRequest);//m_pShppSocket->GetReadTotal();//
// if(m_nPacketLen > (nReadLen - knPacketMinSize))
// return shppRequestErr;
if(memcmp(CSHPPProtocol::GetPacketBuffer(pRequest),CSHPPProtocol::s_pchEOL,CSHPPProtocol::s_unEOLLen) == 0)
return KN_OK;
//判斷服務類型
// if(m_nServerType == shppServerlife)
// return this->SendError(KN_OK);
if(m_nServerType < 0 || m_nServerType >= shppNumMethods)
return shppRequestErr;
return KN_OK;
}
//提取參數
LPSCHAR CSHPPRequest::GetParameter()
{
return CSHPPProtocol::GetPacketBuffer((LPSCHAR)m_pShppSocket->GetReadBuf());
}
//獲取下一個參數
KN_Error CSHPPRequest::GetNextParameter(UInt16 nIdex,char** ppOutParam)
{
UInt16 i;
UInt32 nLen;
LPSCHAR lpParam;
LPSCHAR lpParamI;
LPSCHAR lpNext;
lpNext = (LPSCHAR)ppOutParam;
nLen = m_nPacketLen;
lpParam = GetParameter();
for(i = 0;i < nIdex; i++)
{
lpParamI = (LPSCHAR) memchr(lpParam,'\t',m_nPacketLen);
if(lpParamI == NULL)
{
lpParamI = (LPSCHAR) memchr(lpParam,'\r',nLen);
if(lpParamI)
{
lpParamI = (LPSCHAR) memchr(lpParam,'\r',nLen);
if((lpParamI - lpParam) >= (FIELDBUFFER -2))
{
lpNext[0] = '\0';
return shppParameterErr;
}
memcpy(lpNext,lpParam,lpParamI - lpParam);
lpNext[lpParamI - lpParam] = '\0';
return 0;
lpNext += FIELDBUFFER;
nLen -= lpParamI - lpParam;
}else
lpNext[0] = '\0';
return 0;
}
else
{
if((lpParamI - lpParam) >= (FIELDBUFFER -2))
return shppParameterErr;
memcpy(lpNext,lpParam,lpParamI - lpParam);
lpNext[lpParamI - lpParam] = '\0';
lpNext += FIELDBUFFER;
nLen -= lpParamI - lpParam;
}
lpParam = lpParamI + 1;
}
return 0;
}
KN_Error CSHPPRequest::SendError(KN_Error knError,char* pError)
{
if(knError < 0 || knError > shppNotDefine)
knError = shppNotDefine;
PutResult(knError);
if(pError&&pError[0] !=0)
PutParameter(pError);
else
{
if(knError != KN_OK)
PutParameter(CSHPPProtocol::GetErrorString(knError).m_pchPtr);
}
printf("請求處理出錯:信息為 = %d.%s\n",knError,CSHPPProtocol::GetErrorString(knError).m_pchPtr);
Flush();
return KN_OK;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -