Changeset 4e716180 in mainline for uspace/app/ping/ping.c


Ignore:
Timestamp:
2013-05-03T21:14:39Z (12 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
716357f
Parents:
1c7ba2d (diff), 5d1cb8a (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge simple DNS resolver.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/ping/ping.c

    r1c7ba2d r4e716180  
    3737#include <errno.h>
    3838#include <fibril_synch.h>
     39#include <inet/dnsr.h>
    3940#include <inet/addr.h>
    4041#include <inet/inetping.h>
     
    6970static void print_syntax(void)
    7071{
    71         printf("syntax: " NAME " [-r] <addr>\n");
     72        printf("syntax: " NAME " [-r] <host>\n");
    7273}
    7374
     
    173174int main(int argc, char *argv[])
    174175{
     176        dnsr_hostinfo_t *hinfo = NULL;
     177        char *asrc = NULL;
     178        char *adest = NULL;
     179        char *sdest = NULL;
    175180        int rc;
    176181        int argi;
     
    180185                printf(NAME ": Failed connecting to internet ping service "
    181186                    "(%d).\n", rc);
    182                 return 1;
     187                goto error;
    183188        }
    184189
     
    193198        if (argc - argi != 1) {
    194199                print_syntax();
    195                 return 1;
     200                goto error;
    196201        }
    197202
     
    199204        rc = inet_addr_parse(argv[argi], &dest_addr);
    200205        if (rc != EOK) {
    201                 printf(NAME ": Invalid address format.\n");
    202                 print_syntax();
    203                 return 1;
     206                /* Try interpreting as a host name */
     207                rc = dnsr_name2host(argv[argi], &hinfo);
     208                if (rc != EOK) {
     209                        printf(NAME ": Error resolving host '%s'.\n", argv[argi]);
     210                        goto error;
     211                }
     212
     213                dest_addr = hinfo->addr;
    204214        }
    205215
     
    208218        if (rc != EOK) {
    209219                printf(NAME ": Failed determining source address.\n");
    210                 return 1;
    211         }
     220                goto error;
     221        }
     222
     223        rc = inet_addr_format(&src_addr, &asrc);
     224        if (rc != EOK) {
     225                printf(NAME ": Out of memory.\n");
     226                goto error;
     227        }
     228
     229        rc = inet_addr_format(&dest_addr, &adest);
     230        if (rc != EOK) {
     231                printf(NAME ": Out of memory.\n");
     232                goto error;
     233        }
     234
     235        if (hinfo != NULL) {
     236                rc = asprintf(&sdest, "%s (%s)", hinfo->name, adest);
     237                if (rc < 0) {
     238                        printf(NAME ": Out of memory.\n");
     239                        goto error;
     240                }
     241        } else {
     242                sdest = adest;
     243                adest = NULL;
     244        }
     245
     246        printf("Sending ICMP echo request from %s to %s.\n",
     247            asrc, sdest);
    212248
    213249        fid_t fid;
     
    217253                if (fid == 0) {
    218254                        printf(NAME ": Failed creating transmit fibril.\n");
    219                         return 1;
     255                        goto error;
    220256                }
    221257
     
    225261                if (fid == 0) {
    226262                        printf(NAME ": Failed creating input fibril.\n");
    227                         return 1;
     263                        goto error;
    228264                }
    229265
     
    243279        if (rc == ETIMEOUT) {
    244280                printf(NAME ": Echo request timed out.\n");
    245                 return 1;
    246         }
    247 
     281                goto error;
     282        }
     283
     284        free(asrc);
     285        free(adest);
     286        free(sdest);
     287        dnsr_hostinfo_destroy(hinfo);
    248288        return 0;
     289error:
     290        free(asrc);
     291        free(adest);
     292        free(sdest);
     293        dnsr_hostinfo_destroy(hinfo);
     294        return 1;
    249295}
    250296
Note: See TracChangeset for help on using the changeset viewer.