From 6c9d96e811b7ad4d8830714011c31e5c33506829 Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Thu, 1 Apr 2004 08:25:58 +0000
Subject: [PATCH] Dirk Manske's ares_cancel() function was added.

---
 ares/CHANGES       | 11 +++++++++++
 ares/Makefile.in   |  5 ++---
 ares/ares.h        |  2 +-
 ares/ares_cancel.3 | 37 +++++++++++++++++++++++++++++++++++++
 ares/ares_cancel.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 95 insertions(+), 4 deletions(-)
 create mode 100644 ares/ares_cancel.3
 create mode 100644 ares/ares_cancel.c

diff --git a/ares/CHANGES b/ares/CHANGES
index 056c6d6774..39df0035ec 100644
--- a/ares/CHANGES
+++ b/ares/CHANGES
@@ -1,3 +1,12 @@
+  Changelog for the c-ares project
+
+* April 1, 2004
+- Dirk Manske provided a new function that is now named ares_cancel(). It is
+  used to cancel/cleanup a resolve/request made using ares functions on the
+  given ares channel. It does not destroy/kill the ares channel itself.
+
+- Dominick Meglio cleaned up the formatting in several man pages.
+
 * March 30, 2004
 - Dominick Meglio's new ares_expand_string. A helper function when decoding
   incoming DNS packages.
@@ -81,3 +90,5 @@ Version 1.0-pre1 (8 October 2003)
 - Daniel Stenberg adjusted the windows port
 
 - liren at vivisimo.com made the initial windows port
+
+* Imported the sources from ares 1.1.1
diff --git a/ares/Makefile.in b/ares/Makefile.in
index eac25cf944..53ff73f83d 100644
--- a/ares/Makefile.in
+++ b/ares/Makefile.in
@@ -26,15 +26,14 @@ OBJS=	ares__close_sockets.o ares__get_hostent.o ares__read_line.o \
 	ares_gethostbyname.o ares_init.o ares_mkquery.o ares_parse_a_reply.o \
 	ares_parse_ptr_reply.o ares_process.o ares_query.o ares_search.o \
 	ares_send.o ares_strerror.o ares_timeout.o ares_version.o \
-	ares_expand_string.o
+	ares_expand_string.o ares_cancel.o
 
 MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3   \
         ares_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3	      \
         ares_gethostbyname.3 ares_init.3 ares_init_options.3 ares_mkquery.3   \
         ares_parse_a_reply.3 ares_parse_ptr_reply.3 ares_process.3	      \
         ares_query.3 ares_search.3 ares_send.3 ares_strerror.3 ares_timeout.3 \
-        ares_version.3
-
+        ares_version.3 ares_cancel.3
 
 $(LIB): ${OBJS}
 	ar cru $@ ${OBJS}
diff --git a/ares/ares.h b/ares/ares.h
index 0dea2ff999..85bfe23151 100644
--- a/ares/ares.h
+++ b/ares/ares.h
@@ -105,7 +105,7 @@ int ares_init(ares_channel *channelptr);
 int ares_init_options(ares_channel *channelptr, struct ares_options *options,
 		      int optmask);
 void ares_destroy(ares_channel channel);
-
+void ares_cancel(ares_channel channel);
 void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
 	       ares_callback callback, void *arg);
 void ares_query(ares_channel channel, const char *name, int dnsclass,
diff --git a/ares/ares_cancel.3 b/ares/ares_cancel.3
new file mode 100644
index 0000000000..fed7e40872
--- /dev/null
+++ b/ares/ares_cancel.3
@@ -0,0 +1,37 @@
+.\" $Id$
+.\"
+.\" Copyright 1998 by the Massachusetts Institute of Technology.
+.\"
+.\" Permission to use, copy, modify, and distribute this
+.\" software and its documentation for any purpose and without
+.\" fee is hereby granted, provided that the above copyright
+.\" notice appear in all copies and that both that copyright
+.\" notice and this permission notice appear in supporting
+.\" documentation, and that the name of M.I.T. not be used in
+.\" advertising or publicity pertaining to distribution of the
+.\" software without specific, written prior permission.
+.\" M.I.T. makes no representations about the suitability of
+.\" this software for any purpose.  It is provided "as is"
+.\" without express or implied warranty.
+.\"
+.TH ARES_CANCEL 3 "31 March 2004"
+.SH NAME
+ares_cancel \- Cancel a resolve
+.SH SYNOPSIS
+.nf
+.B #include <ares.h>
+.PP
+.B int ares_cancel(ares_channel \fIchannel\fP)
+.fi
+.SH DESCRIPTION
+The \fBares_cancel\fP function cancels all lookups/requests made on the the
+name service channel identified by \fIchannel\fP.  \fBares_cancel\fP invokes
+the callbacks for each pending query on the channel, passing a status of
+.BR ARES_ETIMEOUT .
+These calls give the callbacks a chance to clean up any state which
+might have been stored in their arguments.
+.SH SEE ALSO
+.BR ares_init (3)
+.BR ares_destroy (3)
+.SH AUTHOR
+Dirk Manske
diff --git a/ares/ares_cancel.c b/ares/ares_cancel.c
new file mode 100644
index 0000000000..b127ed1122
--- /dev/null
+++ b/ares/ares_cancel.c
@@ -0,0 +1,44 @@
+/* Copyright 1998 by the Massachusetts Institute of Technology.
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting
+ * documentation, and that the name of M.I.T. not be used in
+ * advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission.
+ * M.I.T. makes no representations about the suitability of
+ * this software for any purpose.  It is provided "as is"
+ * without express or implied warranty.
+ */
+
+#include <stdlib.h>
+#include "ares.h"
+#include "ares_private.h"
+
+/*
+ * ares_cancel() cancels a ongoing request/resolve that might be going on on
+ * the given channel. It does NOT kill the channel, use ares_destroy() for
+ * that.
+ */
+void ares_cancel(ares_channel channel)
+{
+  struct query *query, *next;
+  int i;
+
+  for (query = channel->queries; query; query = next)
+  {
+    next = query->next;
+    query->callback(query->arg, ARES_ETIMEOUT, NULL, 0);
+    free(query->tcpbuf);
+    free(query->skip_server);
+    free(query);
+  }
+  channel->queries = NULL;
+  if (!(channel->flags & ARES_FLAG_STAYOPEN))
+  {
+    for (i = 0; i < channel->nservers; i++)
+      ares__close_sockets(&channel->servers[i]);
+  }
+}
-- 
GitLab