MCString MC_StringColorRange (MCString self, MCStringColor color, size_t a, size_t b) { if (self->external) { CDString* tmp = self; self = CD_CloneString(tmp); CD_DestroyString(tmp); } CDString* start = CD_CreateStringFromFormat("§%x", color); CDString* end = CD_CreateStringFromCString(MC_COLOR_WHITE); assert(self); assert(a < b); assert(a >= 0 && b <= CD_StringLength(self)); CD_InsertString(self, end, b); CD_InsertString(self, start, a); CD_DestroyString(start); CD_DestroyString(end); return self; }
static bool cdadmin_HandleChat (CDServer* server, CDPlayer* player, CDString* message) { if (!player->username) { return false; } CDString* name = cdadmin_ColoredNick(player); SLOG(server, LOG_NOTICE, "<%s> %s", CD_StringContent(player->username), CD_StringContent(message)); CD_ServerBroadcast(server, CD_CreateStringFromFormat("<%s> %s", CD_StringContent(name), CD_StringContent(message))); // TODO: testing/WIP? //CD_ServerBroadcast(server, CD_CreateStringFromCString(MCCharset)); CD_DestroyString(name); return false; }
static void cd_StaticRequest (struct evhttp_request* request, CDServer* server) { int error = HTTP_OK; const char* message = "OK"; const char* uri = evhttp_request_get_uri(request); struct evhttp_uri* decoded = evhttp_uri_parse(uri); if (evhttp_request_get_command(request) != EVHTTP_REQ_GET) { error = HTTP_BADMETHOD; message = "Invalid request method"; goto end; } if (!decoded || strstr(evhttp_uri_get_path(decoded), "..")) { error = HTTP_BADREQUEST; message = "Bad request"; goto end; } DO { CDString* path = CD_CreateStringFromFormat("%s/%s", server->config->cache.httpd.root, evhttp_uri_get_path(decoded) ? evhttp_uri_get_path(decoded) : "index.html"); if (CD_IsDirectory(CD_StringContent(path))) { CD_AppendCString(path, "/index.html"); } if (!CD_IsReadable(CD_StringContent(path))) { error = HTTP_NOTFOUND; message = "File not found"; CD_DestroyString(path); goto end; } struct evbuffer* buffer = evbuffer_new(); int fd = open(CD_StringContent(path), O_RDONLY); evhttp_add_header(evhttp_request_get_output_headers(request), "Content-Type", cd_GuessContentType(CD_StringContent(path))); evbuffer_add_file(buffer, fd, 0, CD_FileSize(CD_StringContent(path))); evhttp_send_reply(request, HTTP_OK, "OK", buffer); evbuffer_free(buffer); CD_DestroyString(path); } end: { if (decoded) { evhttp_uri_free(decoded); } if (error != HTTP_OK) { evhttp_send_error(request, error, message); } } }