示例#1
0
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);
}
示例#2
0
文件: tests.c 项目: gmoonen/craftd
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);
    }
}
示例#3
0
文件: callbacks.c 项目: CogDis/craftd
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"));
		}
	}
	
}
示例#4
0
文件: callbacks.c 项目: CogDis/craftd
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"));
}
示例#5
0
文件: tests.c 项目: gmoonen/craftd
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);
    }
}
示例#6
0
文件: main.c 项目: CogDis/craftd
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;
}
示例#7
0
文件: tests.c 项目: gmoonen/craftd
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);
    }
}
示例#8
0
文件: tests.c 项目: gmoonen/craftd
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);
    }
}
示例#9
0
文件: String.c 项目: CogDis/craftd
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;
}
示例#10
0
文件: String.c 项目: CogDis/craftd
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;
}
示例#11
0
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;
}