Example #1
0
int CTcpSock::Bind(TInetAddr &ia)
{
	TInt ret;

	ret = iSocket.Open(ts->cts->iSockServer->iSocketServer, ia.Family(),
			   KSockStream, KProtocolInetTcp);
	if (KErrNone != ret) {
		DEBUG_WARNING("bind: Open (ret=%d)\n", ret);
		goto error;
	}

	ret = iSocket.SetOpt(KSoReuseAddr, KSolInetIp, 1);
	if (KErrNone != ret) {
		DEBUG_WARNING("SetOpt ReuseAddr: ret=%d\n", ret);
	}

	ret = iSocket.Bind(ia);
	if (KErrNone != ret) {
		DEBUG_WARNING("bind: Bind (ret=%d)\n", ret);
		goto error;
	}

 error:
	return kerr2errno(ret);
}
Example #2
0
int CTcpConn::Open(TInetAddr &ia)
{
	TInt ret;
	if (rconnection) {
		DEBUG_INFO("TCP Socket Open: Using RConnection=%p\n",
			   rconnection);
		ret = iSocket.Open(iSockServer->iSocketServer, ia.Family(),
				   KSockStream, KProtocolInetTcp,
				   *rconnection);
	}
	else {
		ret = iSocket.Open(iSockServer->iSocketServer, ia.Family(),
				   KSockStream, KProtocolInetTcp);
	}

	return kerr2errno(ret);
}
QHostAddress qt_QHostAddressFromTInetAddr(const TInetAddr& addr)
{
    if (addr.IsV4Mapped() || addr.Family() == KAfInet) {
        //convert v4 host address
        return QHostAddress(addr.Address());
    } else {
        //convert v6 host address
        return QHostAddress((quint8 *)(addr.Ip6Address().u.iAddr8));
    }
}
//TODO: share this, at least QHostInfo needs to do the same thing
static QHostAddress qt_QHostAddressFromTInetAddr(const TInetAddr& addr)
{
    //TODO: do we want to call v4 mapped addresses v4 or v6 outside of this file?
    if (addr.IsV4Mapped() || addr.Family() == KAfInet) {
        //convert v4 host address
        return QHostAddress(addr.Address());
    } else {
        //convert v6 host address
        return QHostAddress((quint8 *)(addr.Ip6Address().u.iAddr8));
    }
}
// -----------------------------------------------------------------------------
// CLocalAddrResolver::SetAddr
// -----------------------------------------------------------------------------
//
void CLocalAddrResolver::SetAddr( TInetAddr& aTarget, TInetAddr& aSource )
    {
    if ( aSource.Family() == KAfInet6 )
        {
        if(!aSource.IsLinkLocal())
			{
			aTarget = aSource;
			aTarget.SetScope(0);
			}
        }
    else
        {
        aTarget = aSource;
        aTarget.SetScope(0);
        }
    }
int ILibSocketWrapper_getsockname(int socketObject, struct sockaddr* local, int* length)
{
  struct sockaddr_in* localAddr = (struct sockaddr_in*)local;
	RSocket *s = (RSocket*)SocketArray[socketObject];
  TInetAddr sockAddr;

  // get the local name
  s->LocalName(sockAddr);

  // convert from Symbian
  localAddr->sin_family = sockAddr.Family();
  localAddr->sin_port = sockAddr.Port();
  localAddr->sin_addr.s_addr = ntohl(sockAddr.Address());
  
  return 0;
}
// ---------------------------------------------------------------------------
// CNATFWStunConnectionHandler::FetchCandidateL
// ---------------------------------------------------------------------------
//
void CNATFWStunConnectionHandler::FetchCandidateL( TUint aStreamId,
    TUint /*aRtoValue*/, TUint /*aAddrFamily*/, 
    const TInetAddr& aBaseAddr )
    {
    __STUNPLUGIN( "CNATFWStunConnectionHandler::FetchCandidateL start" )
      
    // Store data in array
    TStreamData streamData;
    streamData.iStreamId = aStreamId;

    CNATFWCandidate* newCandidate = CNATFWCandidate::NewLC();
    TInetAddr publicAddr;
    if ( KAfInet6 == aBaseAddr.Family() )
        {
        const TIp6Addr KIp6Addr = {{{1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,1}}};
        publicAddr.SetAddress( KIp6Addr );
        }
    else
        {
        publicAddr.SetAddress( INET_ADDR( 1,2,3,4 ) );
        }

    // Set candidate parameters
    newCandidate->SetStreamId( aStreamId );
    newCandidate->SetType( CNATFWCandidate::EServerReflexive );
    newCandidate->SetTransportAddrL( publicAddr );
    newCandidate->SetTransportProtocol( KProtocolInetUdp );

    TConnectionData connData;    
    connData.iLocalCandidate = newCandidate;
    streamData.iConnArray.AppendL( connData );
    iStreamArray.AppendL( streamData );   

    TCallBackCmd cmd 
        = TCallBackCmd( aStreamId, EFetchCandidate, 0, newCandidate );
    iCallBackCmds.AppendL( cmd );
    CleanupStack::Pop( newCandidate );
    
    if ( !IsActive() )
        {
        After( KWaitTime );
        }
    // wait MNcmConnectionObserver::ConnectionNotify
    
    __STUNPLUGIN( "CNATFWStunConnectionHandler::FetchCandidateL end" )
    }
int CPjSSLSocket::Connect(CPjSSLSocket_cb cb, void *key, 
			  const TInetAddr &local_addr, 
			  const TInetAddr &rem_addr,
			  const TDesC8 &servername,
			  const TDesC8 &ciphers)
{
    pj_status_t status;
    
    PJ_ASSERT_RETURN(state_ == SSL_STATE_NULL, PJ_EINVALIDOP);
    
    status = pj_sock_socket(rem_addr.Family(), pj_SOCK_STREAM(), 0, &sock_);
    if (status != PJ_SUCCESS)
	return status;

    // Apply QoS
    status = pj_sock_apply_qos2(sock_, qos_type_, &qos_params_, 
    				2,  THIS_FILE, NULL);
    
    RSocket &rSock = ((CPjSocket*)sock_)->Socket();

    local_addr_ = local_addr;
    
    if (!local_addr_.IsUnspecified()) {
	TInt err = rSock.Bind(local_addr_);
	if (err != KErrNone)
	    return PJ_RETURN_OS_ERROR(err);
    }
    
    cb_ = cb;
    key_ = key;
    rem_addr_ = rem_addr;
    
    /* Note: the following members only keep the pointer, not the data */
    servername_.Set(servername);
    ciphers_.Set(ciphers);

    rSock.Connect(rem_addr_, iStatus);
    SetActive();
    state_ = SSL_STATE_CONNECTING;
    
    rSock.LocalName(local_addr_);

    return PJ_EPENDING;
}
Example #9
0
// -----------------------------------------------------------------------------
// CMceLocalAddrResolver::SetAddressesIfNotSet
// -----------------------------------------------------------------------------
//
void CMceLocalAddrResolver::SetAddressesIfNotSet( const TInetAddr& aAddr )
    {
    if ( aAddr.Family() == KAfInet )
        {
        if ( iAddr.IsUnspecified() )
            {
            iAddr = aAddr;
            }
        iIPv4Addr = aAddr;
        }
    else
        {
        iAddr = aAddr;
        }
    if ( iIPv4Addr.IsUnspecified() && iAddr.IsV4Mapped() )
        {
        iIPv4Addr = iAddr;
        iIPv4Addr.ConvertToV4();
        }    
    }
// ---------------------------------------------------------------------------
// This static method builds a generic PFKEY API extension data for IPSEC.
// This data contains all parameters needed by the IPSEC to do UDP
// encapsulation/decpsulation for ESP packet. Generic extension data format is
// LID format begining with four bytes extension header. Extension header
// consists two bytes extension length and two bytes  extension ID. LID format
// consists from one byte length, one byte ID and parameter data. 
// Buffer format: HL,HID,LID,LID,...LID
// Generic extension data buffer handling macros are defined in pfkeyext.h
// (common macros with IPSEC)
// ---------------------------------------------------------------------------
//
EXPORT_C void PFKeyExtDataUtil::BuildUdpEncExtensionData( TDes8& aExtData,
                                                 TUint32 aNAT_D_Flags,
                                                 TBool aNATDetected,
                                                 TBool aNokiaNATProbeUsed,
                                                 TUint16 aUdpEncapsPort,
                                                 TUint16 aKeepAliveTimeout,
                                                 const TInetAddr& aDestinAddr,
                                                 const TInetAddr& aOriginalAddr )
    {
    if ( aNAT_D_Flags )
        {
        aUdpEncapsPort = FLOATED_IKE_PORT; // for IETF specified ESP UDP encapsulation
        if ( ( aNAT_D_Flags & LOCAL_END_NAT ) == 0 )
            {
            aKeepAliveTimeout = 0; // Local end is not behind NAT, no keepalive needed
            }
        }
    else
        {
        //
        // Nokia specific NAT traversal info (=ESP UDP tunneling)  
        // If aNATDetected is true connection is over NAT:ted
        // network (=local end behind NAT). UDP encapsulation shall
        // then be done using configured port iEspUdpPort. If that
        // value is undefined default port 9872 shall be used then.
        // If aNATDetected is false and aNokiaNATProbeUsed is true
        // the NAT probe procedure has confirmed that there is no
        // NAT device between. ESP UDP encapsulation port is zeroed
        // then to avoid unnecessary ESP UDP encapsulation.
        // If aNokiaNATProbeUsed is false ESP UDP encapsulation is done
        // without probing, if any aUdpEncapsPort is defined 
        //
        if ( !aNATDetected && aNokiaNATProbeUsed )
            {
            aUdpEncapsPort = 0;
            }
        }   

    if ( aUdpEncapsPort == 0 )
        {
        aExtData.SetLength(0); // No extension data needed
        return;
        }

    TPfkeyGenExtension NatExtension( aExtData, ESP_UDP_ENCAPSULATION_EXT );
    
    NatExtension.StoreParameter( UDP_ENCAPSULATION_PORT,
                                 2,
                                 (TUint8*)&aUdpEncapsPort );
    
    if ( aKeepAliveTimeout )
        {
        NatExtension.StoreParameter( NAT_KEEPALIVE_TIMEOUT,
                                     2,
                                     (TUint8*)&aKeepAliveTimeout );
        }
    
    if ( aNAT_D_Flags & REMOTE_END_NAT )
        {
        NatExtension.StoreParameter( DESTINATION_ADDRESS,
                                     sizeof(TInetAddr),
                                     (TUint8*)&aDestinAddr );
        }
    
    if ( aOriginalAddr.Family() != KAFUnspec )
        {
        NatExtension.StoreParameter( PEER_ORIGINAL_ADDRESS,
                                     sizeof(TInetAddr),
                                     (TUint8*)&aOriginalAddr );
        }       
    }