chiark / gitweb /
enums: Add `sizeforce' member value
[adns.git] / regress / hplayback.c.m4
index 4c8fb4d71236f3d9e675b704e07bab4a0e36ff7b..475144a786826589f990499a157b013b1c08b57b 100644 (file)
@@ -2,16 +2,16 @@ m4_dnl hplayback.c.m4
 m4_dnl (part of complex test harness, not of the library)
 m4_dnl - playback routines
 
-m4_dnl  This file is
-m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
-m4_dnl
-m4_dnl  It is part of adns, which is
-m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
-m4_dnl    Copyright (C) 1999 Tony Finch <dot@dotat.at>
+m4_dnl  This file is part of adns, which is
+m4_dnl    Copyright (C) 1997-2000,2003,2006,2014  Ian Jackson
+m4_dnl    Copyright (C) 2014  Mark Wooding
+m4_dnl    Copyright (C) 1999-2000,2003,2006  Tony Finch
+m4_dnl    Copyright (C) 1991 Massachusetts Institute of Technology
+m4_dnl  (See the file INSTALL for full details.)
 m4_dnl  
 m4_dnl  This program is free software; you can redistribute it and/or modify
 m4_dnl  it under the terms of the GNU General Public License as published by
-m4_dnl  the Free Software Foundation; either version 2, or (at your option)
+m4_dnl  the Free Software Foundation; either version 3, or (at your option)
 m4_dnl  any later version.
 m4_dnl  
 m4_dnl  This program is distributed in the hope that it will be useful,
@@ -20,8 +20,7 @@ m4_dnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 m4_dnl  GNU General Public License for more details.
 m4_dnl  
 m4_dnl  You should have received a copy of the GNU General Public License
-m4_dnl  along with this program; if not, write to the Free Software Foundation,
-m4_dnl  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+m4_dnl  along with this program; if not, write to the Free Software Foundation.
 
 m4_include(hmacros.i4)
 
@@ -69,7 +68,7 @@ static void Pcheckinput(void) {
   if (feof(Tinputfile)) Psyntax("eof at syscall reply");
 }
 
-static void Tensureinputfile(void) {
+void Tensurerecordfile(void) {
   const char *fdstr;
   int fd;
   int chars;
@@ -211,23 +210,35 @@ static void Ppollfds(struct pollfd *fds, int nfds) {
 #endif
 
 static void Paddr(struct sockaddr *addr, int *lenr) {
-  struct sockaddr_in *sa= (struct sockaddr_in*)addr;
-  char *p, *ep;
-  long ul;
-  
-  assert(*lenr >= sizeof(*sa));
-  p= strchr(vb2.buf+vb2.used,':');
-  if (!p) Psyntax("no port on address");
-  *p++= 0;
-  memset(sa,0,sizeof(*sa));
-  sa->sin_family= AF_INET;
-  if (!inet_aton(vb2.buf+vb2.used,&sa->sin_addr)) Psyntax("invalid address");
-  ul= strtoul(p,&ep,10);
-  if (*ep && *ep != hm_squote hm_squote) Psyntax("invalid port (bad syntax)");
+  adns_rr_addr a;
+  char *p, *q, *ep;
+  int err;
+  unsigned long ul;
+
+  p= vb2.buf+vb2.used;
+  if (*p!='[') {
+    q= strchr(p,':');
+    if (!q) Psyntax("missing :");
+    *q++= 0;
+  } else {
+    p++;
+    q= strchr(p,']');
+    if (!q) Psyntax("missing ]");
+    *q++= 0;
+    if (*q!=':') Psyntax("expected : after ]");
+    q++;
+  }
+  ul= strtoul(q,&ep,10);
+  if (*ep && *ep != ' ') Psyntax("invalid port (bad syntax)");
   if (ul >= 65536) Psyntax("port too large");
-  sa->sin_port= htons(ul);
-  *lenr= sizeof(*sa);
 
+  a.len= sizeof(a.addr);
+  err= adns_text2addr(p, (int)ul, 0, &a.addr.sa,&a.len);
+  if (err) Psyntax("invalid address");
+
+  assert(*lenr >= a.len);
+  memcpy(addr, &a.addr, a.len);
+  *lenr= a.len;
   vb2.used= ep - (char*)vb2.buf;
 }
 
@@ -258,12 +269,11 @@ static int Pbytes(byte *buf, int maxlen) {
 }
   
 void Q_vb(void) {
-  int r;
   const char *nl;
 
-  Tensureinputfile();
+  Tensurerecordfile();
   if (!adns__vbuf_ensure(&vb2,vb.used+2)) Tnomem();
-  r= fread(vb2.buf,1,vb.used+2,Tinputfile);
+  fread(vb2.buf,1,vb.used+2,Tinputfile);
   if (feof(Tinputfile)) {
     fprintf(stderr,"adns test harness: input ends prematurely; program did:\n %.*s\n",
            vb.used,vb.buf);