X-Git-Url: http://www.project-moonshot.org/gitweb/?p=trust_router.git;a=blobdiff_plain;f=tid%2Fexample%2Ftidc_main.c;fp=tid%2Fexample%2Ftidc_main.c;h=4ca37800cf7dd6930812f0f279294d7d89564190;hp=26fb994e3736b7d133a7e7db13077e5678b4ede0;hb=6f65c9cce86719147d0b4dcc9823b25443c2d185;hpb=eaa1a8ceed54fbfadc2638cf383aaa12ab446a57 diff --git a/tid/example/tidc_main.c b/tid/example/tidc_main.c index 26fb994..4ca3780 100644 --- a/tid/example/tidc_main.c +++ b/tid/example/tidc_main.c @@ -42,6 +42,11 @@ #include #include #include +#include + +struct tidc_resp_cookie { + int succeeded; +}; static void tidc_resp_handler (TIDC_INSTANCE * tidc, TID_REQ *req, @@ -52,9 +57,12 @@ static void tidc_resp_handler (TIDC_INSTANCE * tidc, unsigned char *c_keybuf = NULL; int i; struct timeval tv; + struct tidc_resp_cookie *data = (struct tidc_resp_cookie *) cookie; printf ("Response received! Realm = %s, Community = %s.\n", resp->realm->buf, resp->comm->buf); + data->succeeded = 0; + /* Generate the client key -- TBD, handle more than one server */ if (TID_SUCCESS != resp->result) { fprintf(stderr, "tidc_resp_handler: Response is an error.\n"); @@ -86,6 +94,7 @@ static void tidc_resp_handler (TIDC_INSTANCE * tidc, } printf("\n"); + data->succeeded = 1; return; } @@ -146,7 +155,19 @@ static error_t parse_option(int key, char *arg, struct argp_state *state) break; case 4: - arguments->port=strtol(arg, NULL, 10); /* optional */ + arguments->port=tr_parse_port(arg); /* optional */ + if (arguments->port < 0) { + switch(-(arguments->port)) { + case ERANGE: + printf("\nError parsing port (%s): port must be an integer in the range 1 - 65535\n\n", arg); + break; + + default: + printf("\nError parsing port (%s): %s\n\n", arg, strerror(-arguments->port)); + break; + } + argp_usage(state); + } break; default: @@ -173,6 +194,11 @@ static error_t parse_option(int key, char *arg, struct argp_state *state) return 0; /* success */ } +/* Exit values */ +#define EXIT_OK 0 +#define EXIT_REQ_FAILED 2 +#define EXIT_ERROR 1 + /* assemble the argp parser */ static struct argp argp = {cmdline_options, parse_option, arg_doc, doc}; @@ -184,6 +210,7 @@ int main (int argc, int rc; gss_ctx_id_t gssctx; struct cmdline_args opts; + struct tidc_resp_cookie cookie = {0}; /* parse the command line*/ /* set defaults */ @@ -210,29 +237,33 @@ int main (int argc, /* Create a TID client instance & the client DH */ tidc = tidc_create(); - if (NULL == (tidc->client_dh = tr_create_dh_params(NULL, 0))) { + tidc_set_dh(tidc, tr_create_dh_params(NULL, 0)); + if (tidc_get_dh(tidc) == NULL) { printf("Error creating client DH params.\n"); - return 1; + return EXIT_ERROR; } /* Set-up TID connection */ if (-1 == (conn = tidc_open_connection(tidc, opts.server, opts.port, &gssctx))) { /* Handle error */ printf("Error in tidc_open_connection.\n"); - return 1; + return EXIT_ERROR; }; /* Send a TID request */ if (0 > (rc = tidc_send_request(tidc, conn, gssctx, opts.rp_realm, opts.target_realm, opts.community, - &tidc_resp_handler, NULL))) { + &tidc_resp_handler, &cookie))) { /* Handle error */ printf("Error in tidc_send_request, rc = %d.\n", rc); - return 1; + return EXIT_ERROR; } /* Clean-up the TID client instance, and exit */ tidc_destroy(tidc); - return 0; + if (cookie.succeeded) + return EXIT_OK; + else + return EXIT_REQ_FAILED; }