int RTIP_SOCKETS_Driver::RecvFrom( SOCK_SOCKET s, char* buf, int len, int flags, SOCK_sockaddr* from, int* fromlen )
{ 
    NATIVE_PROFILE_PAL_NETWORK();
    int             ret;
    int             type;
    int             port;
    UINT32          ipAddr;
    int             nativeFlag;
    
    type = RTP_NET_TYPE_IPV4;
    
    switch (flags)
    {
        case SOCKET_READ_PEEK_OPTION:
            nativeFlag = RTP_NET_MSG_PEEK;
            break;
        default:
            nativeFlag = flags;
            break;
    }
    if(from == NULL)
    {
        ret = (int ) rtp_net_recvfrom ((RTP_HANDLE) s,
                             (unsigned char *)buf, 
                             len,
                             NULL,
                             NULL, 
                             &type,
                             nativeFlag);
    }
    else
    {
        port    = ((SOCK_sockaddr_in *) from)->sin_port;
        ipAddr  = ((SOCK_sockaddr_in *) from)->sin_addr.S_un.S_addr;
    
        ret = (int) rtp_net_recvfrom ((RTP_HANDLE) s,
                             (unsigned char *)buf, 
                             len,
                             (unsigned char*)&ipAddr, 
                             &port,
                             &type, 
                             nativeFlag);

        if (SOCK_SOCKET_ERROR != ret)
        {
            ((SOCK_sockaddr_in *) from)->sin_port             = port;
            ((SOCK_sockaddr_in *) from)->sin_family           = RTP_NET_AF_INET;
            ((SOCK_sockaddr_in *) from)->sin_addr.S_un.S_addr = ipAddr;
        }
    }
        
    return ret; 
}
Beispiel #2
0
/*
================
 int rtsmb_net_read_datagram() - Description

    int sock - socket to read from
    void *pData - target buffer
    int size - size of buffer
    PFBYTE remoteAddr - source address (optional)

    return(int) - size of data received
================
*/
int rtsmb_net_read_datagram (RTP_SOCKET sock, PFVOID pData, int size, PFBYTE remoteAddr, PFINT remotePort)
{
    int bytesRead;
    int newPort;
    int ipVer = 4;
    char temp[20];

    if(!pData)
    {
        RTSMB_DEBUG_OUTPUT_STR("rtsmb_net_read_datagram: NULL buffer\n", RTSMB_DEBUG_TYPE_ASCII);
        return 0;
    }

    if (remotePort == (PFINT)0)
    {
        remotePort = &newPort;
    }

    bytesRead = rtp_net_recvfrom(sock, pData, size, remoteAddr, remotePort, &ipVer);

    if(bytesRead < 0)
    {
        RTSMB_DEBUG_OUTPUT_STR("rtsmb_net_read_datagram: Error in recvfrom\n", RTSMB_DEBUG_TYPE_ASCII);
        return 0;
    }
    rtsmb_net_ip_to_str(remoteAddr, (PFCHAR)temp);

    return bytesRead;
}