示例#1
0
/* -----------------------------------------------------------------------------------------------------------*/
int UDP_SendPacket( int socket, int Datalenght, char * UDP_Databuffer )
{
	if ( socket >= MAX_UDP_CONNECTIONS ) return( UDP_SOCKET_ERROR );
		
	LockEthernet();
	
	char * ethernetbuffer;
	ethernetbuffer = (char*) __builtin_alloca (( size_t ) ETHERNET_HEADER_LENGTH + IP_HEADER_LENGHT + UDP_HEADER_LENGHT + Datalenght );

	struct ETH_header * ETH_packet; 		// ETH_struct anlegen
	ETH_packet = (struct ETH_header *) ethernetbuffer;
	struct IP_header * IP_packet;		// IP_struct anlegen
	IP_packet = ( struct IP_header *) &ethernetbuffer[ETHERNET_HEADER_LENGTH];
	IP_packet->IP_Version_Headerlen = 0x45; // Standart IPv4 und Headerlenght 20byte
	struct UDP_header * UDP_packet;		// TCP_struct anlegen
	UDP_packet = ( struct UDP_header *) &ethernetbuffer[ETHERNET_HEADER_LENGTH + ((IP_packet->IP_Version_Headerlen & 0x0f) * 4 )];
		
	int offset = ETHERNET_HEADER_LENGTH + ((IP_packet->IP_Version_Headerlen & 0x0f) * 4 ) + UDP_HEADER_LENGHT;

	memcpy( &ethernetbuffer[ offset ], UDP_Databuffer, Datalenght );
//	for ( i = 0 ; i < Datalenght ; i++ ) ethernetbuffer[ offset + i ] = UDP_Databuffer[ i ];
	
	MakeIPheader( UDP_sockettable[socket].DestinationIP, PROTO_UDP, UDP_HEADER_LENGHT + Datalenght , ethernetbuffer );
	MakeUDPheader( socket, Datalenght, ethernetbuffer );
	MakeETHheader( UDP_sockettable[socket].MACadress, ethernetbuffer );
	sendEthernetframe( ETHERNET_HEADER_LENGTH + IP_HEADER_LENGHT + UDP_HEADER_LENGHT + Datalenght, ethernetbuffer);

	FreeEthernet();
	
	return(0);
}
示例#2
0
void unselect_card()
{
	ss_PORT |= (1<<ss_PIN);

#if defined(myAVR)
	if ( test == 1 )
	{	
		test = 0;
		FreeEthernet();
	}
#endif

#if defined(AVRNETIO) && defined(AVRNETIO_ADDON)
	if ( test == 1 )
	{	
		test = 0;
		SREG = sreg_tmp;
	}
#endif
}
示例#3
0
void UDP_echo( void )
{
	// make an static UDPbuffer
	// warning, do not use an stack-allocated buffer! it will be damage the udp-packet
	static unsigned char UDPBuffer[ UDP_Bufferlen ];

	// if an Socket created or opened, if not, create them ?
	if ( UDP_Socket == 0xffff )
		UDP_Socket = UDP_ListenOnPort( UDPPORT_ECHO, UDP_Bufferlen, UDPBuffer );
	else
	{
		if ( UDP_GetSocketState( UDP_Socket ) == SOCKET_BUSY )
		{
			LockEthernet();
			UDP_SendPacket( UDP_Socket, UDP_GetByteInBuffer( UDP_Socket ), UDPBuffer );
			FreeEthernet();
			UDP_CloseSocket( UDP_Socket );
			UDP_Socket = 0xffff;
		}
	}
	return;
}