Bugfixes for UdpRelay:

* Added Printer for Relay Headers.
 * Added missing "ID String" in packet creation.
 * turned off debugging in udpstunner.
 * Found bad Mutex Issue, with udprelay code. have to fix!



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-peernet@4289 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
drbob 2011-06-18 16:27:36 +00:00
parent 6a6f1aefdb
commit 7caf2c9b1c
2 changed files with 45 additions and 2 deletions

View File

@ -32,6 +32,14 @@
#define DEBUG_UDP_RELAY 1
#ifdef DEBUG_UDP_RELAY
// DEBUG FUNCTION
#include <sstream>
#include <iomanip>
int displayUdpRelayPacketHeader(const void *data, const int size);
#endif
/****************** UDP RELAY STUFF **********/
#define MAX_RELAY_UDP_PACKET_SIZE 1024
@ -431,7 +439,10 @@ int UdpRelayReceiver::recvPkt(void *data, int size, struct sockaddr_in &from)
#ifdef DEBUG_UDP_RELAY
std::cerr << "UdpRelayReceiver::recvPkt(" << size << ") from: " << from;
std::cerr << std::endl;
displayUdpRelayPacketHeader(data, size);
#endif
if (!isUdpRelayPacket(data, size))
{
#ifdef DEBUG_UDP_RELAY
@ -556,14 +567,45 @@ int UdpRelayReceiver::sendPkt(const void *data, int size, const struct sockaddr_
* 16 Bytes: 4 ID, 6 IP:Port 1, 6 IP:Port 2
*/
#define UDP_IDENTITY_STRING_V1 "RLY1"
#define UDP_IDENTITY_SIZE_V1 4
int isUdpRelayPacket(const void *data, const int size)
{
if (size < UDP_RELAY_HEADER_SIZE)
return 0;
return (0 == strncmp((char *) data, "RLY1", 4));
return (0 == strncmp((char *) data, UDP_IDENTITY_STRING_V1, UDP_IDENTITY_SIZE_V1));
}
#ifdef DEBUG_UDP_RELAY
int displayUdpRelayPacketHeader(const void *data, const int size)
{
int dsize = UDP_RELAY_HEADER_SIZE + 16;
if (size < dsize)
{
dsize = size;
}
std::ostringstream out;
for(int i = 0; i < dsize; i++)
{
if ((i > 0) && (i % 16 == 0))
{
out << std::endl;
}
out << std::setw(2) << std::setfill('0') << std::hex << (uint32_t) ((uint8_t*) data)[i];
}
std::cerr << "displayUdpRelayPacketHeader()" << std::endl;
std::cerr << out.str();
std::cerr << std::endl;
}
#endif
int extractUdpRelayAddrSet(const void *data, const int size, UdpRelayAddrSet &addrSet)
{
@ -609,6 +651,7 @@ int createRelayUdpPacket(const void *data, const int size, void *newpkt, int new
return 0;
}
uint8_t *header = (uint8_t *) newpkt;
memcpy(header, UDP_IDENTITY_STRING_V1, UDP_IDENTITY_SIZE_V1);
/* as IP:Port are already in network byte order, we can just write them to the dataspace */
uint32_t ipaddr = ure->mLocalAddr.sin_addr.s_addr;

View File

@ -36,7 +36,7 @@ static const int STUN_TTL = 64;
/*
* #define DEBUG_UDP_STUNNER 1
*/
#define DEBUG_UDP_STUNNER 1
//#define DEBUG_UDP_STUNNER 1
const int32_t TOU_STUN_MAX_FAIL_COUNT = 3; /* 3 tries (could be higher?) */
const int32_t TOU_STUN_MAX_SEND_RATE = 5; /* every 5 seconds */