sam_header parse_sam_header(const std::string &header_text) { sam_header header; std::stringstream headers_stream(header_text); std::string header_tag; for (std::string header_string; std::getline(headers_stream, header_string); ) { std::stringstream header_stream(header_string); header_stream >> header_tag; header_tag = header_tag.substr(1); std::map<std::string, std::string> field_map; for (std::string field; std::getline(header_stream, field, '\t');) { std::stringstream field_stream(field); for (std::string field_text; std::getline(field_stream, field_text, '\t');) { std::vector<std::string> splitfield = split(field_text, ":"); field_map[splitfield[0]] = splitfield[1]; } } header[header_tag].push_back(field_map); } return header; }
static void import_m1_physics_data() { OpenedFile PhysicsFile; if (!PhysicsFileSpec.Open(PhysicsFile)) { return; } int32 position = 0; int32 length; PhysicsFile.GetLength(length); while (position < length) { std::vector<uint8> header(12); PhysicsFile.Read(header.size(), &header[0]); AIStreamBE header_stream(&header[0], header.size()); uint32 tag; uint16 count; uint16 size; header_stream >> tag; header_stream.ignore(4); // unused header_stream >> count; header_stream >> size; std::vector<uint8> data(count * size); PhysicsFile.Read(data.size(), &data[0]); switch (tag) { case M1_MONSTER_PHYSICS_TAG: unpack_m1_monster_definition(&data[0], count); break; case M1_EFFECTS_PHYSICS_TAG: unpack_m1_effect_definition(&data[0], count); break; case M1_PROJECTILE_PHYSICS_TAG: unpack_m1_projectile_definition(&data[0], count); break; case M1_PHYSICS_PHYSICS_TAG: unpack_m1_physics_constants(&data[0], count); break; case M1_WEAPONS_PHYSICS_TAG: unpack_m1_weapon_definition(&data[0], count); break; } PhysicsFile.GetPosition(position); } }
void httpclient::httpcontext::post(const std::string & host, const std::string & port, const std::string & path, const std::map<std::string, std::string> & headers, bool secure) { if (!connect( #ifndef HPROSE_NO_OPENSSL secure ? ssl_socket.next_layer() : #endif socket, host, port, secure)) return; boost::system::error_code error = boost::asio::error::host_not_found; boost::asio::streambuf header; std::iostream header_stream(&header); header_stream << "POST " << ((path == "/*") ? std::string("*") : path) << " HTTP/1.1\r\n";; for (std::map<std::string, std::string>::const_iterator iter = headers.begin(); iter != headers.end(); iter++) { header_stream << iter->first << ": " << iter->second << "\r\n"; } std::string cookie = cookies::get_cookie(alive_host, path, secure); if (!cookie.empty()) { header_stream << "Cookie: " << cookie << "\r\n"; } header_stream << "Content-Length: " << request.size() << "\r\n\r\n"; if (request.size() >= 64 * 1024) { write(header, secure); write(request, secure); } else { header_stream << &request; write(header, secure); } if (response.size()) { response.consume(response.size()); } std::string s; size_t bytes = 0, len = 0; bool toclose = false, chunked = false; while ((bytes = read_line(header, secure)) > 2) { header_stream >> s; if (_strcmpi(s.c_str(), "Content-Length:") == 0) { header_stream >> len; } else if (_strcmpi(s.c_str(), "Connection:") == 0)
static void import_m1_physics_data_from_network(uint8 *data, uint32 length) { int32 position = 0; while (position < length) { AIStreamBE header_stream(&data[position], 12); position += 12; uint32 tag; uint16 count; uint16 size; header_stream >> tag; header_stream.ignore(4); // unused header_stream >> count; header_stream >> size; switch (tag) { case M1_MONSTER_PHYSICS_TAG: unpack_m1_monster_definition(&data[position], count); break; case M1_EFFECTS_PHYSICS_TAG: unpack_m1_effect_definition(&data[position], count); break; case M1_PROJECTILE_PHYSICS_TAG: unpack_m1_projectile_definition(&data[position], count); break; case M1_PHYSICS_PHYSICS_TAG: unpack_m1_physics_constants(&data[position], count); break; case M1_WEAPONS_PHYSICS_TAG: unpack_m1_weapon_definition(&data[position], count); break; } position += count * size; } }