summaryrefslogtreecommitdiff
path: root/epan/addr_resolv.c
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2013-09-16 17:53:41 +0000
committerAnders Broman <anders.broman@ericsson.com>2013-09-16 17:53:41 +0000
commit1821ed0404efb1d8470b2b792e22bc489b93bdb4 (patch)
tree4888cbbe4f95bec7bad79e949878c19cefb3b951 /epan/addr_resolv.c
parentf36c727fb06d6f6b90ecba79c8ccd77379fe7ebd (diff)
downloadwireshark-1821ed0404efb1d8470b2b792e22bc489b93bdb4.tar.gz
Don't call getservbyport() on unresolved ports - it's expensive.
We should read the services file in initialize_services instead. svn path=/trunk/; revision=52103
Diffstat (limited to 'epan/addr_resolv.c')
-rw-r--r--epan/addr_resolv.c38
1 files changed, 8 insertions, 30 deletions
diff --git a/epan/addr_resolv.c b/epan/addr_resolv.c
index 8107cab2be..846c2efdca 100644
--- a/epan/addr_resolv.c
+++ b/epan/addr_resolv.c
@@ -667,30 +667,9 @@ ep_utoa(guint port)
static gchar
*serv_name_lookup(const guint port, const port_type proto)
{
- const char *serv_proto;
- struct servent *servp;
serv_port_t *serv_port_table;
gchar *name;
- switch(proto) {
- case PT_UDP:
- serv_proto = "udp";
- break;
- case PT_TCP:
- serv_proto = "tcp";
- break;
- case PT_SCTP:
- serv_proto = "sctp";
- break;
- case PT_DCCP:
- serv_proto = "dcp";
- break;
- default:
- /* not yet implemented */
- return NULL;
- /*NOTREACHED*/
- } /* proto */
-
serv_port_table = (serv_port_t *)g_hash_table_lookup(serv_port_hashtable, &port);
if(serv_port_table){
@@ -723,15 +702,14 @@ static gchar
} /* proto */
}
- if ((!gbl_resolv_flags.transport_name) ||
- (servp = getservbyport(g_htons(port), serv_proto)) == NULL) {
- /* unknown port */
- name = (gchar*)g_malloc(16);
- guint32_to_str_buf(port, name, 16);
- }else{
- name = g_strdup(servp->s_name);
- }
- if(serv_port_table == NULL){
+ /* getservbyport() was used here but it was to expensive, if the functionality is desired
+ * it would be better to pre parse etc/services or C:\Windows\System32\drivers\etc at
+ * startup
+ */
+ name = (gchar*)g_malloc(16);
+ guint32_to_str_buf(port, name, 16);
+
+ if(serv_port_table == NULL){
int *key;
key = (int *)g_new(int, 1);