Beispiel #1
0
static s32 TranslateErrorCode(s32 native_error, bool isRW)
{
	switch (native_error)
	{
	case ERRORCODE(EMSGSIZE):
		ERROR_LOG(WII_IPC_NET, "Find out why this happened, looks like PEEK failure?");
		return -1; // Should be -SO_EMSGSIZE
	case EITHER(WSAENOTSOCK, EBADF):
		return -SO_EBADF;
	case ERRORCODE(EADDRINUSE):
		return -SO_EADDRINUSE;
	case ERRORCODE(ECONNRESET):
		return -SO_ECONNRESET;
	case ERRORCODE(EISCONN):
		return -SO_EISCONN;
	case ERRORCODE(ENOTCONN):
		return -SO_EAGAIN; // After proper blocking SO_EAGAIN shouldn't be needed...
	case ERRORCODE(EINPROGRESS):
		return -SO_EINPROGRESS;
	case ERRORCODE(EALREADY):
		return -SO_EALREADY;
	case ERRORCODE(EACCES):
		return -SO_EACCES;
	case ERRORCODE(ECONNREFUSED):
		return -SO_ECONNREFUSED;
	case ERRORCODE(ENETUNREACH):
		return -SO_ENETUNREACH;
	case ERRORCODE(EHOSTUNREACH):
		return -SO_EHOSTUNREACH;
	case EITHER(WSAEWOULDBLOCK, EAGAIN):
		if (isRW)
		{
			return -SO_EAGAIN;  // EAGAIN
		}
		else
		{
			return -SO_EINPROGRESS; // EINPROGRESS
		}
	default:
		return -1;
	}
}
Beispiel #2
0
/* --rpw fix: maruEncryptBlock was broken for block != to */
EXPORT void maruEncryptBlock(maruAspect *a, u_char *block, u_char *to, int len, m_u32 blockno, int flags)
{
    maruKey key;
    m_u64 *block8 = (m_u64*)block,
	      *iv8 = (m_u64*)a->whitener,
	      *to8 = (m_u64*)to;

    int keysize;
    assert((a->blockCipher->blocksize == 0) || ((len%a->blockCipher->blocksize) == 0));
    keysize = MIN(sizeof key, EITHER(a->blockCipher->keylen, sizeof key)); /* XXX careful */
    assert((keysize&7) == 0);
    maruGenBlockKey(a, &key, keysize, blockno);
    a->blockCipher->setkey(a->blockOpaque, key.data, keysize, flags);
    if (flags & MCD_ENCRYPT)
	{
	    int n;
	    m_u64 sum = 0;

	    for (n=len/8; --n>0; )
		{
		    block8[n] ^= iv8[n];
		    sum ^= block8[n];
		}
	    block8[0] ^= sum ^ hton64(blockno);
	}
    a->blockCipher->crypt(a->blockOpaque, NULL /* do the iv's by hand */, block, to, len, flags);

    /* --rpw restore contents of original block */
    if (flags & MCD_ENCRYPT && block != to)
	{
	    int n;
	    m_u64 sum = 0;

	    for (n=len/8; --n>0; )
		{
		    sum ^= block8[n];
		    block8[n] ^= iv8[n];
		}
	    block8[0] ^= sum ^ hton64(blockno);
	}
    if (flags & MCD_DECRYPT)
	{
	    int n;
	    m_u64 sum = 0;

	    for (n=len/8; --n>0; )
		{
		    sum ^= to8[n];
		    to8[n] ^= iv8[n];
		}
	    to8[0] ^= sum ^ hton64(blockno);
	}
     bzero(&key, sizeof key);
}
Beispiel #3
0
s32 WiiSocket::CloseFd()
{
	s32 ReturnValue = 0;
	if (fd >= 0)
	{
#ifdef _WIN32
		s32 ret = closesocket(fd);
#else
		s32 ret = close(fd);
#endif
		ReturnValue = WiiSockMan::GetNetErrorCode(ret, "CloseFd", false);
	}
	else
	{
		ReturnValue = WiiSockMan::GetNetErrorCode(EITHER(WSAENOTSOCK, EBADF), "CloseFd", false);
	}
	fd = -1;
	return ReturnValue;
}