X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=test%2Ftst_comstack.c;h=eee72f8fecce9d63500a26339eb7885934a94b3a;hp=c2e259756b7c4c9f808c2c735d661ffcb2121e02;hb=ed31c923f03ec124060972f5351b8b33e07a2e13;hpb=d6862f25e98c81258ac86ee865b82ba610fd0b8f diff --git a/test/tst_comstack.c b/test/tst_comstack.c index c2e2597..eee72f8 100644 --- a/test/tst_comstack.c +++ b/test/tst_comstack.c @@ -1,15 +1,15 @@ -/* - * Copyright (C) 1995-2007, Index Data ApS +/* This file is part of the YAZ toolkit. + * Copyright (C) 1995-2010 Index Data * See the file LICENSE for details. - * - * $Id: tst_comstack.c,v 1.1 2007-01-11 10:30:41 adam Exp $ */ #include +#include #include #include #include +#include static void tst_http_request(void) { @@ -21,12 +21,12 @@ static void tst_http_request(void) "\r\n" "GET / HTTP/1.0\r\n"; - YAZ_CHECK_EQ(cs_complete_http(http_buf, 1), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 2), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 16), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 17), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 18), 18); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 19), 18); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 16), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 17), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 18), 18); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 19), 18); } { /* one header, no content */ @@ -37,11 +37,11 @@ static void tst_http_request(void) "\r\n" "GET / HTTP/1.0\r\n"; - YAZ_CHECK_EQ(cs_complete_http(http_buf, 1), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 2), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 34), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 35), 35); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 36), 35); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 34), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 35), 35); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 36), 35); } { /* one content-length header, length 0 */ @@ -52,11 +52,11 @@ static void tst_http_request(void) "\r\n" "GET / HTTP/1.0\r\n"; - YAZ_CHECK_EQ(cs_complete_http(http_buf, 1), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 2), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 35), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 37), 37); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 38), 37); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 35), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 37), 37); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 38), 37); } { /* one content-length header, length 5 */ @@ -68,11 +68,11 @@ static void tst_http_request(void) "ABCDE" "GET / HTTP/1.0\r\n"; - YAZ_CHECK_EQ(cs_complete_http(http_buf, 1), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 2), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 41), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 42), 42); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 43), 42); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 41), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 42), 42); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 43), 42); } { /* LF only in GET, one content-length header, length 5 */ @@ -84,11 +84,11 @@ static void tst_http_request(void) "ABCDE" "GET / HTTP/1.0\r\n"; - YAZ_CHECK_EQ(cs_complete_http(http_buf, 1), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 2), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 40), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 41), 41); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 42), 41); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 40), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 41), 41); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 42), 41); } { /* LF only in all places, one content-length header, length 5 */ @@ -100,11 +100,11 @@ static void tst_http_request(void) "ABCDE" "GET / HTTP/1.0\r\n"; - YAZ_CHECK_EQ(cs_complete_http(http_buf, 1), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 2), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 38), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 39), 39); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 40), 39); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 38), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 39), 39); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 40), 39); } { @@ -116,8 +116,8 @@ static void tst_http_request(void) "\r\n" "GET / HTTP/1.0\r\n"; - YAZ_CHECK_EQ(cs_complete_http(http_buf, 45), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 46), 46); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 45), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 46), 46); } { @@ -132,8 +132,8 @@ static void tst_http_request(void) "0\r\n\r\n" "GET / HTTP/1.0\r\n"; - YAZ_CHECK_EQ(cs_complete_http(http_buf, 58), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 59), 59); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 58), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 59), 59); } { @@ -150,8 +150,8 @@ static void tst_http_request(void) "0\r\n\r\n" "GET / HTTP/1.0\r\n"; - YAZ_CHECK_EQ(cs_complete_http(http_buf, 64), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 65), 65); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 64), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 65), 65); } } @@ -165,9 +165,9 @@ static void tst_http_response(void) "\r\n" "HTTP/1.1 200 OK\r\n"; - YAZ_CHECK_EQ(cs_complete_http(http_buf, 1), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 2), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 24), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 24), 0); } { /* response, content */ @@ -179,12 +179,70 @@ static void tst_http_response(void) "12" "HTTP/1.1 200 OK\r\n"; - YAZ_CHECK_EQ(cs_complete_http(http_buf, 1), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 2), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 39), 0); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 40), 40); - YAZ_CHECK_EQ(cs_complete_http(http_buf, 41), 40); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 39), 0); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 40), 40); + YAZ_CHECK_EQ(cs_complete_auto(http_buf, 41), 40); + } +} + +/** \brief COMSTACK synopsis from manual, doc/comstack.xml */ +static int comstack_example(const char *server_address_str) +{ + COMSTACK stack; + char *buf = 0; + int size = 0, length_incoming; + void *server_address_ip; + int status; + + char *protocol_package = "GET / HTTP/1.0\r\n\r\n"; + int protocol_package_length = strlen(protocol_package); + + stack = cs_create(tcpip_type, 1, PROTO_HTTP); + if (!stack) { + perror("cs_create"); /* use perror() here since we have no stack yet */ + return -1; + } + + server_address_ip = cs_straddr(stack, server_address_str); + if (!server_address_ip) + { + fprintf(stderr, "cs_straddr: address could not be resolved\n"); + return -1; + } + + status = cs_connect(stack, server_address_ip); + if (status != 0) { + fprintf(stderr, "cs_connect: %s\n", cs_strerror(stack)); + return -1; + } + + status = cs_put(stack, protocol_package, protocol_package_length); + if (status) { + fprintf(stderr, "cs_put: %s\n", cs_strerror(stack)); + return -1; + } + + /* Now get a response */ + + length_incoming = cs_get(stack, &buf, &size); + if (!length_incoming) { + fprintf(stderr, "Connection closed\n"); + return -1; + } else if (length_incoming < 0) { + fprintf(stderr, "cs_get: %s\n", cs_strerror(stack)); + return -1; } + + /* Print result */ + fwrite(buf, length_incoming, 1, stdout); + + /* clean up */ + cs_close(stack); + if (buf) + free(buf); + return 0; } @@ -192,6 +250,8 @@ int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); + if (argc == 2) + comstack_example(argv[1]); tst_http_request(); tst_http_response(); YAZ_CHECK_TERM; @@ -200,6 +260,7 @@ int main (int argc, char **argv) /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab