Ejemplo n.º 1
0
//togo_hash.c
void togo_hash_test()
{
	togo_log(DEBUG, "Testing togo_hash.c start ============================");
	int i, j;

	//togo_djb_hash
	i = togo_djb_hash("WOSHISHEN");
	j = togo_djb_hash("asdsadsad");
	if (i == 321158909 && j == 1542131117) {
		togo_log(DEBUG,
				"Testing function:togo_djb_hash .............................OK");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_djb_hash .............................FAIL");
		togo_exit();
	}

	//togo_murmur_hash2
	i = togo_murmur_hash2("WOSHISHEN", togo_strlen("WOSHISHEN"));
	j = togo_murmur_hash2("asdsadsad", togo_strlen("asdsadsad"));
	if (i == 1501669989 && j == 844110999) {
		togo_log(DEBUG,
				"Testing function:togo_djb_hash .............................OK");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_djb_hash .............................FAIL");
		togo_exit();
	}

	togo_log(DEBUG, "Testing togo_hash.c end ============================\r\n");
}
Ejemplo n.º 2
0
BOOL togo_m_cache_get(TOGO_THREAD_ITEM * socket_item, u_char * key)
{
	TOGO_M_CACHE_ITEM * item;
	TOGO_HASHTABLE_ITEM * hitem;
	uint32_t vlen;
	void * buf;

	if (togo_m_cache->is_flush == TRUE) {
		return FALSE;
	}
	hitem = togo_hashtable_get(togo_m_cache_hashtable, key);
	if (hitem == NULL) {
		togo_send_data(socket_item, TOGO_SBUF_NOT_EXIST,
				togo_strlen(TOGO_SBUF_NOT_EXIST));
		return TRUE;
	}

	item = (TOGO_M_CACHE_ITEM *) hitem->p;
	if (item->expires != 0 && item->expires < togo_get_time()) {
		togo_m_cache_delete_comm(item);
		togo_send_data(socket_item, TOGO_SBUF_NOT_EXIST,
				togo_strlen(TOGO_SBUF_NOT_EXIST));
		return TRUE;
	}

	buf = togo_m_cache_get_val_addr(item, item->klen);
	vlen = item->vlen;

	togo_send_dbig(socket_item, buf, vlen, togo_m_cache_get_cb, (void *) item);

	return TRUE;

}
Ejemplo n.º 3
0
BOOL togo_m_cache_replace(TOGO_THREAD_ITEM * socket_item, u_char * key,
		uint32_t expires, uint32_t vlen)
{
	TOGO_M_CACHE_ITEM * item;
	TOGO_HASHTABLE_ITEM * hitem;

	hitem = togo_hashtable_get(togo_m_cache_hashtable, key);
	if (hitem == NULL) {

		/* Skip to read the value!*/
		togo_read_skip(socket_item, vlen);

		togo_send_data(socket_item, TOGO_SBUF_NOT_EXIST,
				togo_strlen(TOGO_SBUF_NOT_EXIST));
		return TRUE;

	}

	item = (TOGO_M_CACHE_ITEM *) hitem->p;

	if (item->expires != 0 && item->expires < togo_get_time()) {

		/* Skip to read the value!*/
		togo_read_skip(socket_item, vlen);

		togo_m_cache_delete_comm(item);
		togo_send_data(socket_item, TOGO_SBUF_NOT_EXIST,
				togo_strlen(TOGO_SBUF_NOT_EXIST));
		return TRUE;
	}

	togo_m_cache_delete_comm(item);

	return togo_m_cache_set_comm(socket_item, key, expires, vlen);
}
Ejemplo n.º 4
0
//togo_pool.c
void togo_pool_test()
{
	togo_log(DEBUG, "Testing togo_pool.c start ============================");
	void * p;
	void * p1;

	//togo_pool_create
	TOGO_POOL * pool = togo_pool_create(10 * 1024);
	if (pool->total_size == 10288 && pool->max == 10 * 1024) {
		togo_log(DEBUG,
				"Testing function:togo_pool_create .............................OK");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_pool_create .............................FAIL");
		togo_exit();
	}

	//togo_pool_calloc
	p1 = togo_pool_calloc(pool, 10 * 1024);
	p = togo_pool_calloc(pool, 10);
	togo_strcpy(p, "woshishen");
	if (strcmp(p, "woshishen") == 0 && togo_strlen(p) == 9
			&& pool->large->size == 10 * 1024) {
		togo_log(DEBUG,
				"Testing function:togo_pool_calloc .............................OK");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_pool_calloc .............................FAIL");
		togo_exit();
	}

	//togo_pool_realloc(pool, 20);
	p = togo_pool_realloc(pool, (void *) p, 10, 15);
	togo_strcpy(p, "woshishen11234");
	if (strcmp(p, "woshishen11234") == 0 && togo_strlen(p) == 14) {
		togo_log(DEBUG,
				"Testing function:togo_pool_realloc .............................OK");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_pool_realloc .............................FAIL");
		togo_exit();
	}

	//togo_pool_free_data
	togo_pool_free_data(pool, (void *) p);
	togo_pool_free_large(pool, (void *) p1);

	if (pool->large == NULL) {
		togo_log(DEBUG,
				"Testing function:togo_pool_free_large .............................OK");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_pool_free_large .............................FAIL");
		togo_exit();
	}
	togo_log(DEBUG, "Testing togo_pool.c end ============================\r\n");
}
Ejemplo n.º 5
0
int togo_wt_send_cb(TOGO_THREAD_ITEM * socket_item)
{
	int ret;
	char int_str[12];

	/* If sstatus equal to 3, send the big data! */
	if (socket_item->sstatus == 3) {

		BDATA_CALLBACK callback;
		if (socket_item->bsbuf == NULL || socket_item->bssize == 0) {
			return 0;
		}

		togo_itoa((uint32_t) socket_item->bssize, int_str, 10);

		/**
		 * Retrun:TOGO_S10TOGO_E/r/nAAAAAAAAAA
		 */
		ret = bufferevent_write(socket_item->bev, TOGO_SBUF_START,
				togo_strlen(TOGO_SBUF_START));
		ret = bufferevent_write(socket_item->bev, int_str,
				togo_strlen(int_str));
		ret += bufferevent_write(socket_item->bev, TOGO_SBUF_END,
				togo_strlen(TOGO_SBUF_END));
		ret += bufferevent_write(socket_item->bev, socket_item->bsbuf,
				socket_item->bssize);

		if (ret < 0) {
			togo_log(INFO, "Send data error");
		}

		callback = socket_item->bscb;
		if (callback != NULL) {
			callback(socket_item);
		}
		socket_item->sstatus = 0;

	} else {

		if (socket_item->sfd < 1 || socket_item->sbuf == NULL
				|| socket_item->ssize == 0) {
			return 0;
		}

		ret = bufferevent_write(socket_item->bev, socket_item->sbuf,
				socket_item->ssize);
		if (ret < 0) {
			togo_log(INFO, "Send data error");
		}
		socket_item->ssize = 0;
	}

	return ret;
}
Ejemplo n.º 6
0
BOOL togo_m_cache_delete(TOGO_THREAD_ITEM * socket_item, u_char * key)
{
	TOGO_M_CACHE_ITEM * item;
	TOGO_HASHTABLE_ITEM * hitem;

	hitem = togo_hashtable_get(togo_m_cache_hashtable, key);
	if (hitem == NULL) {

		togo_send_data(socket_item, TOGO_SBUF_NOT_EXIST,
				togo_strlen(TOGO_SBUF_NOT_EXIST));
		return TRUE;
	}

	item = (TOGO_M_CACHE_ITEM *) hitem->p;
	return togo_m_cache_delete_comm(item);
}
Ejemplo n.º 7
0
BOOL togo_m_queue_count(u_char * name, TOGO_THREAD_ITEM * socket_item)
{
	uint32_t count;
	TOGO_M_QUEUE * queue;
	size_t str_size;

	queue = togo_m_queue_get(name);
	count = (queue == NULL) ? 0 : queue->total_elt;

	u_char * str = (u_char *) togo_pool_alloc(queue->pool, 12);
	togo_itoa(count, str, 10);

	togo_send_data(socket_item, str, togo_strlen(str));
	togo_pool_free_data(queue->pool, (void *) str);
	return TRUE;
}
Ejemplo n.º 8
0
static BOOL togo_m_cache_set_comm(TOGO_THREAD_ITEM * socket_item, u_char * key,
		uint32_t expires, uint32_t vlen)
{
	uint32_t klen, item_size, area_id, i, this_time;
	TOGO_M_CACHE_AREA * area;
	TOGO_M_CACHE_ITEM * item;
	TOGO_M_CACHE_CHUNK * chunk;
	TOGO_M_CACHE_ITEM * temp;

	klen = togo_strlen(key);
	if (klen == 0 || vlen == 0 || togo_m_cache->area == NULL) {
		return FALSE;
	}

	item_size = togo_m_cache_item_size(klen, vlen);

	area_id = togo_m_cache_area_search(togo_m_cache->area_table, item_size,
			togo_m_cache->total_area);
	if (area_id == -1) {
		return FALSE;
	}

	area = (TOGO_M_CACHE_AREA *) (togo_m_cache->area + area_id);
	pthread_mutex_lock(&area->lock);

	if (togo_m_cache->is_flush == TRUE) {
		pthread_mutex_unlock(&area->lock);
		return FALSE;
	}

	if (area->chunk_item_curr < area->chunk_item_num) {

		chunk = area->chunk_curr;
		item = (TOGO_M_CACHE_ITEM *) ((u_char *) chunk->p
				+ (area->msize * area->chunk_item_curr));
		togo_m_cache_create_item(socket_item, item, area, klen, vlen, key,
				expires);

		area->chunk_item_curr++;

	} else {

		if (area->free_list != NULL) {
			item = area->free_list;
			if (area->free_list->next == NULL) {
				area->free_list = NULL;
			} else {
				area->free_list->next->prev = NULL;
				area->free_list = area->free_list->next;
			}

			togo_m_cache_create_item(socket_item, item, area, klen, vlen, key,
					expires);

		} else {
			/* Alloc a new chunk*/
			pthread_mutex_lock(&togo_m_cache->glock);

			if (togo_m_cache->total_size < TOGO_M_CACHE_MAX_SIZE) {

				chunk = togo_m_cache_create_chunk(area);
				if (chunk == NULL) {
					pthread_mutex_unlock(&area->lock);
					return FALSE;
				}

				if (area->chunk_list == NULL) {
					area->chunk_list = chunk;
				} else {
					area->chunk_list->prev = chunk;
					chunk->next = area->chunk_list;
					area->chunk_list = chunk;
				}
				area->chunk_curr = chunk;
				area->chunk_item_curr = 0;

				area->total_chunk++;
				area->total_size += TOGO_M_CACHE_CHUNK_SIZE;

				pthread_mutex_unlock(&togo_m_cache->glock);

				item = (TOGO_M_CACHE_ITEM *) ((u_char *) chunk->p
						+ (area->msize * area->chunk_item_curr));

				togo_m_cache_create_item(socket_item, item, area, klen, vlen,
						key, expires);

			} else {
				pthread_mutex_unlock(&togo_m_cache->glock);

				/* LRU */
				if (area->lru_tail == NULL) {
					pthread_mutex_unlock(&area->lock);
					return FALSE;
				}

				this_time = togo_get_time();
				item = NULL;
				temp = area->lru_tail;
				for (i = 0; i < tries; i++) {
					if (temp == NULL) {
						break;
					}
					if (temp->expires != 0 && temp->expires < this_time) {
						break;
					}
					temp = temp->prev;
				}
				if (temp == NULL || temp->expires == 0
						|| temp->expires > this_time) {
					item = (TOGO_M_CACHE_ITEM *) area->lru_tail;
					area->lru_tail = area->lru_tail->prev;
				} else {
					item = temp;
					if (temp->next != NULL) {
						temp->next->prev = temp->prev;
					}
					if (temp->prev != NULL) {
						temp->prev->next = temp->next;
					}
					if (area->lru_head == temp) {
						area->lru_head = temp->next;
					}
					if (area->lru_tail == temp) {
						area->lru_tail = temp->prev;
					}
				}
				u_char * old_key = togo_m_cache_get_key_addr(item);
				togo_hashtable_remove(togo_m_cache_hashtable, old_key);
				togo_m_cache_create_item(socket_item, item, area, klen, vlen,
						key, expires);
			}

		}
	}

	togo_m_cache->total_write++;
	togo_m_cache->total_hit++;

	pthread_mutex_unlock(&area->lock);

	return TRUE;

}
Ejemplo n.º 9
0
//togo_string.c
void togo_string_test()
{
	togo_log(DEBUG, "Testing togo_string.c start ============================");
	u_char c;
	char * dst = togo_alloc(100);
	char * str2 = togo_alloc(100);

	//togo_encode_base64
	int i;
	char * str = "SAODOSADO988766556asdsad";
	i = togo_encode_base64(dst, str);
	if (strcmp(dst, "U0FPRE9TQURPOTg4NzY2NTU2YXNkc2Fk") == 0
			&& strlen("U0FPRE9TQURPOTg4NzY2NTU2YXNkc2Fk") == i) {
		togo_log(DEBUG,
				"Testing function:togo_encode_base64 .............................OK");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_encode_base64 .............................FAIL");
		togo_exit();
	}

	//togo_decode_base64
	i = togo_decode_base64(str2, dst);
	if (strcmp(str, str2) == 0 && strlen(str2) == i) {
		togo_log(DEBUG,
				"Testing function:togo_decode_base64 .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_decode_base64 .............................FAIL ");
		togo_exit();
	}

	//togo_tolower
	c = togo_tolower('X');
	if (c == 'x') {
		togo_log(DEBUG,
				"Testing function:togo_tolower .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_tolower .............................FAIL ");
		togo_exit();
	}

	//togo_toupper
	c = togo_toupper('a');
	if (c == 'A') {
		togo_log(DEBUG,
				"Testing function:togo_toupper .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_toupper .............................FAIL ");
		togo_exit();
	}

	//togo_strcmp
	char * s1 = "woshishen";
	char * s2 = "woshishen";
	i = togo_strcmp(s1, s2);
	if (i == 0) {
		togo_log(DEBUG,
				"Testing function:togo_strcmp .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_strcmp .............................FAIL ");
		togo_exit();
	}

	//togo_strncmp
	char * s11 = "woshishen";
	char * s22 = "woshidfdf";
	i = togo_strncmp(s11, s22, 5);
	if (i == 0) {
		togo_log(DEBUG,
				"Testing function:togo_strncmp .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_strncmp .............................FAIL ");
		togo_exit();
	}

	//togo_strchr
	char * strchr_p = togo_strchr("woshishen", 's');
	if (*strchr_p == 's') {
		togo_log(DEBUG,
				"Testing function:togo_strchr .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_strchr .............................FAIL ");
		togo_exit();
	}

	//togo_strstr
	char * strstr_p = togo_strstr("woshishen", "shi");
	if (*strstr_p == 's') {
		togo_log(DEBUG,
				"Testing function:togo_strstr .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_strstr .............................FAIL ");
		togo_exit();
	}

	//togo_strlen
	i = togo_strlen("woshishen");
	if (i == 9) {
		togo_log(DEBUG,
				"Testing function:togo_strlen .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_strlen .............................FAIL ");
		togo_exit();
	}

	//togo_atofp(u_char *line, size_t n, size_t point)
	i = togo_atofp("10.98", 5, 2);
	if (i == 1098) {
		togo_log(DEBUG,
				"Testing function:togo_atofp .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_atofp .............................FAIL ");
		togo_exit();
	}

	//togo_atoi(u_char *line, size_t n);
	i = togo_atoi("1024", 4);
	if (i == 1024) {
		togo_log(DEBUG,
				"Testing function:togo_atoi .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_atoi .............................FAIL ");
		togo_exit();
	}

	//togo_cpystrn(u_char *s1, char *s2, size_t len)
	togo_cpystrn(dst, "woshishen", 8);
	if (togo_strcmp(dst, "woshishe") == 0) {
		togo_log(DEBUG,
				"Testing function:togo_cpystrn .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_cpystrn .............................FAIL %s",
				dst);
		togo_exit();
	}

	//togo_strtolower
	togo_cpystrn(dst, "WOSHISHEN", 9);
	char * x111 = togo_strtolower(dst);
	if (togo_strcmp(x111, "woshishen") == 0) {
		togo_log(DEBUG,
				"Testing function:togo_strtolower .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_strtolower .............................FAIL ");
		togo_exit();
	}

	//togo_strtolower
	togo_cpystrn(dst, "woshishen", 9);
	char * x222 = togo_strtoupper(dst);
	if (togo_strcmp(x222, "WOSHISHEN") == 0) {
		togo_log(DEBUG,
				"Testing function:togo_strtoupper .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_strtoupper .............................FAIL ");
		togo_exit();
	}

	//togo_strpos
	char * ddd = "woshishen";
	int ddds = togo_strpos(ddd, 'i');
	if (ddds == 4) {
		togo_log(DEBUG,
				"Testing function:togo_strpos .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_strpos .............................FAIL ");
		togo_exit();
	}

	//togo_strrpos
	int ddds2 = togo_strrpos(ddd, 'i');
	if (ddds2 == 4) {
		togo_log(DEBUG,
				"Testing function:togo_strrpos .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_strrpos .............................FAIL ");
		togo_exit();
	}

	//togo_trim
	togo_cpystrn(dst, "   woshishen   ", 15);
	char * dst1 = togo_trim(dst);
	if (togo_strcmp(dst1, "woshishen") == 0) {
		togo_log(DEBUG,
				"Testing function:togo_trim .............................OK");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_trim .............................FAIL");
		togo_exit();
	}

	//togo_ltrim
	togo_cpystrn(dst, "   woshishen   ", 15);
	char * dst2 = togo_ltrim(dst);
	if (togo_strcmp(dst2, "woshishen   ") == 0) {
		togo_log(DEBUG,
				"Testing function:togo_ltrim .............................OK ");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_ltrim .............................FAIL ");
		togo_exit();
	}

	//togo_rtrim
	togo_cpystrn(dst, "   woshishen   ", 15);
	char * dst3 = togo_rtrim(dst);
	if (togo_strcmp(dst3, "   woshishen") == 0) {
		togo_log(DEBUG,
				"Testing function:togo_rtrim .............................OK");
	} else {
		togo_log(DEBUG,
				"Testing function:togo_rtrim .............................FAIL ");
		togo_exit();
	}

	togo_log(DEBUG, "Testing togo_string.c end ============================");
}
Ejemplo n.º 10
0
void togo_dispatcher(TOGO_COMMAND_TAG command_tag[],
		TOGO_THREAD_ITEM *socket_item, int ntag)
{
	BOOL ret = FALSE;

	if (strcmp(command_tag[0].value, "VERSION") == 0) {

		togo_send_data(socket_item, TOGO_VERSION, togo_strlen(TOGO_VERSION));
		ret = TRUE;

	} else if (strcmp(command_tag[0].value, "QUIT") == 0) {

		togo_server_disconnect(socket_item);
		ret = TRUE;
	} else {

		/**
		 * command_tag[0] : Module
		 * command_tag[1] : Action
		 * command_tag[2] : Object
		 * command_tag[3] : Value
		 * command_tag[4] : Option
		 */
		if (ntag < 3 || command_tag[0].value == NULL) {
			ret = FALSE;

		} else if (strcmp(command_tag[0].value, "QUEUE") == 0) {

			/**
			 * command_tag[0] : Module  QUEUE
			 * command_tag[1] : Action  RPUSH|LPUSH|LPOP|RPOP|COUNT|STATUS
			 * command_tag[2] : Object  Queue name
			 * command_tag[3] : Value   value
			 * command_tag[4] : Option  priority:1|2|3
			 */
			ret = togo_m_queue_command(command_tag, socket_item, ntag);

		} else if (strcmp(command_tag[0].value, "COUNTER") == 0) {

			/**
			 * command_tag[0] : Module  COUNTER
			 * command_tag[1] : Action  PLUS|MINUS|GET|RESET
			 * command_tag[2] : Object  Count name
			 * command_tag[3] : Step    1  MAX:99999999
			 */
			ret = togo_m_counter_command(command_tag, socket_item, ntag);

		} else if (strcmp(command_tag[0].value, "LOCK") == 0) {

			/**
			 * command_tag[0] : Module  LOCK
			 * command_tag[1] : Action  LOCK|UNLOCK|STATUS
			 * command_tag[2] : Object  Count name
			 */
			ret = togo_m_lock_command(command_tag, socket_item, ntag);
		}
	}

	/* If fail, We will return "TOGO_FAIL"! */
	if (ret == FALSE) {
		togo_send_fail(socket_item);
	}
}