io.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <bio.h>
  4. #include <ip.h>
  5. #include <plumb.h>
  6. #include <thread.h>
  7. #include <fcall.h>
  8. #include <9p.h>
  9. #include <mp.h>
  10. #include <libsec.h>
  11. #include "dat.h"
  12. #include "fns.h"
  13. static long
  14. _iovfprint(va_list *arg)
  15. {
  16. int fd;
  17. char *fmt;
  18. va_list arg2;
  19. fd = va_arg(*arg, int);
  20. fmt = va_arg(*arg, char*);
  21. arg2 = va_arg(*arg, va_list);
  22. return vfprint(fd, fmt, arg2);
  23. }
  24. int
  25. iovfprint(Ioproc *io, int fd, char *fmt, va_list arg)
  26. {
  27. return iocall(io, _iovfprint, fd, fmt, arg);
  28. }
  29. int
  30. ioprint(Ioproc *io, int fd, char *fmt, ...)
  31. {
  32. int n;
  33. va_list arg;
  34. va_start(arg, fmt);
  35. n = iovfprint(io, fd, fmt, arg);
  36. va_end(arg);
  37. return n;
  38. }
  39. static long
  40. _iotlsdial(va_list *arg)
  41. {
  42. char *addr, *local, *dir;
  43. int *cfdp, fd, tfd, usetls;
  44. TLSconn conn;
  45. addr = va_arg(*arg, char*);
  46. local = va_arg(*arg, char*);
  47. dir = va_arg(*arg, char*);
  48. cfdp = va_arg(*arg, int*);
  49. usetls = va_arg(*arg, int);
  50. fd = dial(addr, local, dir, cfdp);
  51. if(fd < 0)
  52. return -1;
  53. if(!usetls)
  54. return fd;
  55. memset(&conn, 0, sizeof conn);
  56. /* does no good, so far anyway */
  57. // conn.chain = readcertchain("/sys/lib/ssl/vsignss.pem");
  58. tfd = tlsClient(fd, &conn);
  59. close(fd);
  60. if(tfd < 0)
  61. fprint(2, "%s: tlsClient: %r\n", argv0);
  62. else {
  63. /* BUG: check cert here? */
  64. if(conn.cert)
  65. free(conn.cert);
  66. }
  67. return tfd;
  68. }
  69. int
  70. iotlsdial(Ioproc *io, char *addr, char *local, char *dir, int *cfdp, int usetls)
  71. {
  72. return iocall(io, _iotlsdial, addr, local, dir, cfdp, usetls);
  73. }