Exemple #1
3
BOOL HttpRequest(HTTPREQ* req, const wchar_t* url, const wchar_t* header, DWORD header_length, const char* body, DWORD body_length)
{
	BOOL ret = FALSE;
	req->internet = WinHttpOpen(NULL, NULL, NULL, NULL, NULL);
	if (req->internet != NULL)
	{
		URL_COMPONENTS urlinfo = {0};
		urlinfo.dwStructSize = sizeof(URL_COMPONENTS);
		urlinfo.dwSchemeLength    = (DWORD)-1;
		urlinfo.dwUserNameLength  = (DWORD)-1;
		urlinfo.dwHostNameLength  = (DWORD)-1;
		urlinfo.dwUrlPathLength   = (DWORD)-1;
		urlinfo.dwExtraInfoLength = (DWORD)-1;
		urlinfo.dwPasswordLength  = (DWORD)-1;
		if (WinHttpCrackUrl(url, wcslen(url), 0, &urlinfo))
		{
			if (WinHttpSetTimeouts(req->internet, req->resolveTimeout, req->connectTimeout, req->sendTimeout, req->receiveTimeout))
			{
				TCHAR* host = new TCHAR[urlinfo.dwHostNameLength + 1];
				wmemset(host, 0, urlinfo.dwHostNameLength + 1);
				StrCpyN(host, urlinfo.lpszHostName, urlinfo.dwHostNameLength + 1);
				req->connect = WinHttpConnect(req->internet, host, urlinfo.nPort, 0);
				if (req->connect != NULL)
				{
					if (body == NULL || body_length == 0)
						req->request = WinHttpOpenRequest(req->connect, L"GET", urlinfo.lpszUrlPath, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
					else
						req->request = WinHttpOpenRequest(req->connect, L"POST", urlinfo.lpszUrlPath, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);

					if (req->request != NULL)
					{						
						if (WinHttpSendRequest(req->request, header, header_length, (void*)body, body_length, body_length, 0) && WinHttpReceiveResponse(req->request, 0))
						{
							TCHAR status[16] = {0};
							DWORD size = sizeof(status);
							if (WinHttpQueryHeaders(req->request, WINHTTP_QUERY_STATUS_CODE, NULL, status, &size, 0))
							{
								if (StrCmp(status, L"200") == 0)
								{
									char buffer[4096] = {0};
									DWORD length = 0;
									
									while (TRUE)
									{
										if (WinHttpReadData(req->request, buffer, sizeof(buffer), &length) && length > 0)
										{
											AppendBuffer(&req->buffer, req->dataLength, req->bufferLength, buffer, length);
											length = 0;
										}
										else
											break;
									}				

									ret = TRUE;
								}
							}
						}
					}
				}

				SAFE_DELETE_ARRAY(host);
			}
		}
	}
	
	return ret;
}
size_t XMLClient::bytesToRead(const error_code& error, size_t bytes_read) {
    size_t result = bytes_read;
    _timer->cancel();

    // Connection closed cleanly by peer
    // asio errors http://www.boost.org/doc/libs/1_44_0/doc/html/boost_asio/reference/error__basic_errors.html 
    if (error == boost::asio::error::eof || boost::asio::error::connection_reset == error) {
        Disconnect();
        return 0;
    } else if (error == boost::asio::error::operation_aborted) {
        Globals::ErrorMessage(" In bytesToRead Timer expired error \n");
    } else if (error) {
        // This error stops asynchronous reads
        std::stringstream s;
        s << "unknown bytesToRead error = (" << error << ") " << error.message() << std::endl;
        Globals::ErrorMessage(s.str());
        return 0;
    }

    if (bytes_read > 0) {
        AppendBuffer(std::string(data_, data_ + bytes_read));
        if (_endtag == NonsenseTag()) {
            _endtag = FindLeadingElement(_current);
            if (_endtag.empty()) _endtag = NonsenseTag();
        }
        //BufferHandler(std::string(data_, data_+bytes_read), "</CRCLStatus>") ;
        BufferHandler(_endtag);
    }
    StartAyncRead();
    return result;
}
void* CMirrorBuffer::GetBuffer(uint32 uSlot)
{
	size_t stIndex = uSlot * m_uDataSize;
	size_t stSize = m_pVecBuffer->size();

	Ast(stIndex <= stSize);

	//如果buffer已经用完,那我们加入一块新数据
	if(stIndex == stSize)
	{
		AppendBuffer(m_uDataSize);
	}

	return &(m_pVecBuffer->at(stIndex));
}
HRESULT CDXVADecoderMpeg2::DecodeFrame (BYTE* pDataIn, UINT nSize, REFERENCE_TIME rtStart, REFERENCE_TIME rtStop)
{
	TRACE_MPEG2 ("CDXVADecoderMpeg2::DecodeFrame() : %d\n", nSize);

	AppendBuffer (pDataIn, nSize, rtStart, rtStop);
	HRESULT hr = S_OK;

	while (FindPicture (max (m_nMPEG2BufferPos-int(nSize)-4, 0), 0x00)) {
		if (m_MPEG2BufferTime[0].nBuffPos != INT_MIN && m_MPEG2BufferTime[0].nBuffPos < m_nMPEG2PicEnd) {
			rtStart = m_MPEG2BufferTime[0].rtStart;
			rtStop  = m_MPEG2BufferTime[0].rtStop;
		} else {
			rtStart = rtStop = INVALID_TIME;
		}

		hr = DecodeFrameInternal (m_pMPEG2Buffer, m_nMPEG2PicEnd, rtStart, rtStop);
		ShrinkBuffer();
	}

	return hr;
}
Exemple #5
0
wchar_t* GetMP3Tag(const id3_tag* tag, const char* name)
{
	wchar_t* content = NULL;
	id3_frame* frame = id3_tag_findframe(tag, name, 0);
	if (frame != NULL)
	{
		id3_field* field = id3_frame_field(frame, 0);
		id3_field_textencoding encoding = id3_field_gettextencoding(field);
		field = id3_frame_field(frame, 1);

		switch (id3_field_type(field))
		{
		case ID3_FIELD_TYPE_STRING:
			content = GetMP3Text(encoding, field, id3_field_getstring(field));
			break;

		case ID3_FIELD_TYPE_STRINGFULL:						
			content = GetMP3Text(encoding, field, id3_field_getfullstring(field));
			break;

		case ID3_FIELD_TYPE_STRINGLIST:
			{				
				DWORD dataLength = 0, bufferLength = 0;
				unsigned int n = id3_field_getnstrings(field);
				for (unsigned int i = 0; i < n; i++)
				{
					wchar_t* p = GetMP3Text(encoding, field, id3_field_getstrings(field, i));
					if (p == NULL)
						continue;

					AppendBuffer((char**)&content, dataLength, bufferLength, (const char*)p, wcslen(p) * 2 + 1);
					SAFE_DELETE_ARRAY(p);
				}
			}
			break;
		}
	}

	return content;
}
void CMirrorBuffer::Swap(CMirrorBuffer* pOtBuf)
{
	size_t stMySize = m_pVecBuffer->size();
	size_t stOtSize = pOtBuf->m_pVecBuffer->size();

	size_t stMyIDSize = m_pIDStack->GetIDSize();
	size_t stOtIDSize = pOtBuf->m_pIDStack->GetIDSize();

	if(stMySize > stOtSize)
	{
		pOtBuf->AppendBuffer(stMySize - stOtSize);
		Ast(stMyIDSize > stOtIDSize);
		pOtBuf->m_pIDStack->ExpandIdleID(uint32(stMyIDSize - 1) );
	}
	else if(stMySize < stOtSize)
	{
		AppendBuffer(stOtSize - stMySize);
		Ast(stMyIDSize < stOtIDSize);
		m_pIDStack->ExpandIdleID(stOtIDSize - 1);
	}

	swap(m_pVecBuffer, pOtBuf->m_pVecBuffer);
	swap(m_pIDStack, pOtBuf->m_pIDStack);
	swap(m_uVersion, pOtBuf->m_uVersion);

	/*
	vector<char>* pBuf = m_pVecBuffer;
	m_pVecBuffer = pOtBuf->m_pVecBuffer;
	pOtBuf->m_pVecBuffer = pBuf;

	TIDStack<uint32>* pIDStack = m_pIDStack;
	m_pIDStack = pOtBuf->m_pIDStack;
	pOtBuf->m_pIDStack = pIDStack;

	uint64 uVersion = m_uVersion;
	m_uVersion = pOtBuf->m_uVersion;
	pOtBuf->m_uVersion = uVersion;
	*/
}
Exemple #7
0
/**
 * \pre  fp Points to an open infile in which a multi-line dbString has been
 *          reached
 */
static char *dbReadString(FILE *fp)
{
	char tempLine[125], *p = NULL, *y;
	int fin = 0, firstLn = 0;

	while(!fin && sfgets(tempLine, 124, db.is)) {
		y = strrchr(tempLine, '~');
		assert(y != NULL);
		*y = '\0';

		if (y[1] == '$')
			fin = 1;

		strcat(tempLine, "\n");
		if (*tempLine != '\n')
			AppendBuffer(&p, tempLine);
		firstLn = 0;
		*y = '~';
	}
	if (p && *p)
		p[strlen(p) - 1] = '\0';

	return p;
}
Exemple #8
0
// 添加二元运算
const CQString &CQString::operator += ( const CQString &ss )
{
	AppendBuffer( ss._szBuffer, ss._nLength ) ;
	return ( *this ) ;
}
Exemple #9
0
// 添加二元运算
const CQString &CQString::operator += ( const char *sz )
{
	AppendBuffer( sz ) ;
	return ( *this ) ;
}
Exemple #10
0
bool LocateConverter::GeneratePatch(const wchar_t *qqwry1_path, const wchar_t *qqwry2_path)
{
    QQWryReader QQWry1(qqwry1_path);
    QQWryReader QQWry2(qqwry2_path);

    if ( !QQWry1.IsAvailable() ) return false;
    if ( !QQWry2.IsAvailable() ) return false;

    if(QQWry1.GetInfo()->time==QQWry2.GetInfo()->time) return false;

    // 根据时间交换,低版本在前
    QQWryReader *qqwry1 = &QQWry1;
    QQWryReader *qqwry2 = &QQWry2;
    if(QQWry1.GetInfo()->time>QQWry2.GetInfo()->time)
    {
        QQWryReader *temp = qqwry1;
        qqwry1 = qqwry2;
        qqwry2 = temp;
    }

    uint32_t i = 0;
    uint32_t j = 0;

    uint8_t flag = 0;

    uint32_t n = 0;
    uint32_t m = 0;
    //int x = 1;

    StringTable string_table1;
    StringTable string_table2;
    Buffer RecordBuffer;         // 记录
    Buffer ResultBuffer;         // 最终结果

    while(i<qqwry1->GetInfo()->count && j<qqwry2->GetInfo()->count)
    {
        LocateItem *Item1 = qqwry1->GetItem(i + 1);
        LocateItem *Item2 = qqwry2->GetItem(j + 1);

        if( Item1->begin_ip != Item2->begin_ip )
        {
            if( Item1->begin_ip < Item2->begin_ip ) i++;
            else j++;

            flag = 1;
            continue;
        }
        if( Item1->end_ip != Item2->end_ip )
        {
            if( Item1->end_ip < Item2->end_ip ) i++;
            else j++;

            flag = 1;
            continue;
        }

        if(flag==1)
        {
            flag = 0;

            //printf("%d-%d,%d-%d\n",n+1,i,m+1,j);
            for(uint32_t k=0; k<i-n; k++)
            {
                DIFFITEM record;
                record.line = n + 1 + k;
                record.method = REMOVE;
                record.begin_ip = 0;
                record.table1 = 0;
                record.table2 = 0;

                AppendBuffer(RecordBuffer, (uint8_t*)&record, sizeof(record));
                //printf("%d: 删除 %d\n",x++,n+1+k);
            }
            for(uint32_t l=0; l<j-m; l++)
            {
                Item2 = qqwry2->GetItem(m + l + 1);

                DIFFITEM record;
                record.line = i;
                record.method = INSERT;
                record.begin_ip = Item2->begin_ip;
                record.table1 = string_table1.Append(Item2->region);
                record.table2 = string_table2.Append(Item2->address);

                AppendBuffer(RecordBuffer, (uint8_t*)&record, sizeof(record));
                //printf("%d: 添加 (%d) -> %d\n", x++, m+1+k, i);
            }
        }

        Item1 = qqwry1->GetItem(i + 1);
        Item2 = qqwry2->GetItem(j + 1);
        if( strcmp(Item1->region, Item2->region) || strcmp(Item1->address, Item2->address) )
        {
            DIFFITEM record;
            record.line = i + 1;
            record.method = MODIFY;
            record.begin_ip = 0;
            record.table1 = string_table1.Append(Item2->region);
            record.table2 = string_table2.Append(Item2->address);

            AppendBuffer(RecordBuffer, (uint8_t*)&record, sizeof(record));
            //printf("%d: 修改 (%d) -> %d\n", x++, j+1, i+1);
        }

        i++;
        j++;
        n = i;
        m = j;
    }

    //合并数据区
    Buffer *string_table1_buffer = string_table1;
    Buffer *string_table2_buffer = string_table2;

    std::copy(RecordBuffer.begin(), RecordBuffer.end(), std::back_inserter(ResultBuffer));
    std::copy(string_table1_buffer->begin(), string_table1_buffer->end(), std::back_inserter(ResultBuffer));
    std::copy(string_table2_buffer->begin(), string_table2_buffer->end(), std::back_inserter(ResultBuffer));

    //生成文件头
    DIFFHEADER header;
    header.magic = DIFF_MAGIC;
    header.total1 = qqwry1->GetInfo()->count;
    header.total2 = qqwry2->GetInfo()->count;
    header.time1 = qqwry1->GetInfo()->time;
    header.time2 = qqwry2->GetInfo()->time;
    header.table1 = sizeof(header) + RecordBuffer.size();;
    header.table2 = header.table1 + string_table1_buffer->size();
    header.size = ResultBuffer.size();
    header.crc32 = CRC32_MEM((uint8_t*)&header, sizeof(header) - 4);

    //准备压缩
    uint32_t lzma_buffer_len = ResultBuffer.size();
    uint8_t *lzma_buffer = (uint8_t *)malloc(lzma_buffer_len);

    size_t prop_size = LZMA_PROPS_SIZE;
    BYTE outProps[LZMA_PROPS_SIZE];
    LzmaCompress(lzma_buffer, &lzma_buffer_len, &ResultBuffer[0], ResultBuffer.size(), NULL, outProps, &prop_size, 5, 1<<27, 8, 0, 2, 64, 4);

    //保存文件
    char temp[1024];
    sprintf(temp,"%d-%d.dif",qqwry1->GetInfo()->time,qqwry2->GetInfo()->time);
    FILE * out = fopen(temp, "wb");
    fwrite(&header, 1, sizeof(header), out);
    fwrite(outProps, 1, sizeof(outProps), out);
    fwrite(lzma_buffer, 1, lzma_buffer_len, out);
    //fwrite(&ResultBuffer[0], 1, ResultBuffer.size(), out);
    fclose(out);

    free(lzma_buffer);
    return true;
}
Exemple #11
0
 void Append(PLOCATE record)
 {
     AppendBuffer( (uint8_t*)record, sizeof(LOCATE));
 }
Exemple #12
0
bool LocateConverter::LocateToQQWry(const wchar_t *locate, const wchar_t *qqwry)
{
    LocateReader loc(locate);
    if ( !loc.IsAvailable() ) return false;

    uint32_t idx_first = 0;
    uint32_t idx_last = 0;

    uint32_t offset = 8;

    Buffer RecordBuffer;
    Buffer IndexBuffer;

    map <string, StrResource> strings;

    for(uint32_t i=0; i<loc.GetInfo()->count; i++)
    {
        LocateItem *item = loc.GetItem(i + 1);

        AppendBuffer(RecordBuffer, (uint8_t*)&item->end_ip, sizeof(item->end_ip));
        offset += 4;

        if( strings.count(item->region)!=0 )
        {
            if( strings.find(item->region)->second.addresss.count(item->address)!=0 )
            {
                unsigned char redirect = 0x01;
                AppendBuffer(RecordBuffer, (uint8_t*)&redirect, sizeof(redirect));
                AppendBuffer(RecordBuffer, (uint8_t*)&strings.find(item->region)->second.addresss.find(item->address)->second, 3);
                //printf("%s %s ",item->region,item->address);
                //printf("%d", strings.find(item->region)->second.addresss.find(item->address)->second);
                //getchar();
            }
            else
            {
                //getchar();
                strings.find(item->region)->second.addresss[item->address] = offset;

                unsigned char redirect = 0x02;
                AppendBuffer(RecordBuffer, (uint8_t*)&redirect, sizeof(redirect));
                AppendBuffer(RecordBuffer, (uint8_t*)&strings.find(item->region)->second.offset, 3);

                if( strlen(item->address)>3 && strings.count(item->address)!=0 )
                {
                    unsigned char redirect = 0x02;
                    AppendBuffer(RecordBuffer, (uint8_t*)&redirect, sizeof(redirect));
                    AppendBuffer(RecordBuffer, (uint8_t*)&strings.find(item->address)->second.offset, 3);
                    //printf("%s %s ",item->region,item->address);
                    //printf("%X", strings.find(item->region)->second.addresss.find(item->address)->second);
                    //getchar();
                }
                else
                {
                    StrResource tr;
                    tr.offset = offset + 4;
                    strings[item->address] = tr;
                    AppendBuffer(RecordBuffer, (uint8_t*)item->address, strlen(item->address) + 1);
                }
            }
        }
        else
        {
            StrResource rec;
            rec.offset = offset;

            uint32_t len = strlen(item->region) + 1;
            AppendBuffer(RecordBuffer, (uint8_t*)item->region, len);

            rec.addresss[item->address] = rec.offset;

            if( strlen(item->address)>3 && strings.count(item->address)!=0 )
            {
                unsigned char redirect = 0x02;
                AppendBuffer(RecordBuffer, (uint8_t*)&redirect, sizeof(redirect));
                AppendBuffer(RecordBuffer, (uint8_t*)&strings.find(item->address)->second.offset, 3);
                //printf("1 %s %s %d %d\n",item->region,item->address, strings.find(item->address)->second.offset,rec.offset);
            }
            else
            {
                StrResource tr;
                tr.offset = offset + len;
                strings[item->address] = tr;
                //printf("2 %s %s %d %d\n",item->region,item->address,tr.offset,rec.offset);
                AppendBuffer(RecordBuffer, (uint8_t*)item->address, strlen(item->address) + 1);
            }

            strings[item->region] = rec;
        }

        offset -= 4;
        AppendBuffer(IndexBuffer, (uint8_t*)&item->begin_ip, sizeof(item->begin_ip));
        AppendBuffer(IndexBuffer, (uint8_t*)&offset, 3);

        offset = RecordBuffer.size() + 8;
    }

    idx_first = offset;
    idx_last = offset + IndexBuffer.size() - 7;

    FILE * out = _wfopen(qqwry, L"wb");
    fwrite(&idx_first, 1, sizeof(idx_first), out);
    fwrite(&idx_last, 1, sizeof(idx_last), out);

    fwrite(&RecordBuffer[0], 1, RecordBuffer.size(), out);
    fwrite(&IndexBuffer[0], 1, IndexBuffer.size(), out);
    fclose(out);

    return true;
}
nsresult nsByteArray::AppendString(const char *string)
{
  PRUint32 strLength = (string) ? PL_strlen(string) : 0;
  return AppendBuffer(string, strLength);
  
}