devnull.c revision ad27e1d5e48ca41245120c331cc88b50464813ce
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/* Copyright (c) 2001, Stanford University
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * All rights reserved
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync *
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * See the file LICENSE.txt for information on redistributing this software.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#include "cr_net.h"
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#include "cr_mem.h"
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#include "cr_error.h"
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#include "net_internals.h"
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncstatic void
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynccrDevnullWriteExact( CRConnection *conn, const void *buf, unsigned int len )
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync{
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync (void) conn;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync (void) buf;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync (void) len;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync}
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncstatic void *
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynccrDevnullAlloc( CRConnection *conn )
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync{
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync return crAlloc( conn->buffer_size );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync}
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncstatic void
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynccrDevnullSingleRecv( CRConnection *conn, void *buf, unsigned int len )
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync{
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync crError( "You can't receive data on a devnull connection!" );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync (void) conn;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync (void) buf;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync (void) len;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync}
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncstatic void
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynccrDevnullFree( CRConnection *conn, void *buf )
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync{
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync crFree( buf );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync (void) conn;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync}
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncstatic void
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynccrDevnullSend( CRConnection *conn, void **bufp,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync const void *start, unsigned int len )
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync{
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync if (bufp)
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync {
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync /* We're sending something we've allocated. It's now ours.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * If the callers wants to send something else, he'll allocate
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * something else.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync *
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * ENFORCE IT! */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync crDevnullFree( conn, *bufp );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync }
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync (void) conn;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync (void) bufp;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync (void) start;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync (void) len;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync}
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncint
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynccrDevnullRecv( void )
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync{
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync crError( "You can't receive data on a DevNull network, stupid." );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync return 0;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync}
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncvoid
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynccrDevnullInit( CRNetReceiveFuncList *rfl, CRNetCloseFuncList *cfl, unsigned int mtu )
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync{
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync (void) rfl;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync (void) cfl;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync (void) mtu;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync}
static void
crDevnullAccept( CRConnection *conn, const char *hostname, unsigned short port )
{
crError( "Well, you *could* accept a devnull client, but you'd be disappointed. ");
(void) conn;
(void) port;
}
static int
crDevnullDoConnect( CRConnection *conn )
{
(void) conn;
return 1;
}
static void
crDevnullDoDisconnect( CRConnection *conn )
{
(void) conn;
}
void crDevnullConnection( CRConnection *conn )
{
conn->type = CR_DROP_PACKETS;
conn->Alloc = crDevnullAlloc;
conn->Send = crDevnullSend;
conn->SendExact = crDevnullWriteExact;
conn->Recv = crDevnullSingleRecv;
conn->Free = crDevnullFree;
conn->Accept = crDevnullAccept;
conn->Connect = crDevnullDoConnect;
conn->Disconnect = crDevnullDoDisconnect;
conn->actual_network = 0;
}
CRConnection** crDevnullDump( int * num )
{
*num = 0;
return NULL;
}