static void cd_ConsoleLog (int priority, const char* format, ...) { /* Return on MASKed log priorities */ if (LOG_MASK(priority) & cd_mask) { return; } static const char* names[] = { "EMERG", "ALERT", "CRIT", "ERR", "WARNING", "NOTICE", "INFO", "DEBUG" }; va_list ap; va_start(ap, format); CDString* priorityBuffer; CDString* messageBuffer = CD_CreateStringFromFormatList(format, ap); if (priority >= (sizeof(names) / sizeof(char*)) || priority < 0) { priorityBuffer = CD_CreateStringFromCString("UNKNOWN"); } else { priorityBuffer = CD_CreateStringFromCString(names[priority]); } printf("%s: %s\n", CD_StringContent(priorityBuffer), CD_StringContent(messageBuffer)); fflush(stdout); CD_DestroyString(priorityBuffer); CD_DestroyString(messageBuffer); va_end(ap); }
void cdtest_String_Minecraft_valid (void* data) { CDString* invalid = CD_CreateStringFromCString("æßðđ¼½¬²³æðđ]}»”¢“}¹²³þæßł@»ł”##æðþŋŋŋ§2ŋŋŋł€¶®ÐJª§&<©>‘ŁØ&ØΩ§3"); CDString* valid = CD_CreateStringFromCString("æ???¼½¬??æ??]}»???}????æ??@»??##æ?????§2??????®?Jª§&<?>??Ø&Ø?"); tt_assert(MC_StringIsValid(invalid) == false); tt_assert(MC_StringIsValid(valid) == true); end: { CD_DestroyString(invalid); CD_DestroyString(valid); } }
static void cdsurvivalproxy_ProxyReadCallback (struct bufferevent* event, CDClient* client) { assert(client); CDServer* server = client->server; assert(server); CDBuffers* proxyBuffers = (CDBuffers*)CD_DynamicGet(client, "Client.proxyBuffers"); assert(proxyBuffers); void* packet; if (server->protocol->parsable(proxyBuffers)) { if ((packet = server->protocol->parse(proxyBuffers, true))) { CD_BufferReadIn(proxyBuffers, CDNull, CDNull); //TODO: worker, or something cdsurvivalproxy_ProxyProcess(server, client, packet); SV_DestroyPacket(packet); } } else { if (errno == EILSEQ) { CD_ServerKick(server, client, CD_CreateStringFromCString("bad packet")); } } }
static void cdsurvivalproxy_ProxyErrorCallback (struct bufferevent* event, short error, CDClient* client) { assert(client); CDServer* server = client->server; assert(server); if (error & BEV_EVENT_CONNECTED) { SLOG(client->server, LOG_INFO, "proxy connected :D"); } if (!((error & BEV_EVENT_EOF) || (error & BEV_EVENT_ERROR) || (error & BEV_EVENT_TIMEOUT))) { //not an error return; } if (error & BEV_EVENT_ERROR) { SLOG(client->server, LOG_INFO, "libevent: ip %s - %s", client->ip, evutil_socket_error_to_string(EVUTIL_SOCKET_ERROR())); } else if (error & BEV_EVENT_TIMEOUT) { SERR(client->server, "A bufferevent timeout?"); } else if (error & BEV_EVENT_EOF) { SLOG(client->server, LOG_INFO, "remote EOF"); } CD_ServerKick(client->server, client, CD_CreateStringFromCString("remote connection died")); }
void cdtest_String_UTF8_length (void* data) { CDString* test = CD_CreateStringFromCString("ƧÐ"); tt_int_op(CD_StringLength(test), ==, 3); tt_int_op(CD_StringSize(test), ==, 6); end: { CD_DestroyString(test); } }
static bool cdadmin_AuthLevelIsEnoughWithMessage (CDPlayer* player, CDAuthLevel level) { if (!cdadmin_AuthLevelIsEnough(player, level)) { cdadmin_SendFailure(player, CD_CreateStringFromCString( "Authorization level not enough")); return false; } return true; }
void cdtest_String_Minecraft_sanitize (void* data) { CDString* string = CD_CreateStringFromCString("æßðđ¼½¬²³æðđ]}»”¢“}¹²³þæßł@»ł”##æðþŋŋŋ§2ŋŋŋł€¶®ÐJª§&<©>‘ŁØ&ØΩ§3"); CDString* sanitized = MC_StringSanitize(string); tt_assert(CD_StringIsEqual(sanitized, "æ???¼½¬??æ??]}»???}????æ??@»??##æ?????§2??????®?Jª§&<?>??Ø&Ø?")); end: { CD_DestroyString(string); CD_DestroyString(sanitized); } }
void cdtest_String_UTF8_charAt (void* data) { CDString* test = CD_CreateStringFromCString("ƧÐ"); CDString* ch = CD_CharAt(test, 1); tt_assert(CD_StringIsEqual(ch, "§")); end: { CD_DestroyString(test); CD_DestroyString(ch); } }
CDString* CD_AppendCString (CDString* self, const char* append) { assert(self); assert(append); cd_MakeStringInternal(self); CDString* tmp = CD_CreateStringFromCString(append); if (!CD_AppendStringAndClean(self, tmp)) { self = NULL; } return self; }
CDString* CD_PrependCString (CDString* self, const char* append) { assert(self); assert(append); cd_MakeStringInternal(self); CDString* tmp = CD_CreateStringFromCString(append); if (!CD_PrependString(self, tmp)) { self = NULL; } CD_DestroyString(tmp); return self; }
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; }