sdkcreationmw/sdkruntimes/wsock/src/WinsockUtils.cpp
author rajpuroh
Wed, 21 Apr 2010 09:56:53 +0530
changeset 1 ac50fd48361b
parent 0 b26acd06ea60
permissions -rw-r--r--
Second Contribution
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     1
/*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     2
* Copyright (c) 2004-2005 Nokia Corporation and/or its subsidiary(-ies).
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     3
* All rights reserved.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     4
* This component and the accompanying materials are made available
1
ac50fd48361b Second Contribution
rajpuroh
parents: 0
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
0
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     6
* which accompanies this distribution, and is available
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     8
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     9
* Initial Contributors:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    11
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    12
* Contributors:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    13
*
1
ac50fd48361b Second Contribution
rajpuroh
parents: 0
diff changeset
    14
* Description:
0
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    15
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    16
*/
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    17
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    18
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    19
#include "WinsockUtils.h"
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    20
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    21
// Converts TInetAddr into WSockAddr. Returns the size of the sockaddr
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    22
// structure, zero if conversion failed.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    23
int WinsockUtils::ToSockAddr(WSockAddr* aToAddr, const TSockAddr* aFromAddr)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    24
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    25
    // Windows requires that unused part of sockaddr structure is filled
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    26
    // with zeros.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    27
    Mem::FillZ(aToAddr, SOCKADDR_SIZE);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    28
    TInetAddr* from = &TInetAddr::Cast(aFromAddr);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    29
    if (from->Family() == KAfInet)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    30
    {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    31
        aToAddr->AddressIn.sin_family = AF_INET;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    32
        aToAddr->AddressIn.sin_port = htons((u_short)from->Port());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    33
        aToAddr->AddressIn.sin_addr.s_addr = htonl(from->Address());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    34
        return sizeof(struct sockaddr_in);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    35
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    36
    else if (from->Family() == KAfInet6)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    37
    {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    38
        aToAddr->AddressIn6.sin6_family = AF_INET6;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    39
        aToAddr->AddressIn6.sin6_port = htons((u_short)from->Port());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    40
        aToAddr->AddressIn6.sin6_flowinfo = from->FlowLabel();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    41
        aToAddr->AddressIn6.sin6_scope_id = from->Scope();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    42
        Mem::Copy(&aToAddr->AddressIn6.sin6_addr, &from->Ip6Address(),16);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    43
        return sizeof(struct sockaddr_in6);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    44
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    45
    else if (from->Family() == KAFUnspec)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    46
    {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    47
        aToAddr->AddressIn.sin_family = AF_INET;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    48
        aToAddr->AddressIn.sin_port = htons((u_short)from->Port());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    49
        aToAddr->AddressIn.sin_addr.s_addr = 0;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    50
        return sizeof(struct sockaddr_in);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    51
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    52
    else
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    53
    {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    54
        return 0;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    55
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    56
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    57
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    58
// Converts WSockAddr into TInetAddr
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    59
TBool WinsockUtils::ToInetAddr(TSockAddr* aToAddr, const WSockAddr* aFromAddr)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    60
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    61
    TIp6Addr ip6;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    62
    TInetAddr* to = &TInetAddr::Cast(aToAddr);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    63
    switch (aFromAddr->Address.sa_family) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    64
    case AF_INET:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    65
        to->SetFamily(KAfInet);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    66
        to->SetPort(ntohs(aFromAddr->AddressIn.sin_port));
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    67
        to->SetAddress(ntohl(aFromAddr->AddressIn.sin_addr.s_addr));
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    68
        return ETrue;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    69
    case AF_INET6:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    70
        to->SetFamily(KAfInet6);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    71
        to->SetPort(ntohs(aFromAddr->AddressIn6.sin6_port));
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    72
        to->SetFlowLabel(aFromAddr->AddressIn6.sin6_flowinfo);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    73
        to->SetScope(aFromAddr->AddressIn6.sin6_scope_id);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    74
        Mem::Copy(&ip6,&aFromAddr->AddressIn6.sin6_addr,16);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    75
        to->SetAddress(ip6);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    76
        return ETrue;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    77
    default:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    78
        to->SetFamily(KAFUnspec);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    79
        to->SetPort(0);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    80
        return EFalse;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    81
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    82
}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    83
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    84
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    85
/*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    86
 * Local Variables:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    87
 * c-basic-offset: 4
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    88
 * indent-tabs-mode: nil
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    89
 * End:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    90
 */