/* HTSocket.c ** LOAD A SOCKET ** ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. ** @(#) $Id: HTSocket.c,v 2.32 1998/05/04 19:37:21 frystyk Exp $ ** ** ** HISTORY: ** 6 June 95 HFN Written */ /* Library Include files */ #include "wwwsys.h" #include "WWWUtil.h" #include "WWWCore.h" #include "WWWTrans.h" #include "HTNetMan.h" #include "HTSocket.h" /* Implemented here */ struct _HTStream { const HTStreamClass * isa; }; struct _HTInputStream { const HTInputStreamClass * isa; }; /* ------------------------------------------------------------------------- */ /* HTLoadSocket ** ------------ ** Given an open socket, this routine loads what ever is on the socket ** ** On entry, ** request This is the request structure ** On Exit ** returns HT_ERROR Error has occured in call back ** HT_OK Call back was OK */ PRIVATE int SocketEvent (SOCKET soc, void * pVoid, HTEventType type); PUBLIC int HTLoadSocket (SOCKET soc, HTRequest * request) { HTNet * net = HTRequest_net(request); if (soc==INVSOC) { if (PROT_TRACE) HTTrace("Load Socket. invalid socket\n"); return HT_ERROR; } if (PROT_TRACE) HTTrace("Load Socket. Loading socket %d\n",soc); /* ** Create the stream pipe FROM the channel to the application. ** The target for the input stream pipe is set up using the ** stream stack. */ { net->readStream = HTRequest_outputStream(request); if (!net->readStream) net->readStream = HTErrorStream(); HTRequest_setOutputConnected(request, YES); } HTNet_setEventCallback(net, SocketEvent); HTNet_setEventParam(net, net); /* callbacks get http* */ return SocketEvent(soc, net, HTEvent_BEGIN); /* get it started - ops is ignored */ } PRIVATE int SocketEvent (SOCKET soc, void * pVoid, HTEventType type) { HTNet * net = (HTNet *)pVoid; if (type == HTEvent_CLOSE) { /* Interrupted */ HTNet_delete(net, HT_INTERRUPTED); return HT_OK; } /* In this load function we only have one state: READ */ { int status = HTHost_read(net->host, net); if (PROT_TRACE) HTTrace("Load Socket. Read returns %d\n", status); } return HT_OK; }