diff options
author | Anders Broman <anders.broman@ericsson.com> | 2013-09-16 17:53:41 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2013-09-16 17:53:41 +0000 |
commit | 1821ed0404efb1d8470b2b792e22bc489b93bdb4 (patch) | |
tree | 4888cbbe4f95bec7bad79e949878c19cefb3b951 /epan/addr_resolv.c | |
parent | f36c727fb06d6f6b90ecba79c8ccd77379fe7ebd (diff) | |
download | wireshark-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.c | 38 |
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); |