home *** CD-ROM | disk | FTP | other *** search
/ Oracle Video Server 3.0.3.1 / OVS_3031_NT.iso / win32 / sqlnet / net23 / client / nettns.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-27  |  1.9 KB  |  92 lines

  1. /*
  2.   $Header: /netrcs/RCS/oracle/network/tns/tnsapi/RCS/nettns.c,v 1.3 1995/09/12 21:52:50 yzheng Exp $
  3. */
  4.  
  5. #include "tftpdef.h"
  6.  
  7. extern int traceflag;   
  8.  
  9. /*
  10.  * Send a record to the other side. Used by both client and server.
  11.  * With a stream interface, we have to preface each record with its
  12.  * length, since TFTP does not have arecord length as part of each
  13.  * record. We encode the length as a 2-byte interger in network
  14.  * byte order
  15.  */
  16.  
  17. void net_send(buff, len)
  18. char *buff;
  19. int len;
  20. {
  21.   void *tnshdl;
  22.   short recordlen;
  23.   size_t sizeshort = sizeof(short);
  24.  
  25.   DEBUG1("net_send: sent %d bytes", len);
  26.  
  27. #ifdef SERVER
  28.   tnshdl = svrtnshdl;
  29. #endif
  30.  
  31. #ifdef CLIENT
  32.   tnshdl = clitnshdl;
  33. #endif
  34.  
  35.   recordlen = htons(len);
  36.   if (tnssend(tnshdl, (char *)&recordlen, &sizeshort) != 0)
  37.     err_dump("written error of length prefix");
  38.  
  39.   if (tnssend(tnshdl, buff, &len) != 0)
  40.     err_dump("write error");
  41.  
  42. }
  43.  
  44. /*
  45.  * receive a record from the other end
  46.  */
  47. int net_recv(buff, maxlen)
  48. char *buff;
  49. int maxlen;
  50. {
  51.   void *tnshdl=0;
  52.   register int nbytes;
  53.   short recordlen = sizeof(short);
  54.   size_t sizeshort = sizeof(short);
  55.   size_t datalen = maxlen;
  56.  
  57. #ifdef SERVER
  58.   tnshdl = svrtnshdl;
  59. #endif
  60.  
  61. #ifdef CLIENT
  62.   tnshdl = clitnshdl;
  63. #endif
  64.  
  65.  again1:
  66.   if (tnsrecv(tnshdl, &recordlen, &sizeshort) != 0)
  67.   {
  68.     /*
  69.      * Do we handle ctrl-C, not now!
  70.      */
  71.     err_dump("tnsrecv failed in reading record length");
  72.   }
  73.   
  74.   if (sizeshort != sizeof(short))
  75.   {
  76.     err_dump("tnsrecv read error, reading unexpected bytes");
  77.   }
  78.  
  79.   recordlen = ntohs(recordlen);
  80.   if (recordlen > maxlen)
  81.     err_dump("record length too large");
  82.  
  83.   if (tnsrecv(tnshdl, buff, &datalen) != 0)
  84.     err_dump("tnsrecv failed in reading record data");   
  85.  
  86.   if (datalen != recordlen)
  87.     err_dump("tnsrecv read data failed, unexpected bytes");
  88.  
  89.   DEBUG1("net_recv: got %d bytes", datalen);
  90.   return(datalen);
  91. }
  92.