📄 headercollection.cpp
字号:
SysFreeString((BSTR)pTempNode->pItem->value.pszData);
}
delete pTempNode->pItem;
delete pTempNode;
return S_OK;
}
//otherwise, advance to the next node
else
{
pPrevNode = pTempNode;
pTempNode = pTempNode->pNext;
}
}
return E_FAIL;
}
void
CHeaderCollection::CopyHeader(OBEX_HEADER *pOrig, OBEX_HEADER *pNew)
{
PREFAST_ASSERT(pOrig && pNew);
DEBUGMSG(OBEX_OBEXSTREAM_ZONE,(L"CHeaderCollection::CopyHeader --- op: %x!\n", pOrig->bId));
pNew->bId = pOrig->bId;
if((pOrig->bId & OBEX_TYPE_MASK) == OBEX_TYPE_DWORD)
{
pNew->value.dwData = pOrig->value.dwData;
}
else if((pOrig->bId & OBEX_TYPE_MASK) == OBEX_TYPE_BYTESEQ)
{
pNew->value.ba.pbaData = new BYTE[pOrig->value.ba.dwSize];
if( pNew->value.ba.pbaData )
{
memcpy(pNew->value.ba.pbaData, pOrig->value.ba.pbaData, pOrig->value.ba.dwSize);
pNew->value.ba.dwSize = pOrig->value.ba.dwSize;
}
}
else if((pOrig->bId & OBEX_TYPE_MASK) == OBEX_TYPE_UNICODE)
{
pNew->value.pszData = SysAllocString(pOrig->value.pszData);
}
else if((pOrig->bId & OBEX_TYPE_MASK) == OBEX_TYPE_BYTE)
{
pNew->value.bData = pOrig->value.bData;
}
else
{
SVSUTIL_ASSERT(FALSE);
DEBUGMSG(OBEX_HEADERCOLLECTION_ZONE,(L"CHeaderCollection::CopyHeader --- unknown!\n"));
}
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::RemoveAll()
{
while(pHeaders)
{
CHeaderNode *pTemp = pHeaders;
//clean up memory in the header collection
if((pTemp->pItem->bId & OBEX_TYPE_MASK) == OBEX_TYPE_BYTESEQ)
delete [] pTemp->pItem->value.ba.pbaData;
else if((pTemp->pItem->bId & OBEX_TYPE_MASK) == OBEX_TYPE_UNICODE) {
PREFAST_SUPPRESS(307, "this is BSTR must call SysFreeString");
SysFreeString((BSTR)pTemp->pItem->value.pszData);
}
delete pTemp->pItem;
pHeaders = pHeaders->pNext;
delete pTemp;
}
return S_OK;
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::AddCount( unsigned long ulCount)
{
DEBUGMSG(OBEX_HEADERCOLLECTION_ZONE,(L"CHeaderCollection::AddCount()\n"));
return AddLong(OBEX_HID_COUNT, ulCount);
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::AddName( LPCWSTR pszName)
{
DEBUGMSG(OBEX_HEADERCOLLECTION_ZONE,(L"CHeaderCollection::AddName\n"));
return AddUnicodeString(OBEX_HID_NAME, pszName);
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::AddType( unsigned long ulSize, byte *pData)
{
DEBUGMSG(OBEX_HEADERCOLLECTION_ZONE,(L"CHeaderCollection::AddType()\n"));
return AddByteArray(OBEX_HID_TYPE, ulSize, pData);
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::AddLength( unsigned long ulLength)
{
return AddLong(OBEX_HID_LENGTH, ulLength);
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::AddTimeOld( unsigned long ulTime)
{
return AddLong(OBEX_HID_TIME_COMPAT, ulTime);
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::AddTime(FILETIME * pFiletime)
{
SYSTEMTIME st;
FileTimeToSystemTime( pFiletime, &st );
char time[17]; //16 bytes plus NULL
if (FAILED(StringCchPrintfA(time,sizeof(time),"%4.4d%2.2d%2.2dT%2.2d%2.2d%2.2dZ", st.wYear,st.wMonth,st.wDay, st.wHour,st.wMinute,st.wSecond))) {
SVSUTIL_ASSERT(0);
return E_INVALIDARG;
}
return AddByteArray(OBEX_HID_TIME_ISO, 16, (unsigned char *)time);
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::AddDescription(LPCWSTR pszDescription)
{
DEBUGMSG(OBEX_HEADERCOLLECTION_ZONE,(L"CHeaderCollection::AddDescription\n"));
return AddUnicodeString(OBEX_HID_DESCRIPTION, pszDescription);
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::AddTarget( unsigned long ulSize, byte *pData)
{
DEBUGMSG(OBEX_HEADERCOLLECTION_ZONE,(L"CHeaderCollection::AddTarget()\n"));
return AddByteArray(OBEX_HID_TARGET, ulSize, pData);
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::AddHTTP(unsigned long ulSize, byte *pData)
{
DEBUGMSG(OBEX_HEADERCOLLECTION_ZONE,(L"CHeaderCollection::AddHTTP\n"));
return AddByteArray(OBEX_HID_HTTP, ulSize, pData);
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::AddBody( unsigned long ulSize, byte *pData)
{
DEBUGMSG(OBEX_HEADERCOLLECTION_ZONE,(L"CHeaderCollection::AddBody\n"));
return AddByteArray(OBEX_HID_BODY, ulSize, pData);
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::AddEndOfBody( unsigned long ulSize, byte *pData)
{
DEBUGMSG(OBEX_HEADERCOLLECTION_ZONE,(L"CHeaderCollection::AddEndOfBody\n"));
return AddByteArray(OBEX_HID_BODY_END, ulSize, pData);
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::AddWho(unsigned long ulSize, byte *pData)
{
DEBUGMSG(OBEX_HEADERCOLLECTION_ZONE,(L"CHeaderCollection::AddWho\n"));
return AddByteArray(OBEX_HID_WHO, ulSize, pData);
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::AddConnectionId(unsigned long ulConnectionId)
{
DEBUGMSG(OBEX_HEADERCOLLECTION_ZONE,(L"CHeaderCollection::AddConnectionId\n"));
//this is a SPECIAL header, it *MUST* be first... (which means
// *LAST* in our list...
OBEX_HEADER *pOBHeader = new OBEX_HEADER;
if(NULL == pOBHeader)
return E_OUTOFMEMORY;
pOBHeader->bId = OBEX_HID_CONNECTIONID;
pOBHeader->value.dwData = ulConnectionId;
return InsertHeaderEnd(pOBHeader);
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::AddAppParams(unsigned long ulSize, byte *pData)
{
DEBUGMSG(OBEX_HEADERCOLLECTION_ZONE,(L"CHeaderCollection::AddAppParams\n"));
return AddByteArray(OBEX_HID_APP_PARAMS, ulSize, pData);
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::AddObjectClass(unsigned long ulSize, byte *pData)
{
DEBUGMSG(OBEX_HEADERCOLLECTION_ZONE,(L"CHeaderCollection::AddObjectClass\n"));
return AddByteArray(OBEX_HID_CLASS, ulSize, pData);
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::EnumHeaders(LPHEADERENUM *_pHeaderEnum)
{
DEBUGMSG(OBEX_HEADERCOLLECTION_ZONE,(L"CHeaderCollection::EnumHeaders\n"));
CHeaderEnum *pHeaderEnum = new CHeaderEnum();
if(NULL == pHeaderEnum)
return E_OUTOFMEMORY;
CHeaderNode *pTemp = pHeaders;
while(pTemp)
{
pHeaderEnum->InsertFront(pTemp->pItem);
pTemp = pTemp->pNext;
}
*_pHeaderEnum = pHeaderEnum;
return S_OK;
}
HRESULT STDMETHODCALLTYPE
CHeaderCollection::QueryInterface(REFIID riid, void** ppv)
{
DEBUGMSG(OBEX_HEADERCOLLECTION_ZONE,(L"CHeaderCollection::QueryInterface\n"));
if(!ppv)
return E_POINTER;
if(riid == IID_IUnknown)
*ppv = this;
else if(riid == IID_IHeaderCollection)
*ppv = static_cast<IHeaderCollection*>(this);
else
return *ppv = 0, E_NOINTERFACE;
return AddRef(), S_OK;
}
ULONG STDMETHODCALLTYPE
CHeaderCollection::AddRef()
{
DEBUGMSG(OBEX_ADDREFREL_ZONE,(L"CHeaderCollection::AddRef\n"));
return InterlockedIncrement((LONG *)&_refCount);
}
ULONG STDMETHODCALLTYPE
CHeaderCollection::Release()
{
DEBUGMSG(OBEX_ADDREFREL_ZONE,(L"CHeaderCollection::Release\n"));
SVSUTIL_ASSERT(_refCount != 0xFFFFFFFF);
ULONG ret = InterlockedDecrement((LONG *)&_refCount);
if(!ret)
delete this;
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -