[PATCH] replace buf_hexdump(), from oncp.c and gpst.c, with dump_buf_hex(), in http.c

Daniel Lenski dlenski at gmail.com
Wed Apr 19 14:47:03 PDT 2017


This function was duplicated across oncp.c, cstp.c, and also makes an
appearance in the GlobalProtect fork… so I de-duplicated it.

-Dan

On Wed, Apr 19, 2017 at 2:45 PM, Daniel Lenski <dlenski at gmail.com> wrote:
> Also adds loglevel and prefix character parameters
>
> Signed-off-by: Daniel Lenski <dlenski at gmail.com>
> ---
>  http.c                 | 16 ++++++++++++++++
>  oncp.c                 | 36 +++++++++++-------------------------
>  openconnect-internal.h |  1 +
>  3 files changed, 28 insertions(+), 25 deletions(-)
>
> diff --git a/http.c b/http.c
> index 6166bb3..59f93e5 100644
> --- a/http.c
> +++ b/http.c
> @@ -781,6 +781,22 @@ void dump_buf(struct openconnect_info *vpninfo, char prefix, char *buf)
>         }
>  }
>
> +void dump_buf_hex(struct openconnect_info *vpninfo, int loglevel, char prefix, unsigned char *buf, int len)
> +{
> +       char linebuf[80];
> +       int i;
> +
> +       for (i = 0; i < len; i++) {
> +               if (i % 16 == 0) {
> +                       if (i)
> +                               vpn_progress(vpninfo, loglevel, "%c %s\n", prefix, linebuf);
> +                       sprintf(linebuf, "%04x:", i);
> +               }
> +               sprintf(linebuf + strlen(linebuf), " %02x", buf[i]);
> +       }
> +       vpn_progress(vpninfo, loglevel, "%c %s\n", prefix, linebuf);
> +}
> +
>  /* Inputs:
>   *  method:             GET or POST
>   *  vpninfo->hostname:  Host DNS name
> diff --git a/oncp.c b/oncp.c
> index 3c7cfa1..f27d96a 100644
> --- a/oncp.c
> +++ b/oncp.c
> @@ -110,22 +110,6 @@ static void buf_append_tlv_be32(struct oc_text_buf *buf, uint16_t val, uint32_t
>         buf_append_tlv(buf, val, 4, d);
>  }
>
> -static void buf_hexdump(struct openconnect_info *vpninfo, unsigned char *d, int len)
> -{
> -       char linebuf[80];
> -       int i;
> -
> -       for (i = 0; i < len; i++) {
> -               if (i % 16 == 0) {
> -                       if (i)
> -                               vpn_progress(vpninfo, PRG_DEBUG, "%s\n", linebuf);
> -                       sprintf(linebuf, "%04x:", i);
> -               }
> -               sprintf(linebuf + strlen(linebuf), " %02x", d[i]);
> -       }
> -       vpn_progress(vpninfo, PRG_DEBUG, "%s\n", linebuf);
> -}
> -
>  static const char authpkt_head[] = { 0x00, 0x04, 0x00, 0x00, 0x00 };
>  static const char authpkt_tail[] = { 0xbb, 0x01, 0x00, 0x00, 0x00, 0x00 };
>
> @@ -497,7 +481,7 @@ static int parse_conf_pkt(struct openconnect_info *vpninfo, unsigned char *bytes
>         eparse:
>                 vpn_progress(vpninfo, PRG_ERR,
>                              _("Failed to parse KMP message\n"));
> -               buf_hexdump(vpninfo, bytes, pktlen);
> +               dump_buf_hex(vpninfo, PRG_ERR, '<', bytes, pktlen);
>                 return -EINVAL;
>         }
>
> @@ -648,7 +632,7 @@ int oncp_connect(struct openconnect_info *vpninfo)
>                 ret = buf_error(reqbuf);
>                 goto out;
>         }
> -       buf_hexdump(vpninfo, (void *)reqbuf->data, reqbuf->pos);
> +       dump_buf_hex(vpninfo, PRG_DEBUG, '>', (void *)reqbuf->data, reqbuf->pos);
>         ret = vpninfo->ssl_write(vpninfo, reqbuf->data, reqbuf->pos);
>         if (ret != reqbuf->pos) {
>                 if (ret >= 0) {
> @@ -666,7 +650,7 @@ int oncp_connect(struct openconnect_info *vpninfo)
>                 goto out;
>         vpn_progress(vpninfo, PRG_TRACE,
>                      _("Read %d bytes of SSL record\n"), ret);
> -
> +
>         if (ret != 3 || bytes[0] != 1 || bytes[1] != 0) {
>                 vpn_progress(vpninfo, PRG_ERR,
>                              _("Unexpected response of size %d after hostname packet\n"),
> @@ -694,7 +678,7 @@ int oncp_connect(struct openconnect_info *vpninfo)
>         if (len < 0x16 || load_le16(bytes) + 2 != len) {
>                 vpn_progress(vpninfo, PRG_ERR,
>                              _("Invalid packet waiting for KMP 301\n"));
> -               buf_hexdump(vpninfo, bytes, len);
> +               dump_buf_hex(vpninfo, PRG_ERR, '<', bytes, len);
>                 ret = -EINVAL;
>                 goto out;
>         }
> @@ -798,7 +782,8 @@ int oncp_connect(struct openconnect_info *vpninfo)
>         /* Length at the start of the packet is little-endian */
>         store_le16(reqbuf->data, reqbuf->pos - 2);
>
> -       buf_hexdump(vpninfo, (void *)reqbuf->data, reqbuf->pos);
> +       vpn_progress(vpninfo, PRG_DEBUG, _("oNCP negotiation request outgoing:\n"));
> +       dump_buf_hex(vpninfo, PRG_DEBUG, '>', (void *)reqbuf->data, reqbuf->pos);
>         ret = vpninfo->ssl_write(vpninfo, reqbuf->data, reqbuf->pos);
>         if (ret == reqbuf->pos)
>                 ret = 0;
> @@ -1070,8 +1055,8 @@ int oncp_mainloop(struct openconnect_info *vpninfo, int *timeout)
>                 unknown_pkt:
>                         vpn_progress(vpninfo, PRG_ERR,
>                                      _("Unknown KMP message %d of size %d:\n"), kmp, kmplen);
> -                       buf_hexdump(vpninfo, vpninfo->cstp_pkt->oncp.kmp,
> -                                   vpninfo->cstp_pkt->len);
> +                       dump_buf_hex(vpninfo, PRG_ERR, '<', vpninfo->cstp_pkt->oncp.kmp,
> +                                    vpninfo->cstp_pkt->len);
>                         if (kmplen + 20 != vpninfo->cstp_pkt->len)
>                                 vpn_progress(vpninfo, PRG_DEBUG,
>                                              _(".... + %d more bytes unreceived\n"),
> @@ -1090,8 +1075,9 @@ int oncp_mainloop(struct openconnect_info *vpninfo, int *timeout)
>                 unmonitor_write_fd(vpninfo, ssl);
>
>                 vpn_progress(vpninfo, PRG_TRACE, _("Packet outgoing:\n"));
> -               buf_hexdump(vpninfo, vpninfo->current_ssl_pkt->oncp.rec,
> -                           vpninfo->current_ssl_pkt->len + 22);
> +               dump_buf_hex(vpninfo, PRG_TRACE, '>',
> +                            vpninfo->current_ssl_pkt->oncp.rec,
> +                            vpninfo->current_ssl_pkt->len + 22);
>
>                 ret = ssl_nonblock_write(vpninfo,
>                                          vpninfo->current_ssl_pkt->oncp.rec,
> diff --git a/openconnect-internal.h b/openconnect-internal.h
> index a24a9e4..2bf0015 100644
> --- a/openconnect-internal.h
> +++ b/openconnect-internal.h
> @@ -987,6 +987,7 @@ int can_gen_tokencode(struct openconnect_info *vpninfo,
>  /* http.c */
>  struct oc_text_buf *buf_alloc(void);
>  void dump_buf(struct openconnect_info *vpninfo, char prefix, char *buf);
> +void dump_buf_hex(struct openconnect_info *vpninfo, int loglevel, char prefix, unsigned char *buf, int len);
>  int buf_ensure_space(struct oc_text_buf *buf, int len);
>  void  __attribute__ ((format (printf, 2, 3)))
>         buf_append(struct oc_text_buf *buf, const char *fmt, ...);
> --
> 2.7.4
>



More information about the openconnect-devel mailing list