⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 headercollection.cpp

📁 Windows CE 6.0 Server 源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	            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 + -