Skip to content

Commit

Permalink
refactor start
Browse files Browse the repository at this point in the history
  • Loading branch information
Cpasjuste committed Jun 16, 2017
1 parent d660fbd commit 7be90a6
Show file tree
Hide file tree
Showing 20 changed files with 484 additions and 430 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ CTestTestfile.cmake
*.idea
build
psp2shell_cli/build
cmake-build-*
cmake-build*

# psp2shell client
*.o
Expand Down
201 changes: 201 additions & 0 deletions common/cmd_common.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
//
// Created by cpasjuste on 17/05/17.
//

#ifdef PSP2

#include <psp2/net/net.h>
#include <libk/stdio.h>
#include <libk/string.h>
#include <libk/stdlib.h>
#include <libk/stdbool.h>
#include <sys/types.h>

#define send sceNetSend
#define recv sceNetRecv

#else

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <sys/socket.h>

#endif

#include "cmd_common.h"

int p2s_cmd_receive(int sock, S_CMD *cmd) {

char buffer[SIZE_CMD];
memset(buffer, 0, SIZE_CMD);

ssize_t read = recv(sock, buffer, SIZE_CMD, 0);
if (read < 2) {
return read <= 0 ? P2S_ERR_SOCKET : P2S_ERR_INVALID_CMD;
}

bool is_cmd = p2s_string_to_cmd(cmd, buffer) == 0;
if (!is_cmd) {
return P2S_ERR_INVALID_CMD;
}

return 0;
}

int p2s_cmd_receive_resp(int sock) {

char buffer[SIZE_CMD];
memset(buffer, 0, SIZE_CMD);

ssize_t read = recv(sock, buffer, SIZE_CMD, 0);
if (read < 2) {
return -1;
}

S_CMD cmd;
if (p2s_string_to_cmd(&cmd, buffer) != 0) {
return -1;
}

if (cmd.type != CMD_OK) {
return -1;
}

return 0;
}

size_t p2s_cmd_receive_buffer(int sock, void *buffer, size_t size) {

ssize_t len;
size_t left = size;

while (left) {
len = recv(sock, buffer, left, 0);
if (len == 0) {
size = 0;
break;
};
if (len == -1) {
break;
} else {
left -= len;
buffer += len;
}
}

return size;
}

void p2s_cmd_send(int sock, int cmdType) {

char buffer[4];
memset(buffer, 0, 4);
snprintf(buffer, 4, "%i", cmdType);
send(sock, buffer, strlen(buffer), 0);
}

void p2s_cmd_send_cmd(int sock, S_CMD *cmd) {

char buffer[SIZE_CMD];
memset(buffer, 0, SIZE_CMD);

if (p2s_cmd_to_string(buffer, cmd) == 0) {
send(sock, buffer, strlen(buffer), 0);
}
}

void p2s_cmd_send_fmt(int sock, const char *fmt, ...) {

char buffer[SIZE_CMD];
memset(buffer, 0, SIZE_CMD);
va_list args;
va_start(args, fmt);
vsnprintf(buffer, SIZE_CMD, fmt, args);
va_end(args);

send(sock, buffer, strlen(buffer), 0);
}

void p2s_cmd_send_string(int sock, int cmdType, const char *value) {

char buffer[SIZE_PRINT + 6];
memset(buffer, 0, SIZE_PRINT + 6);
snprintf(buffer, SIZE_PRINT + 6, "%i\"%s\"", cmdType, value);
send(sock, buffer, strlen(buffer), 0);
}

void p2s_cmd_send_int(int sock, int cmdType, int value) {

char buffer[16];
memset(buffer, 0, 16);
snprintf(buffer, 16, "%i\"%i\"", cmdType, value);
send(sock, buffer, strlen(buffer), 0);
}

void p2s_cmd_send_long(int sock, int cmdType, long value) {

char buffer[32];
memset(buffer, 0, 32);
snprintf(buffer, 32, "%i\"%ld\"", cmdType, value);
send(sock, buffer, strlen(buffer), 0);
}

int p2s_cmd_to_string(char *buffer, S_CMD *cmd) {

if (!buffer || !cmd) {
return -1;
}

memset(buffer, 0, SIZE_CMD);
sprintf(buffer, "%i", cmd->type);
for (int i = 0; i < MAX_ARGS; i++) {
snprintf(buffer + strlen(buffer), SIZE_CMD, "\"%s", cmd->args[i]);
}
strncat(buffer, "\"", SIZE_CMD);

return 0;
}

int p2s_string_to_cmd(S_CMD *cmd, const char *buffer) {

if (!cmd || !buffer) {
return -1;
}

if (strlen(buffer) < 2) {
return -1;
}

memset(cmd, 0, sizeof(S_CMD));

// type
char tmp[2];
strncpy(tmp, buffer, 2);
cmd->type = atoi(tmp);
if (cmd->type < CMD_START) {
cmd->type = 0;
return -1;
}

const char *start, *end = buffer;

for (int i = 0; i < MAX_ARGS; i++) {

start = strstr(end, "\"");
if (!start) {
break;
}
start += 1;

end = strstr(start, "\"");
if (!end) {
break;
}

strncpy(cmd->args[i], start, end - start);
}

return 0;
}
90 changes: 90 additions & 0 deletions common/cmd_common.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
#ifndef CMD_COMMON_H
#define CMD_COMMON_H

#define P2S_ERR_SOCKET 0x80000001
#define P2S_ERR_INVALID_CMD 0x80000002

#define SIZE_CHAR (256)
#define SIZE_DATA (8 * 1024)
#define SIZE_PRINT (512)

#define MAX_ARGS (8)

typedef struct S_CMD {
int type;
char args[MAX_ARGS][SIZE_PRINT];
} S_CMD;

#define SIZE_CMD (sizeof(S_CMD) + 1024)

enum cmd_t {
CMD_START = 10,
CMD_LS,
CMD_CD,
CMD_RM,
CMD_RMDIR,
CMD_MKDIR,
CMD_MV,
CMD_PWD,
CMD_GET,
CMD_PUT,
CMD_LAUNCH,
CMD_LOAD,
CMD_RELOAD,
CMD_TEST,
CMD_MOUNT,
CMD_UMOUNT,
CMD_TITLE,
CMD_OVADD,
CMD_OVDEL,
CMD_OVLS,
CMD_FIOSCP,
CMD_MODLS,
CMD_MODLS_PID,
CMD_MODINFO,
CMD_MODINFO_PID,
CMD_MODLOADSTART,
CMD_MODLOADSTART_PID,
CMD_MODSTOPUNLOAD,
CMD_MODSTOPUNLOAD_PID,
CMD_KMODLOADSTART,
CMD_KMODSTOPUNLOAD,
CMD_THLS,
CMD_THPAUSE,
CMD_THRESUME,
CMD_MEMR,
CMD_MEMW,
CMD_RESET,
CMD_REBOOT,
CMD_EXIT,
CMD_HELP,

CMD_OK = 64,
CMD_NOK = 65
};

int p2s_cmd_receive(int sock, S_CMD *cmd);

size_t p2s_cmd_receive_buffer(int sock, void *buffer, size_t size);

int p2s_cmd_receive_resp(int sock);

void p2s_cmd_send(int sock, int cmdType);

void p2s_cmd_send_cmd(int sock, S_CMD *cmd);

void p2s_cmd_send_fmt(int sock, const char *fmt, ...);

void p2s_cmd_send_string(int sock, int cmdType, const char *value);

void p2s_cmd_send_strings(int sock, int cmdType, int argc, char *argv[]);

void p2s_cmd_send_int(int sock, int cmdType, int value);

void p2s_cmd_send_long(int sock, int cmdType, long value);

int p2s_cmd_to_string(char *buffer, S_CMD *c);

int p2s_string_to_cmd(S_CMD *c, const char *buffer);

#endif
64 changes: 0 additions & 64 deletions common/include/psp2cmd.h

This file was deleted.

Loading

0 comments on commit 7be90a6

Please sign in to comment.