// Copyright (c) 2002 David Muse
// See the COPYING file for more information.
#ifndef RUDIMENTS_DATATRANSPORT_H
#define RUDIMENTS_DATATRANSPORT_H
#include <rudiments/filedescriptor.h>
// The datatransport class is a base class for other classes that transport data
// over (or associated with) a file descriptor (such as clients and servers).
class datatransport : public filedescriptor {
public:
datatransport();
// Creates an uninitialized datatransport.
datatransport(int fd);
// Creates a datatransport and associates the
// already open file descriptor "fd" with it.
// Write methods - write data to the file descriptor.
// These methods return the number of bytes that were
// successfully written.
virtual ssize_t write(unsigned short number);
// Converts "number" to network byte order
// and writes it to the file descriptor.
virtual ssize_t write(unsigned long number);
// Converts "number" to network byte order
// and writes it to the file descriptor.
virtual ssize_t write(float number);
// Write "number" to the file descriptor.
virtual ssize_t write(double number);
// Write "number" to the file descriptor.
virtual ssize_t write(char character);
// Write "character" to the file descriptor.
virtual ssize_t write(const char *string);
// Write "string" to the file descriptor. Note
// that "string" must be NULL-terminated.
virtual ssize_t write(const char *string, size_t size);
// Write "size" bytes from "string" to the file
// descriptor. Note that it is possible to
// write beyond the string's NULL terminator
// using this method.
virtual ssize_t write(const void *buffer, size_t size);
// Write "size" bytes from "buffer" to the file
// descriptor.
// Write methods - write data to the file descriptor with a
// timeout of "sec" seconds and "usec" microseconds.
// These methods return the number of bytes that were
// successfully written or -1 if a timeout occurred.
virtual ssize_t write(unsigned short number,
long sec, long usec);
// Converts "number" to network byte order
// and writes it to the file descriptor.
virtual ssize_t write(unsigned long number,
long sec, long usec);
// Converts "number" to network byte order
// and writes it to the file descriptor.
virtual ssize_t write(float number, long sec, long usec);
// Write "number" to the file descriptor.
virtual ssize_t write(double number, long sec, long usec);
// Write "number" to the file descriptor.
virtual ssize_t write(char character, long sec, long usec);
// Write "character" to the file descriptor.
virtual ssize_t write(const char *string, long sec, long usec);
// Write "string" to the file descriptor. Note
// that "string" must be NULL-terminated.
virtual ssize_t write(const char *string, size_t size,
long sec, long usec);
// Write "size" bytes from "string" to the file
// descriptor. Note that it is possible to
// write beyond the string's NULL terminator
// using this method.
virtual ssize_t write(const void *buffer, size_t size,
long sec, long usec);
// Write "size" bytes from "buffer" to the file
// descriptor.
// Read methods - read data from the file descriptor.
// These methods return the number of bytes that were
// successfully read.
virtual ssize_t read(unsigned short *buffer);
// Reads sizeof(unsigned short) bytes
// from the file descriptor into "buffer" and
// converts "buffer" to host byte order.
virtual ssize_t read(unsigned long *buffer);
// Reads sizeof(unsigned short) bytes
// from the file descriptor into "buffer" and
// converts "buffer" to host byte order.
virtual ssize_t read(float *buffer);
// Reads sizeof(float) bytes from the file
// descriptor into "buffer".
virtual ssize_t read(double *buffer);
// Reads sizeof(double) bytes from the file
// descriptor into "buffer".
virtual ssize_t read(char *buffer);
// Reads sizeof(char) bytes from the file
// descriptor into "buffer".
virtual ssize_t read(char *buffer, size_t size);
// Reads "size" bytes from the file descriptor
// into "buffer".
virtual ssize_t read(void *buf, size_t size);
// Reads "size" bytes from the file descriptor
// into "buffer".
virtual ssize_t read(char **buffer, char *terminator);
// Reads from the file desciptor into "buffer"
// until "terminator" is encountered. Note
// that "buffer" is allocated internally and
// must be freed by the calling program.
// Read methods - read data from the file descriptor with a
// timeout of "sec" seconds and "usec" microseconds.
// These methods return the number of bytes that were
// successfully read or -1 if a timeout occurred.
virtual ssize_t read(unsigned short *buffer,
long sec, long usec);
// Reads sizeof(unsigned short) bytes
// from the file descriptor into "buffer".
virtual ssize_t read(unsigned long *buffer,
long sec, long usec);
// Reads sizeof(unsigned long) bytes
// from the file descriptor into "buffer".
virtual ssize_t read(float *buffer, long sec, long usec);
// Reads sizeof(float) bytes from the file
// descriptor into "buffer".
virtual ssize_t read(double *buffer, long sec, long usec);
// Reads sizeof(double) bytes from the file
// descriptor into "buffer".
virtual ssize_t read(char *buffer, long sec, long usec);
// Reads sizeof(char) bytes from the file
// descriptor into "buffer".
virtual ssize_t read(char *buffer, size_t size,
long sec, long usec);
// Reads "size" bytes from the file descriptor
// into "buffer".
virtual ssize_t read(void *buf, size_t size,
long sec, long usec);
// Reads "size" bytes from the file descriptor
// into "buffer".
virtual ssize_t read(char **buffer, char *terminator,
long sec, long usec);
// Reads from the file desciptor into "buffer"
// until "terminator" is encountered. Note
// that "buffer" is allocated internally and
// must be freed by the calling program.
#include <rudiments/private/datatransport.h>
};
#ifdef ENABLE_RUDIMENTS_INLINES
#include <rudiments/private/datatransportinlines.h>
#endif
#endif