void ILibMiniWebServerSend(void *ReaderModule, struct packetheader *packet) { struct ILibMWSHTTPReaderObject *module = (struct ILibMWSHTTPReaderObject*)ReaderModule; char* buffer; int bufferlength = ILibGetRawPacket(packet,&buffer); send(module->ClientSocket,buffer,bufferlength,0); FREE(buffer); }
int ILibWebServer_StreamHeader(struct ILibWebServer_Session *session, struct packetheader *header) { struct packetheader *hdr = ILibWebClient_GetHeaderFromDataObject(session->Reserved3); struct packetheader_field_node *n = header->FirstField; char *buffer; int bufferLength; int RetVal; while(n!=NULL) { if(n->FieldLength==14 && strncasecmp(n->Field,"Content-Length",14)==0) { break; } n = n->NextField; } if(!(hdr->VersionLength==3 && memcmp(hdr->Version,"1.0",3)==0)) { // Remove Content-Length and Chunk it! if(n!=NULL) { n->Field = "Transfer-Encoding"; n->FieldLength = 17; n->FieldData = "chunked"; n->FieldDataLength = 7; } else { ILibAddHeaderLine(header,"Transfer-Encoding",17,"chunked",7); } } else { // Check to see if they gave us a Content-Length if(n==NULL) { // Must Close Socket when done session->Reserved6=1; } } bufferLength = ILibGetRawPacket(header,&buffer); RetVal = ILibWebServer_Send_Raw(session,buffer,bufferLength,0,0); ILibDestructPacket(header); return(RetVal); }
int ILibWebServer_Send(struct ILibWebServer_Session *session, struct packetheader *packet) { char *buffer; int bufferSize; int RetVal = 0; session->Reserved4=1; bufferSize = ILibGetRawPacket(packet,&buffer); RetVal = ILibAsyncServerSocket_Send(session->Reserved1,session->Reserved2,buffer,bufferSize,0); if(RetVal==0) { // Completed Send RetVal = ILibWebServer_RequestAnswered(session); } ILibDestructPacket(packet); return(RetVal); }