/* FileCleanup ** ----------- ** This function closes the connection and frees memory. ** Returns YES on OK, else NO */ PRIVATE int FileCleanup (HTRequest *req, int status) { HTNet * net = HTRequest_net(req); file_info * file = (file_info *) HTNet_context(net); HTStream * input = HTRequest_inputStream(req); /* Free stream with data TO Local file system */ if (input) { if (status == HT_INTERRUPTED) (*input->isa->abort)(input, NULL); else (*input->isa->_free)(input); HTRequest_setInputStream(req, NULL); } /* ** Remove if we have registered a timer function as a callback */ if (file->timer) { HTTimer_delete(file->timer); file->timer = NULL; } if (file) { HT_FREE(file->local); HT_FREE(file); } HTNet_delete(net, status); return YES; }
/* HTNewsCleanup ** ------------- ** This function closes the connection and frees memory. ** Returns YES on OK, else NO */ PRIVATE int HTNewsCleanup (HTRequest * req, int status) { HTNet * net = HTRequest_net(req); news_info *news = (news_info *) HTNet_context(net); HTStream * input = HTRequest_inputStream(req); /* Free stream with data TO network */ if (!HTRequest_isDestination(req)) HTRequest_removeDestination(req); else if (input) { if (status == HT_INTERRUPTED) (*input->isa->abort)(input, NULL); else (*input->isa->_free)(input); HTRequest_setInputStream(req, NULL); } /* Remove the request object and our own context structure for nntp */ HTNet_delete(net, status); if (news) { HT_FREE(news->name); HTChunk_delete(news->cmd); HT_FREE(news); } return YES; }
/* ServerCleanup ** ------------- ** This function cleans up after the request ** Returns YES on OK, else NO */ PRIVATE int ServerCleanup (HTRequest * req, HTNet * net, int status) { https_info * http = (https_info *) HTNet_context(net); HTStream * input = HTRequest_inputStream(req); HTChannel * channel = HTNet_channel(net); /* Free stream with data TO network */ if (input) { if (status == HT_INTERRUPTED) (*input->isa->abort)(input, NULL); else (*input->isa->_free)(input); HTRequest_setInputStream(req, NULL); } /* Kill all remaining requests */ if (http->clients) { HTList * cur = http->clients; HTRequest * pres; while ((pres = HTList_nextObject(cur)) != NULL) HTRequest_kill(pres); HTList_delete(http->clients); } /* ** Remove the net object and our own context structure for http. ** Also unregister all pending requests and close the connection */ HTChannel_setSemaphore(channel, 0); HTNet_delete(net, HT_IGNORE); HT_FREE(http); return YES; }
PRIVATE int RawCleanup (HTRequest * request, int status) { HTNet * net = HTRequest_net(request); raw_info * raw = (raw_info *) HTNet_context(net); HTTRACE(PROT_TRACE, "Raw clean... Called with status %d, net %p\n" _ status _ net); if (status == HT_INTERRUPTED) { HTAlertCallback * cbf = HTAlert_find(HT_PROG_INTERRUPT); if (cbf) (*cbf)(request, HT_PROG_INTERRUPT, HT_MSG_NULL, NULL, NULL, NULL); } else if (status == HT_TIMEOUT) { HTAlertCallback * cbf = HTAlert_find(HT_PROG_TIMEOUT); if (cbf) (*cbf)(request, HT_PROG_TIMEOUT, HT_MSG_NULL, NULL, NULL, NULL); } /* Delete the Net object */ HTNet_delete(net, HT_ERROR); HT_FREE(raw); return YES; }