Author: rhuijben
Date: Wed Oct 28 17:28:59 2015
New Revision: 1711074

URL: http://svn.apache.org/viewvc?rev=1711074&view=rev
Log:
Add support for h2direct to serf_get. This allows running test requests
against servers such as nghttpd and Apache httpd 2.4.17, that may allow
speaking http2 directly without TLS.

This makes things easier to debug and removes a dependency on a pretty
recent openssl to test this support.

* test/serf_get.c
  (app_baton_t): Add flag.
  (conn_setup): Enable h2direct if requested.
  (H2DIRECT): New define.
  (options): Add --h2direct and a final NULL to fix a segfault on invalid
    arguments.
  (main): Parse and pass h2direct.

Modified:
    serf/trunk/test/serf_get.c

Modified: serf/trunk/test/serf_get.c
URL: 
http://svn.apache.org/viewvc/serf/trunk/test/serf_get.c?rev=1711074&r1=1711073&r2=1711074&view=diff
==============================================================================
--- serf/trunk/test/serf_get.c (original)
+++ serf/trunk/test/serf_get.c Wed Oct 28 17:28:59 2015
@@ -38,6 +38,7 @@ typedef struct app_baton_t {
     int using_ssl;
     int head_request;
     int negotiate_http2;
+    int use_h2direct;
     const char *pem_path;
     const char *pem_pwd;
     serf_bucket_alloc_t *bkt_alloc;
@@ -255,6 +256,12 @@ static apr_status_t conn_setup(apr_socke
             }
         }
     }
+    else if (ctx->use_h2direct) {
+      serf_connection_set_framing_type(
+                              conn_ctx->conn,
+                              SERF_CONNECTION_FRAMING_TYPE_HTTP2);
+    }
+
 
     *input_bkt = c;
 
@@ -485,6 +492,7 @@ credentials_callback(char **username,
 #define CERTFILE 256
 #define CERTPWD  257
 #define HTTP2FLAG 258
+#define H2DIRECT 259
 
 static const apr_getopt_option_t options[] =
 {
@@ -504,9 +512,10 @@ static const apr_getopt_option_t options
     {"certpwd", CERTPWD, 1, "<password> Password for the SSL client 
certificate"},
     {NULL,      'r', 1, "<header:value> Use <header:value> as request header"},
     {"debug",   'd', 0, "Enable debugging"},
-#if 0
-    {"http2",   HTTP2FLAG, 0, "Enable http2 (https only)"}
-#endif
+    {"http2",   HTTP2FLAG, 0, "Enable http2 (https only) (Experimental)"},
+    {"h2direct",H2DIRECT, 0, "Enable h2direct (Experimental)"},
+
+    { NULL, 0 }
 };
 
 static void print_usage(apr_pool_t *pool)
@@ -549,7 +558,7 @@ int main(int argc, const char **argv)
     const char *raw_url, *method, *req_body_path = NULL;
     int count, inflight, conn_count;
     int i;
-    int print_headers, debug, negotiate_http2;
+    int print_headers, debug, negotiate_http2, use_h2direct;
     const char *username = NULL;
     const char *password = "";
     const char *pem_path = NULL, *pem_pwd = NULL;
@@ -575,6 +584,7 @@ int main(int argc, const char **argv)
     /* Do not debug by default. */
     debug = 0;
     negotiate_http2 = 0;
+    use_h2direct = 0;
 
     apr_getopt_init(&opt, pool, argc, argv);
     while ((status = apr_getopt_long(opt, options, &opt_c, &opt_arg)) ==
@@ -670,6 +680,9 @@ int main(int argc, const char **argv)
         case HTTP2FLAG:
             negotiate_http2 = 1;
             break;
+        case H2DIRECT:
+            use_h2direct = 1;
+            break;
         case 'v':
             puts("Serf version: " SERF_VERSION_STRING);
             exit(0);
@@ -697,10 +710,12 @@ int main(int argc, const char **argv)
         app_ctx.using_ssl = 1;
 
         app_ctx.negotiate_http2 = negotiate_http2;
+        app_ctx.use_h2direct = FALSE;
     }
     else {
         app_ctx.using_ssl = 0;
         app_ctx.negotiate_http2 = FALSE;
+        app_ctx.use_h2direct = use_h2direct;
     }
 
     if (strcasecmp(method, "HEAD") == 0) {


Reply via email to