void TagPayloadCompound::getStorageBytes(iostream& inStream){ for(vector<NBTTag>::iterator it = payload.begin(); it != payload.end(); it++) { it->getStorageBytes(inStream); } inStream << (unsigned char) 0; // TAG_End inStream.flush(); }
void TagPayloadIntArray::getStorageBytes(iostream& inStream){ inStream << EndianSwapInt(length); for(int i = 0; i < length; i++){ writeSwappedIntToStream(payload[i], inStream); } inStream.flush(); }
void TagPayloadByteArray::getStorageBytes(iostream& inStream){ inStream << EndianSwapInt(length); for(int i = 0; i < length; i++){ inStream << payload[i]; } inStream.flush(); }
void TagPayloadList::getStorageBytes(iostream& inStream){ inStream << getCharFromTag(type); writeSwappedIntToStream((int) payload.size(), inStream); for(vector<TagPayload*>::iterator it = payload.begin(); it != payload.end(); ++it) { (*it)->getStorageBytes(inStream); } inStream.flush(); }
// NOTE: This algorithm is an XOR approach for encrypting a stream in place // and is very quick, however, it is not considered "strong encryption" and // therefore should not be used for encrypting highly sensitive information. void crypt_stream( iostream& io, const char* p_key, size_t key_length ) { unsigned char key[ c_max_key_size ]; unsigned char buf[ c_file_buf_size ]; memset( key, '\0', c_max_key_size ); io.seekg( 0, ios::end ); size_t length = ( size_t )io.tellg( ); io.seekg( 0, ios::beg ); memcpy( key, p_key, key_length ); unsigned char datkey = 0; for( size_t i = 0; i < key_length; i++ ) datkey += key[ i ]; size_t buflen = c_file_buf_size; for( size_t pos = 0; pos < length; pos += buflen ) { if( length - pos < c_file_buf_size ) buflen = length - pos; int dir = 1; int key_offset = 0; io.seekg( pos, ios::beg ); io.read( ( char* )buf, buflen ); unsigned char ch; for( size_t offset = 0; offset < buflen; offset++ ) { ch = buf[ offset ]; ch ^= datkey; buf[ offset ] = ch; datkey += ( key[ key_offset ] % 131 ); key[ key_offset ] ^= datkey; key_offset += dir; if( datkey % 31 == 0 ) dir *= -1; if( key_offset >= ( int )key_length ) key_offset = 0; if( key_offset < 0 ) key_offset = ( int )key_length - 1; } io.seekg( pos, ios::beg ); io.write( ( char* )buf, buflen ); } memset( buf, '\0', c_file_buf_size ); memset( key, '\0', c_max_key_size ); }
void httperror (iostream &sstream, int status, string s_str, string relURL) { string errorFile; con.errorLog (s_str, relURL); // display error page for corresponding error if (status == 403) errorFile = "public_www/403error.html"; else if (status == 404) errorFile = "public_www/404error.html"; else if (status == 400) errorFile = "public_www/400error.html"; else if (status == 501) errorFile = "public_www/501error.html"; else errorFile = "public_www/000error.html"; ifstream inputfile2(errorFile.c_str(), ios::in); string header = "HTTP/1.1 200 OK\r\n"; sstream.write (header.c_str(), header.size()); header = "Content-Type:text/html\r\n"; sstream.write (header.c_str(), header.size()); int filesize = FileSize (errorFile.c_str()); header = "Content-Length:" + strconvert(filesize) + "\r\n"; sstream.write (header.c_str(), header.size()); // end with empty line sstream.write ("\r\n", 2); char c2; for (; filesize >0; filesize--) { c2 = inputfile2.get(); sstream.put (c2); //cout.put(c2); if (sstream.fail()) { // socket stream failed. Closed by client??? // nothing we can do, but stop break; } } sstream.flush (); inputfile2.close (); }
void TagPayloadInt::getStorageBytes(iostream& inStream){ writeSwappedIntToStream(payload, inStream); inStream.flush(); }
void NBTTag::getStorageBytes(iostream& inStream){ inStream << getCharFromTag(TagType); name.getStorageBytes(inStream); Payload->getStorageBytes(inStream); inStream.flush(); }
void TagPayloadByte::getStorageBytes(iostream& inStream){ inStream << payload; inStream.flush(); }
void TagPayloadString::getStorageBytes(iostream& inStream){ writeSwappedShortToStream((unsigned short) payload.size(), inStream); inStream << payload; inStream.flush(); }
void makeDirectory (iostream &sstream, string relURL) { string makedir = "make_directory.html"; DIR *pdir; struct dirent *pent; string requestedFile = ROOT_DIR + relURL; pdir=opendir(requestedFile.c_str()); ofstream myfile; myfile.open (makedir.c_str()); myfile << "<html><head>" << endl; myfile << "<title>Listing Directory Contents of " << relURL << "</title>" << endl; myfile << "</head><body>" << endl; myfile << "<h1>Listing Directory Contents of " << relURL << "</h1>" << endl; while ((pent=readdir(pdir))){ if (!strcmp(pent->d_name, ".") || !strcmp(pent->d_name, "..")) continue; myfile << "<a href=\"" << relURL << pent->d_name << "\">" << pent->d_name << "</a>"; if (con.lookupAccessLog(relURL + pent->d_name) == "") myfile << " <-> <-><br>" << endl; else myfile << " " << con.lookupAccessLog(relURL + pent->d_name) << "<br>" << endl; } myfile << "</body></html>" << endl; closedir(pdir); ifstream inputfile2(makedir.c_str(), ios::in); string header = "HTTP/1.1 200 OK\r\n"; sstream.write (header.c_str(), header.size()); header = "Content-Type:text/html\r\n"; sstream.write (header.c_str(), header.size()); int filesize = FileSize (makedir.c_str()); header = "Content-Length:" + strconvert(filesize) + "\r\n"; sstream.write (header.c_str(), header.size()); // end with empty line sstream.write ("\r\n", 2); char c2; for (; filesize >0; filesize--) { c2 = inputfile2.get(); sstream.put (c2); //cout.put(c2); if (sstream.fail()) { // socket stream failed. Closed by client??? // nothing we can do, but stop break; } } sstream.flush (); inputfile2.close (); }