Example #1
0
	extern int trans_net(unsigned int clientaddr, unsigned int *addr, unsigned short *port)
	{
		t_elem const *curr;
		t_trans	 *entry;
		char	 temp1[32];
		char         temp2[32];
		char         temp3[32];
		char	 temp4[32];

#ifdef DEBUG_TRANS
		eventlog(eventlog_level_debug, __FUNCTION__, "checking %s for client %s ...",
			addr_num_to_addr_str(*addr, *port),
			addr_num_to_ip_str(clientaddr));
#endif

		if (trans_head) {
			LIST_TRAVERSE_CONST(trans_head, curr)
			{
				if (!(entry = (t_trans*)elem_get_data(curr))) {
					eventlog(eventlog_level_error, __FUNCTION__, "found NULL entry in list");
					continue;
				}

#ifdef DEBUG_TRANS
				eventlog(eventlog_level_debug, __FUNCTION__, "against entry -> %s output %s network %s",
					addr_get_addr_str(entry->input, temp1, sizeof(temp1)),
					addr_get_addr_str(entry->output, temp2, sizeof(temp2)),
					netaddr_get_addr_str(entry->network, temp3, sizeof(temp3)));
#endif
				if (addr_get_ip(entry->input) != *addr || addr_get_port(entry->input) != *port) {
#ifdef DEBUG_TRANS
					eventlog(eventlog_level_debug, __FUNCTION__, "entry does match input address");
#endif
					continue;
				}
				if (netaddr_contains_addr_num(entry->network, clientaddr) == 0) {
#ifdef DEBUG_TRANS
					eventlog(eventlog_level_debug, __FUNCTION__, "client is not in the correct network");
#endif
					continue;
				}
#ifdef DEBUG_TRANS
				eventlog(eventlog_level_debug, __FUNCTION__, "%s translated to %s",
					addr_num_to_addr_str(*addr, *port),
					addr_get_addr_str(entry->output, temp4, sizeof(temp4)));
#endif
				*addr = addr_get_ip(entry->output);
				*port = addr_get_port(entry->output);
				return 1; /* match found in list */
			}
		}
#ifdef DEBUG_TRANS
		eventlog(eventlog_level_debug, __FUNCTION__, "no match found for %s (not translated)",
			addr_num_to_addr_str(*addr, *port));
#endif
		return 0; /* no match found in list */
	}
Example #2
0
extern void gametrans_net(unsigned int vaddr, unsigned short vport, unsigned int laddr, unsigned short lport, unsigned int * addr, unsigned short * port)
{
  const t_elem *curr;
  t_gametrans *entry;
#ifdef DEBUGGAMETRANS
  char temp1[32];
  char temp2[32];
  char temp3[32];
  char temp4[32];
#endif

#ifdef DEBUGGAMETRANS
  eventlog(eventlog_level_debug,"gametrans_net","checking client %s (viewer on %s connected to %s)...",
	   addr_num_to_addr_str(*addr,*port),
	   addr_num_to_addr_str(vaddr,vport),
	   addr_num_to_addr_str(laddr,lport));
#else
  (void)vport;
#endif
  if (gametrans_head)
  {
    LIST_TRAVERSE_CONST(gametrans_head,curr)
    {
      if (!(entry = elem_get_data(curr)))
      {
	eventlog(eventlog_level_error,"gametrans_net","found NULL entry in list");
	continue;
      }

#ifdef DEBUGGAMETRANS
      eventlog(eventlog_level_debug,"gametrans_net","against entry viewerint=%s client=%s output=%s viewerex=%s",
	       addr_get_addr_str(entry->viewer,temp1,sizeof(temp1)),
	       addr_get_addr_str(entry->client,temp2,sizeof(temp2)),
	       addr_get_addr_str(entry->output,temp3,sizeof(temp3)),
	       netaddr_get_addr_str(entry->exclude,temp4,sizeof(temp4)));
#endif

      if (addr_get_ip(entry->viewer)!=0 && addr_get_ip(entry->viewer)!=laddr)
      {
#ifdef DEBUGGAMETRANS
	eventlog(eventlog_level_debug,"gametrans_net","viewer is not on right interface IP");
#endif
	continue;
      }
      if (addr_get_port(entry->viewer)!=0 && addr_get_port(entry->viewer)!=lport)
      {
#ifdef DEBUGGAMETRANS
	eventlog(eventlog_level_debug,"gametrans_net","view is not on right interface port");
#endif
	continue;
      }

      if (addr_get_ip(entry->client)!=0 && addr_get_ip(entry->client)!=*addr)
      {
#ifdef DEBUGGAMETRANS
	eventlog(eventlog_level_debug,"gametrans_net","client is not on the right IP");
#endif
	continue;
      }
      if (addr_get_port(entry->client)!=0 && addr_get_port(entry->client)!=*port)
      {
#ifdef DEBUGGAMETRANS
	eventlog(eventlog_level_debug,"gametrans_net","client is not on the right port");
#endif
	continue;
      }

      if (netaddr_contains_addr_num(entry->exclude,vaddr)==1)
      {
#ifdef DEBUGGAMETRANS
	eventlog(eventlog_level_debug,"gametrans_net","viewer is in the excluded network");
#endif
	continue;
      }

      *addr = addr_get_ip(entry->output);
      *port = addr_get_port(entry->output);

#ifdef DEBUGGAMETRANS
      eventlog(eventlog_level_debug,"gametrans_net","did translation");
#endif

      return;
    }
  }
}