Ejemplo n.º 1
0
int cafiine_fstat(int sock, int *result, int fd, void *ptr) {
	while (bss.lock) GX2WaitForVsync();
	bss.lock = 1;

	CHECK_ERROR(sock == -1);

	int ret;
	char buffer[1 + 4];
	buffer[0] = BYTE_STATFILE;
	*(int *)(buffer + 1) = fd;
	ret = sendwait(sock, buffer, 1 + 4);
	CHECK_ERROR(ret < 0);
	ret = recvbyte(sock);
	CHECK_ERROR(ret < 0);
	CHECK_ERROR(ret == BYTE_NORMAL);
	ret = recvwait(sock, result, 4);
	CHECK_ERROR(ret < 0);
	int sz;
	ret = recvwait(sock, &sz, 4);
	CHECK_ERROR(ret < 0);
	if (ptr) {
		ret = recvwait(sock, ptr, sz);
		CHECK_ERROR(ret < 0);
	}

	bss.lock = 0;
	return 0;
error:
	bss.lock = 0;
	return -1;
}
Ejemplo n.º 2
0
int cafiine_fgetpos(int sock, int *result, int fd, int *pos) {
	while (bss.lock) GX2WaitForVsync();
	bss.lock = 1;

	CHECK_ERROR(sock == -1);

	int ret;
	char buffer[1 + 4];
	buffer[0] = BYTE_GETPOS;
	*(int *)(buffer + 1) = fd;
	ret = sendwait(sock, buffer, 1 + 4);
	CHECK_ERROR(ret < 0);
	ret = recvbyte(sock);
	CHECK_ERROR(ret < 0);
	CHECK_ERROR(ret == BYTE_NORMAL);
	ret = recvwait(sock, result, 4);
	CHECK_ERROR(ret < 0);
	ret = recvwait(sock, pos, 4);
	CHECK_ERROR(ret < 0);

	bss.lock = 0;
	return 0;
error:
	bss.lock = 0;
	return -1;
}
Ejemplo n.º 3
0
int cafiine_fread(int sock, int *result, void *ptr, int size, int count, int fd) {
	while (bss.lock) GX2WaitForVsync();
	bss.lock = 1;

	CHECK_ERROR(sock == -1);

	int ret;
	char buffer[1 + 12];
	buffer[0] = BYTE_READ;
	*(int *)(buffer + 1) = size;
	*(int *)(buffer + 5) = count;
	*(int *)(buffer + 9) = fd;
	ret = sendwait(sock, buffer, 1 + 12);
	CHECK_ERROR(ret < 0);
	ret = recvbyte(sock);
	CHECK_ERROR(ret < 0);
	CHECK_ERROR(ret == BYTE_NORMAL);
	ret = recvwait(sock, result, 4);
	CHECK_ERROR(ret < 0);
	int sz;
	ret = recvwait(sock, &sz, 4);
	CHECK_ERROR(ret < 0);
	ret = recvwait(sock, ptr, sz);
	CHECK_ERROR(ret < 0);
	ret = sendbyte(sock, BYTE_OK);
	CHECK_ERROR(ret < 0);

	bss.lock = 0;
	return 0;
error:
	bss.lock = 0;
	return -1;
}
Ejemplo n.º 4
0
static int cafiine_handshake(int sock) {
	int ret;
	unsigned char buffer[16];

	memcpy(buffer, &title_id, 16);

	ret = sendwait(sock, buffer, sizeof(buffer));
	CHECK_ERROR(ret < 0);
	ret = recvbyte(sock);
	CHECK_ERROR(ret < 0);
	return ret;
error:
	return ret;
}
Ejemplo n.º 5
0
int cafiine_fopen(int sock, int *result, const char *path, const char *mode, int *handle) {
	while (bss.lock) GX2WaitForVsync();
	bss.lock = 1;

	CHECK_ERROR(sock == -1);

	int ret;
	int len_path = 0;
	while (path[len_path++]);
	int len_mode = 0;
	while (mode[len_mode++]);

	{
		char buffer[1 + 8 + len_path + len_mode];
		buffer[0] = BYTE_OPEN;
		*(int *)(buffer + 1) = len_path;
		*(int *)(buffer + 5) = len_mode;
		for (ret = 0; ret < len_path; ret++)
			buffer[9 + ret] = path[ret];
		for (ret = 0; ret < len_mode; ret++)
			buffer[9 + len_path + ret] = mode[ret];

		ret = sendwait(sock, buffer, 1 + 8 + len_path + len_mode);
	}
	CHECK_ERROR(ret < 0);
	ret = recvbyte(sock);
	CHECK_ERROR(ret < 0);
	CHECK_ERROR(ret == BYTE_NORMAL);
	ret = recvwait(sock, result, 4);
	CHECK_ERROR(ret < 0);
	ret = recvwait(sock, handle, 4);
	CHECK_ERROR(ret < 0);

	bss.lock = 0;
	return 0;
error:
	bss.lock = 0;
	return -1;
}
Ejemplo n.º 6
0
int fs_connect(int *psock) {
    extern unsigned int server_ip;
    struct sockaddr_in addr;
    int sock, ret;

    // No ip means that we don't have any server running, so no logs
    if (server_ip == 0) {
        *psock = -1;
        return 0;
    }

    socket_lib_init();

    sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    CHECK_ERROR(sock == -1);

    addr.sin_family = AF_INET;
    addr.sin_port = 7332;
    addr.sin_addr.s_addr = server_ip;

    ret = connect(sock, (void *)&addr, sizeof(addr));
    CHECK_ERROR(ret < 0);

    ret = recvbyte(sock);
    CHECK_ERROR(ret < 0);

    *psock = sock;
    return 0;

error:
    if (sock != -1)
        socketclose(sock);

    *psock = -1;
    return -1;
}