📄 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 + -