diff options
author | Guy Harris <guy@alum.mit.edu> | 2000-08-19 08:26:04 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2000-08-19 08:26:04 +0000 |
commit | b0e0ec1763cf67557ea9377faa566f694722eb6b (patch) | |
tree | 6d0d8f6fe4c7c4ff19f5cb9d80533a77d2fe9378 /resolv.c | |
parent | e2eb846d0fdc9e2646190a86f04aa67f7d3942b1 (diff) |
Michael Tuexen's changes to define a port type for SCTP ports, handle
SCTP ports in "col_set_port()", and add a "get_sctp_port()" routine to
resolve SCTP port numbers to services.
Also, make the "get_XXX_port()" routines format the port number as an
unsigned integer, rather than a signed integer, if the service name for
the port isn't found (the port number passed in is unsigned).
svn path=/trunk/; revision=2295
Diffstat (limited to 'resolv.c')
-rw-r--r-- | resolv.c | 42 |
1 files changed, 34 insertions, 8 deletions
@@ -1,7 +1,7 @@ /* resolv.c * Routines for network object lookup * - * $Id: resolv.c,v 1.27 2000/08/10 22:35:30 deniel Exp $ + * $Id: resolv.c,v 1.28 2000/08/19 08:26:03 guy Exp $ * * Laurent Deniel <deniel@worldnet.fr> * @@ -138,6 +138,7 @@ typedef struct _ipxnet static hashname_t *host_table[HASHHOSTSIZE]; static hashname_t *udp_port_table[HASHPORTSIZE]; static hashname_t *tcp_port_table[HASHPORTSIZE]; +static hashname_t *sctp_port_table[HASHPORTSIZE]; static hashether_t *eth_table[HASHETHSIZE]; static hashmanuf_t *manuf_table[HASHMANUFSIZE]; static hashipxnet_t *ipxnet_table[HASHIPXNETSIZE]; @@ -162,7 +163,7 @@ gchar *g_manuf_path = EPATH_MANUF; /* may only be changed before the */ * Local function definitions */ -static u_char *serv_name_lookup(u_int port, u_int proto) +static u_char *serv_name_lookup(u_int port, port_type proto) { hashname_t *tp; @@ -172,14 +173,18 @@ static u_char *serv_name_lookup(u_int port, u_int proto) int i; switch(proto) { - case IPPROTO_UDP: + case PT_UDP: table = udp_port_table; serv_proto = "udp"; break; - case IPPROTO_TCP: + case PT_TCP: table = tcp_port_table; serv_proto = "tcp"; break; + case PT_SCTP: + table = sctp_port_table; + serv_proto = "sctp"; + break; default: /* not yet implemented */ return NULL; @@ -1099,11 +1104,11 @@ extern u_char *get_udp_port(u_int port) } else { cur = &str[0][0]; } - sprintf(cur, "%d", port); + sprintf(cur, "%u", port); return cur; } - return serv_name_lookup(port, IPPROTO_UDP); + return serv_name_lookup(port, PT_UDP); } /* get_udp_port */ @@ -1120,14 +1125,35 @@ extern u_char *get_tcp_port(u_int port) } else { cur = &str[0][0]; } - sprintf(cur, "%d", port); + sprintf(cur, "%u", port); return cur; } - return serv_name_lookup(port, IPPROTO_TCP); + return serv_name_lookup(port, PT_TCP); } /* get_tcp_port */ +extern u_char *get_sctp_port(u_int port) +{ + static gchar str[3][MAXNAMELEN]; + static gchar *cur; + + if (!g_resolving_actif) { + if (cur == &str[0][0]) { + cur = &str[1][0]; + } else if (cur == &str[1][0]) { + cur = &str[2][0]; + } else { + cur = &str[0][0]; + } + sprintf(cur, "%u", port); + return cur; + } + + return serv_name_lookup(port, PT_SCTP); + +} /* get_sctp_port */ + extern u_char *get_ether_name(const u_char *addr) { if (!g_resolving_actif) |