char* EncodeResponse(int status, const char* serverName, const char* contentType, const char* content, size_t contentLen) { char buf[PLAIN_TEXT_BUFLEN]; size_t len = sprintf(buf, "HTTP/1.1 %d %s\r\n" "Server: %s\r\n" "Accept-Ranges: bytes\r\n" "Content-Length: %zu\r\n" "Vary: Accept-Encoding\r\n" "Content-Type: %s\r\n\r\n", status, StatusName(status), serverName, contentLen, contentType); char* response = malloc(len + contentLen + 3); strcpy(response, buf); memcpy(response + len, content, contentLen); response[len + contentLen] = '\r'; response[len + contentLen + 1] = '\n'; response[len + contentLen + 2] = 0; return response; }
const char* Instruction::GetDescription() const { static char desc[1024]; switch (action) { case VECTOR: if (farcast) sprintf_s(desc, Game::GetText("instr.long.farcast").data(), rgn_name.data()); else sprintf_s(desc, Game::GetText("instr.long.vector").data(), rgn_name.data()); break; case LAUNCH: sprintf_s(desc, Game::GetText("instr.long.launch").data(), tgt_name.data()); break; case DOCK: sprintf_s(desc, Game::GetText("instr.long.dock").data(), tgt_name.data()); break; case RTB: sprintf_s(desc, Game::GetText("instr.long.return-to-base").data()); break; case DEFEND: if (priority == PRIMARY) { sprintf_s(desc, Game::GetText("instr.long.defend").data(), ActionName(action), tgt_desc.data()); } else { sprintf_s(desc, Game::GetText("instr.long.protect").data(), tgt_desc.data()); } break; case ESCORT: if (priority == PRIMARY) { sprintf_s(desc, Game::GetText("instr.long.escort").data(), ActionName(action), tgt_desc.data()); } else { sprintf_s(desc, Game::GetText("instr.long.protect").data(), tgt_desc.data()); } break; case PATROL: sprintf_s(desc, Game::GetText("instr.long.patrol").data(), tgt_desc.data(), rgn_name.data()); break; case SWEEP: sprintf_s(desc, Game::GetText("instr.long.sweep").data(), tgt_desc.data(), rgn_name.data()); break; case INTERCEPT: sprintf_s(desc, Game::GetText("instr.long.intercept").data(), tgt_desc.data()); break; case STRIKE: sprintf_s(desc, Game::GetText("instr.long.strike").data(), tgt_desc.data()); break; case ASSAULT: sprintf_s(desc, Game::GetText("instr.long.assault").data(), tgt_desc.data()); break; case RECON: sprintf_s(desc, Game::GetText("instr.long.recon").data(), tgt_desc.data()); break; default: sprintf_s(desc, "%s", ActionName(action)); break; } if (status != PENDING) { strcat_s(desc, " - "); strcat_s(desc, Game::GetText(StatusName(status))); } return desc; }